diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..8f5a86d --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,9 @@ +{ + "permissions": { + "allow": [ + "Bash(git ls-remote:*)" + ], + "deny": [], + "ask": [] + } +} diff --git a/.github/workflows/build-artifacts.yml b/.github/workflows/build-artifacts.yml index a877970..8e494af 100644 --- a/.github/workflows/build-artifacts.yml +++ b/.github/workflows/build-artifacts.yml @@ -7,13 +7,15 @@ jobs: build-swiftshader: strategy: matrix: - os: [windows-2022, ubuntu-20.04, macOS-13] + os: [windows-2025, ubuntu-24.04, macOS-15, macOS-15-intel] include: - - os: windows-2022 + - os: windows-2025 swiftshaderLibName: vk_swiftshader.dll - - os: ubuntu-20.04 + - os: ubuntu-24.04 swiftshaderLibName: libvk_swiftshader.so - - os: macOS-13 + - os: macOS-15 + swiftshaderLibName: libvk_swiftshader.dylib + - os: macOS-15-intel swiftshaderLibName: libvk_swiftshader.dylib name: 'swiftshader-${{ matrix.os }}' @@ -31,7 +33,11 @@ jobs: - name: Build Swiftshader shell: bash run: | - cmake -S Swiftshader -B Swiftshader/build_out -DCMAKE_BUILD_TYPE=Release + if [[ "${{ matrix.os }}" == "macOS-15-intel" ]]; then + cmake -S Swiftshader -B Swiftshader/build_out -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=x86_64 + else + cmake -S Swiftshader -B Swiftshader/build_out -DCMAKE_BUILD_TYPE=Release + fi cmake --build Swiftshader/build_out --target vk_swiftshader --config Release --parallel 4 if [[ "${{ runner.os }}" == "Windows" ]]; then @@ -46,17 +52,31 @@ jobs: cp Swiftshader/build_out/$OUT_DIR/${{ matrix.swiftshaderLibName }} swiftshader_artifacts cp Swiftshader/LICENSE.txt swiftshader_artifacts + - name: Set Artifact Name + id: set-name + shell: bash + run: | + if [[ "${{ matrix.os }}" == "windows-2025" ]]; then + echo "artifact-name=swiftshader-windows-x64" >> "$GITHUB_OUTPUT" + elif [[ "${{ matrix.os }}" == "ubuntu-24.04" ]]; then + echo "artifact-name=swiftshader-ubuntu-24.04-x64" >> "$GITHUB_OUTPUT" + elif [[ "${{ matrix.os }}" == "macOS-15" ]]; then + echo "artifact-name=swiftshader-macos-15-arm64" >> "$GITHUB_OUTPUT" + elif [[ "${{ matrix.os }}" == "macOS-15-intel" ]]; then + echo "artifact-name=swiftshader-macos-15-x86_64" >> "$GITHUB_OUTPUT" + fi + - name: Upload Artifacts uses: actions/upload-artifact@v4 with: - name: swiftshader-${{ matrix.os }}-x64 + name: ${{ steps.set-name.outputs.artifact-name }} path: swiftshader_artifacts build-sdk: strategy: matrix: - os: [windows-2022, ubuntu-20.04, macOS-13] - sdkTag: ['vulkan-sdk-1.4.321.0', 'vulkan-sdk-1.4.309.0', 'vulkan-sdk-1.3.283.0', 'vulkan-sdk-1.3.280.0', 'vulkan-sdk-1.3.275.0', 'sdk-1.3.261.1'] + os: [windows-2025, ubuntu-24.04, macOS-15, macOS-15-intel] + sdkTag: ['vulkan-sdk-1.4.328.0', 'vulkan-sdk-1.4.321.0', 'vulkan-sdk-1.4.309.0', 'vulkan-sdk-1.3.283.0', 'vulkan-sdk-1.3.280.0', 'vulkan-sdk-1.3.275.0', 'sdk-1.3.261.1'] name: '${{ matrix.sdkTag }}-${{ matrix.os }}' runs-on: ${{ matrix.os }} @@ -76,10 +96,23 @@ jobs: shell: bash run: | SDK_VERSION=$(echo "${{ matrix.sdkTag }}" | sed -E 's/[^0-9]*([0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?).*/\1/') - echo "ARTIFACT_NAME=vulkanSDK-$SDK_VERSION-${{ matrix.os }}-x64" >> $GITHUB_ENV + + if [[ "${{ matrix.os }}" == "windows-2025" ]]; then + ARTIFACT_NAME="vulkanSDK-$SDK_VERSION-windows-x64" + elif [[ "${{ matrix.os }}" == "ubuntu-24.04" ]]; then + ARTIFACT_NAME="vulkanSDK-$SDK_VERSION-ubuntu-24.04-x64" + elif [[ "${{ matrix.os }}" == "macOS-15" ]]; then + ARTIFACT_NAME="vulkanSDK-$SDK_VERSION-macos-15-arm64" + elif [[ "${{ matrix.os }}" == "macOS-15-intel" ]]; then + ARTIFACT_NAME="vulkanSDK-$SDK_VERSION-macos-15-x86_64" + fi + + echo "ARTIFACT_NAME=$ARTIFACT_NAME" >> $GITHUB_ENV ROOT_PATH='${{ github.workspace }}' - echo "SDK_PATH=${ROOT_PATH//\\//}/VulkanSDK/$SDK_VERSION" >> $GITHUB_ENV + SDK_PATH_VALUE="${ROOT_PATH//\\//}/VulkanSDK/$SDK_VERSION" + echo "SDK_PATH=$SDK_PATH_VALUE" >> $GITHUB_ENV + echo "VULKAN_SDK=$SDK_PATH_VALUE" >> $GITHUB_ENV - name: Checkout Vulkan-Headers uses: actions/checkout@v4 @@ -103,8 +136,15 @@ jobs: - name: Build Vulkan-Loader shell: bash + env: + # Disable vcpkg integration to prevent it from providing headers + VCPKG_INSTALLATION_ROOT: "" run: | - cmake -S Vulkan-Loader -B Vulkan-Loader/build -DVULKAN_HEADERS_INSTALL_DIR=${{ env.SDK_PATH }} -DLOADER_USE_UNSAFE_FILE_SEARCH=ON -DCMAKE_BUILD_TYPE=Release + if [[ "${{ matrix.os }}" == "macOS-15-intel" ]]; then + cmake -S Vulkan-Loader -B Vulkan-Loader/build -DCMAKE_TOOLCHAIN_FILE="" -DCMAKE_PREFIX_PATH=${{ env.SDK_PATH }} -DVulkanHeaders_DIR=${{ env.SDK_PATH }}/share/cmake/VulkanHeaders -DVULKAN_HEADERS_INSTALL_DIR=${{ env.SDK_PATH }} -DLOADER_USE_UNSAFE_FILE_SEARCH=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=x86_64 + else + cmake -S Vulkan-Loader -B Vulkan-Loader/build -DCMAKE_TOOLCHAIN_FILE="" -DCMAKE_PREFIX_PATH=${{ env.SDK_PATH }} -DVulkanHeaders_DIR=${{ env.SDK_PATH }}/share/cmake/VulkanHeaders -DVULKAN_HEADERS_INSTALL_DIR=${{ env.SDK_PATH }} -DLOADER_USE_UNSAFE_FILE_SEARCH=ON -DCMAKE_BUILD_TYPE=Release + fi cmake --build Vulkan-Loader/build --config Release --parallel 4 cmake --install Vulkan-Loader/build --prefix ${{ env.SDK_PATH }} @@ -118,7 +158,11 @@ jobs: - name: Build Vulkan-ValidationLayers shell: bash run: | - cmake -S Vulkan-ValidationLayers -B Vulkan-ValidationLayers/build -DUPDATE_DEPS=ON -DCMAKE_BUILD_TYPE=Release + if [[ "${{ matrix.os }}" == "macOS-15-intel" ]]; then + cmake -S Vulkan-ValidationLayers -B Vulkan-ValidationLayers/build -DUPDATE_DEPS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=x86_64 + else + cmake -S Vulkan-ValidationLayers -B Vulkan-ValidationLayers/build -DUPDATE_DEPS=ON -DCMAKE_BUILD_TYPE=Release + fi cmake --build Vulkan-ValidationLayers/build --config Release --parallel 4 cmake --install Vulkan-ValidationLayers/build --prefix ${{ env.SDK_PATH }} cp Vulkan-ValidationLayers/LICENSE.txt ${{ env.SDK_PATH }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c9a19a6..d1157c9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,8 +9,8 @@ jobs: Build: strategy: matrix: - os: [windows-2019, windows-2022, ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, macOS-13, macOS-14, macOS-15] - sdkVersion: [1.4.321.0] + os: [windows-2025, ubuntu-24.04, macOS-15, macOS-15-intel] + sdkVersion: [1.4.328.0] name: test ${{ matrix.os }} | ${{ matrix.sdkVersion }} runs-on: ${{ matrix.os }} @@ -69,6 +69,12 @@ jobs: - name: Run Test shell: bash run: | - cmake -S test -B build -DVKCI_API_VERSION="${{ matrix.sdkVersion }}" -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE="${{ github.workspace }}" + if [[ "${{ matrix.os }}" == "macOS-15-intel" ]]; then + cmake -S test -B build -DVKCI_API_VERSION="${{ matrix.sdkVersion }}" -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE="${{ github.workspace }}" -DCMAKE_OSX_ARCHITECTURES=x86_64 + elif [[ "${{ matrix.os }}" == "macOS-15" ]]; then + cmake -S test -B build -DVKCI_API_VERSION="${{ matrix.sdkVersion }}" -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE="${{ github.workspace }}" -DCMAKE_OSX_ARCHITECTURES=arm64 + else + cmake -S test -B build -DVKCI_API_VERSION="${{ matrix.sdkVersion }}" -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE="${{ github.workspace }}" + fi cmake --build build --config Release ./vulkan-ci-test diff --git a/README.md b/README.md index 61eb3a3..9dc9149 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,8 @@ This action performs minimal setup to enable building and running Vulkan applica with: # VulkanSDK version to use # Must be a supported version - # The default value is 1.4.309.0 - sdkVersion: 1.4.309.0 + # The default value is 1.4.328.0 + sdkVersion: 1.4.328.0 # Optional path to installation path # The default value is '${{ github.workspace }}` @@ -36,26 +36,33 @@ In addition to the output variables, the action updates the following contexts t - `$VULKAN_SDK/bin` (Windows only) ## Supported VulkanSDK Versions +- 1.4.328.0 +- 1.4.321.0 - 1.4.309.0 - 1.3.283.0 - 1.3.280.0 - 1.3.275.0 -- 1.3.261.1 ## Supported Runners -The intention is to support all standard GitHub-hosted runners. Tests currently run on: -- `windows-2019` -- `windows-2022` -- `ubuntu20.04` -- `ubuntu22.04` -- `ubuntu24.04` -- `macOS-13` -- `macOS-14` -- `macOS-15` +Tests currently run on: +- `windows-2025` (x64) +- `ubuntu-24.04` (x64) +- `macOS-15` (ARM64) +- `macOS-15-intel` (x86_64) + +macOS binaries are available for both ARM64 (Apple Silicon) and x86_64 (Intel). The action automatically detects the runner architecture and downloads the appropriate artifacts. + + | Runner | Architecture | SDK Artifact | SwiftShader Artifact | + |----------------|--------------|------------------------------------------|----------------------------------| + | windows-2025 | x64 | vulkanSDK-{version}-windows-x64.zip | swiftshader-windows-x64.zip | + | ubuntu-24.04 | x64 | vulkanSDK-{version}-ubuntu-24.04-x64.zip | swiftshader-ubuntu-24.04-x64.zip | + | macOS-15 | ARM64 | vulkanSDK-{version}-macos-15-arm64.zip | swiftshader-macos-15-arm64.zip | + | macOS-15-intel | x86_64 | vulkanSDK-{version}-macos-15-x86_64.zip | swiftshader-macos-15-x86_64.zip | ## Known Limitations Due to significant build times, pre-built artifacts are downloaded from the corresponding release of this action. This requires the action version to be specified as a tag - targeting a SHA will not work. The Vulkan loader is built with `LOADER_USE_UNSAFE_FILE_SEARCH=ON` to more reliably allow file discovery through environment variables. To state the obvious, the artifacts provided here are not intended for use outside of testing environments. -Currently, all macOS binaries are built for x86_64. + + diff --git a/action.yml b/action.yml index b60d7f3..bea4d34 100644 --- a/action.yml +++ b/action.yml @@ -7,7 +7,7 @@ inputs: sdkVersion: description: 'Requested VulkanSDK version' required: false - default: 1.4.309.0 + default: 1.4.328.0 installPath: description: 'Directory to install to' required: false @@ -29,16 +29,22 @@ runs: ACTION_TAG: ${{ github.action_ref }} run: | if [[ "${{ runner.os }}" == "Windows" ]]; then - echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-windows-2022-x64.zip" >> "$GITHUB_OUTPUT" - echo "vk-ci-swiftshader-artifact-name=swiftshader-windows-2022-x64.zip" >> "$GITHUB_OUTPUT" + echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-windows-x64.zip" >> "$GITHUB_OUTPUT" + echo "vk-ci-swiftshader-artifact-name=swiftshader-windows-x64.zip" >> "$GITHUB_OUTPUT" echo "vk-ci-swiftshader-lib-name=vk_swiftshader.dll" >> "$GITHUB_OUTPUT" elif [[ "${{ runner.os }}" == "Linux" ]]; then - echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-ubuntu-20.04-x64.zip" >> "$GITHUB_OUTPUT" - echo "vk-ci-swiftshader-artifact-name=swiftshader-ubuntu-20.04-x64.zip" >> "$GITHUB_OUTPUT" + echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-ubuntu-24.04-x64.zip" >> "$GITHUB_OUTPUT" + echo "vk-ci-swiftshader-artifact-name=swiftshader-ubuntu-24.04-x64.zip" >> "$GITHUB_OUTPUT" echo "vk-ci-swiftshader-lib-name=libvk_swiftshader.so" >> "$GITHUB_OUTPUT" elif [[ "${{ runner.os }}" == "macOS" ]]; then - echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-macOS-13-x64.zip" >> "$GITHUB_OUTPUT" - echo "vk-ci-swiftshader-artifact-name=swiftshader-macOS-13-x64.zip" >> "$GITHUB_OUTPUT" + ARCH=$(uname -m) + if [[ "$ARCH" == "x86_64" ]]; then + echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-macos-15-x86_64.zip" >> "$GITHUB_OUTPUT" + echo "vk-ci-swiftshader-artifact-name=swiftshader-macos-15-x86_64.zip" >> "$GITHUB_OUTPUT" + else + echo "vk-ci-sdk-artifact-name=vulkanSDK-${{ inputs.sdkVersion }}-macos-15-arm64.zip" >> "$GITHUB_OUTPUT" + echo "vk-ci-swiftshader-artifact-name=swiftshader-macos-15-arm64.zip" >> "$GITHUB_OUTPUT" + fi echo "vk-ci-swiftshader-lib-name=libvk_swiftshader.dylib" >> "$GITHUB_OUTPUT" else echo "Unsupported OS: ${{ runner.os }}" diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index a8485ec..9bb7af9 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -3,10 +3,6 @@ project(VulkanCI-Test) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED True) -if (APPLE) - set(CMAKE_OSX_ARCHITECTURES "x86_64") -endif() - if (NOT DEFINED VKCI_API_VERSION) message(FATAL_ERROR "Must define VKCI_API_VERSION") endif()