Releasing

GASFIR uses hatchling as its build backend and publishes to both TestPyPI and PyPI via GitLab CI/CD.

Version Numbering

Versions follow SemVer: MAJOR.MINOR.PATCH.

The version is defined only in pyproject.toml:

[project]
version = "0.9.0"

src/gasfir/__init__.py reads it at import time via importlib.metadata so there is a single source of truth.

Release Process

  1. Update pyproject.toml to the new version.

  2. Update CHANGELOG.md — move items from Unreleased to the new version section with today’s date.

  3. Commit with message chore: release vX.Y.Z.

  4. Push and open a merge request into main.

  5. After the MR is merged, tag main:

    git tag vX.Y.Z
    git push origin vX.Y.Z
    

CI Publishing Rules

Tag / branch

Published to

Approval required

main (no tag)

TestPyPI

No

vX.Y.Z-alpha, -beta, -rc

TestPyPI

No

vX.Y.Z (stable)

PyPI

Yes — manual approval in GitLab

Verifying the TestPyPI Release

Install from TestPyPI to verify before the production release:

pip install --index-url https://test.pypi.org/simple/ \
            --extra-index-url https://pypi.org/simple/ \
            gasfir==X.Y.Z