name: CI full build + e2e (Ubicloud) # Main/PR gate: build all 6 KiCad WASM tools + run the wxWidgets + KiCad e2e # suites on a Ubicloud runner. The actual recipe lives in the reusable # wasm-build.yml (the SINGLE build definition) — this is just the main/PR caller, # pinned to -O1 for fast feedback. The tag release (release.yml) calls the same # recipe at -O2 (the shipped demo opt level) and then publishes, so the build can # never diverge from what ships. # # Routine edits under scripts/ do NOT bust the WASM output cache — only the subset # in scripts/deploy/wasm-cache-hash.mjs does. For inputs the sc-hash can't see # (base-image / apt drift, a bad cache) bump .ci-cache-epoch; for a one-off # rebuild put [no-cache] or [rebuild-wasm] in the commit message / PR title. on: push: branches: ["main", "ubicloud-ci"] paths-ignore: ["docs/**", "**.md"] pull_request: branches: ["main"] paths-ignore: ["docs/**", "**.md"] workflow_dispatch: inputs: binaryen_version: description: "Binaryen version for the host asyncify step" required: false default: "130" no_cache: description: "Bypass the KiCad WASM output cache (force a full rebuild this run)" type: boolean required: false default: false concurrency: # Per-ref: a new push queues behind its own in-flight run (don't cancel). group: ci-ubicloud-${{ github.ref }} cancel-in-progress: false jobs: build: uses: ./.github/workflows/wasm-build.yml with: # -O1: faster asyncify shrink, sufficient for the test gate (the demo ships # -O2 via release.yml). 3D viewer ON so 3d-viewer.spec.ts has a viewer. opt_level: "-O1" build_3d_viewer: "ON" binaryen_version: ${{ inputs.binaryen_version || '130' }} run_tests: true no_cache: ${{ inputs.no_cache || false }}