A stable release with no docs/CHANGELOG/v<version>/ directory hard-failed at the very first job. Fixing it mid-release is not "write two markdown files": the stable promotion gate pins github.commit to the promoted prerelease, so the changelog commit invalidates that artifact and forces a fresh ~27-minute prerelease round trip. Missing notes are now a loud warning instead of a failure. reviewReleaseNotePlanPolicy returns warnings for a stable release with no notes, or one missing zh-CN, and prepare-release-note surfaces them as a ::warning:: annotation plus a job summary entry. Notes that exist but cannot be consumed still throw: a channel mismatch, or a plan that omits the default locale every consumer falls back to. publish-metadata carried a second stable gate on the same condition. Removing only the first would have moved the hard failure past the GitHub draft release and asset upload, which is strictly worse, so both are gone. The rest of the chain already treated "absent" as a complete outcome — it is the beta and prerelease path — so publication, verification, and metadata assembly are unchanged. Non-stable channels behave exactly as before.
1.5 KiB
Release note source contract
Release note content is stored under docs/CHANGELOG/v<releaseVersion>/<locale>.md.
The directory name must contain the exact full release version, including its
channel and counter when present. There is no fallback to a base version.
Each locale file must:
- use a canonical BCP 47 locale as its filename, such as
en.mdorzh-CN.md; - be valid UTF-8 Markdown no larger than 1 MiB;
- begin with YAML front matter containing non-empty
titleanddescriptionstrings; and - contain a non-empty Markdown body after the front matter.
The en locale is required whenever a release-note directory is supplied,
because every consumer falls back to it. Everything else is a recommendation,
not a gate: any channel may omit the version directory entirely, and a stable
release that is missing its notes — or missing zh-CN — still publishes. The
gap is reported as a GitHub Actions warning and a job-summary entry on the
release run rather than failing it, so an editorial omission never forces a new
prerelease round trip. Stable releases are still expected to ship en and
zh-CN; treat the warning as a to-do, not as permission to skip them.
tools-release retains the front matter in the uploaded file and publishes it
as an immutable object at
<channel>/versions/<releaseVersion>/release-notes/<locale>.md. Public release
metadata contains only locale transport descriptors (url, mediaType,
sha256, and size); render fields are read from the content itself.