Skip to content

Commit

Permalink
Added check for Winget version numbers (#1683)
Browse files Browse the repository at this point in the history
* Added check for Winget version numbers

* Update to reflect new content
  • Loading branch information
MrHinsh authored Oct 17, 2023
1 parent 4cfec9e commit f0fe2f8
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 20 deletions.
1 change: 1 addition & 0 deletions src/MigrationTools.Host/MigrationTools.Host.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
<PackageReference Include="Serilog.Sinks.ApplicationInsights" Version="4.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageReference Include="WGet.NET" Version="3.0.0" />
</ItemGroup>

<ItemGroup>
Expand Down
29 changes: 11 additions & 18 deletions src/MigrationTools.Host/Services/DetectVersionService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,21 @@
using NuGet.Protocol.Core.Types;
using NuGet.Versioning;
using Serilog;
using WGetNET;

namespace MigrationTools.Host.Services
{
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()
Expand All @@ -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<NuGetVersion> 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<NuGetVersion> 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<FindPackageByIdResource>().GetAwaiter().GetResult();
IEnumerable<NuGetVersion> versions = resource.GetAllVersionsAsync(packageId, cache, logger, cancellationToken).GetAwaiter().GetResult();
return versions;
}
}
}
8 changes: 6 additions & 2 deletions src/MigrationTools.Host/StartupService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}
}
}
Expand Down

0 comments on commit f0fe2f8

Please sign in to comment.