Skip to content

Adopt release-please + tag-gated production deploys#124

Merged
TheMeinerLP merged 3 commits into
mainfrom
claude/release-please
May 15, 2026
Merged

Adopt release-please + tag-gated production deploys#124
TheMeinerLP merged 3 commits into
mainfrom
claude/release-please

Conversation

@TheMeinerLP
Copy link
Copy Markdown
Collaborator

@TheMeinerLP TheMeinerLP commented May 15, 2026

Summary

Two related changes (rebased onto current main, which already runs the cloudflare_module Workers preset via #125/#126/#128):

  1. Replace dormant semantic-release with release-please — a PR-based versioning workflow.
  2. Tag-gate Cloudflare Workers production deploysmain becomes preview-only, releases drive production.

Why

semantic-release was configured a year ago (release.config.cjs, pnpm release, six @semantic-release/* devDeps) but never ran: no workflow invoked it, no git tags, no CHANGELOG.md, package.json stuck at 0.0.0-development. And Cloudflare currently deploys production on every push to main, with no link to releases.

Commits

# Commit Scope
1 chore(release): remove unused semantic-release configuration Drops config, devDeps, script.
2 chore(release): adopt googleapis/release-please for versioning release-please workflow + config + manifest.
3 ci(release): promote release-please tags to a deploy branch Workflow that fast-forwards a release branch on every v* tag.

How the pipeline works after merge

push to main ─┬─→ Cloudflare Workers: PREVIEW deploy only
              └─→ release-please: update the open Release PR

merge Release PR ─→ commit on main ─→ release-please tags vX.Y.Z
                                          │
                                          └─→ promote-release.yml
                                                fast-forwards `release` branch
                                                          │
                                                          └─→ Workers Builds: PRODUCTION build
  • Release-please only does git/GitHub-API work (tag, changelog, package.json bump). It never touches nuxi build, the cloudflare_module preset, or the wrangler/D1 config.
  • nuxt.config.appConfig.version reads package.json, so production finally shows a real version instead of 0.0.0-development.
  • No force pushes: release-please tags sit on main's linear history, so release only ever fast-forwards.
  • Uses the default GITHUB_TOKEN. Cloudflare reacts to its own Git integration, so GitHub's workflow-loop-prevention on the token does not suppress the production build.
  • Deploy target is Cloudflare Workers Builds (Git integration) — no Cloudflare API token or CI build minutes needed; Cloudflare builds from the branch itself.

⚠️ Manual dashboard steps required (cannot be done in code)

In the Cloudflare dashboard, Workers & Pages → (your Worker) → Settings → Build → Branch control:

  1. Set the production branch to release (currently main).
  2. Keep non-production branch builds enabled so main and PRs still produce preview/version deploys.
  3. GitHub → Settings → Branches: do not protect release — the promote workflow pushes to it with GITHUB_TOKEN.
  4. GitHub → Settings → Actions → General → Workflow permissions: enable "Allow GitHub Actions to create and approve pull requests" (release-please needs this for its release PR).

Until step 1 is done, release is still created/updated by the workflow but Workers keeps building main for production — harmless, just not yet tag-gated.

Configuration highlights

  • release-type: node, bump-minor-pre-major: true → pre-1.0, feat: → minor, fix: → patch.
  • Changelog includes refactor, ci, docs; chore/build/test/style hidden but still trigger a release.
  • include-v-in-tag: true → tags as v0.1.0.
  • Manifest starts at 0.0.0; the first release PR decides the starting version from accumulated commits.

Test plan

  • After merge, release-please workflow runs on main and opens a Release PR
  • Release PR groups accumulated commits by type (Features / Bug Fixes / Refactors / CI / Documentation)
  • Dashboard: Workers production branch switched to release
  • Merging the Release PR → v0.1.0 tag → promote-release.yml runs → release fast-forwards
  • Workers Builds builds production from release; main push only produces previews
  • Deployed app reports 0.1.0 (was 0.0.0-development)
  • CHANGELOG.md created, package.json bumped on main

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 15, 2026

Deploying launchpad with  Cloudflare Pages  Cloudflare Pages

Latest commit: 120ed87
Status:⚡️  Build in progress...

View logs

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 15, 2026

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
launchpad 120ed87 Commit Preview URL

Branch Preview URL
May 15 2026, 09:57 PM

@TheMeinerLP TheMeinerLP changed the title Adopt release-please for versioning Adopt release-please + tag-gated production deploys May 15, 2026
claude added 3 commits May 15, 2026 21:54
semantic-release was wired up via release.config.cjs and the `pnpm
release` script but no workflow ever invoked it. After a year there
are still zero git tags, no CHANGELOG.md and package.json is stuck on
`0.0.0-development`. Dropping the dead config and devDeps now so the
follow-up commit can wire up release-please as the single source of
truth for versioning.
Release Please replaces the dead semantic-release config with a
PR-based workflow that fits this project better:

- Pushes to main append to a long-lived "Release Please" PR that lists
  every conventional commit since the last tag, grouped into feat /
  fix / perf / refactor / docs / ci sections.
- Merging that PR creates the git tag, bumps package.json (consumed by
  nuxt.config's appConfig.version), updates CHANGELOG.md and publishes
  a GitHub Release.
- Until the PR is merged, ordinary commits keep flowing into main and
  trigger Cloudflare Pages previews as before; releases happen on a
  cadence the team controls instead of one per `feat` commit.

Starts from version 0.0.0 in the manifest so the next breaking change
or feat lands at 0.1.0 (bump-minor-pre-major is enabled). Chore,
build, test and style commits stay out of the changelog by default but
still count toward the next bump.
Cloudflare Workers Builds' Git integration watches branches, not tags,
so tag-gated production deploys need a branch that only moves on
releases.

This workflow runs on every `v*` tag (the tags release-please cuts when
its release PR is merged) and fast-forwards a `release` branch to the
tagged commit. Pointing the Workers production branch at `release` via
the dashboard's branch control (see PR description) then means:

- pushes to main → Workers preview deploys only
- a merged release PR → tag → release branch moves → Workers
  production build

No force push: release-please tags are always on main's linear
history, so `release` only ever fast-forwards. Uses the default
GITHUB_TOKEN (contents: write); `release` must stay unprotected so the
token can push to it. Cloudflare reacts to its own Git integration, so
GITHUB_TOKEN's workflow-loop-prevention does not suppress the deploy.
@TheMeinerLP TheMeinerLP force-pushed the claude/release-please branch from b2562b4 to 120ed87 Compare May 15, 2026 21:55
@TheMeinerLP TheMeinerLP merged commit 5ff15c0 into main May 15, 2026
4 of 5 checks passed
@TheMeinerLP TheMeinerLP deleted the claude/release-please branch May 15, 2026 22:17
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.

2 participants