Skip to content

Build 3D vector aesthetics learning atlas #348

Build 3D vector aesthetics learning atlas

Build 3D vector aesthetics learning atlas #348

Workflow file for this run

name: CI
on:
pull_request:
branches: [master]
push:
branches: [master]
tags-ignore:
- 'v*' # skip CI on tag pushes (release handled separately)
# Cancel stale runs when a new commit is pushed to the same branch / PR.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.11', '3.12']
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install
# `tools` extra (opencv-python-headless) is required so ToolRegistry
# discovery picks up cv2-backed cultural tools (whitespace_analyze,
# composition_analyze, brushstroke, color_gamut). Without it, those
# modules silently fail to import at registration time and downstream
# pipeline tests (test_pipeline_hybrid, test_tool_adapters) cascade-fail
# with "Unknown node 'whitespace_analyze'". Headless wheel is ~50MB.
run: |
python -m pip install --upgrade pip
pip install -e ".[dev,mcp,tools]"
- name: Lint
# Narrow rule set (E9/F63/F7/F82) per pyproject.toml [tool.ruff.lint].
# Legacy codebase has 377 violations under default rules; incremental
# expansion tracked in v0.17.12+.
run: ruff check src/ tests/
- name: Test
# Ignore-list covers tests that require heavy deps NOT installable on
# CI's size/time budget — primarily torch (~2GB wheel) and local-only
# artifacts (pre-generated layer PNGs). cv2 is now installed via the
# `tools` extra (see Install step) so cv2-dependent tests run on CI.
# Keep in sync with CONTRIBUTING.md "Dev loop" section.
# Remove entries as underlying issues are fixed in v0.17.12+ (see task #28).
run: |
pytest tests/ \
--ignore=tests/test_cli_layers_retry.py \
--ignore=tests/test_layered_mock_fallback.py \
--ignore=tests/test_layered_partial_e2e.py \
--ignore=tests/test_layered_strict_mode.py \
--ignore=tests/vulca/layers/test_apply_alpha_assert.py \
--ignore=tests/vulca/pipeline/nodes/test_layer_generate_capability_routing.py \
--ignore=tests/vulca/providers/test_capabilities.py \
--ignore=tests/vulca/scripts/test_migrate_overlap_resolution.py \
--ignore=tests/test_organism_phase2.py \
--ignore=tests/test_providers.py \
--ignore=tests/test_decompose_smoke.py \
--ignore=tests/test_tool_color_gamut.py \
--ignore=tests/vulca/layers/test_image_loader.py \
--ignore=tests/vulca/scripts/test_evfsam_common_uses_image_loader.py \
--ignore=tests/vulca/scripts/test_evfsam_prompt_schema.py \
--ignore=tests/test_import_cop_helper.py \
--ignore=tests/test_import_cop_subprocess.py \
--ignore=tests/test_unload_models.py \
--ignore=tests/vulca/scripts/test_claude_orchestrated_pipeline.py \
-q
- name: Local seed baseline gate
run: python scripts/local_seed_baseline_gate.py
- name: Tiny training eval gate
run: |
python scripts/tiny_training_eval_gate.py \
--output-dir "$RUNNER_TEMP/tiny-training-eval" \
--report "$RUNNER_TEMP/tiny-training-eval/report.json"