aboutsummaryrefslogtreecommitdiff
path: root/scripts/release.mjs
blob: afb25d3751976533674a0079ab53ec0563bb0382 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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);
}