public DependencyUpdater( GitHubAuth gitHubAuth, string projectRepo, string projectRepoOwner = null, string projectRepoBranch = null, string gitAuthorName = null, IEnumerable<string> notifyGitHubUsers = null) { if (gitHubAuth == null) { throw new ArgumentNullException(nameof(gitHubAuth)); } _gitHubAuth = gitHubAuth; if (projectRepo == null) { throw new ArgumentNullException(nameof(projectRepo)); } _projectRepo = projectRepo; _projectRepoOwner = projectRepoOwner ?? "dotnet"; _projectRepoBranch = projectRepoBranch ?? "master"; _gitAuthorName = gitAuthorName ?? "dotnet-bot"; _notifyGitHubUsers = notifyGitHubUsers; }
public GitHubHttpClient(GitHubAuth auth) { DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json"); DefaultRequestHeaders.Add("Authorization", $"token {auth.AuthToken}"); DefaultRequestHeaders.Add("User-Agent", auth.User); _auth = auth; }
public static void Main(string[] args) { DebugHelper.HandleDebugSwitch(ref args); List<BuildInfo> buildInfos = new List<BuildInfo>(); buildInfos.Add(BuildInfo.Get("CoreFx", s_config.CoreFxVersionUrl, fetchLatestReleaseFile: false)); buildInfos.Add(BuildInfo.Get("CoreClr", s_config.CoreClrVersionUrl, fetchLatestReleaseFile: false)); buildInfos.Add(BuildInfo.Get("Roslyn", s_config.RoslynVersionUrl, fetchLatestReleaseFile: false)); buildInfos.Add(BuildInfo.Get("CoreSetup", s_config.CoreSetupVersionUrl, fetchLatestReleaseFile: false)); IEnumerable<IDependencyUpdater> updaters = GetUpdaters(); GitHubAuth gitHubAuth = new GitHubAuth(s_config.Password, s_config.UserName, s_config.Email); DependencyUpdater dependencyUpdater = new DependencyUpdater( gitHubAuth, s_config.GitHubProject, s_config.GitHubUpstreamOwner, s_config.GitHubUpstreamBranch, s_config.UserName, s_config.GitHubPullRequestNotifications); if (args.Length > 0 && string.Equals("--Update", args[0], StringComparison.OrdinalIgnoreCase)) { dependencyUpdater.Update(updaters, buildInfos); } else { dependencyUpdater.UpdateAndSubmitPullRequestAsync(updaters, buildInfos); } }
public GitHubVersionsRepoUpdater( GitHubAuth gitHubAuth, string versionsRepoOwner = null, string versionsRepo = null) : this( gitHubAuth, new GitHubProject(versionsRepo ?? "versions", versionsRepoOwner)) { }
public VersionsRepoUpdater( GitHubAuth gitHubAuth, string versionsRepoOwner = null, string versionsRepo = null) : this( gitHubAuth, new GitHubProject(versionsRepo ?? "versions", versionsRepoOwner)) { }
public GitHubVersionsRepoUpdater( INupkgInfoFactory nupkgInfoFactory, GitHubAuth gitHubAuth, string versionsRepoOwner = null, string versionsRepo = null) : this( gitHubAuth, new GitHubProject(versionsRepo ?? "versions", versionsRepoOwner), nupkgInfoFactory) { }
public PullRequestCreator( GitHubAuth auth, string projectName, string upstreamOwner, string upstreamBranch, string gitAuthorName) : this( auth, new GitHubProject(projectName, auth.User), new GitHubBranch(upstreamBranch, new GitHubProject(projectName, upstreamOwner)), gitAuthorName) { }
public PullRequestCreator( GitHubAuth auth, string gitAuthorName = null) { if (auth == null) { throw new ArgumentNullException( nameof(auth), "Authentication is required: pull requests cannot be created anonymously."); } _auth = auth; GitAuthorName = gitAuthorName ?? auth.User; }
public VersionRepoUpdater( GitHubAuth gitHubAuth, string versionRepoOwner = null, string versionsRepo = null) { if (gitHubAuth == null) { throw new ArgumentNullException(nameof(gitHubAuth)); } _gitHubAuth = gitHubAuth; _versionsRepoOwner = versionRepoOwner ?? "dotnet"; _versionsRepo = versionsRepo ?? "versions"; }
public VersionsRepoUpdater(GitHubAuth gitHubAuth, GitHubProject project) { if (gitHubAuth == null) { throw new ArgumentNullException(nameof(gitHubAuth)); } _gitHubAuth = gitHubAuth; if (project == null) { throw new ArgumentNullException(nameof(project)); } _project = project; }
public GitHubVersionsRepoUpdater(GitHubAuth gitHubAuth, GitHubProject project, INupkgInfoFactory nupkgInfoFactory) : base(nupkgInfoFactory) { if (gitHubAuth == null) { throw new ArgumentNullException(nameof(gitHubAuth)); } _gitHubAuth = gitHubAuth; if (project == null) { throw new ArgumentNullException(nameof(project)); } _project = project; }
public GitHubVersionsRepoUpdater(GitHubAuth gitHubAuth, GitHubProject project) { if (gitHubAuth == null) { throw new ArgumentNullException(nameof(gitHubAuth)); } _gitHubAuth = gitHubAuth; if (project == null) { throw new ArgumentNullException(nameof(project)); } _project = project; }
public PullRequestCreator( GitHubAuth auth, GitHubProject origin, GitHubBranch upstreamBranch, string gitAuthorName = null, IUpdateBranchNamingStrategy namingStrategy = null) { _auth = auth; Origin = origin; UpstreamBranch = upstreamBranch; GitAuthorName = gitAuthorName ?? auth.User; _namingStrategy = namingStrategy ?? new SingleBranchNamingStrategy("UpdateDependencies"); }
public override bool Execute() { MsBuildTraceListener[] listeners = Trace.Listeners.AddMsBuildTraceListeners(Log); var gitHubAuth = new GitHubAuth(GitHubAuthToken, GitHubUser, GitHubEmail); var updater = new VersionRepoUpdater(gitHubAuth, VersionRepoOwner, VersionRepo); updater.UpdateBuildInfoAsync( ShippedNuGetPackage.Select(item => item.ItemSpec), VersionsRepoPath) .Wait(); Trace.Listeners.RemoveMsBuildTraceListeners(listeners); return true; }
public override bool Execute() { MsBuildTraceListener[] listeners = Trace.Listeners.AddMsBuildTraceListeners(Log); try { IDependencyUpdater[] updaters = GetDependencyUpdaters().ToArray(); BuildInfo[] buildInfos = GetBuildInfos().ToArray(); var updater = new DependencyUpdater(); DependencyUpdateResults updateResults = updater.Update(updaters, buildInfos); if (updateResults.ChangesDetected()) { var gitHubAuth = new GitHubAuth(GitHubAuthToken, GitHubUser, GitHubEmail); var origin = new GitHubProject(ProjectRepoName, GitHubUser); var upstreamBranch = new GitHubBranch( ProjectRepoBranch, new GitHubProject(ProjectRepoName, ProjectRepoOwner)); string suggestedMessage = updateResults.GetSuggestedCommitMessage(); string body = string.Empty; if (NotifyGitHubUsers != null) { body += PullRequestCreator.NotificationString(NotifyGitHubUsers.Select(item => item.ItemSpec)); } var prCreator = new PullRequestCreator(gitHubAuth, origin, upstreamBranch, GitHubAuthor); prCreator.CreateOrUpdateAsync( suggestedMessage, suggestedMessage + $" ({ProjectRepoBranch})", body, forceCreate: AlwaysCreateNewPullRequest).Wait(); } } finally { Trace.Listeners.RemoveMsBuildTraceListeners(listeners); } return true; }
public override bool Execute() { MsBuildTraceListener[] listeners = Trace.Listeners.AddMsBuildTraceListeners(Log); IDependencyUpdater[] updaters = GetDependencyUpdaters().ToArray(); BuildInfo[] buildInfos = GetBuildInfos().ToArray(); var gitHubAuth = new GitHubAuth(GitHubAuthToken, GitHubUser, GitHubEmail); var updater = new DependencyUpdater( gitHubAuth, ProjectRepo, ProjectRepoOwner, ProjectRepoBranch, GitHubAuthor ?? GitHubUser, NotifyGitHubUsers?.Select(item => item.ItemSpec)); updater.UpdateAndSubmitPullRequestAsync(updaters, buildInfos).Wait(); Trace.Listeners.RemoveMsBuildTraceListeners(listeners); return true; }
protected override void TraceListenedExecute() { // Use the commit sha of versions repo master (not just "master") for stable upgrade. var gitHubAuth = new GitHubAuth(GitHubAuthToken, GitHubUser, GitHubEmail); var client = new GitHubClient(gitHubAuth); string masterSha = client .GetReferenceAsync(new GitHubProject("versions", "dotnet"), "heads/master") .Result.Object.Sha; foreach (ITaskItem item in DependencyBuildInfo) { if (!string.IsNullOrEmpty(item.GetMetadata(CurrentRefMetadataName))) { item.SetMetadata(CurrentRefMetadataName, masterSha); } string autoUpgradeBranch = item.GetMetadata(AutoUpgradeBranchMetadataName); if (!string.IsNullOrEmpty(autoUpgradeBranch)) { item.SetMetadata(CurrentBranchMetadataName, autoUpgradeBranch); } } DependencyUpdateResults updateResults = DependencyUpdateUtils.Update( CreateUpdaters().ToArray(), CreateBuildInfoDependencies().ToArray()); // Update CurrentRef and CurrentBranch for each applicable build info used. if (!string.IsNullOrEmpty(CurrentRefXmlPath)) { foreach (BuildInfo info in updateResults.UsedBuildInfos) { ITaskItem infoItem = FindDependencyBuildInfo(info.Name); if (!string.IsNullOrEmpty(infoItem.GetMetadata(CurrentRefMetadataName))) { UpdateProperty( CurrentRefXmlPath, $"{info.Name}{CurrentRefMetadataName}", masterSha); } string autoUpgradeBranch = infoItem.GetMetadata(AutoUpgradeBranchMetadataName); if (!string.IsNullOrEmpty(autoUpgradeBranch)) { UpdateProperty( CurrentRefXmlPath, $"{info.Name}{CurrentBranchMetadataName}", autoUpgradeBranch); } } } if (updateResults.ChangesDetected()) { var origin = new GitHubProject(ProjectRepoName, GitHubUser); var upstreamBranch = new GitHubBranch( ProjectRepoBranch, new GitHubProject(ProjectRepoName, ProjectRepoOwner)); string suggestedMessage = updateResults.GetSuggestedCommitMessage(); string body = string.Empty; if (NotifyGitHubUsers != null) { body += PullRequestCreator.NotificationString(NotifyGitHubUsers.Select(item => item.ItemSpec)); } var prCreator = new PullRequestCreator(gitHubAuth, origin, upstreamBranch, GitHubAuthor); prCreator.CreateOrUpdateAsync( suggestedMessage, suggestedMessage + $" ({ProjectRepoBranch})", body, forceCreate: AlwaysCreateNewPullRequest).Wait(); } else { Log.LogMessage("No update required: no changes detected."); } }
protected override void TraceListenedExecute() { // Use the commit sha of versions repo master (not just "master") for stable upgrade. var gitHubAuth = new GitHubAuth(GitHubAuthToken, GitHubUser, GitHubEmail); var client = new GitHubClient(gitHubAuth); string masterSha = client .GetReferenceAsync(new GitHubProject("versions", "dotnet"), "heads/master") .Result.Object.Sha; foreach (ITaskItem item in DependencyBuildInfo) { if (!string.IsNullOrEmpty(item.GetMetadata(s_currentRef))) { item.SetMetadata(s_currentRef, masterSha); } } DependencyUpdateResults updateResults = DependencyUpdateUtils.Update( CreateUpdaters().ToArray(), CreateBuildInfoDependencies().ToArray()); if (!string.IsNullOrEmpty(CurrentRefXmlPath)) { // Update the build info commit sha for each applicable build info used. foreach (BuildInfo info in updateResults.UsedBuildInfos) { ITaskItem infoItem = FindDependencyBuildInfo(info.Name); if (string.IsNullOrEmpty(infoItem.GetMetadata(s_currentRef))) { continue; } Regex upgrader = CreateXmlUpdateRegex($"{info.Name}{s_currentRef}", s_currentRef); Action replace = FileUtils.ReplaceFileContents( CurrentRefXmlPath, contents => { Match m = upgrader.Match(contents); Group g = m.Groups[s_currentRef]; return contents .Remove(g.Index, g.Length) .Insert(g.Index, masterSha); }); replace(); } } if (updateResults.ChangesDetected()) { var origin = new GitHubProject(ProjectRepoName, GitHubUser); var upstreamBranch = new GitHubBranch( ProjectRepoBranch, new GitHubProject(ProjectRepoName, ProjectRepoOwner)); string suggestedMessage = updateResults.GetSuggestedCommitMessage(); string body = string.Empty; if (NotifyGitHubUsers != null) { body += PullRequestCreator.NotificationString(NotifyGitHubUsers.Select(item => item.ItemSpec)); } var prCreator = new PullRequestCreator(gitHubAuth, origin, upstreamBranch, GitHubAuthor); prCreator.CreateOrUpdateAsync( suggestedMessage, suggestedMessage + $" ({ProjectRepoBranch})", body, forceCreate: AlwaysCreateNewPullRequest).Wait(); } else { Log.LogMessage("No update required: no changes detected."); } }