docs(release): rewrite release_process.md for the per-package model - #340
Open
YunchuWang wants to merge 2 commits into
Open
docs(release): rewrite release_process.md for the per-package model#340YunchuWang wants to merge 2 commits into
YunchuWang wants to merge 2 commits into
Conversation
Split out of #335 as a standalone, independently reviewable change. The doc/release_process.md content here is byte-identical to that branch's runbook commit (c602302). Rewrites the release runbook for the per-package release model: - per-package independent versioning, changelogs, and tags - the one hard ordering constraint: core must publish before durable-functions (compat exact-pins @microsoft/durabletask-js), while azuremanaged is unordered - ESRP via eng/ci/release.yml documented as the sanctioned publish path, with its three individually-selectable per-package stages - the required `package` workflow input and prefix-derived branch/tag names - the durable-functions@preview dist-tag Whether ESRP can set an npm dist-tag is left as an explicit open action item, not asserted as fact. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d86f5f69-4e1a-4c1d-b017-5e290c85cc05
This was referenced Jul 29, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
Updates the release runbook (doc/release_process.md) to describe a per-package release model for this monorepo, including the ESRP-based publish path and package-specific tagging/versioning expectations.
Changes:
- Expands the runbook scope from two packages to three (core, azuremanaged, and
durable-functions) and documents per-package versioning/tagging. - Documents publish ordering constraints (core before
durable-functions) and ESRP release pipeline stage behavior (eng/ci/release.yml). - Adds guidance around prerelease dist-tags (notably
preview) and verification commands.
Comments suppressed due to low confidence (3)
doc/release_process.md:49
- The runbook says the Prepare Release workflow has a required
packageinput, but the current.github/workflows/prepare-release.yamlonly accepts aversioninput and bumps bothdurabletask-jsanddurabletask-js-azuremanagedtogether. If this doc is intended to merge independently of the per-package workflow change, this step should either be conditional or call out the prerequisite explicitly.
3. **Select the `package` to release** (required) — one of `durabletask-js`, `durabletask-js-azuremanaged`, or `azure-functions-durable`. Each run releases exactly one package.
doc/release_process.md:237
- This bullet claims the Prepare Release workflow's run summary suggests an
npm publish ... --tag previewcommand, but the current workflow summary only prints version/branch/tag and a Create PR link; it doesn't mentionnpm publishor dist-tags. This should be phrased as manual guidance (or gated on the per-package workflow update).
- The **Prepare Release** workflow publishes *every* prerelease (any version containing `-`) under the single **`preview`** dist-tag — its run summary suggests `npm publish --registry https://registry.npmjs.org/ --tag preview` — so a prerelease never moves `latest`.
doc/release_process.md:43
- This section currently reads as if the repo already has the per-package Prepare Release workflow (package selection, package-scoped tags/branches, etc.), but
.github/workflows/prepare-release.yamlin this branch is still the legacy workflow (singleversioninput, bumps two packages, tagsvX.Y.Z). Without an explicit prerequisite note, the runbook will be incorrect if merged before the workflow update.
Use the **Prepare Release** GitHub Action to automate the release preparation process.
| | Release Candidate | `0.1.0-rc.1` | `--tag next` | | ||
| | Stable | `0.1.0` | *(no tag, becomes `latest`)* | | ||
|
|
||
| > Note: current tooling overrides the beta/rc rows above for prereleases. The **Prepare Release** workflow publishes every prerelease under the single `preview` dist-tag, and `durable-functions` 4.x previews ship under `preview` (`npm install durable-functions@preview`). See *Quick Reference: npm Dist Tags* below. |
The Prepare Release workflow does not publish anything. It computes an `npm publish ... --tag preview` command (for any prerelease, i.e. any version containing "-") and writes it into the run summary for a human to run after the release PR merges. Reword the dist-tag note under the table, and the matching Quick Reference bullet, so both say the workflow emits/prescribes that command rather than publishing it. Keeps the "any version containing -" trigger, the preview-overrides-beta/rc point, and the durable-functions@preview example. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d86f5f69-4e1a-4c1d-b017-5e290c85cc05
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (4)
doc/release_process.md:62
- This section describes a per-package Prepare Release workflow (package-scoped tags/branches, changelog scoped to a package directory,
durable-functionsnpm publish guard). The current.github/workflows/prepare-release.yamldoes not do any of this: it generates the changelog fromgit log <latest-tag>..HEAD(no path scope), bumps bothpackages/durabletask-jsandpackages/durabletask-js-azuremanaged(and rewrites the azuremanaged peer dependency to>=$NEW_VERSION), writes only the repo-rootCHANGELOG.md, and createsrelease/v<version>+v<version>. Either add an explicit prerequisite note that this section applies only after the per-package workflow lands, or update the bullets to match the workflow that currently exists.
For the **one package you selected** (and only that package):
1. **Determines the next version**: uses the `version` input, or auto-increments the selected package's current version
2. **Generates a changelog**: lists commits since that package's last release tag, scoped to the package's directory (`git log <last-tag>..HEAD -- <pkg-dir>`), so only commits that touched that package are included
3. **Bumps the version**: updates `version` in that package's own `package.json`
4. **Updates that package's changelog**: core and azuremanaged write the repo-root `CHANGELOG.md`; `durable-functions` writes `packages/azure-functions-durable/CHANGELOG.md`
5. **Creates a release branch and a package-scoped tag**: tag `<prefix><version>` and branch `release/<prefix><version>`, where the prefix is `v` (core), `azuremanaged-v`, or `durable-functions-v`
6. **For `durable-functions` only**: verifies the exact-pinned `@microsoft/durabletask-js` version is already published on public npm, and fails the run if it is not (guards the uninstallable-dependency case)
doc/release_process.md:239
- These bullets again state that the Prepare Release workflow emits
npm publish ... --tag previewand thatdurable-functions4.x previews are documented asnpm install durable-functions@previewinpackages/azure-functions-durable/CHANGELOG.md. In the current repo, the workflow summary does not emit a publish command, and the compat package changelog is currently just## TBDwith no preview install guidance. This should be rewritten to avoid referencing behavior/docs that aren’t present yet.
- The **Prepare Release** workflow prescribes publishing *every* prerelease (any version containing `-`) under the single **`preview`** dist-tag: its run summary emits `npm publish --registry https://registry.npmjs.org/ --tag preview` for you to run after the release PR merges — so a prerelease never moves `latest`.
- **`durable-functions` 4.x previews ship under `preview`.** Its documented install line is `npm install durable-functions@preview` (see `packages/azure-functions-durable/CHANGELOG.md`); publish these with `npm publish --tag preview`.
- Whether the **ESRP** pipeline (Step 3) can set a dist-tag is an open question (B11); the `--tag` guidance here applies to a manual `npm publish`.
doc/release_process.md:39
- This note asserts the Prepare Release workflow emits an
npm publish … --tag previewcommand and thatdurable-functionspreviews ship underpreview. In the current repo,.github/workflows/prepare-release.yamldoes not emit anynpm publishcommand (it only prints branch/tag/PR link), andpackages/azure-functions-durable/CHANGELOG.mddoes not documentdurable-functions@preview(it currently only has a## TBDplaceholder). This guidance should be rewritten to avoid stating behavior that isn’t present in the repo yet.
This issue also appears on line 237 of the same file.
> Note: current tooling overrides the beta/rc rows above for prereleases. The **Prepare Release** workflow emits an `npm publish … --tag preview` command (in its run summary, to run after the release PR merges) for **any** prerelease version — any version containing `-` — so prereleases go out under the single `preview` dist-tag rather than `beta`/`next`; `durable-functions` 4.x previews ship under `preview` (`npm install durable-functions@preview`). See *Quick Reference: npm Dist Tags* below.
doc/release_process.md:51
- The docs say the Prepare Release workflow requires selecting a
packageinput and givesdurable-functions-specific version examples. In the current.github/workflows/prepare-release.yaml, the only workflow_dispatch input isversion, and the workflow always bumps bothdurabletask-jsanddurabletask-js-azuremanagedtogether. Please make these steps conditional (or add a prerequisite note) so the runbook stays accurate until the per-package workflow is actually present.
This issue also appears on line 55 of the same file.
3. **Select the `package` to release** (required) — one of `durabletask-js`, `durabletask-js-azuremanaged`, or `azure-functions-durable`. Each run releases exactly one package.
4. Optionally specify a version (e.g., `0.2.0-beta.1` for core, or `4.0.0-beta.1` for `durable-functions`). Leave empty to auto-increment the selected package's current version (bumps the prerelease number for a prerelease, otherwise the patch).
5. Click **Run workflow**
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Splits the release-runbook rewrite out of #335.
What
Rewrites
doc/release_process.mdfor the per-package release model:durable-functions(compat exact-pins@microsoft/durabletask-js), while@microsoft/durabletask-js-azuremanagedis unordered (peer floor>=0.3.0already satisfied by published core);eng/ci/release.ymldocumented as the sanctioned publish path, with its three individually-selectable per-package stages;packageworkflow input and prefix-derived branch/tag names;durable-functions@previewdist-tag.Whether ESRP can set an npm dist-tag is written as an explicit open action item, not asserted as fact.
Provenance
doc/release_process.mdcontent is byte-identical to #335's runbook commitc602302.Part of the #335 split
#335 is being decomposed into four mutually independent PRs that can merge in any order:
Together these carry every one of #335's 10 files with no overlap. #335 stays open until the file→PR mapping posted there is confirmed; these PRs neither merge nor close it.