Once your module passes all quality gates and the CI pipeline is green, you can publish it to PyPI. Publishing is automated through the CI pipeline — you just need to push a version tag.

Prerequisites

Before publishing, ensure:

Version numbering

PLESTY follows semantic versioning:

v<major>.<minor>.<patch>
Change Example When
Breaking v1.0.0 → v2.0.0 API-incompatible changes
Feature v0.2.0 → v0.3.0 New functionality, backward-compatible
Fix v0.2.3 → v0.2.4 Bug fixes, backward-compatible

Publishing workflow

Step 1: Update the version

Update the version in pyproject.toml:

[project]
name = "plesty-my-device"
version = "0.3.0"

Step 2: Update the changelog

Add an entry to CHANGELOG.md:

## [0.3.0] - 2026-07-22

### Added
- New measurement mode for continuous acquisition
- Support for remote calibration

### Fixed
- Timeout handling on slow connections

Step 3: Commit and push

git add pyproject.toml CHANGELOG.md
git commit -m "chore: bump version to 0.3.0"
git push origin feat/bump-version:exp

Step 4: Tag and push the tag

git tag v0.3.0
git push origin v0.3.0

Pushing a v* tag triggers the release stage in the CI pipeline, which builds the package and publishes it to PyPI.

What happens in CI

When a v* tag is pushed:

  1. Gate 14 triggers the build and release job
  2. The package is built (sdist + wheel)
  3. The package is published to PyPI
  4. A GitLab release is created

Verifying the release

After the pipeline completes:

  1. Check that the package is on PyPI: https://pypi.org/project/plesty-my-device/
  2. Verify the GitLab release is created
  3. Test installing the package: uv pip install plesty-my-device

Troubleshooting

Issue Likely cause
Pipeline fails on release CI_BOT_TOKEN missing or expired
Package not on PyPI PyPI credentials not configured
Tag already exists Delete local and remote tag, recreate

Next steps