Skip to content

Workflow file for this run

name: Shader Binary Release
on:
push:
tags:
- 'v*'
permissions: write-all
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
shader: [asahi, attractor, clifford, droste, fluid, galaxy, lich, mandelbulb, satan, sdvert, sinh, spiral, voronoi, xmas, orbits]
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
ext: ""
archive_ext: ".tar.gz"
- os: windows-latest
target: x86_64-pc-windows-msvc
ext: ".exe"
archive_ext: ".zip"
- os: macos-latest
target: x86_64-apple-darwin
ext: ""
archive_ext: ".tar.gz"
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
# Install required dependencies for Linux
- name: Install Linux dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libudev-dev
# Build the binary
- name: Build binary
uses: actions-rs/cargo@v1
with:
command: build
args: --release --bin ${{ matrix.shader }}
# Create release directory structure and copy files
- name: Prepare release package
shell: bash
run: |
# Create directory structure
mkdir -p release/${{ matrix.shader }}/shaders
# Copy the binary
cp "target/release/${{ matrix.shader }}${{ matrix.ext }}" "release/${{ matrix.shader }}/"
# Copy shader files
cp shaders/${{ matrix.shader }}.wgsl release/${{ matrix.shader }}/shaders/
cp shaders/vertex.wgsl release/${{ matrix.shader }}/shaders/
# Create a README file
echo "${{ matrix.shader }} Shader" > release/${{ matrix.shader }}/README.txt
echo "Please ensure the 'shaders' directory remains in the same folder as the executable." >> release/${{ matrix.shader }}/README.txt
# Windows-specific: create .bat launcher
if [[ "${{ runner.os }}" == "Windows" ]]; then
echo "@echo off" > release/${{ matrix.shader }}/run_${{ matrix.shader }}.bat
echo "if not exist shaders mkdir shaders" >> release/${{ matrix.shader }}/run_${{ matrix.shader }}.bat
echo "${{ matrix.shader }}.exe" >> release/${{ matrix.shader }}/run_${{ matrix.shader }}.bat
fi
# Create launcher script for Linux/MacOS
if [[ "${{ runner.os }}" != "Windows" ]]; then
echo '#!/bin/bash' > release/${{ matrix.shader }}/run_${{ matrix.shader }}.sh
echo 'mkdir -p shaders' >> release/${{ matrix.shader }}/run_${{ matrix.shader }}.sh
echo './${{ matrix.shader }}' >> release/${{ matrix.shader }}/run_${{ matrix.shader }}.sh
chmod +x release/${{ matrix.shader }}/run_${{ matrix.shader }}.sh
fi
# Create archive
- name: Create archive
shell: bash
run: |
cd release
if [[ "${{ runner.os }}" == "Windows" ]]; then
7z a "../${{ matrix.shader }}-${{ matrix.target }}${{ matrix.archive_ext }}" ${{ matrix.shader }}
else
tar -czf "../${{ matrix.shader }}-${{ matrix.target }}${{ matrix.archive_ext }}" ${{ matrix.shader }}
fi
# Upload artifact
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.shader }}-${{ matrix.target }}
path: ${{ matrix.shader }}-${{ matrix.target }}${{ matrix.archive_ext }}
release:
needs: [build]
runs-on: ubuntu-latest
steps:
- name: Download artifacts
uses: actions/download-artifact@v3
with:
path: artifacts
- name: Create Release
uses: softprops/action-gh-release@v1
with:
files: artifacts/**/*
token: ${{ secrets.GITHUB_TOKEN }}
draft: false
prerelease: false
generate_release_notes: true