Unify default local state under .loopx with explicit migration #36
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Package Smoke | |
| on: | |
| pull_request: | |
| paths: | |
| - ".github/workflows/package-smoke.yml" | |
| - "packages/loopx-repo-health/**" | |
| - "packages/loopx-obelisk/**" | |
| - "packages/loopx-codex-provider-routing/**" | |
| - "loopx/capabilities/decision_context/extension_provider.py" | |
| - "loopx/extensions/runtime.py" | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - ".github/workflows/package-smoke.yml" | |
| - "packages/loopx-repo-health/**" | |
| - "packages/loopx-obelisk/**" | |
| - "packages/loopx-codex-provider-routing/**" | |
| - "loopx/capabilities/decision_context/extension_provider.py" | |
| - "loopx/extensions/runtime.py" | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: package-smoke-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| codex-provider-routing: | |
| name: loopx-codex-provider-routing | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.11" | |
| - name: Install provider and schema validator | |
| run: python -m pip install packages/loopx-codex-provider-routing "jsonschema==4.26.0" | |
| - name: Validate recovery and existing operator contracts | |
| run: | | |
| python -m compileall -q packages/loopx-codex-provider-routing/src | |
| python packages/loopx-codex-provider-routing/smoke/codex_provider_routing_smoke.py | |
| python packages/loopx-codex-provider-routing/smoke/recovery_contracts_smoke.py | |
| python packages/loopx-codex-provider-routing/smoke/operator_smoke.py | |
| - name: Validate installed entrypoint and example schemas | |
| run: | | |
| python - <<'PY' | |
| import json, subprocess | |
| from pathlib import Path | |
| from jsonschema import validate | |
| root = Path("packages/loopx-codex-provider-routing") | |
| request_schema = json.loads((root / "schemas/request.schema.json").read_text()) | |
| response_schema = json.loads((root / "schemas/response.schema.json").read_text()) | |
| for example in sorted((root / "examples").glob("*.json")): | |
| request = json.loads(example.read_text()) | |
| validate(request, request_schema) | |
| result = subprocess.run(["loopx-codex-provider-routing"], input=json.dumps(request), text=True, capture_output=True, check=True) | |
| response = json.loads(result.stdout) | |
| validate(response, response_schema) | |
| assert response["ok"], example.name | |
| PY | |
| repo-health: | |
| name: loopx-repo-health | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v7 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.11" | |
| - name: Compile package modules | |
| run: >- | |
| python -m py_compile | |
| packages/loopx-repo-health/src/loopx_repo_health/*.py | |
| - name: Run offline contract smoke | |
| run: >- | |
| python | |
| packages/loopx-repo-health/smoke/repo_health_snapshot_smoke.py | |
| obelisk: | |
| name: loopx-obelisk | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v7 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.11" | |
| - name: Install contract validator | |
| run: python -m pip install --disable-pip-version-check "jsonschema==4.26.0" | |
| - name: Compile package modules | |
| run: >- | |
| python -m py_compile | |
| packages/loopx-obelisk/src/loopx_obelisk/*.py | |
| - name: Run offline contract smoke | |
| run: >- | |
| python | |
| packages/loopx-obelisk/smoke/obelisk_provider_smoke.py |