The project uses uv for dependency management.
Development is generally done on BioShell, so install uv system-wide into /opt/uv if it
is not already present. See Install uv in
the install guide.
# 1. Clone the repository
git clone https://github.com/Sydney-Informatics-Hub/shelley.git
cd shelley
# 2. Install shelley and dev dependencies
uv sync --extra dev
# 3. Load required modules
module load singularity shpc
# 4. Verify
uv run shelley --help
uv run pytest --collect-only # confirm pytest is installed; do not run yetNo venv activation needed.
uv synccreates a managed.venvautomatically. Run all commands throughuv run— you never need to activate the environment manually.
Why
uvand not plainpip? See ../explanation/install-design.md.
After pulling changes that modify pyproject.toml:
uv sync --extra devThe test suite has two groups:
| Group | What it tests | Mark | Runs in CI? |
|---|---|---|---|
| General unit tests | Registry lookups, shpc install logic, CLI rendering, interactive mode | (none) | Yes |
| CVMFS tests | Version resolution against real container files | cvmfs |
No (skipped) |
Every push to a pull request runs general unit tests automatically using uv run pytest. CVMFS tests are skipped — the CVMFS filesystem is not available in GitHub Actions.
Run from inside a BioShell session where /cvmfs/singularity.galaxyproject.org/all is mounted — cvmfs-marked tests enable automatically when the path exists:
uv run pytest # all tests
uv run pytest -v --tb=short # verbose with short tracebacks
uv run pytest tests/test_cvmfs_builder.py # single file
uv run pytest -m "not network" # exclude network tests when offlinemainis the default branch and holds released code. It is updated fromdevat release time and each release is taggedvX.Y.Z. The install guide points end users at@main(latest release) or a specific tag (reproducible).devcarries active development — feature work merges here first, then intomainat release time. Installing from@devgets the latest, possibly unstable code.
The version lives in one place — __version__ in
shelley/__init__.py. pyproject.toml reads it
dynamically ([tool.hatch.version]), and shelley --version reports it. Never
edit a version string anywhere else.
On dev:
- Bump the version (follow SemVer):
__version__inshelley/__init__.py(the sourcepyproject.tomlreads), plus theversionanddate-releasedfields inCITATION.cff. - Update
CHANGELOG.md: rename theUnreleasedsection to the new version with today's date, and add the release link at the bottom. - Confirm the build and version resolve:
uv build # builds shelley-<version>.{whl,tar.gz} uv run shelley --version # should print the new version uv run pytest -m "not cvmfs" # tests green
- Commit and open a PR into
main; merge once CI passes.
On main, after merge:
- Tag and push:
git checkout main && git pull git tag -a v0.1.0 -m "shelley 0.1.0" git push origin v0.1.0
- Create the GitHub release from the tag, pasting the CHANGELOG entry as notes.