/// <summary> /// Determines the build server on which the build is running. /// </summary> /// <param name="context">The Cake context.</param> /// <returns>The build server on which the build is running or <c>null</c> if unknown build server.</returns> private static IIssuesBuildServer DetermineBuildServer(IssuesContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } // Could be simplified once https://github.com/cake-build/cake/issues/1684 / https://github.com/cake-build/cake/issues/1580 are fixed. if (!string.IsNullOrWhiteSpace(context.EnvironmentVariable("TF_BUILD")) && !string.IsNullOrWhiteSpace(context.EnvironmentVariable("SYSTEM_COLLECTIONURI")) && ( new Uri(context.EnvironmentVariable("SYSTEM_COLLECTIONURI")).Host == "dev.azure.com" || new Uri(context.EnvironmentVariable("SYSTEM_COLLECTIONURI")).Host.EndsWith("visualstudio.com", StringComparison.InvariantCulture) )) { context.Information("Build server detected: {0}", "Azure Pipelines"); return(new AzureDevOpsBuildServer()); } if (context.AppVeyor().IsRunningOnAppVeyor) { context.Information("Build server detected: {0}", "AppVeyor"); return(new AppVeyorBuildServer()); } if (context.GitHubActions().IsRunningOnGitHubActions) { context.Information("Build server detected: {0}", "GitHub Actions"); return(new GitHubActionsBuildServer()); } return(null); }
/// <inheritdoc /> public override int?DeterminePullRequestId(IssuesContext context) { context.NotNull(nameof(context)); if (!Int32.TryParse(context.EnvironmentVariable("SYSTEM_PULLREQUEST_PULLREQUESTID"), out var pullRequestId)) { throw new Exception($"Invalid pull request ID: {context.EnvironmentVariable("SYSTEM_PULLREQUEST_PULLREQUESTID")}"); } else { return(pullRequestId); } }
/// <inheritdoc /> public override bool DetermineIfPullRequest(IssuesContext context) { context.NotNull(nameof(context)); // Could be simplified once https://github.com/cake-build/cake/issues/2149 is fixed return(!string.IsNullOrWhiteSpace(context.EnvironmentVariable("SYSTEM_PULLREQUEST_PULLREQUESTID"))); }
/// <inheritdoc /> public override Uri DetermineRepositoryRemoteUrl( IssuesContext context, DirectoryPath repositoryRootDirectory) { context.NotNull(nameof(context)); return(new Uri(context.EnvironmentVariable("BUILD_REPOSITORY_URI"))); }
/// <inheritdoc /> public override void SetPullRequestIssuesState(IssuesContext context) { context.NotNull(nameof(context)); #pragma warning disable SA1123 // Do not place regions within elements #region DupFinder Exclusion #pragma warning restore SA1123 // Do not place regions within elements if (string.IsNullOrWhiteSpace(context.EnvironmentVariable("SYSTEM_ACCESSTOKEN"))) { context.Warning("SYSTEM_ACCESSTOKEN environment variable not set. Make sure the 'Allow Scripts to access OAuth token' option is enabled on the build definition."); return; } var pullRequestSettings = new AzureDevOpsPullRequestSettings( context.State.BuildServer.DetermineRepositoryRemoteUrl(context, context.State.RepositoryRootDirectory), context.State.BuildServer.DeterminePullRequestId(context).Value, context.AzureDevOpsAuthenticationOAuth(context.EnvironmentVariable("SYSTEM_ACCESSTOKEN"))); #endregion var pullRequestStatusName = "Issues"; var pullRequestDescriptionIfIssues = $"Found {context.State.Issues.Count()} issues"; var pullRequestDescriptionIfNoIssues = "No issues found"; if (!string.IsNullOrWhiteSpace(context.Parameters.BuildIdentifier)) { pullRequestStatusName += $"-{context.Parameters.BuildIdentifier}"; pullRequestDescriptionIfIssues += $" for build {context.Parameters.BuildIdentifier}"; pullRequestDescriptionIfNoIssues += $" for build {context.Parameters.BuildIdentifier}"; } var pullRequestStatus = new AzureDevOpsPullRequestStatus(pullRequestStatusName) { Genre = "Cake.Issues.Recipe", State = context.State.Issues.Any() ? AzureDevOpsPullRequestStatusState.Failed : AzureDevOpsPullRequestStatusState.Succeeded, Description = context.State.Issues.Any() ? pullRequestDescriptionIfIssues : pullRequestDescriptionIfNoIssues }; context.AzureDevOpsSetPullRequestStatus( pullRequestSettings, pullRequestStatus); }
/// <inheritdoc /> public override void ReportIssuesToPullRequest(IssuesContext context) { context.NotNull(nameof(context)); #pragma warning disable SA1123 // Do not place regions within elements #region DupFinder Exclusion #pragma warning restore SA1123 // Do not place regions within elements if (string.IsNullOrWhiteSpace(context.EnvironmentVariable("SYSTEM_ACCESSTOKEN"))) { context.Warning("SYSTEM_ACCESSTOKEN environment variable not set. Make sure the 'Allow Scripts to access OAuth token' option is enabled on the build definition."); return; } context.ReportIssuesToPullRequest( context.State.Issues, context.AzureDevOpsPullRequests( context.State.BuildServer.DetermineRepositoryRemoteUrl(context, context.State.RepositoryRootDirectory), context.State.BuildServer.DeterminePullRequestId(context).Value, context.AzureDevOpsAuthenticationOAuth(context.EnvironmentVariable("SYSTEM_ACCESSTOKEN"))), GetReportIssuesToPullRequestSettings(context)); #endregion }