Skip to content

Commit d7ec53b

Browse files
committed
Add automated publishing for windows. Remove extra steps for other platforms
1 parent f88a0f5 commit d7ec53b

File tree

3 files changed

+87
-34
lines changed

3 files changed

+87
-34
lines changed

azure-pipelines.yml

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,6 @@ stages:
5757
inputs:
5858
artifactName: coverage-report.zip
5959
pathtoPublish: 'artifacts/coverage-report.zip'
60-
- job: Pack
61-
displayName: 'Pack'
62-
dependsOn: [ Compile ]
63-
steps:
64-
- task: CmdLine@2
65-
inputs:
66-
script: './build.cmd Pack --skip'
67-
- task: PublishBuildArtifacts@1
68-
inputs:
69-
artifactName: packages
70-
pathtoPublish: 'artifacts/packages'
7160
- stage: windows_latest
7261
displayName: 'windows-latest'
7362
dependsOn: [ ]
@@ -121,6 +110,27 @@ stages:
121110
inputs:
122111
artifactName: packages
123112
pathtoPublish: 'artifacts/packages'
113+
- job: Publish
114+
displayName: 'Publish'
115+
dependsOn: [ Test, Pack ]
116+
steps:
117+
- task: DownloadBuildArtifacts@0
118+
displayName: Download Artifacts
119+
inputs:
120+
buildType: 'current'
121+
downloadType: 'single'
122+
artifactName: test-results
123+
downloadPath: 'artifacts'
124+
- task: DownloadBuildArtifacts@0
125+
displayName: Download Artifacts
126+
inputs:
127+
buildType: 'current'
128+
downloadType: 'single'
129+
artifactName: packages
130+
downloadPath: 'artifacts'
131+
- task: CmdLine@2
132+
inputs:
133+
script: './build.cmd Publish --skip --api-key $(ApiKey)'
124134
- stage: macOS_latest
125135
displayName: 'macOS-latest'
126136
dependsOn: [ ]
@@ -163,14 +173,3 @@ stages:
163173
inputs:
164174
artifactName: coverage-report.zip
165175
pathtoPublish: 'artifacts/coverage-report.zip'
166-
- job: Pack
167-
displayName: 'Pack'
168-
dependsOn: [ Compile ]
169-
steps:
170-
- task: CmdLine@2
171-
inputs:
172-
script: './build.cmd Pack --skip'
173-
- task: PublishBuildArtifacts@1
174-
inputs:
175-
artifactName: packages
176-
pathtoPublish: 'artifacts/packages'

build/Build.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
AzurePipelinesImage.UbuntuLatest,
3333
AzurePipelinesImage.WindowsLatest,
3434
AzurePipelinesImage.MacOsLatest,
35-
InvokedTargets = new[] { nameof(Test), nameof(Pack) },
35+
InvokedTargets = new[] { nameof(Test), nameof(Publish) },
3636
NonEntryTargets = new[] { nameof(Restore) },
3737
ExcludedTargets = new[] { nameof(Clean) }
3838
)]
@@ -44,7 +44,7 @@ class Build : NukeBuild
4444
/// - Microsoft VisualStudio https://nuke.build/visualstudio
4545
/// - Microsoft VSCode https://nuke.build/vscode
4646

47-
public static int Main () => Execute<Build>(x => x.Compile);
47+
public static int Main () => Execute<Build>(x => x.Pack);
4848

4949
[CI] private readonly AzurePipelines AzurePipelines;
5050

@@ -65,6 +65,9 @@ class Build : NukeBuild
6565
AbsolutePath CoverageReportArchive => ArtifactsDirectory / "coverage-report.zip";
6666

6767
const string MasterBranch = "master";
68+
const string DevelopBranch = "develop";
69+
const string ReleaseBranchPrefix = "release";
70+
const string HotfixBranchPrefix = "hotfix";
6871

