Plesty Documentation

Publishing a Release

How to tag a release, trigger the CI build-and-publish pipeline, and verify the package on PyPI.

Pre-flight checklist

Before tagging, verify everything is in order:

# 1. Run the full quantum check
uv run plesty check --standard quantum

# 2. Review unreleased commits
git log $(git describe --tags --abbrev=0 2>/dev/null || echo "")..HEAD --oneline

# 3. Confirm CHANGELOG is updated
cat CHANGELOG.md | head -20

# 4. Confirm the current branch is clean
git status

All gates must pass. The CHANGELOG must have an entry for this release. Do not tag until the check passes — CI Gate 14 runs the same check in a clean environment and will reject the build if it fails.

Determine the version bump

Commits since last tag contain Bump
Any feat: or feat!: (no breaking change) minor: v0.2.xv0.3.0
Only fix:, chore:, docs:, refactor: patch: v0.2.1v0.2.2
Any feat!: or BREAKING CHANGE: in footer major: v0.2.xv1.0.0

Tag and push

git tag v0.3.0
git push origin v0.3.0

Do not push the tag to a branch — push the tag directly. GitLab detects the v* pattern and triggers Gate 14.

What happens in CI after the tag push

  1. check stage: plesty check --standard quantum runs in a clean environment
  2. security stage: secret scan
  3. deploy stage: Sphinx docs build → push to docs-build branch
  4. release stage: uv buildtwine upload (or uv publish) to PyPI with PYPI_TOKEN

The package is live on PyPI within a few minutes of the pipeline completing. It will be installable as:

pip install plesty-power-meter==0.3.0
# or
uv add plesty-power-meter==0.3.0

Monitoring the pipeline

glab ci list -R plesty/hub/devices/thorlab/plesty-pm100d --ref v0.3.0

Or watch on the GitLab web UI under CI/CD → Pipelines.

After the release

  1. Update docs/index.md to reference the new version (if it mentions a version number)
  2. Start the next CHANGELOG section:
## Unreleased

(no changes yet)
  1. Notify the team if this release has API changes that downstream experiments must accommodate