aboutsummaryrefslogtreecommitdiffstats
path: root/packages/monorepo-scripts/src/remove_tags.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/monorepo-scripts/src/remove_tags.ts')
-rw-r--r--packages/monorepo-scripts/src/remove_tags.ts58
1 files changed, 58 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..6d09729c7
--- /dev/null
+++ b/packages/monorepo-scripts/src/remove_tags.ts
@@ -0,0 +1,58 @@
+#!/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');
+ // Private packages don't have changelogs, and their versions are always incremented
+ // by a patch version.
+ 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);
+});