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.
54 lines
1.5 KiB
YAML
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
|