aboutsummaryrefslogtreecommitdiffstats
path: root/packages/monorepo-scripts/src/remove_tags.ts
diff options
context:
space:
mode:
authorFabio Berger <me@fabioberger.com>2018-04-19 10:40:22 +0800
committerFabio Berger <me@fabioberger.com>2018-04-19 10:40:22 +0800
commit7dd3b2d38b4e4ee2f1daa24c90f503b2e7ad0422 (patch)
treea768031f546dea84718455ac2465c4edcde5096d /packages/monorepo-scripts/src/remove_tags.ts
parent62fcb51e1a9893b8d18536eefc9497d6c1f36c39 (diff)
downloaddexon-sol-tools-7dd3b2d38b4e4ee2f1daa24c90f503b2e7ad0422.tar
dexon-sol-tools-7dd3b2d38b4e4ee2f1daa24c90f503b2e7ad0422.tar.gz
dexon-sol-tools-7dd3b2d38b4e4ee2f1daa24c90f503b2e7ad0422.tar.bz2
dexon-sol-tools-7dd3b2d38b4e4ee2f1daa24c90f503b2e7ad0422.tar.lz
dexon-sol-tools-7dd3b2d38b4e4ee2f1daa24c90f503b2e7ad0422.tar.xz
dexon-sol-tools-7dd3b2d38b4e4ee2f1daa24c90f503b2e7ad0422.tar.zst
dexon-sol-tools-7dd3b2d38b4e4ee2f1daa24c90f503b2e7ad0422.zip
Add removeGitTags script that can be run after a failed Lerna publish
Diffstat (limited to 'packages/monorepo-scripts/src/remove_tags.ts')
-rw-r--r--packages/monorepo-scripts/src/remove_tags.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/packages/monorepo-scripts/src/remove_tags.ts b/packages/monorepo-scripts/src/remove_tags.ts
new file mode 100644
index 000000000..a91c6ec39
--- /dev/null
+++ b/packages/monorepo-scripts/src/remove_tags.ts
@@ -0,0 +1,56 @@
+#!/usr/bin/env node
+
+import lernaGetPackages = require('lerna-get-packages');
+import * as _ from 'lodash';
+import * as path from 'path';
+import { exec as execAsync } from 'promisify-child-process';
+import semverSort = require('semver-sort');
+
+import { constants } from './constants';
+import { Changelog } from './types';
+import { utils } from './utils';
+
+(async () => {
+ const shouldIncludePrivate = true;
+ const updatedPublicLernaPackages = await utils.getUpdatedLernaPackagesAsync(shouldIncludePrivate);
+
+ for (const lernaPackage of updatedPublicLernaPackages) {
+ const packageName = lernaPackage.package.name;
+ const currentVersion = lernaPackage.package.version;
+ const changelogJSONPath = path.join(lernaPackage.location, 'CHANGELOG.json');
+ const changelogJSONIfExists = utils.getChangelogJSONIfExists(changelogJSONPath);
+
+ let latestChangelogVersion: string;
+ if (!_.isUndefined(changelogJSONIfExists)) {
+ let changelogs: Changelog[];
+ try {
+ changelogs = JSON.parse(changelogJSONIfExists);
+ } catch (err) {
+ throw new Error(
+ `${lernaPackage.package.name}'s CHANGELOG.json contains invalid JSON. Please fix and try again.`,
+ );
+ }
+ latestChangelogVersion = changelogs[0].version;
+ } else {
+ latestChangelogVersion = utils.getNextPatchVersion(currentVersion);
+ }
+
+ const sortedVersions = semverSort.desc([latestChangelogVersion, currentVersion]);
+ if (sortedVersions[0] === latestChangelogVersion && latestChangelogVersion !== currentVersion) {
+ const tagName = `${packageName}@${latestChangelogVersion}`;
+ try {
+ await execAsync(`git tag -d ${tagName}`, { cwd: constants.monorepoRootPath });
+ utils.log(`removed tag: ${tagName}`);
+ } catch (err) {
+ if (_.includes(err.message, 'not found')) {
+ utils.log(`Could not find tag: ${tagName}`);
+ } else {
+ throw err;
+ }
+ }
+ }
+ }
+})().catch(err => {
+ utils.log(err);
+ process.exit(1);
+});