@mlaursen/release-script
Version:
The release script I normally use for packages I publish to npm
114 lines (83 loc) • 2.76 kB
Markdown
This is the normal npm release script I use. This requires:
- [changesets](https://github.com/changesets/changesets) to handle bumping
versions and generating changelogs.
- A Github [release token](https://github.com/settings/personal-access-tokens)
- The token only needs repository access
- This is normally stored as `GITHUB_TOKEN` in an `.env.local` file that
should not be committed
The release script relies on
[](https://github.com/changesets/changesets) to handle bumping
versions and generating changelogs.
```sh
pnpm install --save-dev @mlaursen/release-script \
@changesets/cli \
tsx
```
Setup the `.changeset` dir if needed:
```sh
pnpm changeset init
git add .changeset
git add -u
git commit -m "build: setup changesets"
```
Create a `scripts/release.ts` file with:
```ts
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:
```diff
"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:
```sh
pnpm release
```
During normal development, add changesets and commit them. They will normally
be close to my commit messages which is a bit annoying.
```sh
pnpm changeset
git add .changeset
```
Use the changesets api to enter the pre-release flow:
```sh
pnpm changeset enter pre
```
Once ready to do a real release:
```sh
pnpm changeset exit pre
```