The environment list was written out four times — probe.py's shim tuple and its results dict, tests/test_probe.py's ENVIRONMENTS, and ci.yml's wheel loop — so adding an environment meant four edits and five workstreams collided on three files. Discovery is now a tomllib scan of environments/*/pyproject.toml plus a @probes(name) registry, with an optional [tool.arena] tasksets key for one package that ships several (tera_spatial declares four). An environment discovered without a registered probe WARNS rather than exits 1, because interactive environments land their engine before their probe. That is temporary; it becomes a hard failure with the last registration. The warning is not a licence to stop being gated. test_probe.py pins the ungated set to an explicit PENDING_PROBES allowlist that only ever shrinks — without it, removing a @probes decorator moved the name from the table into a warning line that already carries five, and every remaining assertion stayed vacuously true while the environment silently stopped being gated. Also untracks three environments/*/uv.lock files, which had been failing the lock-policy step on main. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
54 lines
2.1 KiB
YAML
54 lines
2.1 KiB
YAML
name: arena-environments
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
validate:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
python: ["3.11", "3.12"]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: astral-sh/setup-uv@v6
|
|
with:
|
|
version: "0.12.5"
|
|
enable-cache: false
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: ${{ matrix.python }}
|
|
- name: Enforce library lock policy
|
|
run: test -z "$(find environments -name uv.lock -print -quit)"
|
|
# An environment is `environments/*/pyproject.toml` and nothing else — the same
|
|
# denominator probe.py's discover() uses. A half-created scaffold directory with no
|
|
# manifest is invisible to both, so the two can never disagree about what exists.
|
|
- name: Refuse an empty environment scan
|
|
run: |
|
|
set -euo pipefail
|
|
count=$(find environments -mindepth 2 -maxdepth 2 -name pyproject.toml | wc -l)
|
|
echo "discovered $count environment manifests"
|
|
test "$count" -gt 0
|
|
- name: Run the floor and ceiling probe for every discovered environment
|
|
run: uv run --with regex python probe.py
|
|
- name: Run root probe integration test
|
|
run: uv run --with regex python -m unittest discover -s tests -v
|
|
- name: Install Redaction Pressure v0.2
|
|
run: uv sync --project environments/redaction_pressure --python ${{ matrix.python }}
|
|
- name: Run Redaction Pressure tests
|
|
run: >-
|
|
uv run --project environments/redaction_pressure
|
|
python -m unittest discover -s environments/redaction_pressure/tests -v
|
|
- name: Build all environment distributions
|
|
run: |
|
|
set -euo pipefail
|
|
for manifest in environments/*/pyproject.toml; do
|
|
environment=$(basename "$(dirname "$manifest")")
|
|
uv build "environments/$environment" --out-dir "dist/$environment"
|
|
done
|
|
- name: Verify documented Redaction Pressure entrypoint
|
|
run: uv run --project environments/redaction_pressure eval --help >/dev/null
|