# The converters against real documents. # # `ci.yml` proves the filters on documents built to be easy (`test_raw_derive.py`, # `test_raw_derive_binary.py`). This workflow derives the real ones: the test corpus and its # harness live in the private repository `torben/chemenu-testfiles`, cloned into `testfiles/` # (gitignored in this repository) and run with this checkout's `tools/.venv`. The corpus is large # (some 76 MB, one book needs 48 s per derivation) and holds material that may not sit in a public # repository, which is why none of it runs in the standard CI. # # When it runs: # - on a push to `main` that touches the converter surface (the `paths:` list below). Gitea # evaluates `paths:` the way GitHub does - observed for `paths-ignore` in `ci.yml` and in use for # `paths:` in `release.yml`; do not re-derive it; # - by hand (`workflow_dispatch`), which is the way to run it after a change in the private # repository alone: a push there starts nothing here, and a commit that reaches the converters # only indirectly is not in the list; # - before a release without suffix: `release.yml` carries the same steps as its job `converters` # and the release job waits for it. A candidate (`-beta.N`) does not run it. # # It always tests `main` of the private repository. A converter change that alters an expected # output (`.expect`) is therefore two commits, one per repository, the private one first. # # Runner shape: identical to ci.yml, and for the same reason - see its header for `nodejs`. # # Access to the private repository: the per-job token (`${{ gitea.token }}`), as `release.yml` # uses it for this repository. It can read `chemenu-testfiles` only because that repository's own # Actions settings grant `torben/chemenu` access - a grant set in this repository does nothing. # Without it the second checkout fails with "Determining the default branch ... not found", which # reads like a missing repository rather than a missing permission (Gitea #232, runs 699 and 701). name: Converters on: push: branches: [main] paths: - 'tools/chemenu/filters/**' - 'tools/chemenu/commands/raw/derive.py' - 'tools/chemenu/commands/raw/accept.py' - 'tools/chemenu/tests/test_raw_derive*.py' - 'tools/chemenu/tests/binary_formats.py' - 'tools/requirements.txt' - '.gitea/workflows/converters.yml' workflow_dispatch: jobs: converters: runs-on: linux-docker timeout-minutes: 30 container: image: debian:trixie-slim env: WIKITOOL_SESSION_ID: converters-${{ github.run_id }} WIKI_TRACE_DIR: /tmp/wikitool-trace steps: - name: System dependencies run: | set -eu apt-get update -qq apt-get install -y --no-install-recommends \ python3 python3-venv git nodejs ripgrep ca-certificates rm -rf /var/lib/apt/lists/* - uses: actions/checkout@v7 - name: The private test corpus uses: actions/checkout@v7 with: repository: torben/chemenu-testfiles token: ${{ gitea.token }} path: testfiles - name: Tool environment run: | set -eu git config --global --add safe.directory "$GITHUB_WORKSPACE" tools/preflight.sh tools/.venv/bin/python -m pip install --quiet pytest - name: Real documents # `-c pytest.ini` applies the suite's own configuration to a harness that lives outside # `tools/`; the harness conftest pulls in the suite's conftest (testfiles/README.md). run: | set -eu cd tools .venv/bin/python -m pytest -c pytest.ini ../testfiles/harness -q --durations=5