Creating a Release
Releases are fully automated via the Release GitHub Actions workflow
(.github/workflows/release.yml). A single workflow_dispatch trigger
handles everything: running tests, bumping the version, building wheels, creating
the Git tag, and publishing the GitHub Release — with no manual tag creation needed.
Note
The old approach required creating a Git tag manually, which caused two GitHub Releases to be created (one from the tag push, one from the workflow). The new approach avoids this by having the workflow create the tag itself.
How to trigger a release
Go to the repository on GitHub and open Actions → Release.
Click Run workflow (top-right of the workflow runs list).
Select the target branch (usually
main).Choose the bump type:
Option
Effect
patchIncrements the last number, e.g.
1.2.3→1.2.4(bug fixes)minorIncrements the middle number and resets patch, e.g.
1.2.3→1.3.0majorIncrements the first number and resets the rest, e.g.
1.2.3→2.0.0Click Run workflow.
What the workflow does
The workflow executes the following steps automatically:
Checkout — full history (
fetch-depth: 0) so the tag push works.Install dependencies — Poetry is installed at the version pinned in
.poetry-version; project deps are installed viamake tests(equivalent topoetry sync --extras "tests notebooks").Run tests — full pytest suite must pass before any release artefact is built.
Bump version — the
versionfield inpyproject.tomlis updated in-place by a small Python script.Build wheels — two artefacts are produced in
dist-artifacts/:File
Description
aodn_cloud_optimised-<ver>-py3-none-any.whlFrozen wheel — all dependency versions pinned in wheel metadata via poetry-plugin-freeze. Use this for reproducible installs.
aodn_cloud_optimised-<ver>.unfrozen.whlUnfrozen wheel — standard wheel with flexible dependency ranges (as declared in
pyproject.toml). Use this when you want pip to resolve the latest compatible versions.aodn_cloud_optimised-<ver>.tar.gzSource distribution (sdist).
Verify — the frozen wheel is installed into the Poetry venv with
--no-deps --force-reinstalland a smoke-import is run.Note
--no-depsis required because the project uses a custom Git fork ofxarraythat is not available on PyPI. All dependency resolution happens viapoetry.lock.Commit & tag — the workflow commits the updated
pyproject.toml, creates thev<version>Git tag, and pushes both to the target branch.GitHub Release —
gh release createpublishes a new release with auto-generated notes and all three artefacts attached.
Tip
Steps 7 and 8 are guarded with if: ${{ !env.ACT }}, so they are
skipped automatically when testing the workflow locally with
act. You can test the full pipeline
(everything except the push and release) with:
act workflow_dispatch \
-W .github/workflows/release.yml \
--input bump_type=patch \
--artifact-server-path ./artifacts
Installing a released wheel
# Frozen wheel (pinned deps) — recommended for production
pip install aodn-cloud-optimised --no-deps
# Or install a specific wheel from the GitHub Release assets:
pip install https://github.com/aodn/aodn_cloud_optimised/releases/download/v<version>/aodn_cloud_optimised-<version>-py3-none-any.whl --no-deps
Updating the version manually (if needed)
If you ever need to bump the version without triggering a full release
(e.g. to fix a pre-release commit), edit pyproject.toml directly:
[project]
version = "1.2.4" # ← change this
Then commit with a chore: prefix:
git commit -m "chore: bump version to v1.2.4"