Package publishing (eai-supmig)
The eai-supmig Python package is built and published from this repository (ai-workflows/superbuild-workflow).
| Name | Value |
|---|---|
| PyPI distribution | eai-supmig |
| Import package | eai_supmig |
| Console script | eai-supmig |
| Module run | python -m eai_supmig |
Release runbook (changelog, bump script, CI jobs): release-pipeline.md
Package layout
- Build: PEP 517
setuptoolsviapyproject.toml - Layout:
src/eai_supmig/ - Entry point:
eai-supmig = eai_supmig.cli:app - Version:
eai_supmig.__version__insrc/eai_supmig/__init__.py
Local build and test
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -e ".[dev]"
pytest -q
python -m build
python -m twine check dist/*
eai-supmig doctor --help
python -m eai_supmig --help
python scripts/smoke_install_package.py --dist dist --expected-version 0.1.0 --venv .smoke-venv
Artifacts: dist/*.whl, dist/*.tar.gz
CI pipeline (GitLab)
| Stage | Job | When |
|---|---|---|
| lint | ruff | develop / MR |
| test | unit | develop / MR |
| build | build:package | develop / master / MR |
| build | package:build | tags v*.*.* |
| release | package:smoke | tags |
| publish | publish:gitlab | tags (automatic) |
| publish | publish:testpypi:branch | manual on develop / master (allow_failure) |
| publish | publish:testpypi | tags (automatic) |
| publish | package:smoke-testpypi | after TestPyPI on tags |
| publish | publish:pypi | manual on release tag |
| publish | package:smoke-pypi | after production PyPI |
GitLab PyPI registry
Project registry URL pattern:
https://gitlab.com/api/v4/projects/<PROJECT_ID>/packages/pypi
CI variables:
| Variable | Purpose |
|---|---|
CI_JOB_TOKEN | Built-in; upload to GitLab package registry |
TWINE_USERNAME | gitlab-ci-token for GitLab registry |
TWINE_PASSWORD | $CI_JOB_TOKEN |
Upload example (CI job publish:gitlab):
pip install twine
python -m build
python -m twine upload \
--repository-url "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi" \
--username gitlab-ci-token \
--password "${CI_JOB_TOKEN}" \
dist/*
TestPyPI
| Variable | Purpose |
|---|---|
TWINE_PASSWORD_TESTPYPI | TestPyPI API token (masked; leave unprotected for develop branch jobs) |
Branch preview (manual):
python -m twine upload \
--repository-url https://test.pypi.org/legacy/ \
--username __token__ \
--password "${TWINE_PASSWORD_TESTPYPI}" \
dist/*
Tag pipeline uploads automatically, then package:smoke-testpypi installs from TestPyPI before
production PyPI is offered.
PyPI (production)
| Variable | Purpose |
|---|---|
TWINE_PASSWORD_PYPI | PyPI API token (masked, protected; manual tag job only) |
pip install eai-supmig
Release flow (summary)
- Curate
CHANGELOG.md[Unreleased]ondevelop. - Green CI on
develop. python scripts/bump_release.py— bumps__version__, finalizes changelog, commits.- Push
develop, ff-mergemaster. git push origin vX.Y.Z— CI verifies version, smokes wheels, publishes to GitLab + TestPyPI.- Trigger manual
publish:pypiwhen ready for production.
Details, changelog rules, and job table: release-pipeline.md.
Versioning
Use semver. Update version only via scripts/bump_release.py (or match tag to
__version__ manually before pushing vX.Y.Z). CI verify_release_version.py rejects
mismatched tags.