ci(vulkan-smoke): pin macos runtime provisioning
This commit is contained in:
@@ -55,8 +55,11 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: macos-latest
|
- os: macos-15
|
||||||
smoke_platform: macos
|
smoke_platform: macos
|
||||||
|
runner_arch: arm64
|
||||||
|
moltenvk_version: 1.4.1
|
||||||
|
vulkan_sdk_version: 1.4.350.1
|
||||||
env:
|
env:
|
||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
steps:
|
steps:
|
||||||
@@ -65,6 +68,48 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
toolchain: 1.87.0
|
toolchain: 1.87.0
|
||||||
components: clippy,rustfmt
|
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
|
- name: Install cargo-deny
|
||||||
run: cargo install cargo-deny --version 0.19.9 --locked
|
run: cargo install cargo-deny --version 0.19.9 --locked
|
||||||
- name: Run canonical CI gate
|
- name: Run canonical CI gate
|
||||||
|
|||||||
@@ -81,7 +81,17 @@ cargo run -p fparkan-vulkan-smoke --locked -- \
|
|||||||
|
|
||||||
Перед запуском убедитесь, что на машине доступен Vulkan loader и рабочий ICD:
|
Перед запуском убедитесь, что на машине доступен 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.
|
- Linux: установлен `libvulkan` и драйвер/ICD (`mesa-vulkan-drivers`, Lavapipe или vendor GPU stack); smoke нужно запускать из активной графической сессии X11/Wayland.
|
||||||
- Windows: установлен Vulkan runtime от GPU vendor или LunarG Vulkan SDK; validation layer должен быть доступен из активного runtime.
|
- Windows: установлен Vulkan runtime от GPU vendor или LunarG Vulkan SDK; validation layer должен быть доступен из активного runtime.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user