|
| 1 | +# Publishing Instructions |
| 2 | + |
| 3 | +These instructions have been updated on April 2026, after the [adoption of npm Trusted Publishing](https://docusaurus.io/blog/releases/3.10#trusted-publishing) in v3.10 ([PR](https://github.com/facebook/docusaurus/pull/11819)). |
| 4 | + |
| 5 | +This guide is designed to be a very concise overview. Read the [publish-legacy.md](./publish-legacy.md) guide for more details, many steps remain the same, and it provides more details. |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## General |
| 10 | + |
| 11 | +For simplicity, usually don't maintain multiple major-version release lines in parallel: |
| 12 | + |
| 13 | +- new features and breaking changes are always merged on main |
| 14 | +- we only merge breaking changes once we are ready to release the next major version |
| 15 | + |
| 16 | +However, we might occasionally have to backport critical bug and security fixes to a branch that could be cut on-demand. For major versions we usually create a `docusaurus-vX` branch once we have started merging breaking changes for the upcoming major version. |
| 17 | + |
| 18 | +## Publish a minor/major release |
| 19 | + |
| 20 | +We'll consider that the latest version is `3.10.0`, and we are now releasing `3.11.0`. |
| 21 | + |
| 22 | +Using npm Trusted Publishing, our releases are published from the `.deploy.yml` GitHub action directly from the `main` branch. Make sure that branch works well and pass all of our CI tests. |
| 23 | + |
| 24 | +However, we need a release branch to cut the new docs version, publish a release blog post and update our changelog. |
| 25 | + |
| 26 | +1. Create a release branch: `git co -b slorber/release-3.11.0` |
| 27 | + |
| 28 | +2. Make sure all the recent PRs have a `pr: ` GitHub label. This [link](https://github.com/facebook/docusaurus/pulls?q=is%3Apr+is%3Amerged+sort%3Aupdated-desc+-label%3A%22pr%3A+breaking+change%22%2C%22pr%3A+new+feature%22%2C%22pr%3A+bug+fix%22%2C%22pr%3A+performance%22%2C%22pr%3A+polish%22%2C%22pr%3A+documentation%22%2C%22pr%3A+maintenance%22%2C%22pr%3A+internal%22%2C%22pr%3A+dependencies%22%2C%22pr%3A+showcase%22%2C%22pr%3A+ignore%22%2C%22pr%3A+translations%22+) helps you find untagged PRs. |
| 29 | + |
| 30 | +3. Run `yarn changelog --from v3.10.0` to generate a changelog from the tagged PRs since a given release/tag. |
| 31 | + |
| 32 | +4. Copy that at the top of the `CHANGELOG.md` file with title `## 3.11.0 (date)`. |
| 33 | + |
| 34 | +5. Write a release blog post, inspired by former release posts. |
| 35 | + |
| 36 | +6. Create the docs version: `yarn workspace website docusaurus docs:version 3.11.0` |
| 37 | + |
| 38 | +7. Make sure there's no Crowdin translation problem. Run this: |
| 39 | + |
| 40 | +```bash |
| 41 | +yarn workspace website write-translations |
| 42 | +yarn crowdin:upload:website |
| 43 | +yarn crowdin:download:website |
| 44 | +yarn build:website |
| 45 | +``` |
| 46 | + |
| 47 | +8. Create a PR ([example](https://github.com/facebook/docusaurus/pull/11825)). Make sure all CI checks pass. If useful, create it earlier to get a deploy preview to review. |
| 48 | + |
| 49 | +9. Go to the [Publish workflow](https://github.com/facebook/docusaurus/actions/workflows/publish.yml) and click the "Run workflow" button. Fill in the form with: |
| 50 | + |
| 51 | +- From branch: main |
| 52 | +- NPM version: 3.10.0 |
| 53 | +- NPM Dist tag: latest |
| 54 | + |
| 55 | +10. Once the workflow finishes and code is on npm, you can merge the release PR. |
| 56 | + |
| 57 | +11. Follow the "After any release" section. |
| 58 | + |
| 59 | +## Release a patch |
| 60 | + |
| 61 | +TODO |
| 62 | + |
| 63 | +## After any release |
| 64 | + |
| 65 | +### Update the examples |
| 66 | + |
| 67 | +Do this on a separate branch/PR after a major/minor/patch release: |
| 68 | + |
| 69 | +```bash |
| 70 | +git co -b slorber/release-v3.11.0-examples |
| 71 | +yarn examples:generate |
| 72 | +git push |
| 73 | +``` |
| 74 | + |
| 75 | +Open the PR, then merge it. |
| 76 | + |
| 77 | +Make sure the [Docusaurus Playground](https://docusaurus.new) sandboxes keeps working. |
| 78 | + |
| 79 | +### Publish the GitHub release |
| 80 | + |
| 81 | +- Go to https://github.com/facebook/docusaurus/releases/new |
| 82 | +- Use tag `v3.11.0` |
| 83 | +- Use title `3.11.0` |
| 84 | +- Paste the release changelog |
| 85 | +- Check "Create a discussion for this release", use type "Release feedback" |
| 86 | +- Publish |
| 87 | + |
| 88 | +### Marketing |
| 89 | + |
| 90 | +Post about the new release on: |
| 91 | + |
| 92 | +- X - [example](https://x.com/sebastienlorber/status/2041532494076371044) |
| 93 | +- Bluesky - [example](https://bsky.app/profile/did:plc:hxmev3uady7j4litwnr5fzbg/post/3miw5wx5kck2t) |
| 94 | +- LinkedIn - [example](https://www.linkedin.com/posts/sebastienlorber_docusaurus-310-is-out-a-milestone-release-share-7447314350014517248-u2LR?utm_source=share&utm_medium=member_desktop&rcm=ACoAAASnHqkBaWvOyS4Hb4oFczVnrE8AA7RA6pU) |
| 95 | +- Discord #announcements channel - [example](https://discord.com/channels/398180168688074762/867060988717301780/1491091672250191963) |
| 96 | + |
| 97 | +It's not always easy to get access to an official [@docusaurus](https://x.com/docusaurus) account, but marketing is important, so at least publish something under your own name/account. |
0 commit comments