name: Build Zenyx โšก on: push: pull_request: jobs: setup: name: ๐Ÿ”ง Setup Environment runs-on: ubuntu-latest outputs: cache-hit: ${{ steps.cache-tools.outputs.cache-hit }} steps: - name: ๐Ÿ“ฅ Checkout source uses: https://github.com/actions/checkout@v4 - name: ๐Ÿ—„๏ธ Cache tools uses: https://github.com/actions/cache@v4 id: cache-tools with: path: | ~/.cargo/bin /tmp/zig key: cargo-tools-${{ hashFiles('**/Cargo.lock') }} restore-keys: | cargo-tools- - name: ๐Ÿฆ€ Install Rust toolchain if: steps.cache-tools.outputs.cache-hit != 'true' uses: https://github.com/actions-rs/toolchain@v1 with: toolchain: stable components: rust-src override: true - name: ๐Ÿ“ฆ Install Build Tools if: steps.cache-tools.outputs.cache-hit != 'true' run: | mkdir -p /tmp/zig cd /tmp/zig curl -Lo zig-linux-x86_64.tar.xz https://ziglang.org/builds/zig-linux-x86_64-0.15.0-dev.377+f01833e03.tar.xz tar -Jxf zig-linux-x86_64.tar.xz -C /tmp/zig --strip-components=1 cargo install cargo-zigbuild cargo-xwin --force cargo-test: name: ๐Ÿงช Run Cargo Tests needs: [setup] runs-on: ubuntu-latest steps: - name: ๐Ÿ“ฅ Checkout source uses: https://github.com/actions/checkout@v4 - name: ๐Ÿ—„๏ธ Restore Cargo cache uses: https://github.com/actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git target key: cargo-${{ hashFiles('**/Cargo.lock') }} restore-keys: | cargo- - name: ๐Ÿฆ€ Install Rust toolchain if: steps.restore-cargo-cache.outputs.cache-hit != 'true' uses: https://github.com/actions-rs/toolchain@v1 with: toolchain: stable components: rust-src override: true - name: ๐ŸŒ‹ Install Vulkan tools run: | apt update apt install -y vulkan-tools glslc - name: ๐Ÿš€ Run tests uses: https://github.com/actions-rs/cargo@v1 with: command: test args: --release --all build: name: ๐Ÿ—๏ธ Build ${{ matrix.target }} needs: [setup, cargo-test] runs-on: ubuntu-latest strategy: fail-fast: false matrix: target: - x86_64-unknown-linux-gnu - aarch64-unknown-linux-gnu - x86_64-pc-windows-msvc include: - target: x86_64-unknown-linux-gnu binary_name: zenyx-x86_64-linux ext: "" command: zigbuild args: --target x86_64-unknown-linux-gnu --release - target: aarch64-unknown-linux-gnu binary_name: zenyx-aarch64-linux ext: "" command: zigbuild args: --target aarch64-unknown-linux-gnu --release - target: x86_64-pc-windows-msvc binary_name: zenyx-x86_64-windows-msvc.exe ext: ".exe" command: xwin args: build --target x86_64-pc-windows-msvc --release steps: - name: ๐Ÿ“ฅ Checkout source uses: https://github.com/actions/checkout@v4 - name: ๐Ÿ—„๏ธ Restore tool cache uses: https://github.com/actions/cache@v4 with: path: | ~/.cargo/bin /tmp/zig key: cargo-tools-${{ hashFiles('**/Cargo.lock') }} restore-keys: | cargo-tools- - name: ๐Ÿ“ Add Zig to PATH run: echo "/tmp/zig" >> $GITHUB_PATH - name: ๐ŸŽฏ Install Rust target uses: https://github.com/actions-rs/toolchain@v1 with: toolchain: stable target: ${{ matrix.target }} override: true - name: ๐Ÿ—„๏ธ Restore Cargo cache uses: https://github.com/actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git target key: cargo-${{ hashFiles('**/Cargo.lock') }} restore-keys: | cargo- - name: ๐ŸŒ‹ Install Vulkan tools run: | apt update apt install -y vulkan-tools glslc - name: ๐Ÿš€ Build release binary uses: https://github.com/actions-rs/cargo@v1 with: command: ${{ matrix.command }} args: ${{ matrix.args }} - name: ๐Ÿ“ฆ Package artifact run: | mkdir -p artifacts cp target/${{ matrix.target }}/release/zenyx${{ matrix.ext }} artifacts/${{ matrix.binary_name }} - name: โฌ†๏ธ Upload artifact uses: https://code.forgejo.org/forgejo/upload-artifact@v4 with: name: ${{ matrix.binary_name }}.zip path: artifacts