diff --git a/src/main.ts b/src/main.ts index 5e46e738..842ecd5f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -141,7 +141,7 @@ module.exports = function (argv: string[]): void { 'Personal Access Token (defaults to VSCE_PAT environment variable)', process.env['VSCE_PAT'] ) - .option('-t, --target ', 'Target architecture') + .option('-t, --target ', 'Target architectures') .option('-m, --message ', 'Commit message used when calling `npm version`.') .option('--no-git-tag-version', 'Do not create a version commit and tag when calling `npm version`.') .option('-i, --packagePath ', 'Publish the provided VSIX packages.') @@ -181,7 +181,7 @@ module.exports = function (argv: string[]): void { publish({ pat, version, - target, + targets: target, commitMessage: message, gitTagVersion, packagePath, diff --git a/src/publish.ts b/src/publish.ts index 47f36581..b817ba26 100644 --- a/src/publish.ts +++ b/src/publish.ts @@ -13,7 +13,7 @@ const tmpName = denodeify(tmp.tmpName); export interface IPublishOptions { readonly packagePath?: string[]; readonly version?: string; - readonly target?: string; + readonly targets?: string[]; readonly commitMessage?: string; readonly gitTagVersion?: boolean; readonly cwd?: string; @@ -32,7 +32,7 @@ export async function publish(options: IPublishOptions = {}): Promise { if (options.packagePath) { if (options.version) { throw new Error(`Both options not supported simultaneously: 'packagePath' and 'version'.`); - } else if (options.target) { + } else if (options.targets) { throw new Error(`Both options not supported simultaneously: 'packagePath' and 'target'.`); } @@ -51,13 +51,27 @@ export async function publish(options: IPublishOptions = {}): Promise { } else { await versionBump(options.cwd, options.version, options.commitMessage, options.gitTagVersion); - const packagePath = await tmpName(); - const packageResult = await pack({ ...options, packagePath }); - await _publish(packagePath, packageResult.manifest, options); + if (options.targets) { + for (const target of options.targets) { + const packagePath = await tmpName(); + const packageResult = await pack({ ...options, target, packagePath }); + await _publish(packagePath, packageResult.manifest, { ...options, target }); + } + } else { + const packagePath = await tmpName(); + const packageResult = await pack({ ...options, packagePath }); + await _publish(packagePath, packageResult.manifest, options); + } } } -async function _publish(packagePath: string, manifest: Manifest, options: IPublishOptions) { +export interface IInternalPublishOptions { + readonly target?: string; + readonly pat?: string; + readonly noVerify?: boolean; +} + +async function _publish(packagePath: string, manifest: Manifest, options: IInternalPublishOptions) { if (!options.noVerify && manifest.enableProposedApi) { throw new Error("Extensions using proposed API (enableProposedApi: true) can't be published to the Marketplace"); }