Files
james.maes 223310aa27 ci(actions): full pipeline — build / test / scan / publish (#154)
Adds five GitHub Actions workflows + CODEOWNERS + BUILDING.md CI section.

- ci.yml: boundary gates (Ubuntu), webview pnpm test+build (Ubuntu), 14-package SPM matrix on macos-15, app target via xcodebuild, optional self-hosted real-hardware lane, semver tag-publish on push to develop/rc/release/main.
- codeql.yml: Swift + JS/TS with security-extended queries, weekly cron.
- semgrep.yml: p/default + p/swift + p/typescript + p/secrets, SARIF upload, optional SEMGREP_APP_TOKEN.
- dependency-review.yml: blocks severity:high on PRs touching manifests/lockfiles.
- release.yml: tag-triggered GitHub Release with auto-generated changelog.

Branch + tag conventions: feature/fix branches run checks only; develop publishes v0.X.Y-dev.<run_number>; rc/release publishes v0.X.Y-rc.N; main publishes v0.X.Y. Conventional-Commits-aware bumping (feat → minor, fix → patch, feat!/BREAKING → major). Seed version v0.1.0.
2026-05-13 06:28:10 -05:00

54 lines
1.5 KiB
YAML

# Semgrep static analysis covering default + Swift + TypeScript rule packs.
# Runs on PRs + pushes to develop/main + weekly schedule.
#
# SEMGREP_APP_TOKEN is optional; without it, scans run with public rules
# and findings appear only in the workflow log (not Semgrep Cloud).
name: Semgrep
on:
pull_request:
branches: [develop, main]
push:
branches: [develop, main]
schedule:
- cron: "0 10 * * 1"
concurrency:
group: semgrep-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
security-events: write
jobs:
semgrep:
name: Semgrep scan
runs-on: ubuntu-latest
container:
image: semgrep/semgrep
if: (github.actor != 'dependabot[bot]')
steps:
- uses: actions/checkout@v4
- name: Semgrep CI
env:
SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}
SEMGREP_RULES: "p/default p/swift p/typescript p/secrets"
run: |
# If SEMGREP_APP_TOKEN is set, `semgrep ci` posts to Semgrep Cloud.
# Otherwise, we fall back to a local scan over SEMGREP_RULES.
if [ -n "${SEMGREP_APP_TOKEN:-}" ]; then
semgrep ci
else
semgrep scan --config "$SEMGREP_RULES" --error --sarif --output=semgrep.sarif || true
fi
- name: Upload SARIF (when present)
if: hashFiles('semgrep.sarif') != ''
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: semgrep.sarif
category: semgrep