name: Shaders

on:
  push:
    branches: ["*"]
    tags: [v0.*]
  pull_request:
  merge_group:

jobs:
  naga-validate-windows:
    name: "Validate: HLSL"
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v3

      - name: Setup DXC
        uses: napokue/setup-dxc@v1.1.0

      - name: Setup FXC
        run: |
          Get-Childitem -Path "C:\Program Files (x86)\Windows Kits\10\bin\**\x64\fxc.exe" `
          | Sort-Object -Property LastWriteTime -Descending `
          | Select-Object -First 1 `
          | Split-Path -Parent `
          | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
        shell: powershell

      - uses: Swatinem/rust-cache@v2
        with:
          workspaces: |
            naga/xtask -> naga/xtask/target

      - run: |
          cd naga
          cargo xtask validate hlsl dxc
          cargo xtask validate hlsl fxc
    
  naga-validate-macos:
    name: "Validate: MSL"
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v3

      - uses: Swatinem/rust-cache@v2
        with:
          workspaces: |
            naga/xtask -> naga/xtask/target

      - run: |
          cd naga
          cargo xtask validate msl
      
  naga-validate-linux:
    name: "Validate: SPIR-V/GLSL/DOT/WGSL"
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Install tools
        run: sudo apt-get install spirv-tools glslang-tools graphviz

      - uses: Swatinem/rust-cache@v2
        with:
          workspaces: |
            naga/xtask -> naga/xtask/target

      - run: cd naga; cargo xtask validate spv

      - run: cd naga; cargo xtask validate glsl

      - run: cd naga; cargo xtask validate dot

      - run: cd naga; cargo xtask validate wgsl

