Ashiedu's picture
Sync unified workbench
0490201 verified
# 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