name: CI
on:
  - push
  - pull_request
jobs:
  x86_64-linux:
    runs-on: ubuntu-latest
    # We want to run on external PRs, but not on our own internal PRs as they'll be run by the push
    # to the branch.
    if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
    env:
      DISPLAY: ':99.0'
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup Zig
        run: |
          sudo apt install xz-utils
          sudo sh -c 'wget -c https://ziglang.org/builds/zig-linux-x86_64-0.9.0-dev.959+f011f1393.tar.xz -O - | tar -xJ --strip-components=1 -C /usr/local/bin'
      - name: x86_64-linux -> x86_64-macos
        run: zig build test -Dtarget=x86_64-macos
        env:
          AGREE: true
      - name: x86_64-linux -> aarch64-macos
        run: zig build test -Dtarget=aarch64-macos
        env:
          AGREE: true
      - name: x86_64-linux -> x86_64-windows
        run: zig build test -Dtarget=x86_64-windows
      - name: launch xvfb
        run: Xvfb :99 -screen 0 1680x720x24 > /dev/null 2>&1 &
      - name: mach::test
        run: |
          sudo add-apt-repository -y ppa:kisak/kisak-mesa
          sudo apt-get update
          sudo apt-get install mesa-utils mesa-utils-extra mesa-va-drivers mesa-vdpau-drivers mesa-vulkan-drivers xvfb
          zig build test
      - name: webgpu::test
        run: cd webgpu && zig build test
  x86_64-windows:
    runs-on: windows-latest
    # We want to run on external PRs, but not on our own internal PRs as they'll be run by the push
    # to the branch.
    if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Install Git
        run: choco install git
      - name: Setup Zig
        run: |
          Invoke-WebRequest -Uri "https://ziglang.org/builds/zig-windows-x86_64-0.9.0-dev.959+f011f1393.zip" -OutFile "C:\zig.zip"
          cd C:\
          7z x zig.zip
          Add-Content $env:GITHUB_PATH "C:\zig-windows-x86_64-0.9.0-dev.959+f011f1393\"
      - name: x86_64-windows -> x86_64-macos
        run: zig build test -Dtarget=x86_64-macos
        env:
          AGREE: true
      - name: x86_64-windows -> aarch64-macos
        run: zig build test -Dtarget=aarch64-macos
        env:
          AGREE: true
      - name: x86_64-windows -> x86_64-linux
        run: zig build test -Dtarget=x86_64-linux
      - name: mach::test
        run: zig build test
      - name: webgpu::test
        run: cd webgpu && zig build test
  x86_64-macos:
    runs-on: macos-latest
    # We want to run on external PRs, but not on our own internal PRs as they'll be run by the push
    # to the branch.
    if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup Zig
        run: |
          brew install xz
          sudo sh -c 'wget -c https://ziglang.org/builds/zig-macos-x86_64-0.9.0-dev.959+f011f1393.tar.xz -O - | tar -xJ --strip-components=1 -C /usr/local/bin'
      - name: mach::test
        run: zig build test
        env:
          AGREE: true
      - name: x86_64-macos -> aarch64-macos
        run: zig build test -Dtarget=aarch64-macos
        env:
          AGREE: true
      - name: x86_64-macos -> x86_64-windows
        run: zig build test -Dtarget=x86_64-windows
      - name: x86_64-macos -> x86_64-linux
        run: zig build test -Dtarget=x86_64-linux
      - name: webgpu::test
        run: cd webgpu && zig build test
