This repository releases from Git tags. The tag is the public source of truth for a release version.
Use Semantic Versioning tags with a leading v:
vMAJOR.MINOR.PATCHfor stable releasesvMAJOR.MINOR.PATCH-rc.Nfor release candidatesvMAJOR.MINOR.PATCH-beta.NorvMAJOR.MINOR.PATCH-alpha.Nfor prereleases
Examples:
v1.0.1= patch releasev1.1.0= minor releasev2.0.0= major releasev1.1.0-rc.1= prerelease
CI build numbers are for internal artifacts only. Public releases use clean SemVer tags, not build-number versions such as 1.0.0-build123.
Before creating a release, make sure main is clean and tests pass locally.
git checkout main
git pull
git tag v1.0.1
git push origin v1.0.1Pushing the tag starts the release workflow. The workflow validates the tag, runs tests, builds the project, creates a release ZIP, writes SHA256 checksums, creates a GitHub Release, and uploads the assets.
git checkout main
git pull
git tag v1.0.1-rc.1
git push origin v1.0.1-rc.1Prerelease tags create GitHub prereleases. Python prereleases are not published to PyPI by default.
Where this repository contains Python packages, package versions are derived from Git tags at build time. Stable tags such as v1.0.1 publish package metadata as 1.0.1, without the leading v.
Python package tooling normalizes prerelease metadata to PEP 440, so v1.0.1-rc.1 becomes a Python package version like 1.0.1rc1.
Python publishing uses PyPI Trusted Publishing with GitHub OIDC. No PYPI_TOKEN is required.
To enable PyPI publishing for stable tags:
- In PyPI, configure a trusted publisher for the
mirrorneuron-python-sdkproject. If the project does not exist yet, create a pending publisher for that exact project name. - Set the PyPI environment name to
pypi. - Set the workflow filename to
release.yml(the file lives at.github/workflows/release.yml). - Leave token-based secrets unset unless there is a deliberate reason to use them.
Stable tags publish to PyPI only after the build and tests succeed. Prerelease tags do not publish to PyPI unless the repository variable PUBLISH_PRERELEASES_TO_PYPI is set to true.