Skip to content

docs(release): rewrite release_process.md for the per-package model - #340

Merged
YunchuWang merged 4 commits into
mainfrom
release-runbook
Jul 30, 2026
Merged

docs(release): rewrite release_process.md for the per-package model#340
YunchuWang merged 4 commits into
mainfrom
release-runbook

Conversation

@YunchuWang

@YunchuWang YunchuWang commented Jul 29, 2026

Copy link
Copy Markdown
Member

Splits the release-runbook rewrite out of #335.

What

Rewrites doc/release_process.md 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 @microsoft/durabletask-js-azuremanaged is unordered (peer floor >=0.3.0 already satisfied by published core);
  • 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 written as an explicit open action item, not asserted as fact.

Provenance

doc/release_process.md content is byte-identical to #335's runbook commit c602302.


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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 package input, but the current .github/workflows/prepare-release.yaml only accepts a version input and bumps both durabletask-js and durabletask-js-azuremanaged together. 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 preview command, but the current workflow summary only prints version/branch/tag and a Create PR link; it doesn't mention npm publish or 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.yaml in this branch is still the legacy workflow (single version input, bumps two packages, tags vX.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.

Comment thread doc/release_process.md Outdated
Copilot AI review requested due to automatic review settings July 29, 2026 22:57

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-functions npm publish guard). The current .github/workflows/prepare-release.yaml does not do any of this: it generates the changelog from git log <latest-tag>..HEAD (no path scope), bumps both packages/durabletask-js and packages/durabletask-js-azuremanaged (and rewrites the azuremanaged peer dependency to >=$NEW_VERSION), writes only the repo-root CHANGELOG.md, and creates release/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 preview and that durable-functions 4.x previews are documented as npm install durable-functions@preview in packages/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 ## TBD with 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 preview command and that durable-functions previews ship under preview. In the current repo, .github/workflows/prepare-release.yaml does not emit any npm publish command (it only prints branch/tag/PR link), and packages/azure-functions-durable/CHANGELOG.md does not document durable-functions@preview (it currently only has a ## TBD placeholder). 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 package input and gives durable-functions-specific version examples. In the current .github/workflows/prepare-release.yaml, the only workflow_dispatch input is version, and the workflow always bumps both durabletask-js and durabletask-js-azuremanaged together. 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**

YunchuWang and others added 3 commits July 30, 2026 12:04
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
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
Follow-up on the rebase onto main (which now contains #337 + #339). Corrects
doc/release_process.md so it matches the merged per-package release automation
and the owner's #339 changelog decisions:

- dist-tags: replace the misleading per-stage beta/next table + override note
  with the actual rule -- every prerelease publishes under a single `preview`
  dist-tag; a stable GA omits `--tag` and moves `latest`; git tags
  (v.../azuremanaged-v.../durable-functions-v...) are separate from npm
  dist-tags. Applied to both the Versioning Scheme and Quick Reference sections.
- Prepare Release only prepares a branch/tag/changelog; its emitted
  `npm publish` command is a MANUAL FALLBACK. The sanctioned publish path is
  the ADO official build + ESRP release pipeline.
- add a one-time azuremanaged tag preflight (seed azuremanaged-v0.3.0 from
  v0.3.0) so per-package changelog generation starts at v0.3.0 instead of the
  repo root -- no azuremanaged-v* tag exists yet, so the first run would
  otherwise fall back to the initial commit and dump the entire history.
- Publishing Step 2: the official build (official-build.yml) triggers on and
  builds `main` -- it has no branch/tag selector and never builds the release
  branch; one main build packs all three .tgz into one drop; stage selection
  decides which package publishes.
- Publishing Step 3: source artifact is the selected `main` official build
  (release.yml pins its build resource to branch: main); make explicit that
  core + compat need two release waves because the compat Prepare Release
  guard queries public npm for the exact core pin.
- changelog wording: generated `### Changes` commit/PR entries, not
  hand-authored `### Breaking Changes`; preview/migration narrative lives in
  packages/azure-functions-durable/README.md; Quick Reference citation moved
  from the compat CHANGELOG to the README.
- keep B11 as an explicit hard blocker for publishing durable-functions@
  4.0.0-beta.1 via ESRP; do not claim ESRP supports npm dist-tags.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d86f5f69-4e1a-4c1d-b017-5e290c85cc05
Copilot AI review requested due to automatic review settings July 30, 2026 19:12

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

…fix B11 contradiction)

