Show "out of date" warning at the beginning and end of build logs

This commit is contained in:
Caelan Sayler
2024-01-31 07:23:01 +00:00
parent 64587041b2
commit 091f6dcb92
2 changed files with 20 additions and 9 deletions

View File

@@ -183,6 +183,8 @@ public static class ProgramCommandExtensions
try {
await fn(options);
// print the out of date warning again at the end as well.
await updateCheck.CheckForUpdates();
return 0;
} catch (Exception ex) when (ex is ProcessFailedException or UserInfoException) {
// some exceptions are just user info / user error, so don't need a stack trace.

View File

@@ -1,35 +1,44 @@
using System.Threading;
using NuGet.Protocol.Core.Types;
namespace Velopack.Vpk.Updates;
public class UpdateChecker
{
private readonly ILogger _logger;
private IPackageSearchMetadata _cache;
public UpdateChecker(ILogger logger)
{
_logger = logger;
}
public async Task CheckForUpdates()
public async Task<bool> CheckForUpdates()
{
try {
var cancel = new CancellationTokenSource(3000);
var myVer = VelopackRuntimeInfo.VelopackNugetVersion;
var dl = new NugetDownloader(new NullNugetLogger());
var isPre = myVer.IsPrerelease || myVer.HasMetadata;
var package = await dl.GetPackageMetadata("vpk", isPre ? "pre" : "latest", cancel.Token).ConfigureAwait(false);
if (package.Identity.Version > myVer) {
if (isPre) {
_logger.Warn($"[bold underline]There is a newer version of vpk available ({package.Identity.Version}). Run 'dotnet tool update -g vpk'[/]");
if (_cache == null) {
var cancel = new CancellationTokenSource(3000);
var dl = new NugetDownloader(new NullNugetLogger());
_cache = await dl.GetPackageMetadata("vpk", isPre ? "pre" : "latest", cancel.Token).ConfigureAwait(false);
}
var cacheVersion = _cache.Identity.Version;
if (cacheVersion > myVer) {
if (!isPre) {
_logger.Warn($"[bold]There is a newer version of vpk available ({cacheVersion}). Run 'dotnet tool update -g vpk'[/]");
} else {
_logger.Warn($"[bold underline]There is a newer version of vpk available. Run 'dotnet tool update -g vpk --version {package.Identity.Version}'[/]");
_logger.Warn($"[bold]There is a newer version of vpk available. Run 'dotnet tool update -g vpk --version {cacheVersion}'[/]");
}
return true;
} else {
_logger.Debug($"vpk is up to date (latest online = {package.Identity.Version})");
_logger.Debug($"vpk is up to date (latest online = {cacheVersion})");
}
} catch (Exception ex) {
_logger.Debug(ex, "Failed to check for updates.");
}
return false;
}
}