使用github取代gitee做升级包管理
This commit is contained in:
parent
e36ea87d64
commit
bbf2eb28ad
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Text;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
@ -7,7 +8,7 @@ namespace FastGithub.Upgrade
|
||||
/// <summary>
|
||||
/// 发行记录
|
||||
/// </summary>
|
||||
sealed class GiteeRelease
|
||||
sealed class GithubRelease
|
||||
{
|
||||
/// <summary>
|
||||
/// 标签名
|
||||
@ -15,6 +16,12 @@ namespace FastGithub.Upgrade
|
||||
[JsonPropertyName("tag_name")]
|
||||
public string TagName { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 是否预览版本
|
||||
/// </summary>
|
||||
[JsonPropertyName("prerelease")]
|
||||
public bool Prerelease { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 发行说明
|
||||
/// </summary>
|
||||
@ -28,6 +35,13 @@ namespace FastGithub.Upgrade
|
||||
[JsonPropertyName("created_at")]
|
||||
public DateTime CreatedAt { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 下载页面
|
||||
/// </summary>
|
||||
[AllowNull]
|
||||
[JsonPropertyName("html_url")]
|
||||
public Uri HtmlUrl { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取产品版本
|
||||
@ -1,5 +1,4 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Threading;
|
||||
@ -10,46 +9,47 @@ namespace FastGithub.Upgrade
|
||||
/// <summary>
|
||||
/// 升级后台服务
|
||||
/// </summary>
|
||||
sealed class UpgradeHostedService : IHostedService
|
||||
sealed class UpgradeHostedService : BackgroundService
|
||||
{
|
||||
private readonly IServiceScopeFactory serviceScopeFactory;
|
||||
private readonly UpgradeService upgradeService;
|
||||
private readonly ILogger<UpgradeHostedService> logger;
|
||||
|
||||
/// <summary>
|
||||
/// 升级后台服务
|
||||
/// </summary>
|
||||
/// <param name="serviceScopeFactory"></param>
|
||||
/// <param name="logger"></param>
|
||||
public UpgradeHostedService(
|
||||
IServiceScopeFactory serviceScopeFactory,
|
||||
UpgradeService upgradeService,
|
||||
ILogger<UpgradeHostedService> logger)
|
||||
{
|
||||
this.serviceScopeFactory = serviceScopeFactory;
|
||||
this.upgradeService = upgradeService;
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检测版本
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <param name="stoppingToken"></param>
|
||||
/// <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
|
||||
{
|
||||
using var scope = this.serviceScopeFactory.CreateScope();
|
||||
var upgradeService = scope.ServiceProvider.GetRequiredService<UpgradeService>();
|
||||
await upgradeService.UpgradeAsync(cancellationToken);
|
||||
await Task.Delay(TimeSpan.FromSeconds(2d), stoppingToken);
|
||||
await this.upgradeService.UpgradeAsync(stoppingToken);
|
||||
break;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (i == maxTryCount)
|
||||
{
|
||||
this.logger.LogWarning($"升级失败:{ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
public Task StopAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Net.Http.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@ -14,8 +15,7 @@ namespace FastGithub.Upgrade
|
||||
sealed class UpgradeService
|
||||
{
|
||||
private readonly ILogger<UpgradeService> logger;
|
||||
private const string DownloadPage = "https://gitee.com/jiulang/fast-github/releases";
|
||||
private const string ReleasesUri = "https://gitee.com/api/v5/repos/jiulang/fast-github/releases?page=1&per_page=1&direction=desc";
|
||||
private const string ReleasesUri = "https://api.github.com/repos/xljiulang/fastgithub/releases";
|
||||
|
||||
/// <summary>
|
||||
/// 升级服务
|
||||
@ -48,7 +48,7 @@ namespace FastGithub.Upgrade
|
||||
var lastedVersion = lastRelease.GetProductionVersion();
|
||||
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());
|
||||
}
|
||||
}
|
||||
@ -57,11 +57,14 @@ namespace FastGithub.Upgrade
|
||||
/// 获取最新发布
|
||||
/// </summary>
|
||||
/// <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) };
|
||||
var releases = await httpClient.GetFromJsonAsync<GiteeRelease[]>(ReleasesUri, cancellationToken);
|
||||
return releases?.FirstOrDefault();
|
||||
using var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(30d) };
|
||||
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,7 +16,7 @@ namespace FastGithub
|
||||
public static IServiceCollection AddAppUpgrade(this IServiceCollection services)
|
||||
{
|
||||
return services
|
||||
.AddTransient<UpgradeService>()
|
||||
.AddSingleton<UpgradeService>()
|
||||
.AddHostedService<UpgradeHostedService>();
|
||||
}
|
||||
}
|
||||
|
||||
@ -32,10 +32,10 @@ namespace FastGithub
|
||||
})
|
||||
.ConfigureServices((ctx, services) =>
|
||||
{
|
||||
services.AddAppUpgrade();
|
||||
services.AddDnsServer();
|
||||
services.AddReverseProxy();
|
||||
services.AddDnscryptProxy();
|
||||
services.AddAppUpgrade();
|
||||
services.AddSingleton<FastGithubConfig>();
|
||||
services.Configure<FastGithubOptions>(ctx.Configuration.GetSection(nameof(FastGithub)));
|
||||
})
|
||||
|
||||
Loading…
Reference in New Issue
Block a user