Skip to content

Commit

Permalink
feat: enabling rc prerelease versions (#171)
Browse files Browse the repository at this point in the history
* feat: enabling rc prerelease versions

* fix: addeds comments, examples, made mapping clearer

* fix: updated comments
  • Loading branch information
dawhitla authored Feb 1, 2024
1 parent 5968f51 commit 04b5383
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 27 deletions.
109 changes: 85 additions & 24 deletions scripts/release-create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,42 +7,103 @@ import pkg from '../package.json';
import { logError, logInfo } from './utils';

async function run() {
const skipChecks = !!process.env.SKIP_CHECKS;
const git = simpleGit();
const status = await git.status();

if (status.current !== 'main') {
return logError('Must be on main branch to create a release branch');
}

if (!status.isClean()) {
return logError('Cannot create release with dirty working tree');
}

if (status.ahead > 0) {
return logError(
`Local commits on main must match with origin/main. You are ${status.ahead} commit(s) ahead`
);
}

if (status.behind > 0) {
return logError(
`Local commits on main must match with origin/main. You are ${status.behind} commit(s) behind`
);
if (!skipChecks) {
if (status.current !== 'main') {
return logError('Must be on main branch to create a release branch');
}

if (!status.isClean()) {
return logError('Cannot create release with dirty working tree');
}

if (status.ahead > 0) {
return logError(
`Local commits on main must match with origin/main. You are ${status.ahead} commit(s) ahead`
);
}

if (status.behind > 0) {
return logError(
`Local commits on main must match with origin/main. You are ${status.behind} commit(s) behind`
);
}
}

try {
const versions = (['major', 'minor', 'patch'] as semver.ReleaseType[]).map(
(type) => {
const version = semver.inc(pkg.version, type);
return { name: `${type} ${version}`, value: version };
// different behavior based on prerelease version or not
const prerelease = (semver.prerelease(pkg.version) ?? []).length;
const prereleasepatch = prerelease > 2;

let bumps = prerelease
? ['prereleasenext', 'prereleasepatch', 'prereleasedone']
: ['premajor', 'preminor', 'prepatch', 'major', 'minor', 'patch'];

const versions = bumps.map((type) => {
let version: string | null = pkg.version;
if (version) {
switch (type) {
case 'prereleasenext':
if (prereleasepatch) {
// 1.2.3-rc.1.2 -> 1.2.3-rc.1
// strips the patch, so prerelease will inc to rc.2
version = version.replace(/\.[^.]*$/gm, '');
}
// 1.2.3-rc.1 -> 1.2.3-rc.2
// increments the last digit
version = semver.inc(version, 'prerelease', 'rc', '1');
break;
case 'prereleasepatch':
if (prereleasepatch) {
// 1.2.3-rc.1.2 -> 1.2.3-rc.1.3
// increments the last digit
version = semver.inc(version, 'prerelease', 'rc', '1');
} else {
// 1.2.3-rc.1 -> 1.2.3-rc.1.2
// adds a patch digit
version = `${version}.2`;
}
break;
case 'prereleasedone':
// 1.2.3-rc.1 -> 1.2.3 or
// 1.2.3-rc.1.2 -> 1.2.3
// removes -rc from version
version = version.replace(/-rc.*/gm, '');
break;
case 'premajor':
case 'preminor':
case 'prepatch': {
// 1.2.3 -> 1.2.4-rc.1 or
// 1.2.3 -> 1.3.0-rc.1 or
// 1.2.3 -> 2.0.0-rc.1
// increments and adds prerelease version
const rtype = type as semver.ReleaseType;
version = semver.inc(version, rtype, 'rc', '1');
break;
}
default:
// 1.2.3 -> 1.2.4 or
// 1.2.3 -> 1.3.0 or
// 1.2.3 -> 2.0.0
// increments version
version = semver.inc(version, type as semver.ReleaseType);
break;
}
if (!version) {
throw new Error(`Invalid version: ${version}`);
}
}
);
return { name: `${type} ${version}`, value: version };
});

const answers = await inquirer.prompt([
{
type: 'list',
name: 'bump',
message: 'Select release type',
message: `${pkg.version}: select release type`,
default: versions[1].value,
choices: versions,
},
Expand Down
6 changes: 3 additions & 3 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3665,9 +3665,9 @@ camelcase@^6.0.0, camelcase@^6.2.0:
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==

caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001349, caniuse-lite@^1.0.30001400:
version "1.0.30001516"
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001516.tgz"
integrity sha512-Wmec9pCBY8CWbmI4HsjBeQLqDTqV91nFVR83DnZpYyRnPI1wePDsTg0bGLPC5VU/3OIZV1fmxEea1b+tFKe86g==
version "1.0.30001581"
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz"
integrity sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==

chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
Expand Down

0 comments on commit 04b5383

Please sign in to comment.