diff options
author | Fabio Berger <me@fabioberger.com> | 2018-04-19 10:40:22 +0800 |
---|---|---|
committer | Fabio Berger <me@fabioberger.com> | 2018-04-19 10:40:22 +0800 |
commit | 7dd3b2d38b4e4ee2f1daa24c90f503b2e7ad0422 (patch) | |
tree | a768031f546dea84718455ac2465c4edcde5096d /packages/monorepo-scripts/src/remove_tags.ts | |
parent | 62fcb51e1a9893b8d18536eefc9497d6c1f36c39 (diff) | |
download | dexon-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.ts | 56 |
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); +}); |