Skip to content

Release Checklist

lazy-cuh is pre-alpha. Releases stay in the 0.x line until the framework API is intentionally promoted.

The project uses python-semantic-release with conventional commits.

Important settings:

  • allow_zero_version = true keeps automated releases in 0.x.
  • major_on_zero = false prevents breaking-change commits from jumping straight to 1.0.0 while the package is pre-alpha.
  • Development Status :: 2 - Pre-Alpha in pyproject.toml is the package lifecycle signal.

Use conventional commit messages for commits that should affect releases:

feat: add editable options
fix: keep invalid modal input open
docs: document release checks
chore: update workflow metadata

Run these before merging release-related changes:

Terminal window
nix develop -c uv run pytest
nix develop -c uv run ruff check .
nix develop -c uv run pyright
nix run .#docs-build
nix flake show

For local package/release tooling checks, install the release extra and validate the built distributions:

Terminal window
nix develop
uv sync --extra release
uv run python -m build
uv run twine check dist/*

Useful interactive smoke checks:

Terminal window
nix run .#demo
nix run .#example-options
nix run .#example-help-modal
nix run .#example-help-keybar
nix run .#example-text-wrap

The release workflow runs only after the Test workflow succeeds on the current main SHA, or by manual dispatch.

The workflow:

  1. checks out full history,
  2. runs semantic-release version,
  3. validates dist/* with twine check,
  4. runs semantic-release publish,
  5. publishes to PyPI with trusted publishing.

The default GITHUB_TOKEN can publish repository releases. A GH_PAT secret may be provided later if release commits need to trigger follow-up workflows.

The PyPI trusted publisher configuration should match:

PyPI project name: lazy-cuh
Owner: janthmueller
Repository name: lazy-cuh
Workflow name: release.yml
Environment name: pypi

The release workflow sets permissions.id-token: write and uses the pypi environment so pypa/gh-action-pypi-publish can publish without a PyPI API token.