@@ -7,6 +7,9 @@ import * as gulp from 'gulp';
7
7
import * as fs from 'fs' ;
8
8
import minimist from 'minimist' ;
9
9
import { Octokit } from '@octokit/rest' ;
10
+ import { allNugetPackages , NugetPackageInfo , platformSpecificPackages } from './offlinePackagingTasks' ;
11
+ import { PlatformInformation } from '../src/shared/platform' ;
12
+ import path from 'path' ;
10
13
11
14
interface Options {
12
15
releaseVersion : string ;
@@ -15,16 +18,65 @@ interface Options {
15
18
dryRun : string ;
16
19
}
17
20
18
- gulp . task ( 'createTags' , async ( ) : Promise < void > => {
21
+ gulp . task ( 'createTags' , gulp . series ( 'createTags:roslyn' , 'createTags:razor' , 'createTags:vscode-csharp' ) ) ;
22
+
23
+ gulp . task ( 'createTags:roslyn' , async ( ) : Promise < void > => {
24
+ const options = minimist < Options > ( process . argv . slice ( 2 ) ) ;
25
+
26
+ return createTagsAsync (
27
+ options ,
28
+ 'dotnet' ,
29
+ 'roslyn' ,
30
+ async ( ) => getCommitFromNugetAsync ( allNugetPackages . roslyn ) ,
31
+ ( releaseVersion : string ) : [ string , string ] => [
32
+ `v${ releaseVersion } ` ,
33
+ `${ releaseVersion } VSCode C# extension release` ,
34
+ ]
35
+ ) ;
36
+ } ) ;
37
+
38
+ gulp . task ( 'createTags:razor' , async ( ) : Promise < void > => {
39
+ const options = minimist < Options > ( process . argv . slice ( 2 ) ) ;
40
+
41
+ return createTagsAsync (
42
+ options ,
43
+ 'dotnet' ,
44
+ 'razor' ,
45
+ async ( ) => getCommitFromNugetAsync ( allNugetPackages . razor ) ,
46
+ ( releaseVersion : string ) : [ string , string ] => [
47
+ `VSCode-CSharp-${ releaseVersion } ` ,
48
+ `${ releaseVersion } VSCode C# extension release` ,
49
+ ]
50
+ ) ;
51
+ } ) ;
52
+
53
+ gulp . task ( 'createTags:vscode-csharp' , async ( ) : Promise < void > => {
19
54
const options = minimist < Options > ( process . argv . slice ( 2 ) ) ;
55
+
56
+ return createTagsAsync (
57
+ options ,
58
+ 'dotnet' ,
59
+ 'vscode-csharp' ,
60
+ async ( ) => options . releaseCommit ,
61
+ ( releaseVersion : string ) : [ string , string ] => [ `v${ releaseVersion } ` , releaseVersion ]
62
+ ) ;
63
+ } ) ;
64
+
65
+ async function createTagsAsync (
66
+ options : Options ,
67
+ owner : string ,
68
+ repo : string ,
69
+ getCommit : ( ) => Promise < string | null > ,
70
+ getTagAndMessage : ( releaseVersion : string ) => [ string , string ]
71
+ ) : Promise < void > {
20
72
console . log ( `releaseVersion: ${ options . releaseVersion } ` ) ;
21
73
console . log ( `releaseCommit: ${ options . releaseCommit } ` ) ;
22
74
const dryRun = options . dryRun . toLocaleLowerCase ( ) === 'true' ;
23
75
console . log ( `dry run: ${ dryRun } ` ) ;
24
76
25
- const roslynCommit = await findRoslynCommitAsync ( ) ;
26
- if ( ! roslynCommit ) {
27
- logError ( 'Failed to find roslyn commit.' ) ;
77
+ const commit = await getCommit ( ) ;
78
+ if ( ! commit ) {
79
+ logError ( 'Failed to find commit.' ) ;
28
80
return ;
29
81
}
30
82
@@ -33,68 +85,16 @@ gulp.task('createTags', async (): Promise<void> => {
33
85
console . log ( 'Tagging is skipped in dry run mode.' ) ;
34
86
return ;
35
87
} else {
36
- const tagCreatedInRoslyn = await tagRepoAsync (
37
- 'dotnet' ,
38
- 'roslyn' ,
39
- roslynCommit ,
40
- `VSCode-CSharp-${ options . releaseVersion } ` ,
41
- `${ options . releaseVersion } VSCode C# extension release`
42
- ) ;
43
-
44
- if ( ! tagCreatedInRoslyn ) {
45
- logError ( 'Failed to tag roslyn' ) ;
46
- return ;
47
- }
48
-
49
- console . log ( 'tag created in roslyn' ) ;
50
-
51
- const tagCreatedInVsCodeCsharp = await tagRepoAsync (
52
- 'dotnet' ,
53
- 'vscode-csharp' ,
54
- options . releaseCommit ,
55
- `v${ options . releaseVersion } ` ,
56
- options . releaseVersion
57
- ) ;
88
+ const [ tag , message ] = getTagAndMessage ( options . releaseVersion ) ;
89
+ const tagCreated = await tagRepoAsync ( owner , repo , commit , tag , message ) ;
58
90
59
- if ( ! tagCreatedInVsCodeCsharp ) {
60
- logError ( ' Failed to tag vscode-csharp' ) ;
91
+ if ( ! tagCreated ) {
92
+ logError ( ` Failed to tag ' ${ owner } / ${ repo } '` ) ;
61
93
return ;
62
94
}
63
95
64
- console . log ( 'tag created in vscode-csharp' ) ;
65
- }
66
- } ) ;
67
-
68
- async function findRoslynCommitAsync ( ) : Promise < string | null > {
69
- const packageJsonString = fs . readFileSync ( './package.json' ) . toString ( ) ;
70
- const packageJson = JSON . parse ( packageJsonString ) ;
71
- const roslynVersion = packageJson [ 'defaults' ] [ 'roslyn' ] ;
72
- if ( ! roslynVersion ) {
73
- logError ( "Can't find roslyn version in package.json" ) ;
74
- return null ;
75
- }
76
-
77
- console . log ( `Roslyn version is ${ roslynVersion } ` ) ;
78
- // Nuget package should exist under out/.nuget/ since we have run the install dependencies task.
79
- const nuspecFile = fs
80
- . readFileSync (
81
- `out/.nuget/microsoft.codeanalysis.languageserver.linux-x64/${ roslynVersion } /microsoft.codeanalysis.languageserver.linux-x64.nuspec`
82
- )
83
- . toString ( ) ;
84
- const results = / c o m m i t = " ( .* ) " / . exec ( nuspecFile ) ;
85
- if ( results == null || results . length == 0 ) {
86
- logError ( 'Failed to find commit number from nuspec file' ) ;
87
- return null ;
88
- }
89
-
90
- if ( results . length != 2 ) {
91
- logError ( 'Unexpected regex match result from nuspec file.' ) ;
92
- return null ;
96
+ console . log ( `tag created in '${ owner } /${ repo } '` ) ;
93
97
}
94
-
95
- const commitNumber = results [ 1 ] ;
96
- console . log ( `commitNumber is ${ commitNumber } ` ) ;
97
- return commitNumber ;
98
98
}
99
99
100
100
async function tagRepoAsync (
@@ -144,3 +144,50 @@ async function tagRepoAsync(
144
144
function logError ( message : string ) : void {
145
145
console . log ( `##vso[task.logissue type=error]${ message } ` ) ;
146
146
}
147
+ async function getCommitFromNugetAsync ( packageInfo : NugetPackageInfo ) : Promise < string | null > {
148
+ const packageJsonString = fs . readFileSync ( './package.json' ) . toString ( ) ;
149
+ const packageJson = JSON . parse ( packageJsonString ) ;
150
+ const packageVersion = packageJson [ 'defaults' ] [ packageInfo . packageJsonName ] ;
151
+ if ( ! packageVersion ) {
152
+ logError ( "Can't find razor version in package.json" ) ;
153
+ return null ;
154
+ }
155
+
156
+ const platform = await PlatformInformation . GetCurrent ( ) ;
157
+ const vsixPlatformInfo = platformSpecificPackages . find (
158
+ ( p ) => p . platformInfo . platform === platform . platform && p . platformInfo . architecture === platform . architecture
159
+ ) ! ;
160
+
161
+ const packageName = packageInfo . getPackageName ( vsixPlatformInfo ) ;
162
+ console . log ( `${ packageName } version is ${ packageVersion } ` ) ;
163
+
164
+ // Nuget package should exist under out/.nuget/ since we have run the install dependencies task.
165
+ const packageDir = path . join ( 'out' , '.nuget' , packageName , packageVersion ) ;
166
+ const nuspecFiles = fs . readdirSync ( packageDir ) . filter ( ( file ) => file . endsWith ( '.nuspec' ) ) ;
167
+
168
+ if ( nuspecFiles . length === 0 ) {
169
+ logError ( `No .nuspec file found in ${ packageDir } ` ) ;
170
+ return null ;
171
+ }
172
+
173
+ if ( nuspecFiles . length > 1 ) {
174
+ logError ( `Multiple .nuspec files found in ${ packageDir } ` ) ;
175
+ return null ;
176
+ }
177
+
178
+ const nuspecFile = fs . readFileSync ( nuspecFiles [ 0 ] ) . toString ( ) ;
179
+ const results = / c o m m i t = " ( .* ) " / . exec ( nuspecFile ) ;
180
+ if ( results == null || results . length == 0 ) {
181
+ logError ( 'Failed to find commit number from nuspec file' ) ;
182
+ return null ;
183
+ }
184
+
185
+ if ( results . length != 2 ) {
186
+ logError ( 'Unexpected regex match result from nuspec file.' ) ;
187
+ return null ;
188
+ }
189
+
190
+ const commitNumber = results [ 1 ] ;
191
+ console . log ( `commitNumber is ${ commitNumber } ` ) ;
192
+ return commitNumber ;
193
+ }
0 commit comments