@mlaursen/release-script
v0.1.0
Published
The release script I normally use for packages I publish to npm
Readme
@mlaursen/release-script
This is the normal npm release script I use. This requires:
- changesets to handle bumping versions and generating changelogs.
- A Github release token
- The token only needs repository access
- This is normally stored as
GITHUB_TOKENin an.env.localfile that should not be committed
Installation
The release script relies on changesets to handle bumping versions and generating changelogs.
pnpm install --save-dev @mlaursen/release-script \
@changesets/cli \
tsxSetup the .changeset dir if needed:
pnpm changeset init
git add .changeset
git add -u
git commit -m "build: setup changesets"Usage
Create a scripts/release.ts file with:
import { release } from "@mlaursen/release-script";
await release({
repo: "{{REPO_NAME}}", // i.e. eslint-config
// if the repo is not under `mlaursen` for some reason
// owner: "mlaursen",
// If there is a custom clean command for releases. `clean` is the default
// cleanCommand: "clean",
// If there is a custom build command for releases. `build` is the default
// buildCommand: "build",
// An optional flag if the build step should be skipped. `!buildCommand` by default
// skipBuild: process.argv.includes("--skip-build"),
// If the version message needs to be customized. The following is the default
// versionMessage: "build(version): version package",
// An optional `.env` file path that includes the `GITLAB_TOKEN` environment
// variable.
// envPath: ".env.local",
// An optional lookup of package name -> package path in the repo used to
// find the CHANGELOG.md for each release in a monorepo. Will default to
// `"."` when omitted.
// packagePaths: {
// "@react-md/core": "./packages/core",
// },
});Next, update package.json to include the release script:
"scripts": {
"prepare": "husky",
"typecheck": "tsc --noEmit",
"check-format": "prettier --check .",
"format": "prettier --write .",
"clean": "rm -rf dist",
"build": "tsc -p tsconfig.json",
+ "release": "tsx scripts/release.ts"
},Finally, run the release script whenever a new release should go out:
pnpm releaseAdding Changesets
During normal development, add changesets and commit them. They will normally be close to my commit messages which is a bit annoying.
pnpm changeset
git add .changesetAlpha Releases
Use the changesets api to enter the pre-release flow:
pnpm changeset enter preOnce ready to do a real release:
pnpm changeset exit pre