diff --git a/build_projects/update-dependencies/Config.cs b/build_projects/update-dependencies/Config.cs index 029769833..8d5008ee1 100644 --- a/build_projects/update-dependencies/Config.cs +++ b/build_projects/update-dependencies/Config.cs @@ -19,6 +19,7 @@ namespace Microsoft.DotNet.Scripts /// The following Environment Variables can optionally be specified: /// /// COREFX_VERSION_URL - The Url to get the current CoreFx package versions. (ex. "https://raw.githubusercontent.com/dotnet/versions/master/build-info/dotnet/corefx/release/1.0.0/Latest_Packages.txt") + /// CORESETUP_VERSION_URL - The Url to get the current dotnet/core-setup package versions. (ex. "https://raw.githubusercontent.com/dotnet/versions/master/build-info/dotnet/core-setup/master/Latest_Packages.txt") /// GITHUB_ORIGIN_OWNER - The owner of the GitHub fork to push the commit and create the PR from. (ex. "dotnet-bot") /// GITHUB_UPSTREAM_OWNER - The owner of the GitHub base repo to create the PR to. (ex. "dotnet") /// GITHUB_PROJECT - The repo name under the ORIGIN and UPSTREAM owners. (ex. "cli") @@ -34,6 +35,7 @@ namespace Microsoft.DotNet.Scripts private Lazy _password = new Lazy(() => GetEnvironmentVariable("GITHUB_PASSWORD")); private Lazy _coreFxVersionUrl = new Lazy(() => GetEnvironmentVariable("COREFX_VERSION_URL", "https://raw.githubusercontent.com/dotnet/versions/master/build-info/dotnet/corefx/release/1.0.0/Latest_Packages.txt")); + private Lazy _coreSetupVersionUrl = new Lazy(() => GetEnvironmentVariable("CORESETUP_VERSION_URL", "https://raw.githubusercontent.com/dotnet/versions/master/build-info/dotnet/core-setup/master/Latest_Packages.txt")); private Lazy _gitHubOriginOwner; private Lazy _gitHubUpstreamOwner = new Lazy(() => GetEnvironmentVariable("GITHUB_UPSTREAM_OWNER", "dotnet")); private Lazy _gitHubProject = new Lazy(() => GetEnvironmentVariable("GITHUB_PROJECT", "cli")); @@ -51,6 +53,7 @@ namespace Microsoft.DotNet.Scripts public string Email => _email.Value; public string Password => _password.Value; public string CoreFxVersionUrl => _coreFxVersionUrl.Value; + public string CoreSetupVersionUrl => _coreSetupVersionUrl.Value; public string GitHubOriginOwner => _gitHubOriginOwner.Value; public string GitHubUpstreamOwner => _gitHubUpstreamOwner.Value; public string GitHubProject => _gitHubProject.Value; diff --git a/build_projects/update-dependencies/UpdateFilesTargets.cs b/build_projects/update-dependencies/UpdateFilesTargets.cs index 625fd329c..1e9292ddb 100644 --- a/build_projects/update-dependencies/UpdateFilesTargets.cs +++ b/build_projects/update-dependencies/UpdateFilesTargets.cs @@ -32,6 +32,7 @@ namespace Microsoft.DotNet.Scripts List dependencyInfos = c.GetDependencyInfos(); dependencyInfos.Add(CreateDependencyInfo("CoreFx", Config.Instance.CoreFxVersionUrl).Result); + dependencyInfos.Add(CreateDependencyInfo("CoreSetup", Config.Instance.CoreSetupVersionUrl).Result); return c.Success(); } @@ -74,7 +75,7 @@ namespace Microsoft.DotNet.Scripts }; } - [Target(nameof(ReplaceProjectJson), nameof(ReplaceCrossGen))] + [Target(nameof(ReplaceProjectJson), nameof(ReplaceDependencyVersions))] public static BuildTargetResult ReplaceVersions(BuildTargetContext c) => c.Success(); /// @@ -187,17 +188,21 @@ namespace Microsoft.DotNet.Scripts } /// - /// Replaces version number that is hard-coded in the CrossGen script. + /// Replaces version numbers that are hard-coded in DependencyVersions.cs. /// [Target] - public static BuildTargetResult ReplaceCrossGen(BuildTargetContext c) + public static BuildTargetResult ReplaceDependencyVersions(BuildTargetContext c) { - ReplaceFileContents(@"build_projects\shared-build-targets-utils\DependencyVersions.cs", compileTargetsContent => + ReplaceFileContents(@"build_projects\shared-build-targets-utils\DependencyVersions.cs", fileContents => { DependencyInfo coreFXInfo = c.GetCoreFXDependency(); - Regex regex = new Regex(@"CoreCLRVersion = ""(?\d.\d.\d)-(?.*)"";"); + DependencyInfo coreSetupInfo = c.GetCoreSetupDependency(); - return regex.ReplaceGroupValue(compileTargetsContent, "release", coreFXInfo.NewReleaseVersion); + fileContents = ReplaceDependencyVersion(fileContents, coreFXInfo, "CoreCLRVersion", "Microsoft.NETCore.Runtime.CoreCLR"); + fileContents = ReplaceDependencyVersion(fileContents, coreSetupInfo, "SharedFrameworkVersion", "Microsoft.NETCore.App"); + fileContents = ReplaceDependencyVersion(fileContents, coreSetupInfo, "SharedHostVersion", "Microsoft.NETCore.DotNetHost"); + + return fileContents; }); return c.Success(); @@ -208,6 +213,29 @@ namespace Microsoft.DotNet.Scripts return c.GetDependencyInfos().Single(d => d.Name == "CoreFx"); } + private static DependencyInfo GetCoreSetupDependency(this BuildTargetContext c) + { + return c.GetDependencyInfos().Single(d => d.Name == "CoreSetup"); + } + + private static string ReplaceDependencyVersion(string fileContents, DependencyInfo dependencyInfo, string dependencyPropertyName, string packageId) + { + Regex regex = new Regex($@"{dependencyPropertyName} = ""(?.*)"";"); + + string newVersion = dependencyInfo + .NewVersions + .FirstOrDefault(p => p.Id == packageId) + ?.Version + .ToNormalizedString(); + + if (string.IsNullOrEmpty(newVersion)) + { + throw new InvalidOperationException($"Could not find package version information for '{packageId}'"); + } + + return regex.ReplaceGroupValue(fileContents, "version", newVersion); + } + private static void ReplaceFileContents(string repoRelativePath, Func replacement) { string fullPath = Path.Combine(Dirs.RepoRoot, repoRelativePath);