/// <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); }
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; }
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, }); }
/// <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 }); }
/// <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); }