使用github取代gitee做升级包管理

This commit is contained in:
xljiulang 2021-07-20 22:13:27 +08:00
parent e36ea87d64
commit bbf2eb28ad
5 changed files with 49 additions and 32 deletions

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Diagnostics.CodeAnalysis;
using System.Text; using System.Text;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
@ -7,7 +8,7 @@ namespace FastGithub.Upgrade
/// <summary> /// <summary>
/// 发行记录 /// 发行记录
/// </summary> /// </summary>
sealed class GiteeRelease sealed class GithubRelease
{ {
/// <summary> /// <summary>
/// 标签名 /// 标签名
@ -15,6 +16,12 @@ namespace FastGithub.Upgrade
[JsonPropertyName("tag_name")] [JsonPropertyName("tag_name")]
public string TagName { get; set; } = string.Empty; public string TagName { get; set; } = string.Empty;
/// <summary>
/// 是否预览版本
/// </summary>
[JsonPropertyName("prerelease")]
public bool Prerelease { get; set; }
/// <summary> /// <summary>
/// 发行说明 /// 发行说明
/// </summary> /// </summary>
@ -28,6 +35,13 @@ namespace FastGithub.Upgrade
[JsonPropertyName("created_at")] [JsonPropertyName("created_at")]
public DateTime CreatedAt { get; set; } public DateTime CreatedAt { get; set; }
/// <summary>
/// 下载页面
/// </summary>
[AllowNull]
[JsonPropertyName("html_url")]
public Uri HtmlUrl { get; set; }
/// <summary> /// <summary>
/// 获取产品版本 /// 获取产品版本

View File

@ -1,5 +1,4 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System; using System;
using System.Threading; using System.Threading;
@ -10,46 +9,47 @@ namespace FastGithub.Upgrade
/// <summary> /// <summary>
/// 升级后台服务 /// 升级后台服务
/// </summary> /// </summary>
sealed class UpgradeHostedService : IHostedService sealed class UpgradeHostedService : BackgroundService
{ {
private readonly IServiceScopeFactory serviceScopeFactory; private readonly UpgradeService upgradeService;
private readonly ILogger<UpgradeHostedService> logger; private readonly ILogger<UpgradeHostedService> logger;
/// <summary> /// <summary>
/// 升级后台服务 /// 升级后台服务
/// </summary> /// </summary>
/// <param name="serviceScopeFactory"></param>
/// <param name="logger"></param> /// <param name="logger"></param>
public UpgradeHostedService( public UpgradeHostedService(
IServiceScopeFactory serviceScopeFactory, UpgradeService upgradeService,
ILogger<UpgradeHostedService> logger) ILogger<UpgradeHostedService> logger)
{ {
this.serviceScopeFactory = serviceScopeFactory; this.upgradeService = upgradeService;
this.logger = logger; this.logger = logger;
} }
/// <summary> /// <summary>
/// 检测版本 /// 检测版本
/// </summary> /// </summary>
/// <param name="cancellationToken"></param> /// <param name="stoppingToken"></param>
/// <returns></returns> /// <returns></returns>
public async Task StartAsync(CancellationToken cancellationToken) protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var maxTryCount = 3;
for (var i = 1; i <= maxTryCount; i++)
{ {
try try
{ {
using var scope = this.serviceScopeFactory.CreateScope(); await Task.Delay(TimeSpan.FromSeconds(2d), stoppingToken);
var upgradeService = scope.ServiceProvider.GetRequiredService<UpgradeService>(); await this.upgradeService.UpgradeAsync(stoppingToken);
await upgradeService.UpgradeAsync(cancellationToken); break;
} }
catch (Exception ex) catch (Exception ex)
{
if (i == maxTryCount)
{ {
this.logger.LogWarning($"升级失败:{ex.Message}"); this.logger.LogWarning($"升级失败:{ex.Message}");
} }
} }
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
} }
} }
} }

View File

@ -2,6 +2,7 @@
using System; using System;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Json; using System.Net.Http.Json;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -14,8 +15,7 @@ namespace FastGithub.Upgrade
sealed class UpgradeService sealed class UpgradeService
{ {
private readonly ILogger<UpgradeService> logger; private readonly ILogger<UpgradeService> logger;
private const string DownloadPage = "https://gitee.com/jiulang/fast-github/releases"; private const string ReleasesUri = "https://api.github.com/repos/xljiulang/fastgithub/releases";
private const string ReleasesUri = "https://gitee.com/api/v5/repos/jiulang/fast-github/releases?page=1&per_page=1&direction=desc";
/// <summary> /// <summary>
/// 升级服务 /// 升级服务
@ -48,7 +48,7 @@ namespace FastGithub.Upgrade
var lastedVersion = lastRelease.GetProductionVersion(); var lastedVersion = lastRelease.GetProductionVersion();
if (lastedVersion.CompareTo(currentVersion) > 0) if (lastedVersion.CompareTo(currentVersion) > 0)
{ {
this.logger.LogInformation($"您正在使用{currentVersion}版本{Environment.NewLine}请前往{DownloadPage}下载新版本"); this.logger.LogInformation($"您正在使用{currentVersion}版本{Environment.NewLine}请前往{lastRelease.HtmlUrl}下载新版本");
this.logger.LogInformation(lastRelease.ToString()); this.logger.LogInformation(lastRelease.ToString());
} }
} }
@ -57,11 +57,14 @@ namespace FastGithub.Upgrade
/// 获取最新发布 /// 获取最新发布
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public async Task<GiteeRelease?> GetLastedReleaseAsync(CancellationToken cancellationToken) public async Task<GithubRelease?> GetLastedReleaseAsync(CancellationToken cancellationToken)
{ {
using var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(5d) }; using var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(30d) };
var releases = await httpClient.GetFromJsonAsync<GiteeRelease[]>(ReleasesUri, cancellationToken); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
return releases?.FirstOrDefault(); httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(nameof(FastGithub), "1.0"));
var releases = await httpClient.GetFromJsonAsync<GithubRelease[]>(ReleasesUri, cancellationToken);
return releases?.FirstOrDefault(item => item.Prerelease == false);
} }
} }
} }

View File

@ -16,7 +16,7 @@ namespace FastGithub
public static IServiceCollection AddAppUpgrade(this IServiceCollection services) public static IServiceCollection AddAppUpgrade(this IServiceCollection services)
{ {
return services return services
.AddTransient<UpgradeService>() .AddSingleton<UpgradeService>()
.AddHostedService<UpgradeHostedService>(); .AddHostedService<UpgradeHostedService>();
} }
} }

View File

@ -32,10 +32,10 @@ namespace FastGithub
}) })
.ConfigureServices((ctx, services) => .ConfigureServices((ctx, services) =>
{ {
services.AddAppUpgrade();
services.AddDnsServer(); services.AddDnsServer();
services.AddReverseProxy(); services.AddReverseProxy();
services.AddDnscryptProxy(); services.AddDnscryptProxy();
services.AddAppUpgrade();
services.AddSingleton<FastGithubConfig>(); services.AddSingleton<FastGithubConfig>();
services.Configure<FastGithubOptions>(ctx.Configuration.GetSection(nameof(FastGithub))); services.Configure<FastGithubOptions>(ctx.Configuration.GetSection(nameof(FastGithub)));
}) })