The python:3.11-slim job container lacked a Node.js runtime, so the
runner couldn't exec actions/checkout inside it. Run jobs on the
default runner image instead and pin Python via actions/setup-python.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Replace .gitlab-ci.yml with .gitea/workflows/ci.yml, keeping the same
lint/format/typecheck/pip-audit/pytest jobs against python:3.11-slim,
and update docs that referenced the old GitLab pipeline file.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Replace the Docker build/publish CI stages with ruff (lint + format
check), ty (type check), pip-audit, and pytest run directly against
python:3.11-slim; Docker remains for manual/server deployment only.
- Swap black/pylint/mypy for ruff/ty across pyproject.toml, and fix
every resulting lint, format, and type diagnostic in gallery/ and
plotstyle/.
- Fix tests broken/stale from before the package restructuring: wrong
`utils.*` import paths, mock patch targets pointed at the wrong
module, and PDF-conversion tests still assuming ImageMagick instead
of the current PyMuPDF-first path. Drop test_container.py (obsolete
Docker-container smoke tests, fully superseded elsewhere).
- Add a plain-venv + systemd --user timer deployment path
(deploy/systemd/) for HPC login nodes without a Docker daemon, where
public_html is already served by existing infrastructure.
- Document both in CLAUDE.md, including running CI's checks locally
before committing.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>