Skip to content

feat(subagent): logical subagent foundation — manager, pressure gate, doctor, queue #164

feat(subagent): logical subagent foundation — manager, pressure gate, doctor, queue

feat(subagent): logical subagent foundation — manager, pressure gate, doctor, queue #164

Workflow file for this run

name: verify
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
contents: read
jobs:
verify:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: Install system dependencies (ubuntu)
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
- name: cargo fmt
run: cargo fmt --all --check
- name: cargo clippy (non-macOS — GUI crate is macOS-only)
if: matrix.os != 'macos-latest'
run: cargo clippy --workspace --exclude busytok-gui --all-targets -- -D warnings
- name: cargo clippy (macOS — includes GUI)
if: matrix.os == 'macos-latest'
run: cargo clippy --workspace --all-targets -- -D warnings
- name: Build sidecars for macOS (required by tauri build.rs externalBin)
if: matrix.os == 'macos-latest'
run: |
cargo build -p busytok-service -p busytok
mkdir -p apps/gui/src-tauri/binaries
cp target/debug/busytok-service apps/gui/src-tauri/binaries/busytok-service-aarch64-apple-darwin
cp target/debug/busytok apps/gui/src-tauri/binaries/busytok-aarch64-apple-darwin
- name: cargo test (non-macOS — GUI crate is macOS-only)
if: matrix.os != 'macos-latest'
run: cargo test --workspace --exclude busytok-gui
- name: cargo test (macOS — includes GUI)
if: matrix.os == 'macos-latest'
run: cargo test --workspace
- name: Install cargo-audit
if: matrix.os == 'ubuntu-latest'
uses: taiki-e/install-action@v2
with:
tool: cargo-audit
- name: cargo audit
if: matrix.os == 'ubuntu-latest'
run: cargo audit
# cargo-deny check deferred: needs per-crate license tuning.
# cargo-audit already catches security advisories.
- name: Install cargo-llvm-cov
if: matrix.os == 'ubuntu-latest'
uses: taiki-e/install-action@v2
with:
tool: cargo-llvm-cov
# Coverage gate on the audit-critical crates (GUI excluded). The gate is a
# regression floor (default 80); bump COVERAGE_GATE toward 85 as legacy
# modules gain tests. See scripts/coverage.sh.
- name: Coverage gate
if: matrix.os == 'ubuntu-latest'
env:
COVERAGE_GATE: ${{ vars.COVERAGE_GATE || '80' }}
run: bash scripts/coverage.sh
- name: Install pnpm
uses: pnpm/action-setup@v6
- name: Install Node.js
uses: actions/setup-node@v6
with:
node-version: 22
cache: pnpm
- name: pnpm install
run: pnpm install --frozen-lockfile
- name: pnpm typecheck
run: pnpm typecheck
# pnpm test / coverage / release-smoke deferred: vitest hangs on CI
# runners (Node 22/24 + tinypool — same pattern as local Node 25).
# pnpm typecheck passes. Re-enable after vitest pool config is tuned.
# - name: pnpm test
# run: pnpm -r test
# - name: pnpm coverage
# if: matrix.os == 'ubuntu-latest'
# run: pnpm -r test:coverage
# - name: release workflow smoke
# if: matrix.os == 'ubuntu-latest'
# run: bash tests/workflows/release_workflow_test.sh