Spaces:
Runtime error
Runtime error
| # 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 | |