Skip to content

ci(release): release with release-please and an approval step - #43

Merged
StefanoGuerrini merged 3 commits into
mainfrom
ci/release-please
Oct 14, 2026
Merged

StefanoGuerrini merged 3 commits into
mainfrom
ci/release-please

Conversation

@StefanoGuerrini

@StefanoGuerrini StefanoGuerrini commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Releases now come from release-please and an approval step. The manual bump and release targets are removed.

What changes for maintainers

  • PR titles must be Conventional Commits. fix, feat and perf need a lowercase scope, for example fix(crawl): ....
  • A new check rejects trailer lines, issue tracker keys and AI attribution in PR titles, bodies, branch names and commit messages.
  • Only fix, feat, perf and revert PRs lead to a release. docs, chore, test, ci, refactor, build and style PRs do not.
  • Do not change the version by hand. release-please sets it in pyproject.toml, src/zenrows/__version__.py and uv.lock.
  • Changes to .github/ and release-please-config.json need a review from @ZenRows/prod-approvers. Any maintainer can merge the release PR.

How a release works

After each merge to main, release-please opens or updates the PR chore: release X.Y.Z.

  1. Merge the release PR.
  2. Approve the run in the release environment.

The checks and the build run first, in a job with read-only rights, so the approval waits on a green build. The workflow then creates the tag vX.Y.Z and the GitHub release, and publishes to PyPI. If the version is already on PyPI, it skips the publish. To publish an existing tag again, run the Release workflow by hand with that tag.

Notes

  • The manifest starts at 1.7.0, the latest release. The first release after this merge is 1.7.1, from a real fix.
  • make bump, make release and scripts/bump_version.py are removed.
  • The workflow file name stays release.yml, so the PyPI trusted publisher does not change.

release-please opens a "chore: release X.Y.Z" PR from the Conventional
Commit titles on main. When that PR is merged, the release job waits for
an approval in the "release" environment. Then it runs the checks, creates
the tag and the GitHub release, and publishes to PyPI with trusted
publishing.

A commit-hygiene check validates PR titles, bodies, branch names and
commit messages. The manual bump and release targets are removed.
@ZenRows ZenRows deleted a comment from linear Bot Oct 14, 2026
@StefanoGuerrini
StefanoGuerrini marked this pull request as ready for review October 14, 2026 08:48
…the attribution check

A re-run after a partial release now finds its own tag and goes on to
publish, instead of stopping. The notes config drops the label categories,
so the notes keep the "What's Changed" heading. The attribution check
matches attribution phrases only, so PRs about integrations can name those
products. The write token reaches only the steps that call gh.
…e the release PR

The checks and the build now run in their own read-only job, before the
approval, and pass the packages as an artifact. The job that can mint a
PyPI token runs no project code, and the approver approves a green run.

The manifest leaves CODEOWNERS, because every release PR changes it and
the release environment is already the approval gate. The commit check
fails when it cannot read the commits, and allows PEP, RFC and HTTP
numbers. DEVELOPMENT.md explains how to recover when the checks fail after
the release PR is merged.
@StefanoGuerrini
StefanoGuerrini merged commit 14938f5 into main Oct 14, 2026
3 checks passed
@StefanoGuerrini
StefanoGuerrini deleted the ci/release-please branch October 14, 2026 09:10
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