1
- using System . Diagnostics . CodeAnalysis ;
1
+ using System . Collections . Generic ;
2
+ using System . Diagnostics . CodeAnalysis ;
3
+ using System . Linq ;
4
+
2
5
using JetBrains . Annotations ;
3
- using Nuke . Common . CI . AzurePipelines ;
6
+
4
7
using Nuke . Common . CI . AzurePipelines . Configuration ;
8
+ using Nuke . Common . CI . AzurePipelines ;
9
+ using Nuke . Common . CI ;
5
10
using Nuke . Common . Execution ;
6
11
using Nuke . Common . Tooling ;
7
- using System . Linq ;
8
- using Nuke . Common . Utilities ;
9
12
using Nuke . Common . Utilities . Collections ;
13
+ using Nuke . Common . Utilities ;
14
+ using Nuke . Common ;
10
15
11
16
[ SuppressMessage ( "ReSharper" , "CheckNamespace" ) ]
12
17
public class FixedAzurePipelinesAttribute : AzurePipelinesAttribute
@@ -16,6 +21,24 @@ public FixedAzurePipelinesAttribute([CanBeNull] string suffix, AzurePipelinesIma
16
21
{
17
22
}
18
23
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
+
19
42
protected override AzurePipelinesJob GetJob ( ExecutableTarget executableTarget , LookupTable < ExecutableTarget , AzurePipelinesJob > jobs )
20
43
{
21
44
var job = base . GetJob ( executableTarget , jobs ) ;
@@ -34,20 +57,23 @@ from pub in dep.PublishArtifacts
34
57
PartitionName = job . PartitionName ,
35
58
InvokedTargets = job . InvokedTargets ,
36
59
PublishArtifacts = job . PublishArtifacts ,
37
- DownloadArtifacts = downloads
60
+ DownloadArtifacts = downloads ,
61
+ ExtraArgs = job . Name == "Publish" ? " --api-key $(ApiKey)" : ""
38
62
} ;
39
63
}
40
64
}
41
65
42
66
class FixedAzurePipelinesJob : AzurePipelinesJob {
67
+ public string ExtraArgs { get ; set ; }
68
+
43
69
protected override void WriteSteps ( CustomFileWriter writer )
44
70
{
45
71
DownloadArtifacts . ForEach ( x =>
46
72
{
47
- using ( writer . WriteBlock ( "- task: DownloadBuildArtifacts@0" ) )
73
+ using ( AzurePipelinesCustomWriterExtensions . WriteBlock ( writer , "- task: DownloadBuildArtifacts@0" ) )
48
74
{
49
75
writer . WriteLine ( "displayName: Download Artifacts" ) ;
50
- using ( writer . WriteBlock ( "inputs:" ) )
76
+ using ( AzurePipelinesCustomWriterExtensions . WriteBlock ( writer , "inputs:" ) )
51
77
{
52
78
string [ ] parts = x . Split ( '/' ) ;
53
79
var path = parts . SkipLast ( 1 ) . Join ( '/' ) . SingleQuote ( ) ;
@@ -59,6 +85,28 @@ protected override void WriteSteps(CustomFileWriter writer)
59
85
}
60
86
} ) ;
61
87
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
+ } ) ;
63
111
}
64
112
}
0 commit comments