@@ -83,6 +83,10 @@ const { values: rawOptions } = parseArgs({
83
83
*/
84
84
const options = /** @type {Options } */ ( rawOptions ) ;
85
85
86
+ if ( options . forRelease && ! options . setPrerelease ) {
87
+ throw new Error ( "forRelease requires setPrerelease" ) ;
88
+ }
89
+
86
90
const defaultGoBuildTags = [
87
91
...( options . noembed ? [ "noembed" ] : [ ] ) ,
88
92
] ;
@@ -1153,7 +1157,24 @@ export const packNativePreviewExtensions = task({
1153
1157
1154
1158
await $ ( { cwd : extensionDir } ) `npm run bundle` ;
1155
1159
1156
- const version = getVersion ( ) ;
1160
+ let version = "0.0.0" ;
1161
+ if ( options . forRelease ) {
1162
+ // No real semver prerelease versioning.
1163
+ // https://code.visualstudio.com/api/working-with-extensions/publishing-extension#prerelease-extensions
1164
+ assert ( options . setPrerelease , "forRelease is true but setPrerelease is not set" ) ;
1165
+ const prerelease = options . setPrerelease ;
1166
+ assert ( typeof prerelease === "string" , "setPrerelease is not a string" ) ;
1167
+ // parse `dev.<number>.<number>`.
1168
+ const match = prerelease . match ( / d e v \. ( \d + ) \. ( \d + ) / ) ;
1169
+ if ( ! match ) {
1170
+ throw new Error ( `Prerelease version should be in the form of dev.<number>.<number>, but got ${ prerelease } ` ) ;
1171
+ }
1172
+ // Set version to `0.<number>.<number>`.
1173
+ version = `0.${ match [ 1 ] } .${ match [ 2 ] } ` ;
1174
+ }
1175
+
1176
+ console . log ( "Version:" , version ) ;
1177
+
1157
1178
const platforms = nativePreviewPlatforms ( ) ;
1158
1179
1159
1180
await Promise . all ( platforms . map ( async ( { npmDir, vscodeTarget, extensionDir : thisExtensionDir , vsixPath, vsixManifestPath, vsixSignaturePath } ) => {
0 commit comments