The Versioning Scheme and Quick Reference sections asserted (unqualified) that
"every prerelease publishes under a single preview dist-tag", which contradicts
the B11 note that the sanctioned ESRP path's dist-tag behavior is unknown and
blocked. Only #337's emitted MANUAL FALLBACK `npm publish` command is known to
use `--tag preview`; ESRP is not.

- Versioning Scheme: scope the preview mapping to the Prepare Release workflow's
  emitted manual fallback command, and state that sanctioned prerelease
  publishing via ESRP is blocked pending B11.
- Quick Reference prerelease bullet: "Every prerelease publishes..." ->
  "When using this manual fallback, publish every prerelease..."; `latest`
  protection and the README install citation are preserved.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d86f5f69-4e1a-4c1d-b017-5e290c85cc05
Copilot AI review requested due to automatic review settings July 30, 2026 19:21

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 (5)

doc/release_process.md:133

  • Same as earlier: “B11” is not defined anywhere in-repo, so the label doesn’t help the reader. Consider removing the internal label (or defining it) while keeping the warning.
> **Open question (B11) — hard blocker for ESRP prereleases:** it is not yet confirmed whether the ESRP release task can set the npm **dist-tag** (e.g. publish a prerelease under `preview` rather than moving `latest`). Publishing a prerelease such as `durable-functions@4.0.0-beta.1` through ESRP is **blocked** until the ESRP / 1ES pipeline owners confirm how to apply the `preview` tag — do **not** assume ESRP applies a dist-tag. The `--tag` guidance in *Quick Reference: npm Dist Tags* applies to a manual `npm publish`.

doc/release_process.md:242

  • “Open question (B11)” uses an internal label that isn’t defined elsewhere in the repo. Dropping the label (or defining it) would make this quick reference clearer to future maintainers.
- **ESRP path (sanctioned, Step 3):** whether the ESRP release task can set an npm dist-tag is an **open question (B11)** and a **hard blocker** for publishing a prerelease such as `durable-functions@4.0.0-beta.1` through ESRP — confirm with the ESRP / 1ES owners how to apply the `preview` tag before publishing any prerelease via ESRP. Do **not** assume ESRP applies a dist-tag; the `--tag preview` guidance above is for a manual `npm publish`.

doc/release_process.md:39

  • The reference to “B11” is unclear/undefined in this repo, which makes this prerequisite hard to interpret for maintainers. Consider removing the internal label (or defining it explicitly) and state the dependency in plain terms.

This issue also appears in the following locations of the same file:

  • line 133
  • line 242
The scheme above describes the version **string**. Mapping a version to an **npm dist-tag** is a separate concern and does **not** follow a per-stage `beta`/`next` convention: the **Prepare Release** workflow's emitted **manual fallback** `npm publish` command tags every prerelease `preview` and omits `--tag` for a stable GA (so only a GA moves `latest`). Publishing a prerelease through the sanctioned ESRP path is **blocked pending B11** until owners confirm whether the ESRP task can set that tag. See *Quick Reference: npm Dist Tags* below for the authoritative rule.

doc/release_process.md:102

  • This sentence claims the official build “has no branch/tag selector and never builds” the release branch. The YAML shows it triggers on main, but it can still be manually queued on other branches; the more important constraint is that the release pipeline consumes artifacts from main (resource pinned to branch: main). Rewording avoids an absolute statement that may be inaccurate.
Trigger the official build pipeline to produce signed `.tgz` artifacts. The official build (`eng/ci/official-build.yml`) triggers on and builds **`main`** — it has no branch/tag selector and never builds the short-lived release branch. Use (or pick the automatic run of) the official build whose source commit **includes the merged release commit(s)**:

doc/release_process.md:123

  • Leaving “ADO pipeline link: TBD” makes this step non-actionable in practice. If the link can’t be provided yet, it’s clearer to omit the placeholder (or replace it with concrete navigation instructions / a tracked issue).
**Pipeline**: `eng/ci/release.yml` (ADO pipeline link: TBD)

@YunchuWang
YunchuWang merged commit c66c57e into main Jul 30, 2026
17 checks passed
@YunchuWang
YunchuWang deleted the release-runbook branch July 30, 2026 20:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants