From 2589114ed647fc63f0501be95f9dcdff794ddffa Mon Sep 17 00:00:00 2001 From: rokklobster <37376850+rokklobster@users.noreply.github.com> Date: Wed, 19 Oct 2022 15:16:24 +0300 Subject: [PATCH] feat: allow to skip publishing duplicate package (#776) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: allow to skip publishing duplicate package * Update src/main.ts * Update src/publish.ts * Update src/publish.ts * Update src/publish.ts Co-authored-by: João Moreno --- src/main.ts | 3 +++ src/publish.ts | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 2e37e18b..2240b00f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -197,6 +197,7 @@ module.exports = function (argv: string[]): void { .option('--pre-release', 'Mark this package as a pre-release') .option('--allow-star-activation', 'Allow using * in activation events') .option('--allow-missing-repository', 'Allow missing a repository URL in package.json') + .option('--skip-duplicate', 'Fail silently if version already exists on the marketplace') .action( ( version, @@ -218,6 +219,7 @@ module.exports = function (argv: string[]): void { preRelease, allowStarActivation, allowMissingRepository, + skipDuplicate, } ) => main( @@ -240,6 +242,7 @@ module.exports = function (argv: string[]): void { preRelease, allowStarActivation, allowMissingRepository, + skipDuplicate, }) ) ); diff --git a/src/publish.ts b/src/publish.ts index 8c0ea447..f1fc1bbf 100644 --- a/src/publish.ts +++ b/src/publish.ts @@ -57,6 +57,7 @@ export interface IPublishOptions { readonly preRelease?: boolean; readonly allowStarActivation?: boolean; readonly allowMissingRepository?: boolean; + readonly skipDuplicate?: boolean; } export async function publish(options: IPublishOptions = {}): Promise { @@ -123,6 +124,7 @@ export interface IInternalPublishOptions { readonly target?: string; readonly pat?: string; readonly noVerify?: boolean; + readonly skipDuplicate?: boolean; } async function _publish(packagePath: string, manifest: Manifest, options: IInternalPublishOptions) { @@ -170,6 +172,10 @@ async function _publish(packagePath: string, manifest: Manifest, options: IInter const sameVersion = extension.versions.filter(v => v.version === manifest.version); if (sameVersion.length > 0) { + if (options.skipDuplicate) { + log.done(`Version ${manifest.version} is already published. Skipping publish.`); + return; + } if (!options.target) { throw new Error(`${description} already exists.`); } @@ -187,7 +193,12 @@ async function _publish(packagePath: string, manifest: Manifest, options: IInter await api.updateExtension(undefined, packageStream, manifest.publisher, manifest.name); } catch (err: any) { if (err.statusCode === 409) { - throw new Error(`${description} already exists.`); + if (options.skipDuplicate) { + log.done(`Version ${manifest.version} is already published. Skipping publish.`); + return; + } else { + throw new Error(`${description} already exists.`); + } } else { throw err; }