name: CI on: push: branches: [main] pull_request: branches: [main] jobs: # TypeScript type checking and build typescript-check: name: TypeScript Check runs-on: ubuntu-latest strategy: matrix: app: [docs, site] steps: - uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 9 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "22" cache: "pnpm" - name: Install dependencies run: pnpm install --frozen-lockfile - name: Type check ${{ matrix.app }} working-directory: apps/${{ matrix.app }} run: pnpm check - name: Build ${{ matrix.app }} working-directory: apps/${{ matrix.app }} run: pnpm build # Rust tests and formatting check rust-check: name: Rust Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy - name: Cache cargo registry uses: actions/cache@v4 with: path: ~/.cargo/registry key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} - name: Cache cargo index uses: actions/cache@v4 with: path: ~/.cargo/git key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} - name: Cache cargo build uses: actions/cache@v4 with: path: apps/game/target key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} - name: Check formatting working-directory: apps/game run: cargo fmt -- --check - name: Run Clippy working-directory: apps/game run: cargo clippy -- -D warnings - name: Run tests working-directory: apps/game run: cargo test # Security audit for dependencies security-audit: name: Security Audit runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 9 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "22" cache: "pnpm" - name: Install dependencies run: pnpm install --frozen-lockfile - name: Run npm audit run: pnpm audit --audit-level moderate - name: Check for leaked secrets uses: trufflesecurity/trufflehog@main with: path: ./ base: ${{ github.event.repository.default_branch }} head: HEAD