Reusable GitHub Actions workflows for Eye2Gene repositories.
All workflows are designed to be called from other repos via uses: and updated in one place. When a workflow is improved here, all consuming repos benefit on their next push.
A complete CI pipeline for Python projects using uv and just.
Jobs:
| Job | Description |
|---|---|
ci |
Runs just ci — format check, lint, type-check, audit |
license-check |
Runs just license-check — checks dependency licences (non-blocking) |
test |
Runs just test across a Python version matrix |
build |
Runs just build — builds the wheel and sdist |
Inputs:
| Input | Type | Default | Description |
|---|---|---|---|
python-versions |
string | '["3.12", "3.13"]' |
JSON array of Python versions to test |
license-check-ignore |
string | "certifi cookiecutter" |
Space-separated packages to skip in licence check |
Requirements for calling repos:
The workflow delegates all commands to just, so the calling repo must have a justfile with these recipes:
just ci # ruff format --check, ruff check, ty check, uv audit
just license-check # licensecheck --format markdown --show-only-failing
just test # pytest with coverage
just build # uv build
This is the default layout generated by e2g-pypkg.
Usage:
# .github/workflows/ci.yml
name: CI
on:
push:
paths:
- "src/**"
- "tests/**"
- "pyproject.toml"
- "uv.lock"
- "justfile"
- ".github/**"
pull_request:
branches: [main]
jobs:
ci:
uses: eye2Gene/e2g-workflows/.github/workflows/python-ci.yml@mainCustomising inputs:
jobs:
ci:
uses: eye2Gene/e2g-workflows/.github/workflows/python-ci.yml@main
with:
python-versions: '["3.12", "3.13", "3.14"]'
license-check-ignore: "certifi requests"Using in a release workflow (run CI before releasing):
# .github/workflows/release.yml
jobs:
ci:
uses: eye2Gene/e2g-workflows/.github/workflows/python-ci.yml@main
release:
needs: [ci]
runs-on: ubuntu-latest
steps:
# ... your release stepsTo add a workflow for another language or toolchain:
- Create
.github/workflows/<language>-ci.ymlwithon: workflow_call - Document it in this README following the same format
- Open a PR — once merged to
main, it's immediately available to all consumers
Planned additions:
node-ci.yml— Node.js / TypeScript CIdocker-ci.yml— Docker image build and push
All workflows are consumed at @main. This means consumers always get the latest version automatically — no version pinning needed.
If a breaking change is ever required (e.g., a justfile recipe is renamed), it will be communicated via the e2g-pypkg template update mechanism (cruft).
This is a public repository. The workflows themselves contain no secrets — authentication tokens are passed in from the calling repo's secrets.GITHUB_TOKEN at runtime.