aboutsummaryrefslogtreecommitdiff
path: root/scripts/release.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/release.mjs')
-rw-r--r--scripts/release.mjs57
1 files changed, 57 insertions, 0 deletions
diff --git a/scripts/release.mjs b/scripts/release.mjs
new file mode 100644
index 0000000..afb25d3
--- /dev/null
+++ b/scripts/release.mjs
@@ -0,0 +1,57 @@
+import { $, argv } from 'zx';
+import { consola } from 'consola';
+import { rawCommitsToMarkdown } from './shared/commits.mjs';
+import { addToChangelog } from './shared/changelog.mjs';
+
+$.verbose = false;
+
+const isDryRun = argv['dry-run'] ?? false;
+
+const now = new Date();
+const currentShortSha = (await $`git rev-parse --short HEAD`).stdout.trim();
+
+const calver = now.toISOString().slice(0, 10).replace(/-/g, '.');
+const version = `${calver}-${currentShortSha}`;
+
+const { stdout: rawCommits } = await $`git log --pretty=oneline $(git describe --tags --abbrev=0)..HEAD`;
+
+const markdown = rawCommitsToMarkdown({ rawCommits });
+
+consola.info(`Changelog: \n\n${markdown}\n\n`);
+
+if (isDryRun) {
+ consola.info(`[dry-run] Not creating version nor tag`);
+ consola.info('Aborting');
+ process.exit(0);
+}
+
+const shouldContinue = await consola.prompt(
+ 'This script will create a new version and tag, and update the changelog. Continue?',
+ {
+ type: 'confirm',
+ },
+);
+
+if (!shouldContinue) {
+ consola.info('Aborting');
+ process.exit(0);
+}
+
+consola.info('Updating changelog');
+await addToChangelog({ changelog: markdown, version });
+consola.success('Changelog updated');
+
+try {
+ consola.info('Committing changelog changes');
+ await $`git add CHANGELOG.md`;
+ await $`git commit -m "docs(changelog): update changelog for ${version}"`;
+ consola.success('Changelog changes committed');
+
+ consola.info('Creating version and tag');
+ await $`npm version ${version} -m "chore(version): release ${version}"`;
+ consola.info('Npm version released with tag');
+} catch (error) {
+ consola.error(error);
+ consola.info('Aborting');
+ process.exit(1);
+}