/// <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")));
        }
Exemple #2
0
        /// <inheritdoc />
        public override int?DeterminePullRequestId(IssuesContext context)
        {
            context.NotNull(nameof(context));

            // Not supported by GitHub Actions
            return(null);
        }
Exemple #3
0
        /// <inheritdoc />
        public override void CreateSummaryIssuesReport(
            IssuesContext context,
            [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "")
        {
            context.NotNull(nameof(context));

            // Summary issues report is not supported for GitHub Actions.
        }
Exemple #4
0
        /// <inheritdoc />
        public override string DetermineCommitId(
            IssuesContext context,
            DirectoryPath repositoryRootDirectory)
        {
            context.NotNull(nameof(context));

            return(context.AppVeyor().Environment.Repository.Commit.Id);
        }
        /// <inheritdoc />
        public override string DetermineCommitId(
            IssuesContext context,
            DirectoryPath repositoryRootDirectory)
        {
            context.NotNull(nameof(context));

            return(context.AzurePipelines().Environment.Repository.SourceVersion);
        }
        /// <inheritdoc />
        public override Uri DetermineRepositoryRemoteUrl(
            IssuesContext context,
            DirectoryPath repositoryRootDirectory)
        {
            context.NotNull(nameof(context));

            return(new Uri(context.EnvironmentVariable("BUILD_REPOSITORY_URI")));
        }
Exemple #7
0
        /// <inheritdoc />
        public override Uri DetermineRepositoryRemoteUrl(
            IssuesContext context,
            DirectoryPath repositoryRootDirectory)
        {
            context.NotNull(nameof(context));

            return(new Uri($"https://github.com/{context.GitHubActions().Environment.Workflow.Repository}.git"));
        }
Exemple #8
0
        /// <inheritdoc />
        public override string DetermineCommitId(
            IssuesContext context,
            DirectoryPath repositoryRootDirectory)
        {
            context.NotNull(nameof(context));

            return(context.GitHubActions().Environment.Workflow.Sha);
        }
        /// <inheritdoc />
        public virtual Uri DetermineRepositoryRemoteUrl(
            IssuesContext context,
            DirectoryPath repositoryRootDirectory)
        {
            context.NotNull(nameof(context));
            repositoryRootDirectory.NotNull(nameof(repositoryRootDirectory));

            return(context.State.RepositoryInfo.GetRepositoryRemoteUrl(context, repositoryRootDirectory));
        }
        /// <inheritdoc />
        public virtual string DetermineCommitId(
            IssuesContext context,
            DirectoryPath repositoryRootDirectory)
        {
            context.NotNull(nameof(context));
            repositoryRootDirectory.NotNull(nameof(repositoryRootDirectory));

            return(context.State.RepositoryInfo.GetCommitId(context, repositoryRootDirectory));
        }
Exemple #11
0
        /// <inheritdoc />
        public override void ReportIssuesToBuildServer(
            IssuesContext context)
        {
            context.NotNull(nameof(context));

            context.ReportIssuesToPullRequest(
                context.State.Issues,
                context.GitHubActionsBuilds(),
                context.State.ProjectRootDirectory);
        }
        /// <inheritdoc />
        public override void PublishIssuesArtifacts(IssuesContext context)
        {
            context.NotNull(nameof(context));

            if (context.Parameters.BuildServer.ShouldPublishFullIssuesReport &&
                context.State.FullIssuesReport != null &&
                context.FileExists(context.State.FullIssuesReport))
            {
                context.AzurePipelines().Commands.UploadArtifact("Issues", context.State.FullIssuesReport, "Issues");
            }
        }
Exemple #13
0
        /// <inheritdoc />
        public override void PublishIssuesArtifacts(IssuesContext context)
        {
            context.NotNull(nameof(context));

            if (context.Parameters.BuildServer.ShouldPublishFullIssuesReport &&
                context.State.FullIssuesReport != null &&
                context.FileExists(context.State.FullIssuesReport))
            {
                context.AppVeyor().UploadArtifact(context.State.FullIssuesReport);
            }
        }
Exemple #14
0
        /// <inheritdoc />
        public override FileLinkSettings GetFileLinkSettings(IssuesContext context)
        {
            context.NotNull(nameof(context));

            var rootPath = context.State.RepositoryRootDirectory.GetRelativePath(context.State.ProjectRootDirectory);

            return(context.IssueFileLinkSettingsForAzureDevOpsCommit(
                       context.State.RepositoryRemoteUrl,
                       context.State.CommitId,
                       rootPath.FullPath));
        }
        /// <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 void ReportIssuesToBuildServer(
            IssuesContext context)
        {
            context.NotNull(nameof(context));

            foreach (var issue in context.State.Issues)
            {
                context.AzurePipelines().Commands.WriteWarning(
                    issue.MessageText,
                    new AzurePipelinesMessageData
                {
                    SourcePath = issue.AffectedFileRelativePath?.FullPath,
                    LineNumber = issue.Line
                });
            }
        }
