7.4 KiB
Cutting a Deno release
Pre-flight checklist
- An up to date stable Rust toolchain
- A binary version of
deno
available (hopefully built frommain
) that is going to be available throughout any local building you might do. - Forks and local clones of
denoland/deno
,denoland/deno_std
,denoland/dotland
,denoland/docland
,denoland/deno_docker
denoland/manual
- Ensure that external dependencies are up-to date in
denoland/deno
(e.g.rusty_v8
,serde_v8
,deno_doc
,deno_lint
). - Lot's of ☕
During this process main
branch (or any other branch that you're creating
release from) should be frozen and no commits should land until the release is
cut.
Before starting the process write a message in company's #general channel:
:lock: deno and deno_std are now locked
Updating deno_std
-
Go to the "version_bump" workflow in the deno_std repo's actions: https://github.com/denoland/deno_std/actions/workflows/version_bump.yml
-
Click on the "Run workflow" button.
- For the kind of release, select "minor".
- Run the workflow.
-
A PR will be automatically created. Follow the checklist in the PR and review it.
❌ Failure Steps
- Checkout the latest main.
- Manually run
./_tools/release/01_bump_version.ts --minor
- Ensure the version in
version.ts
is updated correctly. - Ensure
Releases.md
is updated correctly. - Ensure all the tests pass with the latest build (examine the repo for what the command is and run the local built deno binary)
- Ensure the version in
- Open a PR with the changes and continue with the steps below.
-
Merge the PR.
-
Wait for the CI run to complete which will tag the repo and create a draft release. Review the draft release and then publish it.
❌ Failure Steps
- Tag the repo manually in the format
x.x.x
- Draft a new GH release by copying and pasting the release notes from
Releases.md
- Tag the repo manually in the format
Updating the main repo
If you are cutting a patch release: First you need to sync commit to the
relevant minor branch, so if you are cutting a v1.17.3
release you need to
sync v1.17
branch.
To do that, you need to cherry-pick commits from the main branch to the v1.17
branch. For patch releases we want to cherry-pick all commits that do not add
features to the CLI. This generally means to filter out feat
commits but not
necessarily (ex. feat(core): ...
). Check what was the last commit on v1.17
branch before the previous release and start cherry-picking newer commits from
the main
.
Once all relevant commits are cherry-picked, push the branch to the upstream and verify on GitHub that everything looks correct.
Phase 1: Bumping versions
-
After releasing deno_std, go to the "version_bump" workflow in the CLI repo's actions: https://github.com/denoland/deno/actions/workflows/version_bump.yml
-
Click on the "Run workflow" button.
- In the drop down, select the minor branch if doing a patch release or the main branch if doing a minor release.
- For the kind of release, select either "patch", "minor", or "major".
- Run the workflow.
-
Wait for the workflow to complete and for a pull request to be automatically opened.
❌ Failure Steps
- Checkout the branch the release is being made on.
- Manually run
./tools/release/01_bump_crate_versions.ts
- Ensure the crate versions were bumped correctly
- Ensure deno_std version was updated correctly in
cli/compat/mod.rs
- Ensure
Releases.md
was updated correctly
- Open a PR with the changes and continue with the steps below.
-
Review the pull request and make any necessary changes.
-
Merge it.
Phase 2: Publish
-
Go to the "cargo_publish" workflow in the CLI repo's actions: https://github.com/denoland/deno/actions/workflows/cargo_publish.yml
-
Run it on the same branch that you used before and wait for it to complete.
❌ Failure Steps
- The workflow was designed to be restartable. Try restarting it.
- If that doesn't work, then do the following:
- Checkout the branch the release is occurring on.
- If
cargo publish
hasn't completed then run./tools/release/03_publish_crates.ts
- Note that you will need access to crates.io so it might fail.
- If
cargo publish
succeeded and a release tag wasn't created, then manually create and push one for the release branch with a leadingv
.
-
This CI run create a tag which triggers a second CI run that publishes the GitHub draft release.
The CI pipeline will create a release draft on GitHub (https://github.com/denoland/deno/releases). Update the draft with the contents of
Releases.md
that you previously added. -
Upload Apple M1 build (
deno-aarch64-apple-darwin.zip
) to the release draft and to https://console.cloud.google.com/storage/browser/dl.deno.landcargo build --release cd target/release zip -r deno-aarch64-apple-darwin.zip deno
-
Publish the release on Github
-
Run the https://github.com/denoland/dotland/actions/workflows/update_versions.yml workflow.
- This should open a PR. Review and merge it.
❌ Failure Steps
- Update https://github.com/denoland/dotland/blob/main/versions.json manually.
- Open a PR and merge.
-
Push a new tag to
manual
. The tag must match the CLI tag; you don't need to create dedicated commit for that purpose, it's enough to tag the latest commit in that repo. -
For minor releases: make sure https://github.com/mdn/browser-compat-data has been updated to reflect Web API changes in this release. Usually done ahead of time by @lucacasonato.
-
If you are cutting a patch release: a PR should have been automatically opened that forwards the release commit back to main. If so, merge it. If not and it failed, please manually create one.
Updating doc.deno.land
This should occur after the Deno CLI is fully published, as the build script queries the GitHub API to determine what it needs to change and update.
-
Run the update_deno workflow in the docland repo on the main branch: https://github.com/denoland/docland/actions/workflows/update_deno.yml
-
This will open a PR. Review it and merge, which will trigger a deployment.
❌ Failure Steps
- Checkout a new branch for docland (e.g.
git checkout -b deno_1.17.0
). - Execute
deno task build
- Commit changes and raise a PR on
denoland/docland
. - Merging the approved PR will trigger deployment to Deploy of the updates.
- Checkout a new branch for docland (e.g.
Updating deno_docker
- Open a PR on the
deno_docker
repo that bumps the Deno version in all Dockerfiles, the README and the example Dockerfile - Create a tag with the version number (without
v
prefix).
Write a message in company's #general channel:
:unlock: deno and deno_std are now unlocked
.