From 00bcb9246915afa3ec5beb6951792c40e9233d9e Mon Sep 17 00:00:00 2001 From: Zoid Date: Sat, 1 Aug 2026 17:24:04 -0400 Subject: [PATCH 1/2] fix(ci): move SHOPBOT_DATA_DIR to step scope so the workflow compiles The `runner` context is not available in job-level `env:` -- it only exists inside steps. Referencing ${{ runner.temp }} there makes the whole workflow fail to compile: the run is marked failed immediately with zero jobs scheduled and no annotations, which reads like a flaky runner rather than a syntax error. CI has therefore never once passed: 81 runs, 81 failures, back to the workflow's introduction in 0e0e43f (2026-06-04), the only commit that has ever touched this file. Milestones v2.0 through v4.2 were audited as "CI-green" against a CI that had never compiled. Moving the variable onto the Test step is the minimal fix and preserves the original intent of keeping path resolution off the runner home dir. --- .github/workflows/ci.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bf8b265..c05fe18 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,8 +20,6 @@ jobs: SDL_VIDEODRIVER: dummy # Prevents keyring from probing D-Bus / SecretService on headless Ubuntu PYTHON_KEYRING_BACKEND: keyring.backends.null.Keyring - # Redirect all path resolution to a writable temp dir (avoids writing to runner home) - SHOPBOT_DATA_DIR: ${{ runner.temp }}/shopbot steps: - uses: actions/checkout@v4 @@ -31,4 +29,10 @@ jobs: - name: Install run: pip install -e .[web] - name: Test + env: + # Redirect all path resolution to a writable temp dir (avoids writing to + # runner home). MUST stay at step level: the `runner` context does not + # exist in job-level `env:`, and referencing it there makes the entire + # workflow fail to compile -- instant failure, zero jobs scheduled. + SHOPBOT_DATA_DIR: ${{ runner.temp }}/shopbot run: pytest --tb=short From 015e065f96bae7e1175db7bdb9804ba897d16558 Mon Sep 17 00:00:00 2001 From: Zoid Date: Sat, 1 Aug 2026 17:31:43 -0400 Subject: [PATCH 2/2] fix(ci): install requirements.txt so pytest exists, and declare httpx With the compile error fixed, the workflow finally scheduled jobs and both runners died the same way: "pytest: command not found" (exit 127 on ubuntu, exit 1 on windows). Cause: the Install step ran only `pip install -e .[web]`, and pyproject's [project.dependencies] declares just platformdirs. Every real dependency -- pydantic, nodriver, keyring, cryptography, pygame, and pytest itself -- lives in requirements.txt, which CI never installed. So CI could not have run a single test even with a compiling workflow. Also adds httpx==0.28.1 to requirements.txt. fastapi's TestClient needs it and it was undeclared everywhere, so a fresh checkout could not run the web tests either. 0.28.1 is the version already proven locally. --- .github/workflows/ci.yml | 9 ++++++++- requirements.txt | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c05fe18..fde4b37 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,14 @@ jobs: with: python-version: "3.13" - name: Install - run: pip install -e .[web] + # requirements.txt carries every runtime dep plus pytest and pytest-asyncio. + # pyproject's [project.dependencies] declares only platformdirs, so installing + # the package alone leaves pytest (and pydantic, nodriver, keyring, ...) absent + # and the Test step dies with "pytest: command not found". + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install -e ".[web]" - name: Test env: # Redirect all path resolution to a writable temp dir (avoids writing to diff --git a/requirements.txt b/requirements.txt index 9c8d909..8792c2d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,7 @@ # python_requires >= 3.11 colorama==0.4.6 cryptography==44.0.2 +httpx==0.28.1 keyring==25.7.0 nodriver==0.50.3 platformdirs==4.10.0