| File: Program.cs | Web Access |
| Project: src\test\Microsoft.ML.NugetPackageVersionUpdater\Microsoft.ML.NugetPackageVersionUpdater.csproj (Microsoft.ML.NugetPackageVersionUpdater) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using System.IO; using System.Xml; namespace Microsoft.ML.NugetPackageVersionUpdater { class Program { private const string TempVersionsFile = "latest_versions.txt"; private const string TargetPropsFiles = "../NightlyBuildDependency.props;../TestFrameworkDependency.props"; private const string PackageNamespace = "Microsoft.ML"; public static void Main(string[] args) { string projFiles = TargetPropsFiles; var packageVersions = GetLatestPackageVersions(); UpdatePackageVersion(projFiles, packageVersions); } private static IDictionary<string, string> GetLatestPackageVersions() { Dictionary<string, string> packageVersions = new Dictionary<string, string>(); using (var file = new StreamReader(TempVersionsFile)) { var output = file.ReadToEnd(); var splits = output.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); foreach (var split in splits) { if (split.Contains(PackageNamespace)) { var detailSplit = split.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); //valida NuGet package version should be separate by space like below: //> [PackageName]space[Requested PackageVersion]space[Resolved PackageVersion]space[Latest PackageVersion] //One Example: > Microsoft.ML.LightGbm 1.4.0-preview3-28229-8 1.4.0-preview3-28229-8 1.4.0-preview3-28229-9 if (detailSplit.Length == 5) packageVersions.Add(detailSplit[1], detailSplit[4]); } } } return packageVersions; } private static void UpdatePackageVersion(string projectFiles, IDictionary<string, string> latestPackageVersions) { string packageReferencePath = "/Project/ItemGroup/PackageReference"; var projectFilePaths = projectFiles.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); foreach (var projectFilePath in projectFilePaths) { var csprojDoc = new XmlDocument(); csprojDoc.Load(projectFilePath); var packageReferenceNodes = csprojDoc.DocumentElement.SelectNodes(packageReferencePath); for (int i = 0; i < packageReferenceNodes.Count; i++) { var packageName = packageReferenceNodes.Item(i).Attributes.GetNamedItem("Include").InnerText; if (latestPackageVersions.ContainsKey(packageName)) { var latestVersion = latestPackageVersions[packageName]; packageReferenceNodes.Item(i).Attributes.GetNamedItem("Version").InnerText = latestVersion; Console.WriteLine($"Update packege {packageName} to version {latestVersion}."); } else Console.WriteLine($"Can't find newer version of Package {packageName} from NuGet source, don't need to update version."); } csprojDoc.Save(projectFilePath); } } } }