Add Rust CI #13
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 | |
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 |