Example #1
0
        /// <summary>
        /// Tags the build when running on Appveyor or AzureDevOps (GitLab does not support this).
        /// Note that if <see cref="ShouldStop"/> is true, " (Skipped)" is appended.
        /// </summary>
        /// <returns>This info object (allowing fluent syntax).</returns>
        public StandardGlobalInfo SetCIBuildTag()
        {
            string AddSkipped(string s) => ShouldStop ? s + " (Skipped)" : s;

            string ComputeAzurePipelineUpdateBuildVersion(ICommitBuildInfo buildInfo)
            {
                // Azure (formerly VSTS, formerly VSO) analyzes the stdout to set its build number.
                // On clash, the default Azure/VSTS/VSO build number is used: to ensure that the actual
                // version will be always be available we need to inject a uniquifier.
                string buildVersion = AddSkipped($"{buildInfo.Version}_{DateTime.UtcNow:yyyyMMdd-HHmmss}");

                Cake.Information($"Using Azure build number: {buildVersion}");
                return($"##vso[build.updatebuildnumber]{buildVersion}");
            }

            void AzurePipelineUpdateBuildVersion(string buildInstruction)
            {
                Console.WriteLine();
                Console.WriteLine(buildInstruction);
                Console.WriteLine();
            }

            IAppVeyorProvider       appVeyor = Cake.AppVeyor();
            IAzurePipelinesProvider azure    = Cake.AzurePipelines();

            try
            {
                if (appVeyor.IsRunningOnAppVeyor)
                {
                    appVeyor.UpdateBuildVersion(AddSkipped(BuildInfo.Version.ToString()));
                }

                if (azure.IsRunningOnAzurePipelinesHosted || azure.IsRunningOnAzurePipelines)
                {
                    string azureVersion = ComputeAzurePipelineUpdateBuildVersion(BuildInfo);
                    AzurePipelineUpdateBuildVersion(azureVersion);
                }
            }
            catch (Exception e)
            {
                Cake.Warning("Could not set the Build Version!");
                Cake.Warning(e);
            }

            return(this);
        }
Example #2
0
        public static void ConfigureTfsEnvironment(ICakeContext ctx, TaskConfig cfg)
        {
            IAzurePipelinesProvider azurePipelines = ctx.AzurePipelines();

            ctx.LogInfo(azurePipelines.Dump());

            //if (!azurePipelines.IsRunningOnAzurePipelines || !azurePipelines.IsRunningOnAzurePipelinesHosted)
            //    throw new TaskConfigException("Not running in Azure Pipelines");

            EnvConfig env = cfg.Load <EnvConfig>();

            env.IsCi = true;

            // If the build number is configured as an integer, use it. Otherwise use the build ID.
            // Basically, we need something unique.
            env.Version.BuildNumber = azurePipelines.Environment.Build.Number;
        }
Example #3
0
        public static void PublishTestResults(ICakeContext ctx)
        {
            IAzurePipelinesProvider azurePipelines = ctx.AzurePipelines();

            if (!azurePipelines.IsRunningOnAzurePipelines || !azurePipelines.IsRunningOnAzurePipelinesHosted)
            {
                return;
            }

            FilePathCollection trxFiles = ctx.GetFiles("./**/*.trx");

            if (trxFiles.Count == 0)
            {
                return;
            }

            int index = 0;

            foreach (FilePath trxFile in trxFiles)
            {
                string sourceFile  = trxFile.FullPath;
                string directory   = IO.Path.GetDirectoryName(sourceFile);
                string renamedFile = IO.Path.Combine(directory, $"TestResults{index}.trx");
                IO.File.Move(sourceFile, renamedFile);
                index++;
            }

            FilePathCollection testResultsFiles = ctx.GetFiles("./**/*.trx");

            foreach (FilePath filePath in testResultsFiles)
            {
                ctx.Log.Information(filePath.ToString());
            }

            azurePipelines.Commands.PublishTestResults(new AzurePipelinesPublishTestResultsData
            {
                TestRunner       = AzurePipelinesTestRunnerType.VSTest,
                TestResultsFiles = testResultsFiles.ToList(),
                MergeTestResults = true,
            });
        }
