Skip to content

ci(release): publish from verified release intents#76

Merged
osnoser1 merged 5 commits into
mainfrom
osnoser1/release-intent-state-machine
Jun 19, 2026
Merged

ci(release): publish from verified release intents#76
osnoser1 merged 5 commits into
mainfrom
osnoser1/release-intent-state-machine

Conversation

@osnoser1

@osnoser1 osnoser1 commented Jun 18, 2026

Copy link
Copy Markdown
Member

PR Checklist

Closes # N/A

What is the new behavior?

  • Replaces loose release workflow version inputs with explicit release intents: stable, prerelease, promote-stable, and manual.
  • Removes the old release option aliases from the release CLI/planner so maintainers use one model: intent plus bump, with manual releases requiring an exact version and reason.
  • Keeps version math inside tools/release and makes publish recompute and verify the validated plan before touching tags, npm, or GitHub Releases.
  • Adds release:notes so workflows can render the future GitHub Release notes from the same release plan.
  • Shows planned version, tag, dist-tag, and future release notes in the validation job summary before npm-release approval; the protected environment links back to the workflow run.
  • Guards stable major releases and stable prerelease promotion, while allowing configured package documentation updates after a prerelease.
  • Hardens release workflow contract tests by parsing workflow YAML semantically instead of depending on fragile text snippets.

Does this PR introduce a breaking change?

  • Yes
  • No

No breaking change for package consumers. Maintainers will use release intent inputs instead of manually typing release versions in the GitHub workflows or passing release option aliases to the internal release CLI.

Other information

Validation performed:

  • pnpm --filter=@limitless-angular/release-tools test
  • ./node_modules/.bin/eslint tools/release/cli.mjs tools/release/src/plan.mjs tools/release/src/pipeline.mjs tools/release/src/plan.test.mjs tools/release/src/pipeline.test.mjs
  • pnpm turbo run test --filter=@limitless-angular/angular-compat
  • pnpm --filter=@limitless-angular/release-tools run --silent release:notes --intent prerelease --bump major
  • ruby -ryaml -e 'ARGV.each { |f| YAML.load_file(f); puts "parsed #{f}" }' .github/workflows/release-dry-run.yml .github/workflows/release-and-publish.yml
  • git diff --check
  • PR ci(release): publish from verified release intents #76 GitHub checks are passing on the latest head.

Architecture note: GitHub Actions remains orchestration and approval only; release intent, version derivation, release notes, and plan comparison stay inside tools/release.

[Optional] What gif best describes this PR or how it makes you feel?

N/A

@netlify

netlify Bot commented Jun 18, 2026

Copy link
Copy Markdown

Deploy Preview for limitless-angular-sanity-example canceled.

Name Link
🔨 Latest commit 3778610
🔍 Latest deploy log https://app.netlify.com/projects/limitless-angular-sanity-example/deploys/6a345b921ec372000811b046

@pkg-pr-new

pkg-pr-new Bot commented Jun 18, 2026

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/@limitless-angular/sanity@76

commit: 3778610

@osnoser1 osnoser1 merged commit 90763df into main Jun 19, 2026
18 checks passed
@osnoser1 osnoser1 deleted the osnoser1/release-intent-state-machine branch June 19, 2026 04:37
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.

1 participant