Seven review findings of the P1 phase, each fixed at its root: 1. (high) The CI install list omitted PyYAML, but the vendored tree imports yaml eagerly (modules/deps/basicsr/utils/options.py:5), so the CI job failed on its first run. pyyaml is now installed and asserted by tests/test_ci_workflow.py. 2. (medium) tests/test_ci_workflow.py skipped the whole module without PyYAML. The module never skips now: a minimal indentation parser is the fallback, and it is cross-checked against the PyYAML parse. 3. (medium) Guard (e)'s self-test asserted that the tree still contains breakage (it would break exactly at P2.1). It now proves the guard instead; P2.1's work list is the scanner output and test_guard_e_flip_owner_covers_every_current_finding keeps plan and tree in sync. 4. (medium) The mock-fidelity tripwire skipped the comfy_api.latest symbols. Every mocked symbol is now checked against the real source (re-export / definition / instance attribute), including io.ComfyNode, ComfyExtension, ComfyAPI and ComfyAPISync, plus the reverse check that the mock invents nothing. 5. (low) The phase review listed committed work as outstanding and misstated the ruff ignore list; both are corrected. 6. (low) The reported whole-suite count was impossible; the phase review now carries the measured numbers. 7. (low) The root conftest installed the mocks unconditionally. The KEEP_NO_COMFY_MOCKS=1 opt-out lets the headless tier import the real comfy/comfy_api modules in-process. tools/ci_env_sim.py runs the gate in an environment without the packages the CI install list omits.
87 lines
2.9 KiB
YAML
87 lines
2.9 KiB
YAML
name: tests
|
|
|
|
on:
|
|
push:
|
|
branches: [master, main, feat/v3-modernization]
|
|
pull_request:
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
# P1.5 - lint gate. ruff is pinned to a major version: an unpinned ruff
|
|
# drifts the pip cache and can turn a green branch red without a code change.
|
|
lint:
|
|
name: Lint (ruff)
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- name: Install ruff (pinned major)
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
python -m pip install "ruff==0.8.*"
|
|
|
|
- name: Lint
|
|
run: python -m ruff check .
|
|
|
|
# P1.5 - the test tiers of the modernization plan (section 4):
|
|
# unit | mock_integration | headless
|
|
# The headless tier needs a real ComfyUI checkout; COMFYUI_ROOT is empty
|
|
# here, so those tests skip themselves instead of failing.
|
|
test:
|
|
name: Test (python ${{ matrix.python-version }})
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-latest]
|
|
python-version: ["3.10", "3.12", "3.13"]
|
|
runs-on: ${{ matrix.os }}
|
|
env:
|
|
COMFYUI_ROOT: ""
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Python ${{ matrix.python-version }}
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- name: Cache pip (CPU torch wheel)
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.cache/pip
|
|
key: pip-cpu-torch-${{ runner.os }}-${{ matrix.python-version }}-v1
|
|
restore-keys: |
|
|
pip-cpu-torch-${{ runner.os }}-${{ matrix.python-version }}-
|
|
|
|
- name: Install CPU-only torch and the test dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
# CPU wheels are ~200 MB instead of ~2.5 GB of CUDA.
|
|
# torchvision is a runtime dependency of the package
|
|
# (modules/keep_processor.py imports it).
|
|
python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
|
|
# numpy 2.4 has no 3.10 wheel -> pin <2.3 on the 3.10 job.
|
|
# tomli backs tomllib on python 3.10.
|
|
if [ "${{ matrix.python-version }}" = "3.10" ]; then
|
|
python -m pip install "numpy<2.3" tomli
|
|
else
|
|
python -m pip install numpy
|
|
fi
|
|
# PyYAML: the vendored tree imports it eagerly
|
|
# (modules/deps/basicsr/utils/options.py:5 -> basicsr/utils/__init__.py:8),
|
|
# so the unit tier fails with "No module named 'yaml'" without it.
|
|
python -m pip install opencv-python-headless einops scipy Pillow tqdm pytest pyyaml
|
|
|
|
- name: Run the unit, mock_integration and headless tiers
|
|
run: python -m pytest -q -m "unit or mock_integration or headless"
|