Skip to content

Add release automation: Makefile + CI and Trusted Publishing workflows#2

Open
aiand-atul wants to merge 1 commit into
mainfrom
release-automation
Open

Add release automation: Makefile + CI and Trusted Publishing workflows#2
aiand-atul wants to merge 1 commit into
mainfrom
release-automation

Conversation

@aiand-atul
Copy link
Copy Markdown
Contributor

Codifies the PyPI release process learned during the 0.1.0 release into repeatable tooling.

What's here

  • Makefilesync / test / lint / build / check / preflight / verify / tag / release, plus a break-glass manual upload. Run make help for the list.
  • .github/workflows/ci.yml — test/lint/build/check matrix on Python 3.10–3.13 for pushes and PRs.
  • .github/workflows/publish.yml — tag-triggered (v*) build + publish via PyPI Trusted Publishing (OIDC). No API tokens stored anywhere. Refuses to publish if the tag doesn't match the pyproject.toml version.

Gotchas baked in (from the 0.1.0 release)

  • Remote is origin, not upstream.
  • The verify venv pins Python ≥3.10 (the system python3 was 3.9.6).
  • uv venv ships no pip, so installs use uv pip.
  • The import check runs from /tmp so it loads the installed wheel, not the local ./aiand source tree.

Verified locally

  • make help, make check, and make verify VERSION=0.1.0 (clean-room install from live PyPI) all pass.
  • Both workflow YAMLs parse.

Required one-time setup (not in this PR)

Trusted Publishing needs a publisher configured on PyPI before publish.yml can work:

Future release flow: bump version in the four places, then make release VERSION=0.2.0.

🤖 Generated with Claude Code

Codifies the release runbook from the 0.1.0 release:
- Makefile targets (sync/test/lint/build/check/preflight/verify/tag/release),
  with the corrections learned during 0.1.0 (origin not upstream, Python >=3.10
  verify venv, uv pip, import check outside the repo).
- ci.yml: test/lint/build/check matrix on 3.10-3.13 for pushes and PRs.
- publish.yml: tag-triggered build + PyPI Trusted Publishing (OIDC), no stored
  tokens; verifies the tag matches the pyproject version before publishing.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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