1
1
using System ;
2
2
using System . IO ;
3
- using System . Linq ;
4
- using McMaster . Extensions . CommandLineUtils ;
5
3
using static Bullseye . Targets ;
6
4
using static SimpleExec . Command ;
7
5
8
6
namespace build
9
7
{
10
- class Program
8
+ internal static class Program
11
9
{
10
+ private const string packOutput = "./artifacts" ;
11
+ private const string envVarMissing = " environment variable is missing. Aborting." ;
12
+
12
13
private static class Targets
13
14
{
15
+ public const string RestoreTools = "restore-tools" ;
16
+ public const string CleanBuildOutput = "clean-build-output" ;
17
+ public const string CleanPackOutput = "clean-pack-output" ;
14
18
public const string Build = "build" ;
15
19
public const string Test = "test" ;
16
20
public const string Pack = "pack" ;
21
+ public const string SignBinary = "sign-binary" ;
22
+ public const string SignPackage = "sign-package" ;
17
23
}
18
24
19
- static string BinaryToSign = "IdentityServer4.AccessTokenValidation.dll" ;
20
-
21
-
22
- static void Main ( string [ ] args )
25
+ internal static void Main ( string [ ] args )
23
26
{
24
- var app = new CommandLineApplication ( throwOnUnexpectedArg : false ) ;
25
- var sign = app . Option < ( bool hasValue , int theValue ) > ( "--sign" , "Sign binaries and nuget package" , CommandOptionType . SingleOrNoValue ) ;
27
+ Target ( Targets . RestoreTools , ( ) =>
28
+ {
29
+ Run ( "dotnet" , "tool restore" ) ;
30
+ } ) ;
26
31
27
- CleanArtifacts ( ) ;
32
+ Target ( Targets . CleanBuildOutput , ( ) =>
33
+ {
34
+ Run ( "dotnet" , "clean -c Release -v m --nologo" ) ;
35
+ } ) ;
28
36
29
- app . OnExecute ( ( ) =>
37
+ Target ( Targets . Build , DependsOn ( Targets . CleanBuildOutput ) , ( ) =>
30
38
{
31
- Target ( Targets . Build , ( ) =>
32
- {
33
- Run ( "dotnet" , $ "build -c Release") ;
39
+ Run ( "dotnet" , "build -c Release --nologo" ) ;
40
+ } ) ;
34
41
35
- if ( sign . HasValue ( ) )
36
- {
37
- Sign ( BinaryToSign , "./src/bin/release" ) ;
38
- }
39
- } ) ;
42
+ Target ( Targets . SignBinary , DependsOn ( Targets . Build , Targets . RestoreTools ) , ( ) =>
43
+ {
44
+ Sign ( "./src/bin/Release" , "IdentityServer4.AccessTokenValidation.dll" ) ;
45
+ } ) ;
40
46
41
- Target ( Targets . Test , DependsOn ( Targets . Build ) , ( ) =>
42
- {
43
- Run ( "dotnet" , $ "test -c Release --no-build") ;
44
- } ) ;
45
-
46
- Target ( Targets . Pack , DependsOn ( Targets . Test ) , ( ) =>
47
- {
48
- var project = Directory . GetFiles ( "./src" , "*.csproj" , SearchOption . TopDirectoryOnly ) . First ( ) ;
47
+ Target ( Targets . Test , DependsOn ( Targets . Build ) , ( ) =>
48
+ {
49
+ Run ( "dotnet" , "test -c Release --no-build --nologo" ) ;
50
+ } ) ;
49
51
50
- Run ( "dotnet" , $ "pack { project } -c Release -o ./artifacts --no-build" ) ;
51
-
52
- if ( sign . HasValue ( ) )
53
- {
54
- Sign ( "*.nupkg" , $ "./artifacts" ) ;
55
- }
56
- } ) ;
52
+ Target ( Targets . CleanPackOutput , ( ) =>
53
+ {
54
+ if ( Directory . Exists ( packOutput ) )
55
+ {
56
+ Directory . Delete ( packOutput , true ) ;
57
+ }
58
+ } ) ;
57
59
60
+ Target ( Targets . Pack , DependsOn ( Targets . Build , Targets . CleanPackOutput ) , ( ) =>
61
+ {
62
+ Run ( "dotnet" , $ "pack ./src/IdentityServer4.AccessTokenValidation.csproj -c Release -o { Directory . CreateDirectory ( packOutput ) . FullName } --no-build --nologo") ;
63
+ } ) ;
58
64
59
- Target ( "default" , DependsOn ( Targets . Test , Targets . Pack ) ) ;
60
- RunTargetsAndExit ( app . RemainingArguments ) ;
65
+ Target ( Targets . SignPackage , DependsOn ( Targets . Pack , Targets . RestoreTools ) , ( ) =>
66
+ {
67
+ Sign ( packOutput , "*.nupkg" ) ;
61
68
} ) ;
62
69
63
- app . Execute ( args ) ;
70
+ Target ( "default" , DependsOn ( Targets . Test , Targets . Pack ) ) ;
71
+
72
+ Target ( "sign" , DependsOn ( Targets . SignBinary , Targets . Test , Targets . SignPackage ) ) ;
73
+
74
+ RunTargetsAndExit ( args , ex => ex is SimpleExec . NonZeroExitCodeException || ex . Message . EndsWith ( envVarMissing ) ) ;
64
75
}
65
76
66
- private static void Sign ( string extension , string directory )
77
+ private static void Sign ( string path , string searchTerm )
67
78
{
68
79
var signClientConfig = Environment . GetEnvironmentVariable ( "SignClientConfig" ) ;
69
80
var signClientSecret = Environment . GetEnvironmentVariable ( "SignClientSecret" ) ;
70
81
71
82
if ( string . IsNullOrWhiteSpace ( signClientConfig ) )
72
83
{
73
- throw new Exception ( "SignClientConfig environment variable is missing. Aborting. " ) ;
84
+ throw new Exception ( $ "SignClientConfig{ envVarMissing } ") ;
74
85
}
75
86
76
87
if ( string . IsNullOrWhiteSpace ( signClientSecret ) )
77
88
{
78
- throw new Exception ( "SignClientSecret environment variable is missing. Aborting. " ) ;
89
+ throw new Exception ( $ "SignClientSecret{ envVarMissing } ") ;
79
90
}
80
91
81
- var files = Directory . GetFiles ( directory , extension , SearchOption . AllDirectories ) ;
82
- if ( files . Count ( ) == 0 )
92
+ foreach ( var file in Directory . GetFiles ( path , searchTerm , SearchOption . AllDirectories ) )
83
93
{
84
- throw new Exception ( $ "File to sign not found: { extension } ") ;
85
- }
86
-
87
- foreach ( var file in files )
88
- {
89
- Console . WriteLine ( " Signing " + file ) ;
94
+ Console . WriteLine ( $ " Signing { file } ") ;
90
95
Run ( "dotnet" , $ "SignClient sign -c { signClientConfig } -i { file } -r [email protected] -s \" { signClientSecret } \" -n 'IdentityServer4'", noEcho : true ) ;
91
96
}
92
97
}
93
-
94
- private static void CleanArtifacts ( )
95
- {
96
- Directory . CreateDirectory ( $ "./artifacts") ;
97
-
98
- foreach ( var file in Directory . GetFiles ( $ "./artifacts") )
99
- {
100
- File . Delete ( file ) ;
101
- }
102
- }
103
98
}
104
- }
99
+ }
0 commit comments