@mlaursen/release-script
v1.0.2
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",
// },
// An optional list of tags to publish as github releases. This should really
// only be used if only the github release step failed and the tags have been
// pushed
// publishTags: ["@react-md/[email protected]"],
// Only does the github release portion by checking for unpushed tags,
// getting the changelogs, and creating the releases from the tags
// NOTE: Defaults to `publishTags.length > 0`
//
// githubReleaseOnly: true,
});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