diff --git a/src/MigrationTools.Host/MigrationTools.Host.csproj b/src/MigrationTools.Host/MigrationTools.Host.csproj index f4d5ccb27..699537bf4 100644 --- a/src/MigrationTools.Host/MigrationTools.Host.csproj +++ b/src/MigrationTools.Host/MigrationTools.Host.csproj @@ -24,6 +24,7 @@ + diff --git a/src/MigrationTools.Host/Services/DetectVersionService.cs b/src/MigrationTools.Host/Services/DetectVersionService.cs index b4289a5a7..b8dc3af12 100644 --- a/src/MigrationTools.Host/Services/DetectVersionService.cs +++ b/src/MigrationTools.Host/Services/DetectVersionService.cs @@ -10,6 +10,7 @@ using NuGet.Protocol.Core.Types; using NuGet.Versioning; using Serilog; +using WGetNET; namespace MigrationTools.Host.Services { @@ -17,9 +18,13 @@ public class DetectVersionService : IDetectVersionService { private readonly ITelemetryLogger _Telemetry; + public string PackageId { get; set; } + + public DetectVersionService(ITelemetryLogger telemetry) { _Telemetry = telemetry; + PackageId = "nkdAgility.AzureDevOpsMigrationTools"; } public Version GetLatestVersion() @@ -28,40 +33,28 @@ public Version GetLatestVersion() Stopwatch mainTimer = Stopwatch.StartNew(); ////////////////////////////////// Version latestPackageVersion = null; - string packageID = "vsts-sync-migrator"; bool sucess = false; try { - //Connect to the official package repository - IEnumerable versions = GetChocoVersions(packageID); - latestPackageVersion = versions.Max(p => p.Version); + WinGetPackageManager packageManager = new WinGetPackageManager(); + var package = packageManager.SearchPackage(PackageId).SingleOrDefault(); + + latestPackageVersion = new Version(package.AvailableVersion); if (latestPackageVersion != null) { sucess = true; } - _Telemetry.TrackDependency(new DependencyTelemetry("PackageRepository", "chocolatey.org", "vsts-sync-migrator", latestPackageVersion == null ? "nullVersion" : latestPackageVersion.ToString(), startTime, mainTimer.Elapsed, "200", sucess)); + _Telemetry.TrackDependency(new DependencyTelemetry("PackageRepository", "winget", PackageId, latestPackageVersion == null ? "nullVersion" : latestPackageVersion.ToString(), startTime, mainTimer.Elapsed, "200", sucess)); } catch (Exception ex) { Log.Error(ex, "DetectVersionService"); sucess = false; - _Telemetry.TrackDependency(new DependencyTelemetry("PackageRepository", "chocolatey.org", "vsts-sync-migrator", latestPackageVersion == null ? "nullVersion" : latestPackageVersion.ToString(), startTime, mainTimer.Elapsed, "500", sucess)); + _Telemetry.TrackDependency(new DependencyTelemetry("PackageRepository", "winget", PackageId, latestPackageVersion == null ? "nullVersion" : latestPackageVersion.ToString(), startTime, mainTimer.Elapsed, "500", sucess)); } ///////////////// mainTimer.Stop(); return latestPackageVersion; } - - private IEnumerable GetChocoVersions(string packageId, string sourceUrl = "https://chocolatey.org/api/v2/") - { - NuGet.Common.ILogger logger = NullLogger.Instance; - CancellationToken cancellationToken = CancellationToken.None; - SourceCacheContext cache = new SourceCacheContext(); - PackageSource ps = new PackageSource(sourceUrl); - var sourceRepository = Repository.Factory.GetCoreV2(ps); - FindPackageByIdResource resource = sourceRepository.GetResourceAsync().GetAwaiter().GetResult(); - IEnumerable versions = resource.GetAllVersionsAsync(packageId, cache, logger, cancellationToken).GetAwaiter().GetResult(); - return versions; - } } } \ No newline at end of file diff --git a/src/MigrationTools.Host/StartupService.cs b/src/MigrationTools.Host/StartupService.cs index ee1d4449c..b43a58fd0 100644 --- a/src/MigrationTools.Host/StartupService.cs +++ b/src/MigrationTools.Host/StartupService.cs @@ -44,17 +44,21 @@ public void RunStartupLogic(string[] args) _logger.LogInformation($"Latest version detected as {{{nameof(latestVersion)}}}", latestVersion); var version = Assembly.GetEntryAssembly().GetName().Version; - if (latestVersion > version && args.Contains("skipVersionCheck")) + if (latestVersion > version) { _logger.LogWarning("You are currently running version {Version} and a newer version ({LatestVersion}) is available. You should update now using Winget command 'winget nkdAgility.AzureDevOpsMigrationTools' from the Windows Terminal.", version, latestVersion); + if (!args.Contains("skipVersionCheck")) + { #if !DEBUG Console.WriteLine("Do you want to continue? (y/n)"); if (Console.ReadKey().Key != ConsoleKey.Y) { - _logger.LogWarning("User aborted to update version"); + _logger.LogWarning("User aborted to update version"); throw new Exception("User Abort"); + } #endif + } } } }