2.4 KiB
CI
Workflow: .gitea/workflows/ci.yml, runner label bongbetic-ci. It runs on pull requests, pushes to main and manual dispatch. A weekly schedule (Monday 03:00 UTC) runs the security job only.
Jobs
| Job | What it runs | Blocks merge? |
|---|---|---|
security |
Semgrep (p/default, p/owasp-top-ten), fails on any finding |
Yes |
lint |
npm ci, tsc --noEmit, ESLint, cargo fmt --check (src-tauri), jscpd (threshold 4.5%) |
Yes |
e2e |
npm run build, then the Playwright smoke test (chromium) against vite preview |
Yes |
ai-review |
PR-Agent review comment, pull requests only | No (advisory, continue-on-error) |
There is no deploy job: Voiced ships release assets, not a hosted app.
Semgrep registry rules are fetched at run time, so a new rule can fail a previously green main. The weekly schedule surfaces that early. Triage with a fix or a narrow // nosemgrep: <rule-id> -- reason.
Rust clippy is deferred. It needs the webkit2gtk/gtk system libraries and a full compile of the Tauri crate, which is too heavy for the shared CI host (jobs are limited to 3 GB RAM / 2 CPU). Only cargo fmt --check runs, with a pinned minimal rustup toolchain (rustfmt only).
Run locally
# Semgrep (same image and rules as CI)
podman run --rm -v "$PWD:/src:ro,Z" -w /src docker.io/semgrep/semgrep:1.178.0 \
semgrep scan --config p/default --config p/owasp-top-ten --metrics off --error
npm run lint # ESLint
npx tsc --noEmit # typecheck
(cd src-tauri && cargo fmt --check)
npx jscpd@4.3.0 # duplicate code, reads .jscpd.json
npx playwright install chromium # once
npm run build && npm run e2e
Keep the mcr.microsoft.com/playwright image tag in the e2e job in step with the @playwright/test version in package.json.
PR-Agent (advisory)
ai-review posts a review through PR-Agent using OpenRouter. It never pushes code and is skipped (with a notice) when the secrets are empty.
Repository secrets and variables:
OPENROUTER_API_KEY(secret): OpenRouter API key.PR_AGENT_GITEA_TOKEN(secret): Gitea personal access token of the account that posts the review.PR_AGENT_MODEL(variable, optional): defaults toopenrouter/anthropic/claude-sonnet-5.
Rollback
Revert the workflow PR. If branch protection requires these checks (security, lint, e2e), relax it first, otherwise PRs will wait forever for checks that no longer run.