name: CI
on:
  push:
  workflow_dispatch:
  pull_request:
    branches:
      - main

jobs:
  build-test:
    strategy:
      matrix:
        os: [ubuntu-24.04, macos-14, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: "true"
      - uses: pnpm/action-setup@v4
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: "pnpm"
          cache-dependency-path: ./pnpm-lock.yaml
      - uses: oven-sh/setup-bun@v1
        with:
          bun-version: 1.1.27
      - uses: denoland/setup-deno@v2
        with:
          deno-version: v2.x
      - name: Install Rust stable
        uses: dtolnay/rust-toolchain@stable
      - name: Install protobuf (Mac)
        if: matrix.os == 'macos-14'
        run: |
          brew install protobuf
      - name: Install Protobuf (Ubuntu)
        if: matrix.os == 'ubuntu-24.04'
        run: |
          sudo apt-get update
          sudo apt-get install -y protobuf-compiler libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libxdo-dev
      - name: Install protoc and openssl for windows
        if: matrix.os == 'windows-latest'
        run: |
          choco install protoc
          echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append
          vcpkg install openssl:x64-windows-static-md
      - name: Install Dependencies
        run: pnpm install
      - name: Setup
        run: pnpm prepare
      - name: Build
        env:
          NODE_OPTIONS: --max-old-space-size=4096
        run: pnpm build
      - name: JS Test
        if: matrix.os == 'ubuntu-24.04'
        run: pnpm test
      - name: Cargo Build and Test
        if: matrix.os == 'ubuntu-24.04'
        run: |
          cargo build
          cargo test
