X Tutup
Skip to content

Commit d96c8b3

Browse files
committed
adding utility to check if a git tag exists, rather than just checking if a version is published to an npm feed to make tagging more robust
1 parent 2257123 commit d96c8b3

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

apps/rush-lib/src/cli/actions/PublishAction.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -324,18 +324,20 @@ export class PublishAction extends BaseRushAction {
324324
return;
325325
}
326326

327-
// Do not tag packages that already exist. This will fail with a fatal error.
328-
if (this._packageExists(packageConfig)) {
327+
// Do not create a new tag if one already exists, this will result in a fatal error
328+
if (git.hasTag(packageConfig)) {
329+
console.log(`Not tagging ${packageName}@${packageConfig.packageJson.version}. A tag already exists for this version.`);
329330
return;
330331
}
331332

332-
git.addTag(!!this._publish.value && !this._registryUrl.value, packageName, packageConfig.packageJson.version);
333+
git.addTag(!!this._publish.value, packageName, packageConfig.packageJson.version);
333334
updated = true;
334335
};
335336

336337
if (this._pack.value) {
337338
// packs to tarball instead of publishing to NPM repository
338339
this._npmPack(packageName, packageConfig);
340+
// Do not tag packages that already exist. This will fail with a fatal error.
339341
applyTag(this._applyGitTagsOnPack.value);
340342
} else if (this._force.value || !this._packageExists(packageConfig)) {
341343
// Publish to npm repository

apps/rush-lib/src/logic/PublishGit.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// See LICENSE in the project root for license information.
33

44
import { PublishUtilities } from './PublishUtilities';
5+
import { Utilities } from '../utilities/Utilities';
6+
import { RushConfigurationProject } from '../api/RushConfigurationProject';
57

68
export class PublishGit {
79
private _targetBranch: string | undefined;
@@ -51,6 +53,19 @@ export class PublishGit {
5153
['tag', '-a', tagName, '-m', `${packageName} v${packageVersion}`]);
5254
}
5355

56+
public hasTag(packageConfig: RushConfigurationProject): boolean {
57+
const tagName: string = PublishUtilities.createTagname(packageConfig.packageName, packageConfig.packageJson.version);
58+
const tagOutput: string = Utilities.executeCommandAndCaptureOutput(
59+
'git',
60+
['tag', '-l', tagName],
61+
packageConfig.projectFolder,
62+
PublishUtilities.getEnvArgs(),
63+
true
64+
).replace(/(\r\n|\n|\r)/gm, '');
65+
66+
return tagOutput === tagName;
67+
}
68+
5469
public commit(commitMessage: string): void {
5570
PublishUtilities.execCommand(!!this._targetBranch, 'git', ['commit', '-m', commitMessage]);
5671
}

0 commit comments

Comments
 (0)
X Tutup