Skip to content

Release Process

This document describes the release process for oak-ci. All releases are cut directly from main (trunk-based development).

OAK uses PEP 440 version strings. Tags must use PEP 440-native pre-release suffixes — SemVer-style suffixes (e.g. v0.6.0-beta.1) are not supported because hatch-vcs does not map them to valid PEP 440 versions.

Release typeTag formatPyPI versionExample
StablevX.Y.ZX.Y.Zv0.5.0
BetavX.Y.ZbNX.Y.ZbNv0.6.0b1
Release candidatevX.Y.ZrcNX.Y.ZrcNv0.6.0rc1
AlphavX.Y.ZaNX.Y.ZaNv0.6.0a1
TestPyPI onlyvX.Y.Z-testpypi.NX.Y.Z.postN.dev0v0.5.0-testpypi.1

Tag vX.Y.Z on main. The workflow:

  1. Builds the Python wheel and sdist.
  2. Creates a GitHub Release (marked latest) with commit log and stable install instructions.
  3. Publishes to PyPI.
  4. Triggers update-formula.yml in goondocks-co/homebrew-oak to update Formula/oak-ci.rb.
Terminal window
git tag v0.5.0
git push origin v0.5.0

User install:

Terminal window
brew install goondocks-co/oak/oak-ci
pipx install oak-ci --python python3.13
uv tool install oak-ci --python python3.13

Tag vX.Y.ZbN (or rcN, aN) on main. The workflow:

  1. Builds the Python wheel and sdist.
  2. Creates a GitHub Release marked pre-release.
  3. Publishes to PyPI as a PEP 440 pre-release.
Terminal window
git tag v0.6.0b1
git push origin v0.6.0b1

Switching to pre-release channel:

Users on an existing OAK install can switch to the beta channel from the daemon UI (About dialog) or by editing ~/.oak/update.yaml:

update:
channel: beta

The daemon automatically checks for and downloads pre-release versions via the self-update system.


Tag vX.Y.Z-testpypi.N on any branch. The workflow:

  1. Builds the Python wheel and sdist.
  2. Creates a GitHub Release marked pre-release.
  3. Publishes to TestPyPI only — nothing goes to real PyPI or Homebrew.
Terminal window
git tag v0.5.0-testpypi.1
git push origin v0.5.0-testpypi.1

User install (for testing only):

Terminal window
pip install oak-ci --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/

  1. Ensure main is green (make check passes, CI is clean).
  2. Update CHANGELOG or release notes if maintained.
  3. Create and push the tag (see formats above).
  4. Monitor the Release workflow.
  5. Verify the GitHub Release was created with the correct prerelease flag.
  6. For stable: confirm PyPI shows the new version and brew upgrade oak-ci works.
  7. For pre-release: confirm PyPI shows the pre-release version.

The tap lives at goondocks-co/homebrew-oak:

FormulaChannelClass
Formula/oak-ci.rbStableOakCi

The formula is updated automatically by the update-formula.yml workflow, which is triggered by release.yml on stable releases. The HOMEBREW_TAP_TOKEN secret must have workflow scope on the goondocks-co/homebrew-oak repo.