예제 #1
0
        public static async Task Main(string[] args)
        {
            var client = new SecretClient(
                vaultUri: new Uri("https://roslyninfra.vault.azure.net:443"),
                credential: new DefaultAzureCredential(includeInteractiveCredentials: true));

            using var devdivConnection = new AzDOConnection("https://devdiv.visualstudio.com/DefaultCollection", "DevDiv", "Roslyn-Signed", client, "vslsnap-vso-auth-token");
            using var dncengConnection = new AzDOConnection("https://dnceng.visualstudio.com/DefaultCollection", "internal", "dotnet-roslyn CI", client, "vslsnap-build-auth-token");

            var connections = new[] { devdivConnection, dncengConnection };

            var visualStudioReleases = await GetVisualStudioReleasesAsync(devdivConnection.GitClient);

            var roslynRepository = new Repository(args[0]);
            var existingTags     = roslynRepository.Tags.ToImmutableArray();

            foreach (var visualStudioRelease in visualStudioReleases)
            {
                var roslynTagName = TryGetRoslynTagName(visualStudioRelease);

                if (roslynTagName is not null)
                {
                    if (!existingTags.Any(t => t.FriendlyName == roslynTagName))
                    {
                        Console.WriteLine($"Tag {roslynTagName} is missing.");

                        RoslynBuildInformation?roslynBuild = null;
                        foreach (var connection in connections)
                        {
                            roslynBuild = await TryGetRoslynBuildForReleaseAsync(visualStudioRelease, devdivConnection, connection);

                            if (roslynBuild is not null)
                            {
                                break;
                            }
                        }

                        if (roslynBuild is not null)
                        {
                            Console.WriteLine($"Tagging {roslynBuild.CommitSha} as {roslynTagName}.");

                            string message = $"Build Branch: {roslynBuild.SourceBranch}\r\nInternal ID: {roslynBuild.BuildId}\r\nInternal VS ID: {visualStudioRelease.BuildId}";

                            roslynRepository.ApplyTag(roslynTagName, roslynBuild.CommitSha, new Signature("dotnet bot", "*****@*****.**", when: visualStudioRelease.CreationTime), message);
                        }
                        else
                        {
                            Console.WriteLine($"Unable to find the build for {roslynTagName}.");
                        }
                    }
                    else
                    {
                        Console.WriteLine($"Tag {roslynTagName} already exists.");
                    }
                }
            }
        }
예제 #2
0
        private static async Task <RoslynBuildInformation?> TryGetRoslynBuildForReleaseAsync(VisualStudioVersion release, AzDOConnection vsConnection, AzDOConnection connection)
        {
            try
            {
                var(branchName, buildNumber) = await TryGetRoslynBranchAndBuildNumberForReleaseAsync(release, vsConnection.GitClient);

                if (string.IsNullOrEmpty(branchName) || string.IsNullOrEmpty(buildNumber))
                {
                    return(null);
                }

                var commitSha = await TryGetRoslynCommitShaFromBuildAsync(connection, buildNumber)
                                ?? await TryGetRoslynCommitShaFromNuspecAsync(vsConnection.NuGetClient, release, vsConnection.GitClient);

                if (string.IsNullOrEmpty(commitSha))
                {
                    return(null);
                }

                var buildId = connection.BuildDefinitionName + "_" + buildNumber;

                return(new RoslynBuildInformation(commitSha, branchName, buildId));
            }
            catch
            {
                return(null);
            }
        }