Skip to content

feat: automate releases with release-please#4

Merged
tuyakhov merged 1 commit into
mainfrom
release-automation
Jun 13, 2026
Merged

feat: automate releases with release-please#4
tuyakhov merged 1 commit into
mainfrom
release-automation

Conversation

@tuyakhov

Copy link
Copy Markdown
Contributor

Summary

Automates the entire release pipeline so version, changelog, tag, GitHub Release, and PyPI publish are all driven by Conventional Commit messages — fulfilling the request to automate version + release creation.

How it works

  1. Pushes to main run release-please, which maintains a standing release PR that bumps VERSION in src/senderkit/_version.py and updates CHANGELOG.md from the commit history.
  2. Merging that release PR tags vX.Y.Z, creates the GitHub Release, and — in the same workflow run — builds and Trusted-Publishes to PyPI.

Keeping build/publish in the same run as release-please (gated on its release_created output) sidesteps the well-known limitation that releases created via GITHUB_TOKEN don't trigger a separate on: release workflow. No PAT required.

Changes

  • release.yml — rewritten: push → release-please → (build → publish)-on-release. Verifies the built version matches the tag before publishing.
  • release-please-config.json / .release-please-manifest.jsonsimple release type; version updated in _version.py via an x-release-please-version annotation. Manifest starts at 0.0.0 so the first release PR cuts 0.1.0 (this PR's feat: commit drives that minor bump).
  • _version.py — annotated; still the single source of truth (dynamic version regex unaffected, verified).
  • CONTRIBUTING.md / PR template — document Conventional Commits + the automated flow; CHANGELOG.md is now generated, not hand-edited.

Reviewer notes

  • Local checks pass: ruff, ruff format, mypy, pytest (61), python -m buildsenderkit-0.1.0.
  • After this merges, release-please will open a "chore(main): release 0.1.0" PR. Review/edit its generated CHANGELOG, then merge it to publish 0.1.0 to PyPI.

One-time repo setup required (not in this PR)

  • Settings → Actions → General → Workflow permissions → enable "Allow GitHub Actions to create and approve pull requests" (otherwise release-please can't open its PR).
  • The PyPI Trusted Publisher must point at workflow release.yml + environment pypi (you confirmed this is configured).

🤖 Generated with Claude Code

Replace the manual "tag + GitHub Release" flow with release-please, so
version bumps, CHANGELOG, tagging, and PyPI publishing are all driven by
Conventional Commit messages.

- release.yml: on push to main, run release-please; when it cuts a
  release, build + Trusted-Publish to PyPI in the same run (avoids the
  GITHUB_TOKEN cross-workflow trigger limitation).
- release-please-config.json + .release-please-manifest.json: simple
  release type, version sourced from src/senderkit/_version.py via an
  `x-release-please-version` annotation; manifest starts at 0.0.0 so the
  first release PR cuts 0.1.0.
- CONTRIBUTING + PR template: document Conventional Commits and the
  automated release flow; changelog is now generated, not hand-edited.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codecov

codecov Bot commented Jun 13, 2026

Copy link
Copy Markdown

Welcome to Codecov 🎉

Once you merge this PR into your default branch, you're all set! Codecov will compare coverage reports and display results in all future pull requests.

ℹ️ You can also turn on project coverage checks and project coverage reporting on Pull Request comment

Thanks for integrating Codecov - We've got you covered ☂️

@tuyakhov tuyakhov merged commit a8ccebd into main Jun 13, 2026
9 checks passed
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