Skip to content

Add Rust CI

Add Rust CI #13

Workflow file for this run

name: Rust CI
on:
push:
branches:
- master
pull_request:
branches:
- master
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
shell: bash
env:
VULKAN_SDK_VERSION: 1.3.250.1
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
sudo apt-get update -y -qq
sudo apt install -y vulkan-tools libvulkan-dev
elif [ "$RUNNER_OS" == "macOS" ]; then
VULKAN_INSTALL_DIR="$HOME/vulkan-sdk"
mkdir -p "$VULKAN_INSTALL_DIR"
cd "$RUNNER_TEMP"
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 $VULKAN_INSTALL_DIR/vulkansdk-macos-$VULKAN_SDK_VERSION --accept-licenses --default-answer --confirm-command install
hdiutil detach /Volumes/VulkanSDK
rm vulkan-sdk.dmg
echo "VULKAN_SDK_PATH=$VULKAN_INSTALL_DIR/vulkansdk-macos-$VULKAN_SDK_VERSION" >> $GITHUB_ENV
echo "VULKAN_SDK=$VULKAN_INSTALL_DIR/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS" >> $GITHUB_ENV
echo "DYLD_LIBRARY_PATH=$VULKAN_INSTALL_DIR/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS/lib:$DYLD_LIBRARY_PATH" >> $GITHUB_ENV
echo "PATH=$VULKAN_INSTALL_DIR/vulkansdk-macos-$VULKAN_SDK_VERSION/macOS/bin:$PATH" >> $GITHUB_ENV
cd "$GITHUB_WORKSPACE"
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 Linux graphics dependencies
run: |
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
- if: ${{ runner.os == 'macOS' && matrix.use_moltenvk == true }}
name: Setup MoltenVK on macOS
run: |
echo "VK_ICD_FILENAMES=$HOME/vulkan-sdk/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='${{ runner.temp }}/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: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Install nightly toolchain for cargo-gpu
shell: bash
run: |
# cargo-gpu will auto-install its required toolchain version
# but we need a base nightly toolchain
rustup toolchain install nightly
rustup component add rust-src rustc-dev llvm-tools --toolchain nightly
- name: Install cargo-gpu
shell: bash
env:
RUST_LOG: debug
run: |
# Install cargo-gpu with locked dependencies
cargo install --git https://github.com/rust-gpu/cargo-gpu cargo-gpu --locked
- name: Cache cargo registry
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Set Windows PATH
if: runner.os == 'Windows'
run: echo "$env:USERPROFILE\.cargo\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Compile shaders to SPIR-V
working-directory: shaders/rust
run: python3 compileshaders.py
- name: Verify no uncommitted changes
shell: bash
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