Add Rust CI #5
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Rust CI | |
| on: | |
| push: | |
| branches: | |
| - master | |
| pull_request: | |
| branches: | |
| - master | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| test: | |
| name: Test Rust Shaders - ${{ matrix.name }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| name: Ubuntu | |
| - os: windows-latest | |
| name: Windows | |
| - os: macos-latest | |
| name: macOS-MoltenVK | |
| use_moltenvk: true | |
| - os: macos-latest | |
| name: macOS-SwiftShader | |
| use_swiftshader: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: "recursive" | |
| - name: Install Vulkan SDK | |
| if: ${{ runner.os != 'Linux' }} | |
| shell: bash | |
| env: | |
| VULKAN_SDK_VERSION: 1.3.250.1 | |
| run: | | |
| if [ "$RUNNER_OS" == "macOS" ]; then | |
| wget "https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VERSION/mac/vulkansdk-macos-$VULKAN_SDK_VERSION.dmg?Human=true" -O vulkan-sdk.dmg | |
| hdiutil attach vulkan-sdk.dmg | |
| # The volume is mounted as /Volumes/VulkanSDK | |
| sudo /Volumes/VulkanSDK/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION --accept-licenses --default-answer --confirm-command install | |
| hdiutil detach /Volumes/VulkanSDK | |
| echo "VULKAN_SDK_PATH=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION" >> $GITHUB_ENV | |
| echo "VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS" >> $GITHUB_ENV | |
| echo "DYLD_LIBRARY_PATH=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS/lib:$DYLD_LIBRARY_PATH" >> $GITHUB_ENV | |
| echo "PATH=$GITHUB_WORKSPACE/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS/bin:$PATH" >> $GITHUB_ENV | |
| elif [ "$RUNNER_OS" == "Windows" ]; then | |
| curl -L "https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VERSION/windows/VulkanSDK-$VULKAN_SDK_VERSION-Installer.exe?Human=true" -o vulkan-sdk.exe | |
| ./vulkan-sdk.exe --accept-licenses --default-answer --confirm-command install | |
| echo "VULKAN_SDK=C:\\VulkanSDK\\$VULKAN_SDK_VERSION" >> $GITHUB_ENV | |
| echo "PATH=$VULKAN_SDK\\Bin;$PATH" >> $GITHUB_ENV | |
| fi | |
| - if: ${{ runner.os == 'Linux' }} | |
| name: Install Vulkan SDK and software renderers on Linux | |
| run: | | |
| sudo apt-get update -y -qq | |
| sudo add-apt-repository ppa:kisak/turtle -y | |
| sudo apt-get update | |
| sudo apt install -y xvfb libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers vulkan-tools libvulkan-dev | |
| - if: ${{ matrix.use_moltenvk == true }} | |
| name: Setup MoltenVK on macOS | |
| run: | | |
| echo "VK_ICD_FILENAMES=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.250.1/macOS/share/vulkan/icd.d/MoltenVK_icd.json" >> $GITHUB_ENV | |
| - name: Install SwiftShader | |
| if: ${{ matrix.use_swiftshader == true || runner.os == 'Linux' || runner.os == 'Windows' }} | |
| env: | |
| SWIFTSHADER_WINDOWS_URL: https://github.com/nikitalita/swiftshader-dist-win/releases/download/2021-12-09_00-02/swiftshader-2021-12-09_00-02-subzero.7z.zip | |
| SWIFTSHADER_LINUX_URL: https://github.com/qarmin/gtk_library_store/releases/download/3.24.0/swiftshader2.zip | |
| SWIFTSHADER_MACOS_URL: https://github.com/nikitalita/swiftshader-builds/releases/download/1.0.0/swiftshader-vulkan-r6216.7997cbc34b-macos-10.15.zip | |
| shell: bash | |
| run: | | |
| export SWIFTSHADER_DEST_DIR='${{ github.workspace }}/swiftshader' | |
| mkdir -p $SWIFTSHADER_DEST_DIR | |
| if [ "$RUNNER_OS" == "Linux" ]; then | |
| wget ${{ env.SWIFTSHADER_LINUX_URL }} -O swiftshader.zip | |
| unzip swiftshader.zip -d $SWIFTSHADER_DEST_DIR | |
| rm swiftshader.zip | |
| SWIFTSHADER_LIB_NAME="./libvk_swiftshader.so" | |
| sed -i "s|PATH_TO_CHANGE|$SWIFTSHADER_LIB_NAME|" $SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json | |
| echo "VK_ICD_FILENAMES=$SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json" >> $GITHUB_ENV | |
| elif [ "$RUNNER_OS" == "macOS" ]; then | |
| wget ${{ env.SWIFTSHADER_MACOS_URL }} -O swiftshader.zip | |
| unzip swiftshader.zip -d temp-ss-dl/ | |
| rm swiftshader.zip | |
| mv temp-ss-dl/lib/libvk_swiftshader.dylib $SWIFTSHADER_DEST_DIR/libvk_swiftshader.dylib | |
| mv temp-ss-dl/share/vulkan/icd.d/vk_swiftshader_icd.json $SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json | |
| rm -rf temp-ss-dl/ | |
| sed -i '' "s/..\/..\/..\/lib\/libvk_swiftshader.dylib/.\/libvk_swiftshader.dylib/" "$SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json" | |
| echo "VK_ICD_FILENAMES=$SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json" >> $GITHUB_ENV | |
| elif [ "$RUNNER_OS" == "Windows" ]; then | |
| choco install --yes 7zip | |
| curl -L ${{env.SWIFTSHADER_WINDOWS_URL}} -o swiftshader.zip | |
| 7z x swiftshader.zip -otemp-ss-dl/ | |
| rm swiftshader.zip | |
| mv temp-ss-dl/swiftshader-*/swiftshader-*.7z temp-ss-dl/swiftshader.7z | |
| 7z x temp-ss-dl/swiftshader.7z -otemp-ss-dl/swiftshader | |
| rm temp-ss-dl/swiftshader.7z | |
| mv temp-ss-dl/swiftshader/x64/bin/vk_swiftshader.dll $SWIFTSHADER_DEST_DIR/vk_swiftshader.dll | |
| mv temp-ss-dl/swiftshader/x64/bin/vulkan-1.dll $SWIFTSHADER_DEST_DIR/vulkan-1.dll | |
| mv temp-ss-dl/swiftshader/x64/bin/vk_swiftshader_icd.json $SWIFTSHADER_DEST_DIR/vk_swiftshader_icd.json | |
| rm -rf temp-ss-dl/ | |
| echo "VK_ICD_FILENAMES=$SWIFTSHADER_DEST_DIR\vk_swiftshader_icd.json" >> $GITHUB_ENV | |
| fi | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rust-src, rustc-dev, llvm-tools | |
| - name: Install cargo-gpu | |
| run: | | |
| # Set non-interactive mode to avoid raw mode issues in CI | |
| export CARGO_TERM_COLOR=never | |
| export CI=true | |
| cargo install --git https://github.com/rust-gpu/cargo-gpu cargo-gpu | |
| - name: Cache cargo registry | |
| uses: actions/cache@v3 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Compile shaders to SPIR-V | |
| working-directory: shaders/rust | |
| run: | | |
| # Set non-interactive mode for cargo-gpu | |
| export CARGO_TERM_COLOR=never | |
| export CI=true | |
| python3 compileshaders.py | |
| - name: Verify no uncommitted changes | |
| run: | | |
| # Check if there are any changes to tracked files | |
| if ! git diff --exit-code; then | |
| echo "Error: Generated SPIR-V files differ from checked-in versions" | |
| echo "Please run 'python3 compileshaders.py' locally and commit the changes" | |
| git diff --name-only | |
| exit 1 | |
| fi | |
| # Check for untracked files | |
| if [ -n "$(git ls-files --others --exclude-standard)" ]; then | |
| echo "Error: New untracked files were generated" | |
| echo "Please add these files to git or update .gitignore:" | |
| git ls-files --others --exclude-standard | |
| exit 1 | |
| fi |