From d649d5047f93d000d7562f940d3189f34f9e63ef Mon Sep 17 00:00:00 2001 From: julian Date: Sun, 26 Jul 2026 14:18:17 +0200 Subject: [PATCH] ci: fix sage CLI invocations for conda-forge's sage (no --preparse/--python flags) --- .gitea/workflows/ci.yml | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 655193e..2c189c3 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -24,17 +24,31 @@ jobs: # 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. + # + # The conda-forge `sage` CLI has no `--preparse` flag (unlike the + # classical sage script the image was originally written against), so + # this calls the same preparser Sage itself uses, directly in Python. 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 + python - <<'PYEOF' + import pathlib + from sage.repl.preparse import preparse_file + + for f in pathlib.Path(".").rglob("*.sage"): + if f.parts and f.parts[0] == "playground": + continue + out = preparse_file(f.read_text()) + f.with_suffix(f.suffix + ".py").write_text( + "from sage.all import * # noqa: F401,F403\n" + out + ) + PYEOF - 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 . + # `python` here is the conda env's own interpreter -- it already has + # sage/ruff/pytest importable, `sage --python` isn't a real flag on + # the conda-forge sage CLI. + run: python -m ruff check --no-respect-gitignore . test: runs-on: ubuntu-latest @@ -47,4 +61,4 @@ jobs: uses: actions/checkout@v4 - name: Run tests - run: sage --python -m pytest tests/ + run: python -m pytest tests/