forked from dotnet/machinelearning
/
Program.cs
82 lines (68 loc) · 3.54 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// 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);
}
}
}
}