# T-015: Build Smoke Test — CI Passes on Windows, VST3 DLL Produced, `task build` Clean **Type:** Task | **Phase:** 0 | **Autonomy:** `agent:review-required` **Stack:** `stack:infra` | **Version:** v0.1 | **Iteration:** iter-1 | **Effort:** S (half-day) > ⚠️ **Scope:** Add a `build` job to the GitHub Actions CI workflow (`.github/workflows/ci.yml`) that runs `task build` on `windows-latest`, verifies the `.exe` exists and is under 30 MB, and verifies the VST3 bundle exists. This is the Day 1 exit criterion proof. If any prior task left broken code, this job surfaces it. --- ## Prerequisites - [ ] T-001–T-014 all merged (or all in `status:roadmap` with known blockers) - [ ] T-007 merged — `Taskfile.yml` with `task build` defined - [ ] T-008 merged — CI workflow exists with `check` and `test` jobs ## Acceptance Criteria - [ ] New `build` job added to `.github/workflows/ci.yml` after `test` job - [ ] `build` job runs only on push to `main` (not on every PR — too slow) - [ ] `task build` runs: `cargo tauri build` + `cargo xtask bundle synesthesia-plugin --release` - [ ] CI step verifies `.exe` exists at `kansas/target/release/synesthesia.exe` - [ ] CI step verifies `.exe` size is < 30 MB (fails if Chromium accidentally bundled) - [ ] CI step verifies `target/bundled/Synesthesia.vst3/` directory exists - [ ] Build job result posted as a comment on the triggering commit - [ ] `cargo check --workspace` and `pnpm typecheck` still pass ## Add to `.github/workflows/ci.yml` ```yaml # ── Build job (push to main only — ~10 min, too slow for every PR) ───────── build: name: Full Build runs-on: windows-latest needs: [check, test] if: github.event_name == 'push' && github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@nightly with: components: clippy, rustfmt - uses: Swatinem/rust-cache@v2 with: key: ${{ runner.os }}-build-${{ hashFiles('Cargo.lock') }} - uses: actions/setup-node@v4 with: node-version: '20' - uses: pnpm/action-setup@v4 with: version: 9 run_install: false - name: Install frontend deps run: pnpm install --frozen-lockfile - uses: arduino/setup-task@v2 with: version: 3.x repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install WebView2 (if missing) run: | $installer = "MicrosoftEdgeWebview2Setup.exe" Invoke-WebRequest "https://go.microsoft.com/fwlink/p/?LinkId=2124703" -OutFile $installer Start-Process $installer -ArgumentList "/silent /install" -Wait shell: powershell continue-on-error: true # Already installed on windows-latest - name: Build all targets run: task build - name: Verify standalone exe shell: bash run: | EXE="kansas/target/release/synesthesia.exe" [ -f "$EXE" ] || { echo "✗ $EXE not found"; exit 1; } SIZE=$(stat -c%s "$EXE") echo "exe size: $((SIZE / 1024 / 1024)) MB" [ "$SIZE" -lt 31457280 ] || { echo "✗ exe > 30 MB — Chromium may have been bundled"; exit 1; } echo "✓ Standalone exe OK" - name: Verify VST3 bundle shell: bash run: | BUNDLE="target/bundled/Synesthesia.vst3" [ -d "$BUNDLE" ] || { echo "✗ $BUNDLE not found"; exit 1; } echo "✓ VST3 bundle OK" - name: Upload build artifacts uses: actions/upload-artifact@v4 with: name: synesthesia-build-${{ github.sha }} path: | kansas/target/release/synesthesia.exe target/bundled/ retention-days: 7 ``` --- ## GitHub CLI ```bash gh issue create \ --title "T-015: Build smoke test — CI full build on Windows, VST3 DLL verified" \ --label "type:task,stack:infra,agent:review-required,priority:critical,status:ready,day:1" \ --body-file T-015.md ``` **Parent:** GENESIS | **Blocks:** Day 1 exit criterion | **Blocked By:** T-001–T-014, T-007, T-008