@mlaursen/release-script
Version:
The release script I normally use for packages I publish to npm
40 lines (39 loc) • 1.58 kB
JavaScript
import { execSync } from "node:child_process";
import { continueRelease } from "./continueRelease.js";
import { createGetTagName } from "./createGetTagName.js";
import { createRelease, } from "./createRelease.js";
import { getCurrentChangeset } from "./getCurrentChangeset.js";
import { getPackageManager } from "./getPackageManager.js";
const exec = (command, opts) => {
console.log(command);
execSync(command, opts);
};
export async function release(options) {
const { owner, repo, envPath, cleanCommand = "clean", buildCommand = "build", skipBuild = !buildCommand, mainPackage, getTagName = createGetTagName(mainPackage), versionMessage = "build(version): version package", } = options;
const pkgManager = await getPackageManager();
if (!skipBuild) {
exec(`${pkgManager} ${cleanCommand}`);
exec(`${pkgManager} ${buildCommand}`);
}
exec(`${pkgManager} changeset`, { stdio: "inherit" });
await continueRelease();
exec("git add -u");
exec("git add .changeset");
const changeset = await getCurrentChangeset();
exec("pnpm changeset version", { stdio: "inherit" });
exec("git add -u");
await continueRelease();
exec(`git commit -m "${versionMessage}"`);
exec(`${pkgManager} changeset publish`, { stdio: "inherit" });
const tagName = await getTagName();
await continueRelease();
exec("git push --follow-tags");
await createRelease({
owner,
repo,
body: changeset,
tagName,
envPath,
prerelease: /-(alpha|next|beta)\.\d+$/.test(tagName),
});
}