name: CI on: push: branches: ["**"] pull_request: branches: ["**"] jobs: lint: runs-on: ubuntu-latest # Custom image (see .gitea/ci-image/Dockerfile): the official # sagemath/sagemath image is amd64-only and this runner is arm64, and # ruff/pytest are baked in here so jobs don't reinstall them every run. container: image: gitea.piribauer.ch/julian/sage-ci:latest steps: - name: Checkout uses: actions/checkout@v4 - name: Preparse .sage files # Turns each *.sage file into real Python (*.sage.py) so ruff can # parse it, and prepends the `from sage.all import *` that `sage` # normally injects at runtime, so Sage's globals (ZZ, var, matrix, ...) # resolve instead of looking like undefined names. run: | set -e for f in $(find . -name "*.sage" -not -path "./playground/*"); do sage --preparse "$f" printf 'from sage.all import * # noqa: F401,F403\n%s\n' "$(cat "${f}.py")" > "${f}.py" done - name: ruff check # --no-respect-gitignore: *.sage.py is gitignored (it's generated, see # the previous step) but that's exactly what we need to lint here. run: sage --python -m ruff check --no-respect-gitignore . test: runs-on: ubuntu-latest needs: lint container: image: gitea.piribauer.ch/julian/sage-ci:latest steps: - name: Checkout uses: actions/checkout@v4 - name: Run tests run: sage --python -m pytest tests/