Core (nodes/core/): alpha, masks, batch consolidation, blend, transform matrix, bbox, parameters, validation engines shared across nodes, each with unit tests. Fix an unconditional RGB clamp to [0,1] that silently destroyed HDR/negative values in Merge, Transform, Color Correct, Comp, CornerPin, Distort, Spherize, Crop Stitch, and the shared masked-compositing helpers. Alpha stays clamped everywhere; RGB no longer does. Fix Grain applying `amount` twice in overlay/soft_light modes (quadratic instead of linear falloff). Add STMap mode to Distort (absolute UV remap vs relative displacement). Add bbox output/input wiring between Crop and Crop Stitch. Add edge_grow and edge_color_match to Crop Stitch. Add despill to Keyer. Add shuffle mode to Channel (R/G/B/A routed from any source). Add size/luma_response to Grain. Add grid mode to Constant. Add frame/layer accumulation limits to Preview and Draw, plus a font-path containment fix and supersampling in Text. Make Frame Range and Append recognize a real ComfyUI VIDEO input (not only this pack's internal media wrapper), preserving true fps/audio instead of silently dropping them, and add a native VIDEO output alongside the existing IMAGE output on both. Add node_replacements.py (empty registry, wired into the extension lifecycle) for future schema migrations. Add a CI matrix pinning the verified requires-comfyui floor, and .comfyignore for Registry packaging.
190 lines
4.5 KiB
YAML
190 lines
4.5 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
branches: [main]
|
|
workflow_call:
|
|
|
|
jobs:
|
|
frontend:
|
|
name: TypeScript & Frontend tests
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
|
|
- uses: actions/setup-node@v7
|
|
with:
|
|
node-version: 24
|
|
cache: npm
|
|
|
|
- run: npm ci
|
|
- run: npm run check
|
|
- run: npm run build
|
|
|
|
- name: Verify js/ is up to date
|
|
run: |
|
|
git diff --exit-code js/
|
|
|
|
- run: npm run test:js
|
|
|
|
python-unit:
|
|
name: Python unit tests
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
|
|
- uses: actions/setup-python@v7
|
|
with:
|
|
python-version: "3.11"
|
|
cache: pip
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
|
|
pip install \
|
|
torch torchvision \
|
|
--index-url https://download.pytorch.org/whl/cpu
|
|
|
|
pip install numpy pytest pillow
|
|
|
|
- name: Verify unit tests exist
|
|
run: |
|
|
find tests/unit -name 'test_*.py' -print
|
|
test "$(find tests/unit -name 'test_*.py' | wc -l)" -gt 0
|
|
|
|
- name: Verify unit suite isolation
|
|
run: |
|
|
test ! -f tests/__init__.py
|
|
test ! -f tests/unit/__init__.py
|
|
|
|
python - <<'PY'
|
|
import importlib.util
|
|
|
|
assert importlib.util.find_spec("comfy_api") is None, (
|
|
"comfy_api must NOT be installed in the unit-test job"
|
|
)
|
|
|
|
print("Unit environment isolation OK")
|
|
PY
|
|
|
|
- name: Verify pytest unit root
|
|
run: |
|
|
python -m pytest \
|
|
-c tests/pytest.ini \
|
|
tests/unit \
|
|
--collect-only \
|
|
-q
|
|
|
|
- name: Run unit tests
|
|
run: |
|
|
python -m pytest \
|
|
-c tests/pytest.ini \
|
|
tests/unit \
|
|
-vv \
|
|
--maxfail=1
|
|
|
|
comfy-integration:
|
|
name: ComfyUI integration tests (${{ matrix.comfyui-ref }})
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
# comfyui-ref pins the compatibility floor declared as requires-comfyui
|
|
# in pyproject.toml, plus the current stable release. Bump the floor
|
|
# entry only after confirming this job passes against it.
|
|
comfyui-ref: ["v0.11.0", "v0.37.4"]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
|
|
- uses: actions/setup-python@v7
|
|
with:
|
|
python-version: "3.11"
|
|
cache: pip
|
|
|
|
- name: Install CPU dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
|
|
pip install \
|
|
torch torchvision torchaudio \
|
|
--index-url https://download.pytorch.org/whl/cpu
|
|
|
|
pip install pytest numpy pillow
|
|
|
|
- name: Clone ComfyUI
|
|
run: |
|
|
git clone \
|
|
--depth 1 \
|
|
--branch ${{ matrix.comfyui-ref }} \
|
|
https://github.com/Comfy-Org/ComfyUI.git \
|
|
/tmp/ComfyUI
|
|
|
|
pip install \
|
|
-r /tmp/ComfyUI/requirements.txt
|
|
|
|
- name: Install ImageOps
|
|
run: |
|
|
mkdir -p \
|
|
/tmp/ComfyUI/custom_nodes/ComfyUI-Majoor-ImageOps
|
|
|
|
cp -a ./. \
|
|
/tmp/ComfyUI/custom_nodes/ComfyUI-Majoor-ImageOps/
|
|
|
|
- name: Verify environment
|
|
env:
|
|
COMFYUI_ROOT: /tmp/ComfyUI
|
|
PYTHONPATH: /tmp/ComfyUI
|
|
run: |
|
|
set -euxo pipefail
|
|
|
|
test -d "$COMFYUI_ROOT"
|
|
test -d "$COMFYUI_ROOT/comfy_api"
|
|
test -f \
|
|
"$COMFYUI_ROOT/comfy_api/latest/__init__.py"
|
|
|
|
python - <<'PY'
|
|
from comfy_api.latest import io, ComfyExtension
|
|
print("ComfyUI V3 API OK")
|
|
PY
|
|
|
|
test -f \
|
|
"$COMFYUI_ROOT/custom_nodes/ComfyUI-Majoor-ImageOps/__init__.py"
|
|
|
|
echo "=== Integration test files ==="
|
|
|
|
find \
|
|
tests/integration \
|
|
-name 'test_*.py' \
|
|
-print
|
|
|
|
test "$(
|
|
find tests/integration \
|
|
-name 'test_*.py' \
|
|
| wc -l
|
|
)" -gt 0
|
|
|
|
- name: Run integration tests
|
|
env:
|
|
COMFYUI_ROOT: /tmp/ComfyUI
|
|
PYTHONPATH: /tmp/ComfyUI
|
|
run: |
|
|
python -m pytest \
|
|
-c tests/pytest.ini \
|
|
tests/integration \
|
|
-vv \
|
|
--maxfail=1
|
|
|
|
quality-gate:
|
|
name: Quality Gate
|
|
needs: [frontend, python-unit, comfy-integration]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- run: echo "All quality checks passed!"
|