6972
Target Clean => _ => _
7073
.Before(Restore)
@@ -180,10 +183,13 @@ class Build : NukeBuild
180183
.Requires(() => ApiKey)
181184
.Requires(() => GitHasCleanWorkingCopy())
182185
.Requires(() => Configuration.Equals(Configuration.Release))
183-
.Requires(() => GitRepository.Branch.EqualsOrdinalIgnoreCase(MasterBranch))
186+
.Requires(() => GitRepository.Branch.EqualsOrdinalIgnoreCase(MasterBranch) ||
187+
GitRepository.Branch.EqualsOrdinalIgnoreCase(DevelopBranch) ||
188+
GitRepository.Branch.StartsWithOrdinalIgnoreCase(ReleaseBranchPrefix) ||
189+
GitRepository.Branch.StartsWithOrdinalIgnoreCase(HotfixBranchPrefix))
184190
.Executes(() =>
185191
{
186-
var packages = PackageDirectory.GlobFiles("*.nupkg");
192+
var packages = PackageDirectory.GlobFiles("*.nupkg").Where(x => !x.ToString().Contains("Benchmarks"));
187193
DotNetNuGetPush(_ => _
188194
.SetSource(Source)
189195
.SetApiKey(ApiKey)

build/FixedAzurePipelinesAttribute.cs

Lines changed: 56 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
using System.Diagnostics.CodeAnalysis;
1+
using System.Collections.Generic;
2+
using System.Diagnostics.CodeAnalysis;
3+
using System.Linq;
4+
25
using JetBrains.Annotations;
3-
using Nuke.Common.CI.AzurePipelines;
6+
47
using Nuke.Common.CI.AzurePipelines.Configuration;
8+
using Nuke.Common.CI.AzurePipelines;
9+
using Nuke.Common.CI;
510
using Nuke.Common.Execution;
611
using Nuke.Common.Tooling;
7-
using System.Linq;
8-
using Nuke.Common.Utilities;
912
using Nuke.Common.Utilities.Collections;
13+
using Nuke.Common.Utilities;
14+
using Nuke.Common;
1015

1116
[SuppressMessage("ReSharper", "CheckNamespace")]
1217
public class FixedAzurePipelinesAttribute : AzurePipelinesAttribute
@@ -16,6 +21,24 @@ public FixedAzurePipelinesAttribute([CanBeNull] string suffix, AzurePipelinesIma
1621
{
1722
}
1823

24+
public override ConfigurationEntity GetConfiguration(NukeBuild build, IReadOnlyCollection<ExecutableTarget> relevantTargets) =>
25+
FixStageJobs((AzurePipelinesConfiguration)base.GetConfiguration(build, relevantTargets));
26+
27+
static AzurePipelinesConfiguration FixStageJobs(AzurePipelinesConfiguration config)
28+
{
29+
config.Stages = config.Stages
30+
.Select(stage => stage.Name != "windows_latest" ? RemovePublishAndPackJobs(stage) : stage)
31+
.ToArray();
32+
33+
return config;
34+
}
35+
36+
static AzurePipelinesStage RemovePublishAndPackJobs(AzurePipelinesStage stage)
37+
{
38+
stage.Jobs = stage.Jobs.Where(job => job.Name != "Publish" && job.Name != "Pack").ToArray();
39+
return stage;
40+
}
41+
1942
protected override AzurePipelinesJob GetJob(ExecutableTarget executableTarget, LookupTable<ExecutableTarget, AzurePipelinesJob> jobs)
2043
{
2144
var job = base.GetJob(executableTarget, jobs);
@@ -34,20 +57,23 @@ from pub in dep.PublishArtifacts
3457
PartitionName = job.PartitionName,
3558
InvokedTargets = job.InvokedTargets,
3659
PublishArtifacts = job.PublishArtifacts,
37-
DownloadArtifacts = downloads
60+
DownloadArtifacts = downloads,
61+
ExtraArgs = job.Name == "Publish" ? " --api-key $(ApiKey)" : ""
3862
};
3963
}
4064
}
4165

4266
class FixedAzurePipelinesJob : AzurePipelinesJob {
67+
public string ExtraArgs { get; set; }
68+
4369
protected override void WriteSteps(CustomFileWriter writer)
4470
{
4571
DownloadArtifacts.ForEach(x =>
4672
{
47-
using (writer.WriteBlock("- task: DownloadBuildArtifacts@0"))
73+
using (AzurePipelinesCustomWriterExtensions.WriteBlock(writer, "- task: DownloadBuildArtifacts@0"))
4874
{
4975
writer.WriteLine("displayName: Download Artifacts");
50-
using (writer.WriteBlock("inputs:"))
76+
using (AzurePipelinesCustomWriterExtensions.WriteBlock(writer, "inputs:"))
5177
{
5278
string[] parts = x.Split('/');
5379
var path = parts.SkipLast(1).Join('/').SingleQuote();
@@ -59,6 +85,28 @@ protected override void WriteSteps(CustomFileWriter writer)
5985
}
6086
});
6187

62-
base.WriteSteps(writer);
88+
using (writer.WriteBlock("- task: CmdLine@2"))
89+
{
90+
var arguments = $"{InvokedTargets.JoinSpace()} --skip";
91+
if (PartitionName != null)
92+
arguments += $" --test-partition $(System.JobPositionInPhase)";
93+
94+
using (writer.WriteBlock("inputs:"))
95+
{
96+
writer.WriteLine($"script: './{BuildCmdPath} {arguments}{ExtraArgs}'");
97+
}
98+
}
99+
100+
PublishArtifacts.ForEach(x =>
101+
{
102+
using (writer.WriteBlock("- task: PublishBuildArtifacts@1"))
103+
{
104+
using (writer.WriteBlock("inputs:"))
105+
{
106+
writer.WriteLine($"artifactName: {x.Split('/').Last()}");
107+
writer.WriteLine($"pathtoPublish: {x.SingleQuote()}");
108+
}
109+
}
110+
});
63111
}
64112
}

0 commit comments

Comments
 (0)