From 586476f7e5407c893a116fd83c202f2ed9b0613e Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Thu, 16 Dec 2021 18:45:17 -0600 Subject: [PATCH] Add logic to convert internal repo uris in version.details.xml (#12852) * Add logic to convert internal repo uris in version.details.xml * code review updates --- ...ourceBuildIntermediateNupkgDependencies.cs | 39 +++++++++++++++++++ .../tools/SourceBuildArcadeTarball.targets | 4 +- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/SourceBuild/Arcade/src/Tarball_ReadSourceBuildIntermediateNupkgDependencies.cs b/src/SourceBuild/Arcade/src/Tarball_ReadSourceBuildIntermediateNupkgDependencies.cs index 59f7eb499..9b6365dfc 100644 --- a/src/SourceBuild/Arcade/src/Tarball_ReadSourceBuildIntermediateNupkgDependencies.cs +++ b/src/SourceBuild/Arcade/src/Tarball_ReadSourceBuildIntermediateNupkgDependencies.cs @@ -3,6 +3,7 @@ using Microsoft.Build.Framework; using Microsoft.Build.Utilities; +using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; @@ -21,6 +22,11 @@ namespace Microsoft.DotNet.SourceBuild.Tasks [Required] public string SourceBuildIntermediateNupkgPrefix { get; set; } + /// + /// Convert any internal repo references to the public GitHub repos. + /// + public bool ConvertInternalRepos { get; set; } + /// /// The intermediate nupkg RID to use if any RID-specific intermediate nupkgs are required. /// If this parameter isn't specified, RID-specific intermediate nupkgs can't be used and @@ -88,6 +94,11 @@ namespace Microsoft.DotNet.SourceBuild.Tasks string dependencyVersion = d.Attribute("Version")?.Value; string uri = d.Element(CreateQualifiedName("Uri"))?.Value; + if (ConvertInternalRepos) + { + uri = ConvertInternalRepo(uri); + } + string sha = d.Element(CreateQualifiedName("Sha"))?.Value; string sourceBuildRepoName = sourceBuildElement.Attribute("RepoName")?.Value; @@ -137,5 +148,33 @@ namespace Microsoft.DotNet.SourceBuild.Tasks return !Log.HasLoggedErrors; } + + private string ConvertInternalRepo(string uri) + { + if (uri.StartsWith("https://dev.azure.com", StringComparison.OrdinalIgnoreCase)) + { + string[] repoParts = uri.Substring(uri.LastIndexOf('/')).Split('-', 2); + + if (repoParts.Length != 2) + { + Log.LogError($"Repo '{uri}' does not end with the expected - format"); + return null; + } + + string org = repoParts[0]; + string repo = repoParts[1]; + + // The internal Nuget.Client repo has suffix which needs to be accounted for. + const string trustedSuffix = "-Trusted"; + if (uri.EndsWith(trustedSuffix, StringComparison.OrdinalIgnoreCase)) + { + repo = repo.Substring(0, repo.Length - trustedSuffix.Length); + } + + uri = $"https://github.com/{org}/{repo}"; + } + + return uri; + } } } diff --git a/src/SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets b/src/SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets index 1717371dc..9a49c3499 100644 --- a/src/SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets +++ b/src/SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets @@ -19,6 +19,7 @@ $(TarballRootDir)src/ $(TarballRootDir)git-info/ quiet + true + SourceBuildIntermediateNupkgRid="$(SourceBuildIntermediateNupkgRid)" + ConvertInternalRepos="$(ConvertInternalRepos)">