Exemple #17
0
        /// <inheritdoc />
        public override Uri DetermineRepositoryRemoteUrl(
            IssuesContext context,
            DirectoryPath repositoryRootDirectory)
        {
            context.NotNull(nameof(context));

            switch (context.AppVeyor().Environment.Repository.Provider)
            {
            case "bitBucket": return(new Uri($"https://bitbucket.org/{context.AppVeyor().Environment.Repository.Name}/src"));

            case "gitHub": return(new Uri($"https://github.com/{context.AppVeyor().Environment.Repository.Name}.git"));

            case "gitLab": return(new Uri($"https://gitlab.com/{context.AppVeyor().Environment.Repository.Name}.git"));

            case "vso": return(new Uri($"https://dev.azure.com/{context.AppVeyor().Environment.Repository.Name}"));

            default: return(new Uri(context.AppVeyor().Environment.Repository.Name));
            }
        }
Exemple #18
0
        /// <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);
        }
Exemple #19
0
        /// <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
        }
        /// <inheritdoc />
        public override void CreateSummaryIssuesReport(
            IssuesContext context,
            [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "")
        {
            context.NotNull(nameof(context));

            var summaryFileName = "summary";

            if (!string.IsNullOrWhiteSpace(context.Parameters.BuildIdentifier))
            {
                summaryFileName += $"-{context.Parameters.BuildIdentifier}";
            }
            summaryFileName += ".md";
            var summaryFilePath = context.Parameters.OutputDirectory.CombineWithFilePath(summaryFileName);

            var templateName = "Cake.Frosting.Issues.Recipe.BuildServers.AzurePipelineSummary.cshtml";

            using (var stream = this.GetType().Assembly.GetManifestResourceStream(templateName))
            {
                if (stream == null)
                {
                    throw new ApplicationException($"Could not load resource {templateName}");
                }

                using (var sr = new StreamReader(stream))
                {
                    // Create summary for Azure Pipelines using custom template.
                    context.CreateIssueReport(
                        context.State.Issues,
                        context.GenericIssueReportFormatFromContent(sr.ReadToEnd()),
                        context.State.ProjectRootDirectory,
                        summaryFilePath);
                }
            }

            context.AzurePipelines().Commands.UploadTaskSummary(summaryFilePath);
        }
Exemple #21
0
        /// <inheritdoc />
        public override int?DeterminePullRequestId(IssuesContext context)
        {
            context.NotNull(nameof(context));

            return(context.AppVeyor().Environment.PullRequest.Number);
        }
Exemple #22
0
        /// <inheritdoc />
        public override bool DetermineIfPullRequest(IssuesContext context)
        {
            context.NotNull(nameof(context));

            return(context.GitHubActions().Environment.PullRequest.IsPullRequest);
        }
Exemple #23
0
        /// <inheritdoc />
        public override void SetPullRequestIssuesState(IssuesContext context)
        {
            context.NotNull(nameof(context));

            // Not supported yet
        }
Exemple #24
0
        /// <inheritdoc />
        public override void ReportIssuesToPullRequest(IssuesContext context)
        {
            context.NotNull(nameof(context));

            // Not supported yet
        }
        /// <inheritdoc />
        public virtual int?DeterminePullRequestId(IssuesContext context)
        {
            context.NotNull(nameof(context));

            return(null);
        }
Exemple #26
0
        /// <inheritdoc />
        public override void PublishIssuesArtifacts(IssuesContext context)
        {
            context.NotNull(nameof(context));

            // Publishing artifacts is currently not supported for GitHub Actions.
        }
        /// <inheritdoc />
        public virtual bool DetermineIfPullRequest(IssuesContext context)
        {
            context.NotNull(nameof(context));

            return(false);
        }