private static async Task <(string branchName, string buildNumber)> TryGetRoslynBranchAndBuildNumberForReleaseAsync( VisualStudioVersion release, GitHttpClient vsGitClient) { GitRepository vsRepository = await GetVSRepositoryAsync(vsGitClient); var commit = new GitVersionDescriptor { VersionType = GitVersionType.Commit, Version = release.CommitSha }; using var componentsJsonStream = await vsGitClient.GetItemContentAsync( vsRepository.Id, @".corext\Configs\dotnetcodeanalysis-components.json", download : true, versionDescriptor : commit); var componentsJsonContents = await new StreamReader(componentsJsonStream).ReadToEndAsync(); var componentsJson = JObject.Parse(componentsJsonContents); var languageServicesUrlAndManifestName = (string)componentsJson["Components"]["Microsoft.CodeAnalysis.LanguageServices"]["url"]; var parts = languageServicesUrlAndManifestName.Split(';'); if (parts.Length != 2) { return(default);
private static string?TryGetRoslynTagName(VisualStudioVersion release) { string tag = "Visual-Studio-"; if (release.MainVersion.StartsWith("16.")) { tag += "2019-"; } else { // We won't worry about tagging earlier things than VS2019 releases for now return(null); } tag += "Version-" + release.MainVersion; if (release.PreviewVersion != null) { tag += "-Preview-" + release.PreviewVersion; } return(tag); }
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); } }
private static async Task <RoslynBuildInformation?> TryGetRoslynBuildForReleaseAsync(VisualStudioVersion release, GitHttpClient gitClient, BuildHttpClient buildClient) { var commit = new GitVersionDescriptor { VersionType = GitVersionType.Commit, Version = release.CommitSha }; GitRepository vsRepository = await GetVSRepositoryAsync(gitClient); using var componentsJsonStream = await gitClient.GetItemContentAsync( vsRepository.Id, @".corext\Configs\dotnetcodeanalysis-components.json", download : true, versionDescriptor : commit); var fileContents = await new StreamReader(componentsJsonStream).ReadToEndAsync(); var componentsJson = JObject.Parse(fileContents); var languageServicesUrlAndManifestName = (string)componentsJson["Components"]["Microsoft.CodeAnalysis.LanguageServices"]["url"]; var parts = languageServicesUrlAndManifestName.Split(';'); if (parts.Length != 2) { return(null); } if (!parts[1].EndsWith(".vsman")) { return(null); } var buildNumber = new Uri(parts[0]).Segments.Last(); var buildDefinition = (await buildClient.GetDefinitionsAsync(vsRepository.ProjectReference.Id, name: "Roslyn-Signed")).Single(); var build = (await buildClient.GetBuildsAsync(buildDefinition.Project.Id, definitions: new[] { buildDefinition.Id }, buildNumber: buildNumber)).SingleOrDefault(); if (build == null) { return(null); } var buildId = buildDefinition.Name + "_" + build.BuildNumber; return(new RoslynBuildInformation(commitSha: build.SourceVersion, build.SourceBranch.Replace("refs/heads/", ""), buildId)); }