diff --git a/README.md b/README.md index 47d726c1..d6b6b8b0 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ This module will introduce a number of features for running in hosted CI build e Currently this module supports: -### TF Build +### Azure Pipelines -> This applies to TFS and VSTS +> This applies to TFS, Azure Pipelines, and Azure DevOps Server - Individual timeline records for each task - Percentage reporting on build progress diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 27df29d1..f8599eeb 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -47,4 +47,9 @@ - Supports Cake 0.34.1 - Fixes errors writing summary report when run in Azure Pipelines container (#21) -- Thanks again to @flcdrg for contributions! \ No newline at end of file +- Thanks again to @flcdrg for contributions! + +# 0.4.0 + +- Supports Cake 0.38.0 +- Rename TF Build to Azure Pipelines diff --git a/azure-pipelines.yml b/azure-pipelines.yml index e0a18439..0034be84 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -4,7 +4,7 @@ trigger: variables: buildConfiguration: 'Release' - cakeVersion: 0.34.1 + cakeVersion: 0.38.0 sdkVersion: '2.2.300' target: NuGet diff --git a/src/Cake.TFBuild.Module/TFBuildEngine.cs b/src/Cake.AzurePipelines.Module/AzurePipelinesEngine.cs similarity index 58% rename from src/Cake.TFBuild.Module/TFBuildEngine.cs rename to src/Cake.AzurePipelines.Module/AzurePipelinesEngine.cs index e8bdd60b..02c1c663 100644 --- a/src/Cake.TFBuild.Module/TFBuildEngine.cs +++ b/src/Cake.AzurePipelines.Module/AzurePipelinesEngine.cs @@ -2,24 +2,26 @@ using System.Collections.Generic; using System.Linq; using Cake.Common.Build; -using Cake.Common.Build.TFBuild.Data; +using Cake.Common.Build.AzurePipelines.Data; using Cake.Core; using Cake.Core.Diagnostics; using Cake.Module.Shared; -namespace Cake.TFBuild.Module +namespace Cake.AzurePipelines.Module { + using Cake.Common.Build.AzurePipelines.Data; + /// - /// Represents a Cake engine for use with the TF Build engine. + /// Represents a Cake engine for use with the Azure Pipelines engine. /// - public sealed class TFBuildEngine : CakeEngineBase + public sealed class AzurePipelinesEngine : CakeEngineBase { /// - /// Initializes a new instance of the type. + /// Initializes a new instance of the type. /// /// /// The log. - public TFBuildEngine(ICakeDataService dataService, ICakeLog log) : base(new CakeEngine(dataService, log)) + public AzurePipelinesEngine(ICakeDataService dataService, ICakeLog log) : base(new CakeEngine(dataService, log)) { _engine.Setup += BuildSetup; _engine.TaskSetup += OnTaskSetup; @@ -32,11 +34,11 @@ private void OnBuildTeardown(object sender, TeardownEventArgs e) var b = e.TeardownContext.BuildSystem(); if (b.IsRunningOnPipelines()) { - b.TFBuild.Commands.UpdateRecord(_parentRecord, new TFBuildRecordData + b.AzurePipelines.Commands.UpdateRecord(_parentRecord, new AzurePipelinesRecordData { FinishTime = DateTime.Now, - Status = TFBuildTaskStatus.Completed, - Result = e.TeardownContext.Successful ? TFBuildTaskResult.Succeeded : TFBuildTaskResult.Failed, + Status = AzurePipelinesTaskStatus.Completed, + Result = e.TeardownContext.Successful ? AzurePipelinesTaskResult.Succeeded : AzurePipelinesTaskResult.Failed, Progress = GetProgress(TaskRecords.Count, _engine.Tasks.Count), }); } @@ -49,10 +51,10 @@ private void OnTaskTeardown(object sender, TaskTeardownEventArgs e) { var currentTask = _engine.Tasks.First(t => t.Name == e.TaskTeardownContext.Task.Name); var currentIndex = _engine.Tasks.ToList().IndexOf(currentTask); - //b.TFBuild.UpdateProgress(_parentRecord, GetProgress(currentIndex, _engine.Tasks.Count)); + //b.AzurePipelines.UpdateProgress(_parentRecord, GetProgress(currentIndex, _engine.Tasks.Count)); var g = TaskRecords[currentTask.Name]; - b.TFBuild.Commands.UpdateRecord(g, - new TFBuildRecordData + b.AzurePipelines.Commands.UpdateRecord(g, + new AzurePipelinesRecordData { FinishTime = DateTime.Now, Progress = 100, @@ -61,12 +63,12 @@ private void OnTaskTeardown(object sender, TaskTeardownEventArgs e) } } - private TFBuildTaskResult? GetTaskResult(ITaskTeardownContext taskTeardownContext) + private AzurePipelinesTaskResult? GetTaskResult(ITaskTeardownContext taskTeardownContext) { - if (taskTeardownContext.Skipped) return TFBuildTaskResult.Skipped; + if (taskTeardownContext.Skipped) return AzurePipelinesTaskResult.Skipped; // TODO: this logic should be improved but is difficult without task status in the context - return TFBuildTaskResult.Succeeded; + return AzurePipelinesTaskResult.Succeeded; } private void OnTaskSetup(object sender, TaskSetupEventArgs e) @@ -77,12 +79,12 @@ private void OnTaskSetup(object sender, TaskSetupEventArgs e) var currentTask = _engine.Tasks.First(t => t.Name == e.TaskSetupContext.Task.Name); var currentIndex = _engine.Tasks.ToList().IndexOf(currentTask); - b.TFBuild.UpdateProgress(_parentRecord, GetProgress(currentIndex, _engine.Tasks.Count)); - //b.TFBuild.Commands.SetProgress(GetProgress(currentIndex, _engine.Tasks.Count), e.TaskSetupContext.Task.Name); - b.TFBuild.Commands.SetProgress(GetProgress(currentIndex, _engine.Tasks.Count), string.Empty); - var g = e.TaskSetupContext.TFBuild() + b.AzurePipelines.UpdateProgress(_parentRecord, GetProgress(currentIndex, _engine.Tasks.Count)); + //b.AzurePipelines.Commands.SetProgress(GetProgress(currentIndex, _engine.Tasks.Count), e.TaskSetupContext.Task.Name); + b.AzurePipelines.Commands.SetProgress(GetProgress(currentIndex, _engine.Tasks.Count), string.Empty); + var g = e.TaskSetupContext.AzurePipelines() .Commands.CreateNewRecord(currentTask.Name, "build", TaskRecords.Count + 1, - new TFBuildRecordData() {StartTime = DateTime.Now, ParentRecord = _parentRecord, Progress = 0}); + new AzurePipelinesRecordData() {StartTime = DateTime.Now, ParentRecord = _parentRecord, Progress = 0}); TaskRecords.Add(currentTask.Name, g); } } @@ -98,10 +100,10 @@ private void BuildSetup(object sender, SetupEventArgs e) var b = e.Context.BuildSystem(); if (b.IsRunningOnPipelines()) { - //e.Context.TFBuild().Commands.SetProgress(0, "Build Setup"); - e.Context.TFBuild().Commands.SetProgress(0, string.Empty); - var g = e.Context.TFBuild() - .Commands.CreateNewRecord("Cake Build", "build", 0, new TFBuildRecordData {StartTime = DateTime.Now}); + //e.Context.AzurePipelines().Commands.SetProgress(0, "Build Setup"); + e.Context.AzurePipelines().Commands.SetProgress(0, string.Empty); + var g = e.Context.AzurePipelines() + .Commands.CreateNewRecord("Cake Build", "build", 0, new AzurePipelinesRecordData {StartTime = DateTime.Now}); _parentRecord = g; } } diff --git a/src/Cake.TFBuild.Module/TFBuildLog.cs b/src/Cake.AzurePipelines.Module/AzurePipelinesLog.cs similarity index 90% rename from src/Cake.TFBuild.Module/TFBuildLog.cs rename to src/Cake.AzurePipelines.Module/AzurePipelinesLog.cs index b6ba118f..e389c709 100644 --- a/src/Cake.TFBuild.Module/TFBuildLog.cs +++ b/src/Cake.AzurePipelines.Module/AzurePipelinesLog.cs @@ -5,11 +5,11 @@ using Cake.Core.Diagnostics; using Cake.Module.Shared; -namespace Cake.TFBuild.Module +namespace Cake.AzurePipelines.Module { - public class TFBuildLog : ICakeLog + public class AzurePipelinesLog : ICakeLog { - public TFBuildLog(IConsole console, Verbosity verbosity = Verbosity.Normal) + public AzurePipelinesLog(IConsole console, Verbosity verbosity = Verbosity.Normal) { _cakeLogImplementation = new Core.Diagnostics.CakeBuildLog(console, verbosity); } diff --git a/src/Cake.AzurePipelines.Module/AzurePipelinesModule.cs b/src/Cake.AzurePipelines.Module/AzurePipelinesModule.cs new file mode 100644 index 00000000..37c504d2 --- /dev/null +++ b/src/Cake.AzurePipelines.Module/AzurePipelinesModule.cs @@ -0,0 +1,22 @@ +using Cake.Core; +using Cake.Core.Annotations; +using Cake.Core.Composition; +using Cake.Core.Diagnostics; + +[assembly: CakeModule(typeof(Cake.AzurePipelines.Module.AzurePipelinesModule))] + +namespace Cake.AzurePipelines.Module +{ + public class AzurePipelinesModule : ICakeModule + { + public void Register(ICakeContainerRegistrar registrar) + { + if (!string.IsNullOrWhiteSpace(System.Environment.GetEnvironmentVariable("TF_BUILD"))) + { + registrar.RegisterType().As().Singleton(); + registrar.RegisterType().As().Singleton(); + registrar.RegisterType().As().Singleton(); + } + } + } +} \ No newline at end of file diff --git a/src/Cake.TFBuild.Module/TFBuildReportPrinter.cs b/src/Cake.AzurePipelines.Module/AzurePipelinesReportPrinter.cs similarity index 83% rename from src/Cake.TFBuild.Module/TFBuildReportPrinter.cs rename to src/Cake.AzurePipelines.Module/AzurePipelinesReportPrinter.cs index 153c7466..161a907e 100644 --- a/src/Cake.TFBuild.Module/TFBuildReportPrinter.cs +++ b/src/Cake.AzurePipelines.Module/AzurePipelinesReportPrinter.cs @@ -6,19 +6,19 @@ using Cake.Core.IO; using Cake.Module.Shared; -namespace Cake.TFBuild.Module +namespace Cake.AzurePipelines.Module { /// /// The TF Build/Azure Pipelines report printer. /// - public class TFBuildReportPrinter : CakeReportPrinterBase + public class AzurePipelinesReportPrinter : CakeReportPrinterBase { /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The console. /// The context. - public TFBuildReportPrinter(IConsole console, ICakeContext context) : base(console, context) + public AzurePipelinesReportPrinter(IConsole console, ICakeContext context) : base(console, context) { } @@ -36,7 +36,7 @@ public override void Write(CakeReport report) try { - if (_context.TFBuild().IsRunningOnAzurePipelines || _context.TFBuild().IsRunningOnAzurePipelinesHosted) { + if (_context.AzurePipelines().IsRunningOnAzurePipelines || _context.AzurePipelines().IsRunningOnAzurePipelinesHosted) { WriteToMarkdown(report); } WriteToConsole(report); @@ -74,7 +74,7 @@ private void WriteToMarkdown(CakeReport report) } } sb.AppendLine(""); - var b = _context.BuildSystem().TFBuild; + var b = _context.BuildSystem().AzurePipelines; FilePath agentWorkPath = b.Environment.Build.ArtifactStagingDirectory + "/tasksummary.md"; var absFilePath = agentWorkPath.MakeAbsolute(_context.Environment); var file = _context.FileSystem.GetFile(absFilePath); diff --git a/src/Cake.TFBuild.Module/Cake.TFBuild.Module.csproj b/src/Cake.AzurePipelines.Module/Cake.AzurePipelines.Module.csproj similarity index 59% rename from src/Cake.TFBuild.Module/Cake.TFBuild.Module.csproj rename to src/Cake.AzurePipelines.Module/Cake.AzurePipelines.Module.csproj index 27699855..0385e707 100644 --- a/src/Cake.TFBuild.Module/Cake.TFBuild.Module.csproj +++ b/src/Cake.AzurePipelines.Module/Cake.AzurePipelines.Module.csproj @@ -3,8 +3,8 @@ netstandard2.0 true - Cake.TFBuild.Module - Cake.TFBuild.Module + Cake.AzurePipelines.Module + Cake.AzurePipelines.Module @@ -12,8 +12,8 @@ - - + + diff --git a/src/Cake.AzurePipelines.Module/Extensions.cs b/src/Cake.AzurePipelines.Module/Extensions.cs new file mode 100644 index 00000000..494fda7c --- /dev/null +++ b/src/Cake.AzurePipelines.Module/Extensions.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Cake.Common.Build.AzurePipelines; +using Cake.Common.Build.AzurePipelines.Data; + +namespace Cake.AzurePipelines.Module +{ + public static class Extensions + { + public static void UpdateProgress(this IAzurePipelinesProvider provider, Guid parent, int progress) + { + provider.Commands.UpdateRecord(parent, new AzurePipelinesRecordData {Progress = progress, Status = AzurePipelinesTaskStatus.InProgress}); + } + + internal static bool IsRunningOnPipelines(this Common.Build.BuildSystem b) => b.IsRunningOnAzurePipelines || b.IsRunningOnAzurePipelinesHosted; + } +} diff --git a/src/Cake.Module.Shared/Cake.Module.Shared.csproj b/src/Cake.Module.Shared/Cake.Module.Shared.csproj index 8a0a0997..d614c58d 100644 --- a/src/Cake.Module.Shared/Cake.Module.Shared.csproj +++ b/src/Cake.Module.Shared/Cake.Module.Shared.csproj @@ -14,7 +14,7 @@ - - + + diff --git a/src/Cake.MyGet.Module/Cake.MyGet.Module.csproj b/src/Cake.MyGet.Module/Cake.MyGet.Module.csproj index fd605b17..35349b61 100644 --- a/src/Cake.MyGet.Module/Cake.MyGet.Module.csproj +++ b/src/Cake.MyGet.Module/Cake.MyGet.Module.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/src/Cake.TFBuild.Module/Extensions.cs b/src/Cake.TFBuild.Module/Extensions.cs deleted file mode 100644 index 74cc9180..00000000 --- a/src/Cake.TFBuild.Module/Extensions.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Cake.Common.Build.TFBuild; -using Cake.Common.Build.TFBuild.Data; - -namespace Cake.TFBuild.Module -{ - public static class Extensions - { - public static void UpdateProgress(this ITFBuildProvider provider, Guid parent, int progress) - { - provider.Commands.UpdateRecord(parent, new TFBuildRecordData {Progress = progress, Status = TFBuildTaskStatus.InProgress}); - } - - internal static bool IsRunningOnPipelines(this Common.Build.BuildSystem b) => b.IsRunningOnAzurePipelines || b.IsRunningOnAzurePipelinesHosted; - } -} diff --git a/src/Cake.TFBuild.Module/TFBuildModule.cs b/src/Cake.TFBuild.Module/TFBuildModule.cs deleted file mode 100644 index 92d1844d..00000000 --- a/src/Cake.TFBuild.Module/TFBuildModule.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Cake.Core; -using Cake.Core.Annotations; -using Cake.Core.Composition; -using Cake.Core.Diagnostics; - -[assembly: CakeModule(typeof(Cake.TFBuild.Module.TFBuildModule))] - -namespace Cake.TFBuild.Module -{ - public class TFBuildModule : ICakeModule - { - public void Register(ICakeContainerRegistrar registrar) - { - if (!string.IsNullOrWhiteSpace(System.Environment.GetEnvironmentVariable("TF_BUILD"))) - { - registrar.RegisterType().As().Singleton(); - registrar.RegisterType().As().Singleton(); - registrar.RegisterType().As().Singleton(); - } - } - } -} \ No newline at end of file diff --git a/src/Cake.TeamCity.Module/Cake.TeamCity.Module.csproj b/src/Cake.TeamCity.Module/Cake.TeamCity.Module.csproj index fca6e36f..52e67d22 100644 --- a/src/Cake.TeamCity.Module/Cake.TeamCity.Module.csproj +++ b/src/Cake.TeamCity.Module/Cake.TeamCity.Module.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/src/Cake.TeamCity.Module/TeamCityModule.cs b/src/Cake.TeamCity.Module/TeamCityModule.cs index e659e308..8bf26cfc 100644 --- a/src/Cake.TeamCity.Module/TeamCityModule.cs +++ b/src/Cake.TeamCity.Module/TeamCityModule.cs @@ -16,7 +16,7 @@ public void Register(ICakeContainerRegistrar registrar) { registrar.RegisterType().As().Singleton(); registrar.RegisterType().As().Singleton(); - //registrar.RegisterType().As().Singleton(); + //registrar.RegisterType().As().Singleton(); } } } diff --git a/src/Cake.TravisCI.Module/Cake.TravisCI.Module.csproj b/src/Cake.TravisCI.Module/Cake.TravisCI.Module.csproj index 1fd9bbd6..97b3d92a 100644 --- a/src/Cake.TravisCI.Module/Cake.TravisCI.Module.csproj +++ b/src/Cake.TravisCI.Module/Cake.TravisCI.Module.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/src/Cake.TravisCI.Module/TravisCIModule.cs b/src/Cake.TravisCI.Module/TravisCIModule.cs index 3bbffa91..8f56b0d0 100644 --- a/src/Cake.TravisCI.Module/TravisCIModule.cs +++ b/src/Cake.TravisCI.Module/TravisCIModule.cs @@ -17,7 +17,7 @@ public void Register(ICakeContainerRegistrar registrar) { registrar.RegisterType().As().Singleton(); registrar.RegisterType().As().Singleton(); - //registrar.RegisterType().As().Singleton(); + //registrar.RegisterType().As().Singleton(); } } } diff --git a/tools/packages.config b/tools/packages.config index 9fc114d4..218f0a47 100644 --- a/tools/packages.config +++ b/tools/packages.config @@ -1,4 +1,4 @@ - +