2021-04-20 11:00:14 -04:00
|
|
|
# Cutting a Deno release
|
|
|
|
|
2021-09-22 19:12:56 -04:00
|
|
|
## Pre-flight checklist
|
|
|
|
|
|
|
|
- [ ] An up to date stable Rust toolchain
|
|
|
|
- [ ] A binary version of `deno` available (hopefully built from `main`) that is
|
2021-11-01 16:22:27 -04:00
|
|
|
going to be available throughout any local building you might do.
|
2021-09-22 19:12:56 -04:00
|
|
|
- [ ] Forks and local clones of
|
2021-11-01 16:22:27 -04:00
|
|
|
[`denoland/deno`](https://github.com/denoland/deno/),
|
|
|
|
[`denoland/deno_std`](https://github.com/denoland/deno_std/),
|
2021-12-16 20:13:45 -05:00
|
|
|
[`denoland/dotland`](https://github.com/denoland/dotland/),
|
|
|
|
[`denoland/docland`](https://github.com/denoland/docland/),
|
2021-11-01 16:22:27 -04:00
|
|
|
[`denoland/deno_docker`](https://github.com/denoland/deno_docker/)
|
2022-01-13 10:43:35 -05:00
|
|
|
[`denoland/manual`](https://github.com/denoland/manual/)
|
2021-09-22 19:12:56 -04:00
|
|
|
- [ ] Ensure that external dependencies are up-to date in `denoland/deno` (e.g.
|
2021-11-01 16:22:27 -04:00
|
|
|
`rusty_v8`, `serde_v8`, `deno_doc`, `deno_lint`).
|
2021-09-22 19:12:56 -04:00
|
|
|
- [ ] Ownership access on crates.io for the 19 (🙀) crates that you will be
|
2021-11-01 16:22:27 -04:00
|
|
|
publishing. (Don't worry too much though as the main script publishing 18
|
|
|
|
of the crates allows recovery)
|
2021-09-22 19:12:56 -04:00
|
|
|
- [ ] Lot's of ☕
|
|
|
|
|
2021-04-20 11:00:14 -04:00
|
|
|
**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.**
|
|
|
|
|
2022-01-13 10:43:35 -05:00
|
|
|
Before starting the process write a message in company's #general channel:
|
|
|
|
`:lock: deno and deno_std are now locked`
|
|
|
|
|
2021-06-22 10:39:44 -04:00
|
|
|
## Updating `deno_std`
|
|
|
|
|
2021-09-21 16:53:47 -04:00
|
|
|
1. Checkout a branch for releasing `std` (e.g. `release_#.#.#`).
|
|
|
|
|
|
|
|
2. Open a PR on the `deno_std` repo that bumps the version in `version.ts` and
|
2022-01-13 10:43:35 -05:00
|
|
|
updates `Releases.md`. You can use following command to generate a short list
|
|
|
|
that needs to be updated: `git log --oneline <previous_tag>..` (replace
|
2022-01-21 04:16:57 -05:00
|
|
|
`<previous_tag>` with actual latest tag, eg. `git log --oneline 0.122.0..`).
|
|
|
|
Remove all commits that are not `feat` or `fix`.
|
2021-07-26 18:26:39 -04:00
|
|
|
|
2021-09-21 16:53:47 -04:00
|
|
|
3. Before merging the PR, make sure that all tests pass when run using binary
|
2021-07-26 18:26:39 -04:00
|
|
|
produced from bumping crates (point 3. from below).
|
|
|
|
|
2022-01-13 10:43:35 -05:00
|
|
|
4. When merging the PR, ensure that the commit name is exactly the version name.
|
|
|
|
Eg. `0.121.0`, not `0.121.0 (#1810)`.
|
|
|
|
|
2022-01-21 04:16:57 -05:00
|
|
|
5. Pull the latest `main` branch and make sure the commit from the merged PR is
|
|
|
|
there. Create a tag with the version number (_without_ `v` prefix), eg.
|
2022-03-03 22:30:55 -05:00
|
|
|
`git tag 0.122.0 <commit_hash>`, then push the tag to the `denoland/deno_std`
|
|
|
|
repository, eg. `git push upstream 0.122.0`.
|
2022-01-13 10:43:35 -05:00
|
|
|
|
|
|
|
6. Once CI passes, copy contents of `Releases.md` you added, and create a new
|
|
|
|
release on GitHub (https://github.com/denoland/deno_std/releases).
|
2021-06-22 10:39:44 -04:00
|
|
|
|
|
|
|
## Updating the main repo
|
|
|
|
|
2022-01-13 10:43:35 -05:00
|
|
|
**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 are not
|
|
|
|
`feat` commits. 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.
|
|
|
|
|
2021-09-21 16:53:47 -04:00
|
|
|
1. Checkout a branch for releasing crate dependencies (e.g. `deps_#.#.#`).
|
|
|
|
|
|
|
|
2. Run `./tools/release/01_bump_dependency_crate_versions.ts` to increase the
|
2021-08-25 09:02:22 -04:00
|
|
|
minor versions of all crates in the `bench_util`, `core`, `ext`, and
|
|
|
|
`runtime` directories.
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2021-09-21 16:53:47 -04:00
|
|
|
3. Commit these changes with a commit message like
|
2022-01-13 10:43:35 -05:00
|
|
|
`chore: bump crate version for #.#.#` and create a PR for this change. **If
|
|
|
|
you are cutting a patch release**: make sure to target `v1.XX` branch instead
|
|
|
|
of `main` in your PR.
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2021-09-21 16:53:47 -04:00
|
|
|
4. Make sure CI pipeline passes (DO NOT merge yet).
|
2021-08-25 09:02:22 -04:00
|
|
|
|
2021-09-21 16:53:47 -04:00
|
|
|
5. Run `./tools/release/02_publish_dependency_crates.ts` to publish these bumped
|
2021-08-25 09:02:22 -04:00
|
|
|
crates to `crates.io`
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2021-09-14 16:46:36 -04:00
|
|
|
**Make sure that `cargo` is logged on with a user that has permissions to
|
|
|
|
publish those crates.**
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2021-09-14 16:46:36 -04:00
|
|
|
If there are any problems when you publish, that require you to change the
|
|
|
|
code, then after applying the fixes they should be committed and pushed to
|
|
|
|
the PR.
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2021-09-21 16:53:47 -04:00
|
|
|
6. Once all crates are published merge the PR.
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2022-03-03 22:30:55 -05:00
|
|
|
7. Update your local branch (`v1.XX` for patch or `main` for minor) and checkout
|
|
|
|
another branch (e.g. `release_#.#.#`).
|
2021-08-25 09:02:22 -04:00
|
|
|
|
2021-09-21 18:44:46 -04:00
|
|
|
8. Run `./tools/release/03_bump_cli_version.ts` to bump the CLI version.
|
2021-08-25 09:02:22 -04:00
|
|
|
|
2021-09-21 18:44:46 -04:00
|
|
|
9. If you are doing a patch release, answer `y` to the _Increment patch?_
|
|
|
|
prompt.
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2022-03-04 22:28:23 -05:00
|
|
|
10. The above command will update the `Releases.md` file. Review it and ensure
|
|
|
|
its output is correct. **If you are cutting a minor release**: make sure
|
|
|
|
that there are no duplicate entries in previous releases; most often commits
|
|
|
|
with `fix` prefix would have been included in patch releases.
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2021-11-17 11:00:58 -05:00
|
|
|
11. Update link in `cli/compat/mod.rs` with the released version of `deno_std`
|
|
|
|
and do a search through the tests to find std urls that need to be updated.
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2022-01-13 10:43:35 -05:00
|
|
|
12. Create a PR for these changes. **If you are cutting a patch release**: make
|
|
|
|
sure to target `v1.XX` branch instead of `main` in your PR.
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2021-11-10 10:49:47 -05:00
|
|
|
13. Make sure CI pipeline passes.
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2022-01-21 04:16:57 -05:00
|
|
|
14. Publish `cli` crate to `crates.io`: `cd cli && cargo publish`
|
2021-09-21 18:44:46 -04:00
|
|
|
|
2021-11-10 10:49:47 -05:00
|
|
|
15. Merge the PR.
|
2021-09-21 18:44:46 -04:00
|
|
|
|
2021-11-10 10:49:47 -05:00
|
|
|
16. Create a tag with the version number (with `v` prefix).
|
|
|
|
|
|
|
|
17. Wait for CI pipeline on the created tag branch to pass.
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2021-09-15 09:16:06 -04:00
|
|
|
The CI pipeline will create a release draft on GitHub
|
2022-03-03 22:30:55 -05:00
|
|
|
(https://github.com/denoland/deno/releases). Update the draft with the
|
|
|
|
contents of `Releases.md` that you previously added.
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2021-12-23 10:43:13 -05:00
|
|
|
18. Upload Apple M1 build (`deno-aarch64-apple-darwin.zip`) to the release draft
|
|
|
|
and to https://console.cloud.google.com/storage/browser/dl.deno.land
|
|
|
|
|
|
|
|
```
|
|
|
|
cargo build --release
|
|
|
|
cd target/release
|
|
|
|
zip -r deno-aarch64-apple-darwin.zip deno
|
|
|
|
```
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2021-11-10 10:49:47 -05:00
|
|
|
19. Publish the release on Github
|
2021-04-20 11:00:14 -04:00
|
|
|
|
2021-11-10 10:49:47 -05:00
|
|
|
20. Update the Deno version on the website by updating
|
2021-10-26 00:44:41 -04:00
|
|
|
https://github.com/denoland/dotland/blob/main/versions.json.
|
2021-06-22 10:39:44 -04:00
|
|
|
|
2021-11-10 10:49:47 -05:00
|
|
|
21. Push a new tag to [`manual`](https://github.com/denoland/manual). The tag
|
2021-09-15 09:16:06 -04:00
|
|
|
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.
|
2021-07-26 18:26:39 -04:00
|
|
|
|
2021-11-10 10:49:47 -05:00
|
|
|
22. For minor releases: make sure https://github.com/mdn/browser-compat-data has
|
2021-10-22 08:45:16 -04:00
|
|
|
been updated to reflect Web API changes in this release. Usually done ahead
|
|
|
|
of time by @lucacasonato.
|
|
|
|
|
2022-01-13 10:43:35 -05:00
|
|
|
23. **If you are cutting a patch release**: open a PR that forwards all commits
|
|
|
|
created in the release process to the `main` branch.
|
|
|
|
|
2021-12-16 20:13:45 -05:00
|
|
|
## 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.
|
|
|
|
|
|
|
|
1. Goto the cloned report for `denoland/docland`.
|
|
|
|
|
|
|
|
2. Checkout a new branch (e.g. `git checkout -b deno_1.17.0`).
|
|
|
|
|
|
|
|
3. Execute `./build.ts` (or
|
|
|
|
`deno run --config deno.jsonc --import-map import-map.json --allow-read=. --allow-write=./static --allow-net build.ts`).
|
|
|
|
|
|
|
|
4. Commit changes and raise a PR on `denoland/docland`.
|
|
|
|
|
|
|
|
5. Merging the approved PR will trigger deployment to Deploy of the updates.
|
|
|
|
|
2021-06-22 10:39:44 -04:00
|
|
|
## Updating `deno_docker`
|
|
|
|
|
|
|
|
1. Open a PR on the `deno_docker` repo that bumps the Deno version in all
|
|
|
|
Dockerfiles, the README and the example Dockerfile
|
|
|
|
2. Create a tag with the version number (_without_ `v` prefix).
|
2022-01-13 10:43:35 -05:00
|
|
|
|
|
|
|
Write a message in company's #general channel:
|
|
|
|
`:unlock: deno and deno_std are now unlocked`.
|