name: CI on: push: branches: [main] pull_request: branches: [main] jobs: typescript: name: TypeScript (Node ${{ matrix.node-version }}) runs-on: ubuntu-latest strategy: matrix: node-version: [20, 22] steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 9 - name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: pnpm - name: Install dependencies run: pnpm install - name: Typecheck run: pnpm typecheck - name: Format check run: pnpm format:check - name: Install Playwright browsers run: pnpm exec playwright install --with-deps chromium - name: Run tests run: pnpm test rust: name: Rust (${{ matrix.os }} - ${{ matrix.target }}) runs-on: ${{ matrix.os }} strategy: matrix: include: - os: ubuntu-latest target: x86_64-unknown-linux-gnu - os: macos-latest target: aarch64-apple-darwin - os: macos-latest target: x86_64-apple-darwin - os: windows-latest target: x86_64-pc-windows-msvc steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Rust toolchain uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.target }} - name: Cache Cargo dependencies uses: actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ cli/target/ key: ${{ runner.os }}-cargo-${{ matrix.target }}-${{ hashFiles('cli/Cargo.lock') }} restore-keys: | ${{ runner.os }}-cargo-${{ matrix.target }}- - name: Build release binary run: cargo build --release --manifest-path cli/Cargo.toml --target ${{ matrix.target }} - name: Run Rust tests run: cargo test --manifest-path cli/Cargo.toml --target ${{ matrix.target }} windows-integration: name: Windows Integration Test runs-on: windows-latest needs: rust steps: - name: Checkout repository 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: Setup Rust toolchain uses: dtolnay/rust-toolchain@stable with: targets: x86_64-pc-windows-msvc - name: Cache Cargo dependencies uses: actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ cli/target/ key: windows-cargo-x86_64-pc-windows-msvc-${{ hashFiles('cli/Cargo.lock') }} restore-keys: | windows-cargo-x86_64-pc-windows-msvc- - name: Build Rust CLI run: cargo build --release --manifest-path cli/Cargo.toml --target x86_64-pc-windows-msvc - name: Install npm dependencies run: pnpm install - name: Build TypeScript run: pnpm build - name: Copy CLI binary to bin directory run: | Copy-Item cli/target/x86_64-pc-windows-msvc/release/agent-browser.exe bin/agent-browser-win32-x64.exe - name: Test agent-browser install command run: | $env:PATH = "$pwd\bin;$env:PATH" bin/agent-browser-win32-x64.exe install shell: pwsh - name: Verify Chromium was installed run: | $playwrightPath = "$env:LOCALAPPDATA\ms-playwright" if (Test-Path $playwrightPath) { Write-Host "Playwright browsers installed at: $playwrightPath" Get-ChildItem $playwrightPath -Recurse -Depth 2 | Select-Object -First 20 } else { Write-Error "Playwright browsers not found!" exit 1 } shell: pwsh