* feat: bundle mcp-server into release app so AI Chat works - Add esbuild bundle script (scripts/bundle-mcp-server.mjs) that compiles mcp-server/index.js and ws-bridge.js into self-contained CJS bundles - Output goes to src-tauri/resources/mcp-server/ (gitignored) - Add Tauri resources config to copy bundles into Contents/Resources/mcp-server/ - Update mcp_server_dir() to look in Contents/Resources/ (not Contents/) in release - Add bundle-mcp npm script; hook it into tauri beforeBuildCommand - Exclude generated resources from ESLint Previously AI Chat showed 'mcp-server not found at .../Contents/mcp-server' because the release path lacked the 'Resources' segment and no files were bundled. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * ci: bundle mcp-server resources before Rust tests * fix: add mcp-server as pnpm workspace package so esbuild can resolve its deps in CI * fix: exclude src-tauri/target from eslint to fix CI lint failure --------- Co-authored-by: Test <test@test.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
CI/CD Setup
GitHub Actions Workflow
Il workflow ci.yml esegue i seguenti check automatici:
1. Tests
- Frontend:
pnpm test - Rust backend:
cargo test
2. Test Coverage
- Frontend: vitest con coverage reporting
- Threshold configurabile in
vitest.config.ts
3. Code Health (CodeScene)
- Delta analysis su ogni PR/push
- Fail se il code health diminuisce
- Richiede secrets configurati (vedi sotto)
4. Documentation Check
- Verifica che se cambia codice in
src/osrc-tauri/, anchedocs/viene aggiornato - Warning only — non blocca il merge, solo un reminder
- Skip con
[skip docs]nel commit message - Aggiorna docs solo se la modifica invalida architettura/astrazioni/design già documentati
5. Lint & Format
- ESLint per frontend
- Clippy + rustfmt per Rust
Setup Required
CodeScene Secrets
Aggiungi questi secrets nel repository GitHub (Settings → Secrets → Actions):
CODESCENE_TOKEN=<your-codescene-pat>
CODESCENE_PROJECT_ID=<your-project-id>
Il PAT di CodeScene è lo stesso che usi localmente (~/.codescene/token). Il project ID lo trovi nella dashboard CodeScene.
Coverage Thresholds
Configura in vitest.config.ts:
export default defineConfig({
test: {
coverage: {
lines: 80,
functions: 80,
branches: 80,
statements: 80,
// Fail CI se sotto threshold
thresholds: {
lines: 80,
functions: 80,
branches: 80,
statements: 80
}
}
}
})
Local Testing
Prima di pushare, puoi testare localmente:
# Run all tests
pnpm test && cargo test
# Check coverage
pnpm test:coverage
# Lint
pnpm lint
cargo clippy
cargo fmt --check
# CodeScene (local)
codescene delta-analysis --base-revision origin/main
Workflow Triggers
- Push: su
maine branchexperiment/* - Pull Request: verso
main
Status Checks
Tutti i check devono passare prima di poter fare merge. Se un check fallisce, vedrai il dettaglio nei logs di GitHub Actions.