# Release Documentation
## Release npm packages
We have a simple script to release npm packages from pnpm workspaces: `cargo xtask workspace --bump`.
```text
? Select a package to bump
> [ ] @vercel/node-module-trace
[ ] @vercel/webpack-node-module-trace
[↑↓ to move, space to select one, → to all, ← to none, type to filter]
```
Press space to select the package you want to publish.
Press enter to choose the version type you want to bump:
```text
? Select a package to bump @vercel/node-module-trace, @vercel/webpack-node-module-trace
? Version for @vercel/node-module-trace
patch
minor
> major
alpha
beta
canary
[↑↓ to move, enter to select, type to filter]
```
> **Note**
>
> This command will always increase the version according to the semver version.
> For example, if the current version of one package is `1.0.0`, and you choose `patch`, the version will be increased to `1.0.1`.
> **Warning**
>
> If the version of one package is `1.0.0-beta.0`, and you choose `alpha`, the cli will panic and exit. Because the `beta` < `alpha` in semver.
Once you have finished the bump, the script will do the following things:
- bump the version you choose in the corresponding package
- update dependencies in other packages that depend on the package you choose
- update `pnpm-lock.yaml` file
- run `git tag -s pkg@version -m "pkg@version"` for each package
You need to run `git push --follow-tags` to finish the release.
## Release Turborepo
We have a multi step release process for Turborepo right now.
**NOTE**: The steps below _must_ be run serially, in the order specified.
1. Create a release branch by triggering the [1. Turborepo Release (release branch)][1] workflow
- Specify the semver increment using the SemVer Increment field (start with `prerelease`)
2. Build the Go Binary by triggering the [2. Turborepo Release (go binary)][2] workflow.
1. Specify the release branch (example: `staging-1.7.0-canary.1`) in _both_ the "use workflow from", and "Staging branch to release from" fields.
3. Build the Rust Wrapper by triggering the [3. Turborepo Release (rust binary & publish)][3] workflow.
1. Specify the release branch (example: `staging-1.7.0-canary.1`) in _both_ the "use workflow from", and "Staging branch to release from" fields. (this should match step 2.1 above)
4. A PR is automatically opened to merge the release branch created in step 1 back into `main`
1. ⚠️ Merge this in! You don't need to wait for tests to pass.
It's important to merge this branch soon after the publish is succesful
5. `turbo-orchestrator.yml` polls `npm` every 5 mins. When a new version is detected,
[`turborepo-smoke-published.yml`][4] runs against `@latest` and `@canary` tags.
### Notes
- Github Release Notes are published on their own using config from `turborepo-release.yml`,
triggered by the `turbo-orchestrator` bot.
- `eslint-plugin-turbo` and `eslint-config-turbo` need to be published separately.
[1]: https://github.com/vercel/turbo/actions/workflows/turborepo-release-step-1.yml
[2]: https://github.com/vercel/turbo/actions/workflows/turborepo-release-step-2.yml
[3]: https://github.com/vercel/turbo/actions/workflows/turborepo-release-step-3.yml
[3]: https://github.com/vercel/turbo/actions/workflows/turborepo-smoke-published.yml