earl 0.6.3

AI-safe CLI for AI agents
name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: true

env:
  CARGO_TERM_COLOR: always

permissions:
  contents: read

jobs:
  msrv:
    name: MSRV (Rust 1.96)
    runs-on: ubuntu-latest
    timeout-minutes: 20
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false
      - name: Install system dependencies
        run: sudo apt-get update -y && sudo apt-get install -y libdbus-1-dev
      - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
        with:
          toolchain: "1.96.0"
      - uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
      - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
        with:
          node-version-file: .node-version
          cache: pnpm
      - name: Check MSRV
        run: cargo check --locked --workspace --all-features --all-targets

  test:
    name: Test
    runs-on: ubuntu-latest
    timeout-minutes: 20
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false
      - name: Check release state
        run: python3 scripts/release/check-state.py
      - name: Install system dependencies
        run: sudo apt-get update -y && sudo apt-get install -y libdbus-1-dev bubblewrap
      - name: Allow bwrap unprivileged user namespaces
        run: |
          echo 'abi <abi/4.0>,' | sudo tee /etc/apparmor.d/bwrap
          echo 'include <tunables/global>' | sudo tee -a /etc/apparmor.d/bwrap
          echo 'profile bwrap /usr/bin/bwrap flags=(unconfined) {' | sudo tee -a /etc/apparmor.d/bwrap
          echo '  userns,' | sudo tee -a /etc/apparmor.d/bwrap
          echo '}' | sudo tee -a /etc/apparmor.d/bwrap
          sudo apparmor_parser -r /etc/apparmor.d/bwrap
      - name: Test release scripts
        run: scripts/release/test-build-artifact.sh
      - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
        with:
          toolchain: stable
      - uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
      - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
        with:
          node-version-file: .node-version
          cache: pnpm
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
        with:
          cache-on-failure: true
      - name: Run tests
        run: cargo test --all-targets --all-features
      - name: Verify package contents
        run: cargo package --list --locked --workspace

  typescript:
    name: TypeScript
    runs-on: ubuntu-latest
    timeout-minutes: 15
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false
      - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
        with:
          toolchain: stable
      - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
        with:
          cache-on-failure: true
      - uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
      - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
        with:
          node-version-file: .node-version
          cache: pnpm
      - name: Install
        run: pnpm install --frozen-lockfile
      - name: Build
        run: pnpm turbo run build
      - name: Typecheck
        run: pnpm turbo run types:check
      - name: Audit dependencies
        run: pnpm audit --audit-level high