docs(android): add PUBLISHING.md runbook; restore zsp-format zapstore… #124
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |