name: Build code

on:
  push:
  pull_request:
    types: [opened, synchronize, reopened]

env:
  VMA_VULKAN_VERSION: "1.3.283.0"
  VMA_VULKAN_SDK_PATH: ${{ github.workspace }}/vulkan_sdk

jobs:
  windows:
    name: ${{ matrix.config.name }}
    runs-on: windows-latest
    strategy:
      fail-fast: false
      matrix:
        config:
          - {
            name: "Windows MSVC (Debug)",
            compiler: "msvc",
            cc: "cl", cxx: "cl",
            cmake_configure_options: '-G "Visual Studio 17 2022" -A x64',
            build_type: "Debug",
          }
          - {
            name: "Windows MSVC (Release)",
            compiler: "msvc",
            cc: "cl", cxx: "cl",
            cmake_configure_options: '-G "Visual Studio 17 2022" -A x64',
            build_type: "Release",
          }

    steps:
      - uses: actions/checkout@v4

      - name: Check for Vulkan SDK Cache
        id: cache-vulkan
        uses: actions/cache@v4
        with:
          path: ${{ env.VMA_VULKAN_SDK_PATH }}
          key: vulkan-sdk-${{ env.VMA_VULKAN_VERSION }}

      - name: Download Vulkan SDK
        if: steps.cache-vulkan.outputs.cache-hit != 'true'
        shell: pwsh
        run: |
          if (-Not (Test-Path ${{ env.VMA_VULKAN_SDK_PATH }})) {
            Write-Host "Vulkan SDK not found in cache. Downloading..."
            curl -LS -o vulkansdk.exe https://sdk.lunarg.com/sdk/download/${{ env.VMA_VULKAN_VERSION }}/windows/VulkanSDK-${{ env.VMA_VULKAN_VERSION }}-Installer.exe
            7z x vulkansdk.exe -o"${{ env.VMA_VULKAN_SDK_PATH }}"
          } else {
            Write-Host "Using cached Vulkan SDK"
          }

      - name: Configure CMake
        shell: pwsh
        run: |
          $env:CC="${{ matrix.config.cc }}"
          $env:CXX="${{ matrix.config.cxx }}"
          $env:Path += ";${{ env.VMA_VULKAN_SDK_PATH }}\;${{ env.VMA_VULKAN_SDK_PATH }}\Bin\"
          $env:VULKAN_SDK="${{ env.VMA_VULKAN_SDK_PATH }}"
          cmake . `
            -Bbuild `
            -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} `
            -DVMA_BUILD_SAMPLES=ON `
            ${{ matrix.config.cmake_configure_options }}

      - name: Build
        shell: pwsh
        run: |
          cmake --build build --config ${{ matrix.config.build_type }}