Example #4
0
 /// <summary>
 /// Update the progress.
 /// </summary>
 /// <param name="provider">The <see cref="IAzurePipelinesProvider"/>.</param>
 /// <param name="parent">The parent <see cref="Guid"/>.</param>
 /// <param name="progress">The progress.</param>
 public static void UpdateProgress(this IAzurePipelinesProvider provider, Guid parent, int progress)
 {
     provider.Commands.UpdateRecord(parent, new AzurePipelinesRecordData {
         Progress = progress, Status = AzurePipelinesTaskStatus.InProgress
     });
 }
Example #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="BuildSystem" /> class.
        /// </summary>
        /// <param name="appVeyorProvider">The AppVeyor Provider.</param>
        /// <param name="teamCityProvider">The TeamCity Provider.</param>
        /// <param name="myGetProvider">The MyGet Provider.</param>
        /// <param name="bambooProvider">The Bamboo Provider.</param>
        /// <param name="continuaCIProvider">The Continua CI Provider.</param>
        /// <param name="jenkinsProvider">The Jenkins Provider.</param>
        /// <param name="bitriseProvider">The Bitrise Provider.</param>
        /// <param name="travisCIProvider">The Travis CI provider.</param>
        /// <param name="bitbucketPipelinesProvider">The Bitbucket Pipelines provider.</param>
        /// <param name="goCDProvider">The Go.CD provider.</param>
        /// <param name="gitLabCIProvider">The GitLab CI provider.</param>
        /// <param name="tfBuildProvider">The TF Build provider.</param>
        /// <param name="gitHubActionsProvider">The GitHub Actions provider.</param>
        /// <param name="azurePipelinesProvider">The Azure Pipelines provider.</param>
        public BuildSystem(
            IAppVeyorProvider appVeyorProvider,
            ITeamCityProvider teamCityProvider,
            IMyGetProvider myGetProvider,
            IBambooProvider bambooProvider,
            IContinuaCIProvider continuaCIProvider,
            IJenkinsProvider jenkinsProvider,
            IBitriseProvider bitriseProvider,
            ITravisCIProvider travisCIProvider,
            IBitbucketPipelinesProvider bitbucketPipelinesProvider,
            IGoCDProvider goCDProvider,
            IGitLabCIProvider gitLabCIProvider,
            ITFBuildProvider tfBuildProvider,
            IGitHubActionsProvider gitHubActionsProvider,
            IAzurePipelinesProvider azurePipelinesProvider)
        {
            if (appVeyorProvider == null)
            {
                throw new ArgumentNullException(nameof(appVeyorProvider));
            }
            if (teamCityProvider == null)
            {
                throw new ArgumentNullException(nameof(teamCityProvider));
            }
            if (myGetProvider == null)
            {
                throw new ArgumentNullException(nameof(myGetProvider));
            }
            if (bambooProvider == null)
            {
                throw new ArgumentNullException(nameof(bambooProvider));
            }
            if (continuaCIProvider == null)
            {
                throw new ArgumentNullException(nameof(continuaCIProvider));
            }
            if (jenkinsProvider == null)
            {
                throw new ArgumentNullException(nameof(jenkinsProvider));
            }
            if (bitriseProvider == null)
            {
                throw new ArgumentNullException(nameof(bitriseProvider));
            }
            if (travisCIProvider == null)
            {
                throw new ArgumentNullException(nameof(travisCIProvider));
            }
            if (bitbucketPipelinesProvider == null)
            {
                throw new ArgumentNullException(nameof(bitbucketPipelinesProvider));
            }
            if (goCDProvider == null)
            {
                throw new ArgumentNullException(nameof(goCDProvider));
            }
            if (gitLabCIProvider == null)
            {
                throw new ArgumentNullException(nameof(gitLabCIProvider));
            }
            if (tfBuildProvider == null)
            {
                throw new ArgumentNullException(nameof(tfBuildProvider));
            }
            if (gitHubActionsProvider == null)
            {
                throw new ArgumentNullException(nameof(gitHubActionsProvider));
            }
            if (azurePipelinesProvider == null)
            {
                throw new ArgumentNullException(nameof(azurePipelinesProvider));
            }

            AppVeyor           = appVeyorProvider;
            TeamCity           = teamCityProvider;
            MyGet              = myGetProvider;
            Bamboo             = bambooProvider;
            ContinuaCI         = continuaCIProvider;
            Jenkins            = jenkinsProvider;
            Bitrise            = bitriseProvider;
            TravisCI           = travisCIProvider;
            BitbucketPipelines = bitbucketPipelinesProvider;
            GoCD     = goCDProvider;
            GitLabCI = gitLabCIProvider;
#pragma warning disable CS0618 // Type or member is obsolete
            TFBuild = tfBuildProvider;
#pragma warning restore CS0618 // Type or member is obsolete
            GitHubActions  = gitHubActionsProvider;
            AzurePipelines = azurePipelinesProvider;

            Provider = (AppVeyor.IsRunningOnAppVeyor ? BuildProvider.AppVeyor : BuildProvider.Local)
                       | (TeamCity.IsRunningOnTeamCity ? BuildProvider.TeamCity : BuildProvider.Local)
                       | (MyGet.IsRunningOnMyGet ? BuildProvider.MyGet : BuildProvider.Local)
                       | (Bamboo.IsRunningOnBamboo ? BuildProvider.Bamboo : BuildProvider.Local)
                       | (ContinuaCI.IsRunningOnContinuaCI ? BuildProvider.ContinuaCI : BuildProvider.Local)
                       | (Jenkins.IsRunningOnJenkins ? BuildProvider.Jenkins : BuildProvider.Local)
                       | (Bitrise.IsRunningOnBitrise ? BuildProvider.Bitrise : BuildProvider.Local)
                       | (TravisCI.IsRunningOnTravisCI ? BuildProvider.TravisCI : BuildProvider.Local)
                       | (BitbucketPipelines.IsRunningOnBitbucketPipelines ? BuildProvider.BitbucketPipelines : BuildProvider.Local)
                       | (GoCD.IsRunningOnGoCD ? BuildProvider.GoCD : BuildProvider.Local)
                       | (GitLabCI.IsRunningOnGitLabCI ? BuildProvider.GitLabCI : BuildProvider.Local)
                       | (GitHubActions.IsRunningOnGitHubActions ? BuildProvider.GitHubActions : BuildProvider.Local)
                       | (AzurePipelines.IsRunningOnAzurePipelines ? BuildProvider.AzurePipelines : BuildProvider.Local)
                       | (AzurePipelines.IsRunningOnAzurePipelinesHosted ? BuildProvider.AzurePipelinesHosted : BuildProvider.Local);

            IsLocalBuild = Provider == BuildProvider.Local;

            IsPullRequest = ((Provider & BuildProvider.AppVeyor) != 0 && AppVeyor.Environment.PullRequest.IsPullRequest) ||
                            ((Provider & BuildProvider.TeamCity) != 0 && TeamCity.Environment.PullRequest.IsPullRequest) ||
                            ((Provider & BuildProvider.Bitrise) != 0 && Bitrise.Environment.PullRequest.IsPullRequest) ||
                            ((Provider & BuildProvider.TravisCI) != 0 && TravisCI.Environment.PullRequest.IsPullRequest) ||
                            ((Provider & BuildProvider.BitbucketPipelines) != 0 && BitbucketPipelines.Environment.PullRequest.IsPullRequest) ||
                            ((Provider & BuildProvider.GitLabCI) != 0 && GitLabCI.Environment.PullRequest.IsPullRequest) ||
                            ((Provider & (BuildProvider.AzurePipelines | BuildProvider.AzurePipelinesHosted)) != 0 && AzurePipelines.Environment.PullRequest.IsPullRequest) ||
                            ((Provider & BuildProvider.GitHubActions) != 0 && GitHubActions.Environment.PullRequest.IsPullRequest) ||
                            ((Provider & BuildProvider.Jenkins) != 0 && Jenkins.Environment.Change.IsPullRequest);
        }