fix some issues; migrate to bun'
This commit is contained in:
parent
cf3d5c6d6f
commit
54293ac3a1
56 changed files with 1360 additions and 764 deletions
171
automation/release.ts
Normal file
171
automation/release.ts
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
import { UserError } from 'utils/utils';
|
||||
import { CanaryVersion, Version, getIncrementOptions, parseVersion, stringifyVersion } from 'utils/versionUtils';
|
||||
import config from './config.json';
|
||||
import { $choice as $choice, $confirm, $seq, CMD_FMT, Verboseness } from 'utils/shellUtils';
|
||||
|
||||
async function runPreconditions(): Promise<void> {
|
||||
// run preconditions
|
||||
await $seq(
|
||||
[`bun run format`, `bun run lint:fix`, `bun run test`],
|
||||
(cmd: string) => {
|
||||
throw new UserError(`precondition "${cmd}" failed`);
|
||||
},
|
||||
() => {},
|
||||
undefined,
|
||||
Verboseness.VERBOSE,
|
||||
);
|
||||
|
||||
// add changed files
|
||||
await $seq(
|
||||
[`git add .`],
|
||||
() => {
|
||||
throw new UserError('failed to add preconditions changes to git');
|
||||
},
|
||||
() => {},
|
||||
undefined,
|
||||
Verboseness.NORMAL,
|
||||
);
|
||||
|
||||
// check if there were any changes
|
||||
let changesToCommit = false;
|
||||
await $seq(
|
||||
[`git diff --quiet`, `git diff --cached --quiet`],
|
||||
() => {
|
||||
changesToCommit = true;
|
||||
},
|
||||
() => {},
|
||||
undefined,
|
||||
Verboseness.QUITET,
|
||||
);
|
||||
|
||||
// if there were any changes, commit them
|
||||
if (changesToCommit) {
|
||||
await $seq(
|
||||
[`git commit -m "[auto] run release preconditions"`],
|
||||
() => {
|
||||
throw new UserError('failed to add preconditions changes to git');
|
||||
},
|
||||
() => {},
|
||||
undefined,
|
||||
Verboseness.NORMAL,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function run() {
|
||||
console.log('looking for untracked changes ...');
|
||||
|
||||
// check for any uncommited files and exit if there are any
|
||||
await $seq(
|
||||
[`git add .`, `git diff --quiet`, `git diff --cached --quiet`, `git checkout ${config.devBranch}`],
|
||||
() => {
|
||||
throw new UserError('there are still untracked changes');
|
||||
},
|
||||
() => {},
|
||||
undefined,
|
||||
Verboseness.QUITET,
|
||||
);
|
||||
|
||||
console.log('\nrunning preconditions ...\n');
|
||||
|
||||
await runPreconditions();
|
||||
|
||||
console.log('\nbumping versions ...\n');
|
||||
|
||||
const manifestFile = Bun.file('./manifest.json');
|
||||
const manifest = await manifestFile.json();
|
||||
|
||||
const versionString: string = manifest.version;
|
||||
const currentVersion: Version = parseVersion(versionString);
|
||||
const currentVersionString = stringifyVersion(currentVersion);
|
||||
|
||||
const versionIncrementOptions = getIncrementOptions(currentVersion);
|
||||
|
||||
const selectedIndex = await $choice(
|
||||
`Current version "${currentVersionString}". Select new version`,
|
||||
versionIncrementOptions.map(x => stringifyVersion(x)),
|
||||
);
|
||||
const newVersion = versionIncrementOptions[selectedIndex];
|
||||
const newVersionString = stringifyVersion(newVersion);
|
||||
|
||||
console.log('');
|
||||
|
||||
await $confirm(`Version will be updated "${currentVersionString}" -> "${newVersionString}". Are you sure`, () => {
|
||||
throw new UserError('user canceled script');
|
||||
});
|
||||
|
||||
if (!(newVersion instanceof CanaryVersion)) {
|
||||
manifest.version = newVersionString;
|
||||
}
|
||||
|
||||
await Bun.write(manifestFile, JSON.stringify(manifest, null, '\t'));
|
||||
|
||||
const betaManifest = structuredClone(manifest);
|
||||
betaManifest.version = newVersionString;
|
||||
|
||||
const betaManifestFile = Bun.file('./manifest-beta.json');
|
||||
await Bun.write(betaManifestFile, JSON.stringify(betaManifest, null, '\t'));
|
||||
|
||||
if (!(newVersion instanceof CanaryVersion)) {
|
||||
const versionsFile = Bun.file('./versions.json');
|
||||
const versionsJson = await versionsFile.json();
|
||||
|
||||
versionsJson[newVersionString] = manifest.minAppVersion;
|
||||
|
||||
await Bun.write(versionsFile, JSON.stringify(versionsJson, null, '\t'));
|
||||
|
||||
const packageFile = Bun.file('./package.json');
|
||||
const packageJson = await packageFile.json();
|
||||
|
||||
packageJson.version = newVersionString;
|
||||
|
||||
await Bun.write(packageFile, JSON.stringify(packageJson, null, '\t'));
|
||||
}
|
||||
|
||||
await $seq(
|
||||
[`bun run format`, `git add .`, `git commit -m "[auto] bump version to \`${newVersionString}\`"`],
|
||||
() => {
|
||||
throw new UserError('failed to add preconditions changes to git');
|
||||
},
|
||||
() => {},
|
||||
undefined,
|
||||
Verboseness.NORMAL,
|
||||
);
|
||||
|
||||
console.log('\ncreating release tag ...\n');
|
||||
|
||||
await $seq(
|
||||
[
|
||||
`git checkout ${config.releaseBranch}`,
|
||||
`git merge ${config.devBranch} --commit -m "[auto] merge \`${newVersionString}\` release commit"`,
|
||||
`git push origin ${config.releaseBranch}`,
|
||||
`git tag -a ${newVersionString} -m "release version ${newVersionString}"`,
|
||||
`git push origin ${newVersionString}`,
|
||||
`git checkout ${config.devBranch}`,
|
||||
`git merge ${config.releaseBranch}`,
|
||||
`git push origin ${config.devBranch}`,
|
||||
],
|
||||
() => {
|
||||
throw new UserError('failed to merge or create tag');
|
||||
},
|
||||
() => {},
|
||||
undefined,
|
||||
Verboseness.NORMAL,
|
||||
);
|
||||
|
||||
console.log('');
|
||||
|
||||
console.log(`${CMD_FMT.BgGreen}done${CMD_FMT.Reset}`);
|
||||
console.log(`${config.github}`);
|
||||
console.log(`${config.github}/releases/tag/${newVersionString}`);
|
||||
}
|
||||
|
||||
try {
|
||||
await run();
|
||||
} catch (e) {
|
||||
if (e instanceof UserError) {
|
||||
console.error(e.message);
|
||||
} else {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue