diff options
| -rw-r--r-- | .github/workflows/ci.yml | 47 | ||||
| -rw-r--r-- | README.md | 12 |
2 files changed, 57 insertions, 2 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e0410c1..008b481 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,8 +55,11 @@ jobs: fail-fast: false matrix: include: - - os: macos-latest + - os: macos-15 smoke_platform: macos + runner_arch: arm64 + moltenvk_version: 1.4.1 + vulkan_sdk_version: 1.4.350.1 env: CARGO_TERM_COLOR: always steps: @@ -65,6 +68,48 @@ jobs: with: toolchain: 1.87.0 components: clippy,rustfmt + - name: Provision macOS Vulkan runtime + shell: bash + run: | + set -euo pipefail + brew install molten-vk vulkan-loader vulkan-tools vulkan-validationlayers + test "$(uname -m)" = "${{ matrix.runner_arch }}" + ruby <<'RUBY' + require "json" + + expected = { + "molten-vk" => "${{ matrix.moltenvk_version }}", + "vulkan-loader" => "${{ matrix.vulkan_sdk_version }}", + "vulkan-tools" => "${{ matrix.vulkan_sdk_version }}", + "vulkan-validationlayers" => "${{ matrix.vulkan_sdk_version }}", + } + payload = JSON.parse(`brew info --json=v2 #{expected.keys.join(" ")}`) + actual = payload.fetch("formulae").to_h do |formula| + [formula.fetch("name"), formula.fetch("versions").fetch("stable")] + end + mismatches = expected.each_with_object({}) do |(name, version), out| + actual_version = actual[name] + next if actual_version == version + + out[name] = { + "expected" => version, + "actual" => actual_version, + } + end + unless mismatches.empty? + warn JSON.pretty_generate(mismatches) + abort "unexpected macOS Vulkan formula version" + end + RUBY + HOMEBREW_PREFIX="$(brew --prefix)" + VK_ICD_FILENAMES="$HOMEBREW_PREFIX/opt/molten-vk/etc/vulkan/icd.d/MoltenVK_icd.json" + VK_LAYER_PATH="$HOMEBREW_PREFIX/opt/vulkan-validationlayers/share/vulkan/explicit_layer.d" + DYLD_FALLBACK_LIBRARY_PATH="$HOMEBREW_PREFIX/opt/vulkan-loader/lib:$HOMEBREW_PREFIX/opt/molten-vk/lib" + test -f "$VK_ICD_FILENAMES" + test -d "$VK_LAYER_PATH" + echo "VK_ICD_FILENAMES=$VK_ICD_FILENAMES" >> "$GITHUB_ENV" + echo "VK_LAYER_PATH=$VK_LAYER_PATH" >> "$GITHUB_ENV" + echo "DYLD_FALLBACK_LIBRARY_PATH=$DYLD_FALLBACK_LIBRARY_PATH" >> "$GITHUB_ENV" - name: Install cargo-deny run: cargo install cargo-deny --version 0.19.9 --locked - name: Run canonical CI gate @@ -81,7 +81,17 @@ cargo run -p fparkan-vulkan-smoke --locked -- \ Перед запуском убедитесь, что на машине доступен Vulkan loader и рабочий ICD: -- macOS: установлены Vulkan SDK и MoltenVK; если используется нестандартная установка, проверьте `VK_ICD_FILENAMES`, `VK_LAYER_PATH` и наличие `VK_LAYER_KHRONOS_validation`. +- macOS: используйте ту же схему, что и GitHub CI (`macos-15` arm64): + + ```bash + brew install molten-vk vulkan-loader vulkan-tools vulkan-validationlayers + export VK_ICD_FILENAMES="$(brew --prefix)/opt/molten-vk/etc/vulkan/icd.d/MoltenVK_icd.json" + export VK_LAYER_PATH="$(brew --prefix)/opt/vulkan-validationlayers/share/vulkan/explicit_layer.d" + export DYLD_FALLBACK_LIBRARY_PATH="$(brew --prefix)/opt/vulkan-loader/lib:$(brew --prefix)/opt/molten-vk/lib" + vulkaninfo --summary + ``` + + Workflow fail-closed проверяет exact formula versions и ожидает наличие `VK_LAYER_KHRONOS_validation`. - Linux: установлен `libvulkan` и драйвер/ICD (`mesa-vulkan-drivers`, Lavapipe или vendor GPU stack); smoke нужно запускать из активной графической сессии X11/Wayland. - Windows: установлен Vulkan runtime от GPU vendor или LunarG Vulkan SDK; validation layer должен быть доступен из активного runtime. |
