feat: migrate CI workflow from GitHub Actions to Gitea and update auto-update logic for Gitea releases
CI / build (push) Successful in 10m43s
CI / build (push) Successful in 10m43s
This commit is contained in:
+18
-6
@@ -1,4 +1,4 @@
|
||||
//! Автообновление через GitHub Releases.
|
||||
//! Автообновление через релизы Gitea.
|
||||
//!
|
||||
//! Служба и так работает от SYSTEM, поэтому скачивает и ставит обновление
|
||||
//! сама: ни задач Планировщика, ни отдельного привилегированного режима больше
|
||||
@@ -8,6 +8,9 @@
|
||||
//!
|
||||
//! Останавливает и поднимает службу сам установщик (см. `[Code]` в setup.iss),
|
||||
//! так что возвращать панель на место после обновления не требуется.
|
||||
//!
|
||||
//! API релизов у Gitea совпадает с GitHub по нужным нам полям (`tag_name`,
|
||||
//! `assets[].browser_download_url`), поэтому разбор один на оба.
|
||||
|
||||
use std::{
|
||||
path::PathBuf,
|
||||
@@ -24,9 +27,17 @@ use crate::Shared;
|
||||
/// Версия из Cargo.toml — её же CI подставляет в тег релиза и имя установщика.
|
||||
const CURRENT_VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
|
||||
// Координаты репозитория.
|
||||
const GITHUB_OWNER: &str = "robonen";
|
||||
const GITHUB_REPO: &str = "syshelper";
|
||||
// Координаты репозитория в Gitea.
|
||||
const DEFAULT_BASE: &str = "https://git.robonen.ru";
|
||||
const REPO_OWNER: &str = "robonen";
|
||||
const REPO_NAME: &str = "syshelper";
|
||||
|
||||
/// Базовый адрес Gitea: из переменной окружения на этапе сборки, иначе из
|
||||
/// константы выше. CI подставляет собственный адрес инстанса.
|
||||
const BASE_URL: &str = match option_env!("SYSHELPER_UPDATE_BASE") {
|
||||
Some(url) => url,
|
||||
None => DEFAULT_BASE,
|
||||
};
|
||||
|
||||
const CHECK_INTERVAL: Duration = Duration::from_secs(6 * 60 * 60);
|
||||
/// Даём службе подняться, прежде чем лезть в сеть.
|
||||
@@ -129,11 +140,12 @@ fn client() -> Result<&'static reqwest::Client, String> {
|
||||
}
|
||||
|
||||
async fn fetch_latest(client: &reqwest::Client) -> Result<Latest, String> {
|
||||
let url = format!("https://api.github.com/repos/{GITHUB_OWNER}/{GITHUB_REPO}/releases/latest");
|
||||
let base = BASE_URL.trim_end_matches('/');
|
||||
let url = format!("{base}/api/v1/repos/{REPO_OWNER}/{REPO_NAME}/releases/latest");
|
||||
|
||||
let release: Release = client
|
||||
.get(url)
|
||||
.header("Accept", "application/vnd.github+json")
|
||||
.header("Accept", "application/json")
|
||||
.send()
|
||||
.await
|
||||
.map_err(|e| e.to_string())?
|
||||
|
||||
Reference in New Issue
Block a user