Repository navigation
Group Emu3.5 with video models in the homepage catalog #45
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: CI | |
| on: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| - 'release/**' | |
| workflow_dispatch: | |
| inputs: | |
| source_revision: | |
| description: Exact candidate commit for trusted inference evidence | |
| required: false | |
| type: string | |
| base_revision: | |
| description: Exact comparison commit | |
| required: false | |
| type: string | |
| evidence_json: | |
| description: Compact numerical evidence from a trusted model host | |
| required: false | |
| type: string | |
| permissions: | |
| contents: read | |
| actions: read | |
| jobs: | |
| geometry-impact: | |
| name: ${{ github.event_name == 'workflow_dispatch' && inputs.evidence_json != '' && 'evidence-dispatch-idle-geometry-impact' || 'geometry-impact' }} | |
| if: ${{ github.event_name != 'workflow_dispatch' || inputs.evidence_json == '' }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout with diff history | |
| uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.11" | |
| - name: Plan affected 3D, video and world-model replays without weights or GPU | |
| env: | |
| IMPACT_BASE_SHA: ${{ inputs.base_revision || github.event.pull_request.base.sha || github.event.before }} | |
| run: | | |
| if [ -n "$IMPACT_BASE_SHA" ] && [ "$IMPACT_BASE_SHA" != "0000000000000000000000000000000000000000" ]; then | |
| python tests/manual/geometry_regression_impact.py --base "$IMPACT_BASE_SHA" --output tmp/geometry-impact.json | |
| else | |
| python tests/manual/geometry_regression_impact.py --changed-file worldfoundry/core/__init__.py --output tmp/geometry-impact.json | |
| fi | |
| - name: Publish required replay plan, including uncovered changes | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: geometry-impact | |
| path: tmp/geometry-impact.json | |
| if-no-files-found: error | |
| - name: Install declaration reader | |
| if: always() | |
| run: python -m pip install "PyYAML>=6" | |
| - name: Reject new, regressed or affected uncovered native variants | |
| if: always() | |
| env: | |
| IMPACT_BASE_SHA: ${{ inputs.base_revision || github.event.pull_request.base.sha || github.event.before }} | |
| run: | | |
| if [ -n "$IMPACT_BASE_SHA" ] && [ "$IMPACT_BASE_SHA" != "0000000000000000000000000000000000000000" ]; then | |
| python tests/manual/inference_regression_coverage.py --base "$IMPACT_BASE_SHA" --output tmp/inference-coverage.json | |
| else | |
| python tests/manual/inference_regression_coverage.py --output tmp/inference-coverage.json | |
| fi | |
| - name: Publish coverage definitions and gaps | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: inference-coverage | |
| path: tmp/inference-coverage.json | |
| if-no-files-found: error | |
| inference-replay: | |
| name: ${{ github.event_name == 'workflow_dispatch' && inputs.evidence_json != '' && 'evidence-dispatch-idle-inference-replay' || 'inference-replay' }} | |
| if: ${{ github.event_name != 'workflow_dispatch' || inputs.evidence_json == '' }} | |
| runs-on: ubuntu-latest | |
| env: | |
| GITHUB_TOKEN: ${{ github.token }} | |
| INFERENCE_EVIDENCE_CONTROL_REF: ${{ vars.INFERENCE_EVIDENCE_CONTROL_REF }} | |
| INFERENCE_EVIDENCE_WORKFLOW_PATH: ${{ vars.INFERENCE_EVIDENCE_WORKFLOW_PATH }} | |
| INFERENCE_REFERENCE_INDEX_SHA256: ${{ vars.INFERENCE_REFERENCE_INDEX_SHA256 }} | |
| IMPACT_BASE_SHA: ${{ inputs.base_revision || github.event.pull_request.base.sha || github.event.before }} | |
| steps: | |
| - name: Checkout exact candidate with comparison history | |
| uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.11" | |
| - name: Compute committed inference impact | |
| run: | | |
| test -n "$IMPACT_BASE_SHA" | |
| test "$IMPACT_BASE_SHA" != "0000000000000000000000000000000000000000" | |
| python tests/manual/geometry_regression_impact.py --base "$IMPACT_BASE_SHA" --output tmp/geometry-impact.json | |
| - name: Require successful official evidence for this exact commit | |
| run: python tests/manual/inference_actions_evidence.py verify-actions --plan tmp/geometry-impact.json --output tmp/inference-evidence.json | |
| - name: Publish replay gate result | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: inference-evidence-verification | |
| path: tmp/inference-evidence.json | |
| if-no-files-found: error | |
| attest-inference-evidence: | |
| if: ${{ github.event_name == 'workflow_dispatch' && inputs.evidence_json != '' }} | |
| runs-on: ubuntu-latest | |
| env: | |
| INFERENCE_EVIDENCE_CONTROL_REF: ${{ vars.INFERENCE_EVIDENCE_CONTROL_REF }} | |
| INFERENCE_EVIDENCE_WORKFLOW_PATH: ${{ vars.INFERENCE_EVIDENCE_WORKFLOW_PATH }} | |
| INFERENCE_REFERENCE_INDEX_SHA256: ${{ vars.INFERENCE_REFERENCE_INDEX_SHA256 }} | |
| INFERENCE_REPORT_JSON: ${{ inputs.evidence_json }} | |
| CANDIDATE_REVISION: ${{ inputs.source_revision }} | |
| BASE_REVISION: ${{ inputs.base_revision }} | |
| steps: | |
| - name: Checkout trusted control workflow source | |
| uses: actions/checkout@v5 | |
| with: | |
| path: control | |
| persist-credentials: false | |
| - name: Checkout candidate for immutable source verification | |
| uses: actions/checkout@v5 | |
| with: | |
| ref: ${{ inputs.source_revision }} | |
| path: candidate | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.11" | |
| - name: Verify numerical bundle and control provenance | |
| run: | | |
| python control/tests/manual/inference_actions_evidence.py attest \ | |
| --base "$BASE_REVISION" --head "$CANDIDATE_REVISION" \ | |
| --control-revision "$GITHUB_SHA" --actual-control-ref "$GITHUB_REF_NAME" \ | |
| --run-id "$GITHUB_RUN_ID" --source-root candidate --output tmp/receipt.json | |
| - name: Publish trusted inference receipt | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: trusted-inference-evidence | |
| path: tmp/receipt.json | |
| if-no-files-found: error | |
| retention-days: 90 | |
| cpu-tests: | |
| name: ${{ github.event_name == 'workflow_dispatch' && inputs.evidence_json != '' && 'evidence-dispatch-idle-cpu-tests' || 'cpu-tests' }} | |
| if: ${{ github.event_name != 'workflow_dispatch' || inputs.evidence_json == '' }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.11" | |
| - name: Install CPU test dependencies | |
| run: python -m pip install -e ".[test]" | |
| - name: Run public CPU inference and packaging tests | |
| run: make test | |
| - name: Validate documented commands and catalog claims without weights | |
| run: make test-docs-contracts | |
| - name: Publish complete CPU selection and results | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: public-cpu-contracts | |
| path: | | |
| tmp/public-cpu-selection.json | |
| tmp/public-cpu-contracts.xml | |
| tmp/docs-contract-selection.json | |
| tmp/docs-contracts.xml | |
| if-no-files-found: error | |
| inference-tensors: | |
| name: ${{ github.event_name == 'workflow_dispatch' && inputs.evidence_json != '' && 'evidence-dispatch-idle-inference-tensors' || 'inference-tensors' }} | |
| if: ${{ github.event_name != 'workflow_dispatch' || inputs.evidence_json == '' }} | |
| runs-on: ubuntu-latest | |
| env: | |
| CUDA_VISIBLE_DEVICES: "" | |
| PYTEST_DISABLE_PLUGIN_AUTOLOAD: "1" | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.11" | |
| - name: Install CPU Torch and tensor test dependencies | |
| run: | | |
| python -m pip install "torch==2.9.0+cpu" --index-url https://download.pytorch.org/whl/cpu | |
| python -m pip install -e ".[test]" \ | |
| "safetensors>=0.4" "einops>=0.7,<0.9" "omegaconf>=2.3,<3" "triton==3.5.0" \ | |
| "transformers>=4.57,<4.58" ftfy regex opencv-python-headless "aiohttp>=3.10,<4" scikit-image | |
| - name: Run inference tensors and streaming contracts without model weights | |
| run: make test-infer-tensors | |
| - name: Publish inference contract results | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: inference-cpu-contracts | |
| path: | | |
| tmp/inference-cpu-selection.json | |
| tmp/inference-cpu-contracts.xml | |
| if-no-files-found: error | |
| public-surface: | |
| name: ${{ github.event_name == 'workflow_dispatch' && inputs.evidence_json != '' && 'evidence-dispatch-idle-public-surface' || 'public-surface' }} | |
| if: ${{ github.event_name != 'workflow_dispatch' || inputs.evidence_json == '' }} | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| shell: bash -el {0} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| - name: Set up Miniconda | |
| uses: conda-incubator/setup-miniconda@v3 | |
| with: | |
| auto-update-conda: true | |
| activate-environment: worldfoundry-ci | |
| auto-activate-base: false | |
| - name: Set up Node | |
| uses: actions/setup-node@v5 | |
| with: | |
| cache: npm | |
| cache-dependency-path: docs/fumadocs/package-lock.json | |
| - name: Build docs | |
| run: bash scripts/docs/build.sh --skip-bootstrap | |
| - name: Install quality gate dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install PyYAML "ruff==0.12.7" | |
| - name: Check generated docs | |
| run: make docs-check | |
| - name: Run lightweight quality gates | |
| run: make lint | |
| - name: Compile package and scripts | |
| run: make compile-eval | |
| - name: Run CLI check | |
| run: make cli-check | |
| - name: Run documented CLI entrypoint checks | |
| run: make cli-entrypoint-check | |
| packaging-license-gate: | |
| name: ${{ github.event_name == 'workflow_dispatch' && inputs.evidence_json != '' && 'evidence-dispatch-idle-packaging-license-gate' || 'packaging-license-gate' }} | |
| if: ${{ github.event_name != 'workflow_dispatch' || inputs.evidence_json == '' }} | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| shell: sh | |
| steps: | |
| - name: Checkout clean source tree | |
| uses: actions/checkout@v5 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.11" | |
| - name: Install wheel build and audit tooling | |
| run: python -m pip install --upgrade build "setuptools>=77" "setuptools-scm[toml]" wheel | |
| - name: Build and audit clean distributions | |
| run: | | |
| test -z "$(git status --porcelain)" | |
| test ! -e build | |
| audit_dir="$(mktemp -d)" | |
| python -m build --outdir "$audit_dir" | |
| set -- "$audit_dir"/*.whl | |
| test "$#" -eq 1 | |
| test -f "$1" | |
| wheel_path="$1" | |
| set -- "$audit_dir"/*.tar.gz | |
| test "$#" -eq 1 | |
| test -f "$1" | |
| make packaging-check WHEEL="$wheel_path" SDIST="$1" | |
| python -m pip install "${wheel_path}[test]" | |
| source_dir="$audit_dir/source" | |
| mkdir "$source_dir" | |
| tar -xzf "$1" -C "$source_dir" | |
| cd "$source_dir"/* | |
| make test |