Skip to content

docs(android): add PUBLISHING.md runbook; restore zsp-format zapstore… #124

docs(android): add PUBLISHING.md runbook; restore zsp-format zapstore…

docs(android): add PUBLISHING.md runbook; restore zsp-format zapstore… #124

Workflow file for this run

name: CI
on:
push:
branches: [master, main, "release/*"]
pull_request:
branches: [master, main]
types: [opened, synchronize, reopened, ready_for_review]
# Run CI on a schedule to catch issues even without new commits
schedule:
- cron: '0 */6 * * *' # Every 6 hours
# Cancel in-progress runs only on PR pushes — pushes to master and the
# 6-hour scheduled cron share the same `ref` group, so blanket
# `cancel-in-progress: true` had the schedule killing the post-merge
# push run (e.g. PR #400's master push CI was cancelled by the cron
# that fired ~1 min later, leaving master with a non-green badge).
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
jobs:
test:
name: Test
runs-on: ubuntu-latest
# Skip CI on draft PRs unless explicitly requested
if: github.event.pull_request.draft == false || github.event_name == 'push' || github.event_name == 'schedule'
steps:
- uses: actions/checkout@v5
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo registry
uses: actions/cache@v5
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('Cargo.lock', 'Cargo.toml', '**/Cargo.toml') }}
restore-keys: |
${{ runner.os }}-cargo-registry-
- name: Cache cargo target
uses: actions/cache@v5
with:
path: target
key: ${{ runner.os }}-cargo-target-test-harness-${{ hashFiles('Cargo.lock', 'Cargo.toml', '**/Cargo.toml') }}
restore-keys: |
${{ runner.os }}-cargo-target-test-harness-
- name: Run tests
run: cargo test --locked --workspace
clippy:
name: Clippy
runs-on: ubuntu-latest
# Skip CI on draft PRs unless explicitly requested
if: github.event.pull_request.draft == false || github.event_name == 'push' || github.event_name == 'schedule'
steps:
- uses: actions/checkout@v5
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Cache cargo registry
uses: actions/cache@v5
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('Cargo.lock', 'Cargo.toml', '**/Cargo.toml') }}
restore-keys: |
${{ runner.os }}-cargo-registry-
- name: Cache cargo target
uses: actions/cache@v5
with:
path: target
key: ${{ runner.os }}-cargo-target-${{ github.job }}-${{ hashFiles('Cargo.lock', 'Cargo.toml', '**/Cargo.toml') }}
restore-keys: |
${{ runner.os }}-cargo-target-${{ github.job }}-
- name: Run clippy
run: cargo clippy --locked --workspace -- -D clippy::all
fmt:
name: Format
runs-on: ubuntu-latest
# Skip CI on draft PRs unless explicitly requested
if: github.event.pull_request.draft == false || github.event_name == 'push' || github.event_name == 'schedule'
steps:
- uses: actions/checkout@v5
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Check formatting
run: cargo fmt --all -- --check
harness-contract:
name: Harness Contract Tests
runs-on: ubuntu-latest
# Skip CI on draft PRs unless explicitly requested
if: github.event.pull_request.draft == false || github.event_name == 'push' || github.event_name == 'schedule'
steps:
- uses: actions/checkout@v5
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo registry
uses: actions/cache@v5
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('Cargo.lock', 'Cargo.toml', '**/Cargo.toml') }}
restore-keys: |
${{ runner.os }}-cargo-registry-
- name: Cache cargo target
uses: actions/cache@v5
with:
path: target
key: ${{ runner.os }}-cargo-target-test-harness-${{ hashFiles('Cargo.lock', 'Cargo.toml', '**/Cargo.toml') }}
restore-keys: |
${{ runner.os }}-cargo-target-test-harness-
- name: Run harness contract tests
run: scripts/harness_contract_tests.sh
capability-matrix:
name: Capability Matrix Contract Check
runs-on: ubuntu-latest
# Skip CI on draft PRs unless explicitly requested
if: github.event.pull_request.draft == false || github.event_name == 'push' || github.event_name == 'schedule'
steps:
- uses: actions/checkout@v5
- name: Validate capability matrix and surface contract evidence
run: scripts/check-capability-matrix.sh
dashboard-test:
name: Dashboard Unit Tests
runs-on: ubuntu-latest
# Skip CI on draft PRs unless explicitly requested
if: github.event.pull_request.draft == false || github.event_name == 'push' || github.event_name == 'schedule'
defaults:
run:
working-directory: dashboard
steps:
- uses: actions/checkout@v5
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Cache dashboard dependencies
uses: actions/cache@v5
with:
path: |
~/.bun/install/cache
dashboard/node_modules
key: ${{ runner.os }}-dashboard-bun-${{ hashFiles('dashboard/bun.lock', 'dashboard/package.json') }}
restore-keys: |
${{ runner.os }}-dashboard-bun-
- name: Cache Next.js build artifacts
uses: actions/cache@v5
with:
path: dashboard/.next/cache
key: ${{ runner.os }}-dashboard-next-${{ hashFiles('dashboard/bun.lock', 'dashboard/package.json') }}-${{ hashFiles('dashboard/next.config.ts', 'dashboard/src/**/*', 'dashboard/public/**/*') }}
restore-keys: |
${{ runner.os }}-dashboard-next-
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Run unit tests
run: bun run test:unit
- name: Type check and build
run: bun run build