Skip to content

Build-CI

Build-CI #1707

Workflow file for this run

# Main Build CI. This compiles TRAP™ for Windows and Linux (Ubuntu)
name: Build-CI
# Controls when the workflow will run
on:
# Run on all pull requests
pull_request:
# Run on main, master and dev branches
push:
branches: [ main, master, dev ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
build-linux-gcc-14:
name: Build Linux GCC 14
runs-on: [self-hosted, Linux, X64, ubuntu, "24.10", cpu]
env:
CC: gcc-14
CXX: g++-14
steps:
- name: Cleanup workspace
if: ${{ always() }}
uses: gamestrap/[email protected]
- name: Checkout repository and submodules
uses: actions/checkout@v4
with:
submodules: 'true'
- name: Checkout DiscordGameSDK
if: env.HAS_GIT_NDA_DEPS && env.HAS_GIT_NDA_DEPS_DISCORDGAMESDK
env:
HAS_GIT_NDA_DEPS: ${{ secrets.GIT_NDA_DEPS }}
HAS_GIT_NDA_DEPS_DISCORDGAMESDK: ${{ secrets.GIT_NDA_DEPS_DISCORDGAMESDK }}
run: |
cd Dependencies/DiscordGameSDK
git init
git remote add origin ${{ secrets.GIT_NDA_DEPS }}/${{ secrets.GIT_NDA_DEPS_DISCORDGAMESDK }}
git pull origin main
cd ../..
- name: Checkout NVIDIA Nsight Aftermath SDK
if: env.HAS_GIT_NDA_DEPS && env.HAS_GIT_NDA_DEPS_NSIGHTAFTERMATH
env:
HAS_GIT_NDA_DEPS: ${{ secrets.GIT_NDA_DEPS }}
HAS_GIT_NDA_DEPS_NSIGHTAFTERMATH: ${{ secrets.GIT_NDA_DEPS_NSIGHTAFTERMATH }}
run: |
cd Dependencies/Nsight-Aftermath
git init
git remote add origin ${{ secrets.GIT_NDA_DEPS }}/${{ secrets.GIT_NDA_DEPS_NSIGHTAFTERMATH }}
git pull origin main
cd ../..
- name: Checkout Steamworks SDK
if: env.HAS_GIT_NDA_DEPS && env.HAS_GIT_NDA_DEPS_STEAMWORKSSDK
env:
HAS_GIT_NDA_DEPS: ${{ secrets.GIT_NDA_DEPS }}
HAS_GIT_NDA_DEPS_STEAMWORKSSDK: ${{ secrets.GIT_NDA_DEPS_STEAMWORKSSDK }}
run: |
cd Dependencies/SteamworksSDK
git init
git remote add origin ${{ secrets.GIT_NDA_DEPS }}/${{ secrets.GIT_NDA_DEPS_STEAMWORKSSDK }}
git pull origin main
cd ../..
- name: Retrieve keys for cache
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
shell: bash
id: cache-keys
run: |
echo "Box2D=$(git -C Dependencies/Box2D rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "Catch2=$(git -C Dependencies/Catch2 rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "fmt=$(git -C Dependencies/fmt rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "GLSLang=$(git -C Dependencies/GLSLang rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "ImGui=$(git -C Dependencies/ImGui rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "ImGuizmo=$(git -C Dependencies/ImGuizmo rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "libpng=$(git -C Dependencies/libpng rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "ModernDialogs=$(git -C Dependencies/ModernDialogs rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "QuiteOKImage=$(git -C Dependencies/QuiteOKImage rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "SPIRVCross=$(git -C Dependencies/SPIRV-Cross rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "TracyClient=$(git -C Dependencies/Tracy rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "YAMLCpp=$(git -C Dependencies/YAMLCpp rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "zlib=$(git -C Dependencies/zlib rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
- name: Restore Box2D cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.Box2D}}
folder-path: bin/Release-linux-x86_64/Dependencies/Box2D/
- name: Restore Catch2 cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.Catch2}}
folder-path: bin/Release-linux-x86_64/Dependencies/Catch2/
- name: Restore fmt cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.fmt}}
folder-path: bin/Release-linux-x86_64/Dependencies/fmt/
- name: Restore GLSLang cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.GLSLang}}
folder-path: bin/Release-linux-x86_64/Dependencies/GLSLang/
- name: Restore ImGui cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ImGui}}
folder-path: bin/Release-linux-x86_64/Dependencies/ImGui/
- name: Restore ImGuizmo cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ImGuizmo}}
folder-path: bin/Release-linux-x86_64/Dependencies/ImGuizmo/
- name: Restore libpng cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.libpng}}
folder-path: bin/Release-linux-x86_64/Dependencies/libpng/
- name: Restore ModernDialogs cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ModernDialogs}}
folder-path: bin/Release-linux-x86_64/Dependencies/ModernDialogs/
- name: Restore QuiteOKImage cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.QuiteOKImage}}
folder-path: bin/Release-linux-x86_64/Dependencies/QuiteOKImage/
- name: Restore SPIRV-Cross cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.SPIRVCross}}
folder-path: bin/Release-linux-x86_64/Dependencies/SPIRV-Cross/
- name: Restore TracyClient cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.TracyClient}}
folder-path: bin/Release-linux-x86_64/Dependencies/TracyClient/
- name: Restore YAMLCpp cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.YAMLCpp}}
folder-path: bin/Release-linux-x86_64/Dependencies/YAMLCpp/
- name: Restore zlib cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.zlib}}
folder-path: bin/Release-linux-x86_64/Dependencies/zlib/
- name: Add toolchain ppa
run: sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/ppa
- name: Update package list
run: sudo apt update
- name: Install dependencies
run: sudo apt install -y g++-14 mold xorg-dev libwayland-dev libxkbcommon-dev wayland-protocols ninja-build
- name: Make python3 available as python
run: sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
- name: Make pip3 available as pip
run: sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 10
- name: Make g++-14 available as g++
run: sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 10
- name: Make gcc-14 available as gcc
run: sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 10
- name: Make scripts and premake executable
run: |
chmod +x libs/premake5/linux/premake5
chmod +x GeneratorScripts/GenerateProjectNinjaGCC.sh
- name: Generate Ninja files
run: |
cd GeneratorScripts/
RUN_CICD_PIPELINE=1 ./GenerateProjectNinjaGCC.sh
cd ..
- name: Setup problem matchers
uses: ./.github/composite/problem-matchers
- name: Compile code
run: ninja Release -j $(nproc)
- name: Save Box2D cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.Box2D}}
folder-path: bin/Release-linux-x86_64/Dependencies/Box2D/./
- name: Save Catch2 cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.Catch2}}
folder-path: bin/Release-linux-x86_64/Dependencies/Catch2/./
- name: Save fmt cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.fmt}}
folder-path: bin/Release-linux-x86_64/Dependencies/fmt/./
- name: Save GLSLang cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.GLSLang}}
folder-path: bin/Release-linux-x86_64/Dependencies/GLSLang/./
- name: Save ImGui cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ImGui}}
folder-path: bin/Release-linux-x86_64/Dependencies/ImGui/./
- name: Save ImGuizmo cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ImGuizmo}}
folder-path: bin/Release-linux-x86_64/Dependencies/ImGuizmo/./
- name: Save libpng cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.libpng}}
folder-path: bin/Release-linux-x86_64/Dependencies/libpng/./
- name: Save ModernDialogs cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ModernDialogs}}
folder-path: bin/Release-linux-x86_64/Dependencies/ModernDialogs/./
- name: Save QuiteOKImage cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.QuiteOKImage}}
folder-path: bin/Release-linux-x86_64/Dependencies/QuiteOKImage/./
- name: Save SPIRV-Cross cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.SPIRVCross}}
folder-path: bin/Release-linux-x86_64/Dependencies/SPIRV-Cross/./
- name: Save TracyClient cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.TracyClient}}
folder-path: bin/Release-linux-x86_64/Dependencies/TracyClient/./
- name: Save YAMLCpp cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.YAMLCpp}}
folder-path: bin/Release-linux-x86_64/Dependencies/YAMLCpp/./
- name: Save zlib cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.zlib}}
folder-path: bin/Release-linux-x86_64/Dependencies/zlib/./
- name: Finalize data for artifact
run: |
cp -r Games/Headless-Tests/Assets bin/Release-linux-x86_64/Games/Headless-Tests/
cp -r Games/Sandbox/Assets bin/Release-linux-x86_64/Games/Sandbox/
cp -r Games/Tests/Assets bin/Release-linux-x86_64/Games/Tests/
cp -r Games/Tests3D/Assets bin/Release-linux-x86_64/Games/Tests3D/
cp -r Games/TRAP-Editor/Assets bin/Release-linux-x86_64/Games/TRAP-Editor/
cp -r Games/TRAP-Editor/Resources bin/Release-linux-x86_64/Games/TRAP-Editor/
cp -r Utility/QOIConv bin/Release-linux-x86_64/Utility/
cp -r Licenses bin/Release-linux-x86_64/Licenses
rm bin/Release-linux-x86_64/Utility/QOIConv/QOIConv.exe
- name: Upload artifacts (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/artifact-upload
with:
target-filename: Linux GCC Release Executables
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
folder-to-upload: >
bin/Release-linux-x86_64/./Games
bin/Release-linux-x86_64/./Utility
bin/Release-linux-x86_64/./UnitTests
bin/Release-linux-x86_64/./Licenses
- name: Upload artifacts (GitHub)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname == null
uses: actions/upload-artifact@v4
with:
name: Linux GCC Release Executables
path: |
bin/Release-linux-x86_64/Games
bin/Release-linux-x86_64/Utility
bin/Release-linux-x86_64/UnitTests
bin/Release-linux-x86_64/Licenses
build-linux-clang-19:
name: Build Linux Clang 19
runs-on: [self-hosted, Linux, X64, ubuntu, "24.10", cpu]
env:
CC: clang-19
CXX: clang++-19
steps:
- name: Cleanup workspace
if: ${{ always() }}
uses: gamestrap/[email protected]
- name: Checkout repository and submodules
uses: actions/checkout@v4
with:
submodules: 'true'
- name: Checkout DiscordGameSDK
if: env.HAS_GIT_NDA_DEPS && env.HAS_GIT_NDA_DEPS_DISCORDGAMESDK
env:
HAS_GIT_NDA_DEPS: ${{ secrets.GIT_NDA_DEPS }}
HAS_GIT_NDA_DEPS_DISCORDGAMESDK: ${{ secrets.GIT_NDA_DEPS_DISCORDGAMESDK }}
run: |
cd Dependencies/DiscordGameSDK
git init
git remote add origin ${{ secrets.GIT_NDA_DEPS }}/${{ secrets.GIT_NDA_DEPS_DISCORDGAMESDK }}
git pull origin main
cd ../..
- name: Checkout NVIDIA Nsight Aftermath SDK
if: env.HAS_GIT_NDA_DEPS && env.HAS_GIT_NDA_DEPS_NSIGHTAFTERMATH
env:
HAS_GIT_NDA_DEPS: ${{ secrets.GIT_NDA_DEPS }}
HAS_GIT_NDA_DEPS_NSIGHTAFTERMATH: ${{ secrets.GIT_NDA_DEPS_NSIGHTAFTERMATH }}
run: |
cd Dependencies/Nsight-Aftermath
git init
git remote add origin ${{ secrets.GIT_NDA_DEPS }}/${{ secrets.GIT_NDA_DEPS_NSIGHTAFTERMATH }}
git pull origin main
cd ../..
- name: Checkout Steamworks SDK
if: env.HAS_GIT_NDA_DEPS && env.HAS_GIT_NDA_DEPS_STEAMWORKSSDK
env:
HAS_GIT_NDA_DEPS: ${{ secrets.GIT_NDA_DEPS }}
HAS_GIT_NDA_DEPS_STEAMWORKSSDK: ${{ secrets.GIT_NDA_DEPS_STEAMWORKSSDK }}
run: |
cd Dependencies/SteamworksSDK
git init
git remote add origin ${{ secrets.GIT_NDA_DEPS }}/${{ secrets.GIT_NDA_DEPS_STEAMWORKSSDK }}
git pull origin main
cd ../..
- name: Retrieve keys for cache
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
shell: bash
id: cache-keys
run: |
echo "Box2D=$(git -C Dependencies/Box2D rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "Catch2=$(git -C Dependencies/Catch2 rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "fmt=$(git -C Dependencies/fmt rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "GLSLang=$(git -C Dependencies/GLSLang rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "ImGui=$(git -C Dependencies/ImGui rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "ImGuizmo=$(git -C Dependencies/ImGuizmo rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "libpng=$(git -C Dependencies/libpng rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "ModernDialogs=$(git -C Dependencies/ModernDialogs rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "QuiteOKImage=$(git -C Dependencies/QuiteOKImage rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "SPIRVCross=$(git -C Dependencies/SPIRV-Cross rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "TracyClient=$(git -C Dependencies/Tracy rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "YAMLCpp=$(git -C Dependencies/YAMLCpp rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
echo "zlib=$(git -C Dependencies/zlib rev-parse HEAD)_Linux_Release" >> "$GITHUB_OUTPUT"
- name: Restore Box2D cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.Box2D}}
folder-path: bin/Release-linux-x86_64/Dependencies/Box2D/
- name: Restore Catch2 cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.Catch2}}
folder-path: bin/Release-linux-x86_64/Dependencies/Catch2/
- name: Restore fmt cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.fmt}}
folder-path: bin/Release-linux-x86_64/Dependencies/fmt/
- name: Restore GLSLang cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.GLSLang}}
folder-path: bin/Release-linux-x86_64/Dependencies/GLSLang/
- name: Restore ImGui cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ImGui}}
folder-path: bin/Release-linux-x86_64/Dependencies/ImGui/
- name: Restore ImGuizmo cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ImGuizmo}}
folder-path: bin/Release-linux-x86_64/Dependencies/ImGuizmo/
- name: Restore libpng cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.libpng}}
folder-path: bin/Release-linux-x86_64/Dependencies/libpng/
- name: Restore ModernDialogs cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ModernDialogs}}
folder-path: bin/Release-linux-x86_64/Dependencies/ModernDialogs/
- name: Restore QuiteOKImage cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.QuiteOKImage}}
folder-path: bin/Release-linux-x86_64/Dependencies/QuiteOKImage/
- name: Restore SPIRV-Cross cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.SPIRVCross}}
folder-path: bin/Release-linux-x86_64/Dependencies/SPIRV-Cross/
- name: Restore TracyClient cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.TracyClient}}
folder-path: bin/Release-linux-x86_64/Dependencies/TracyClient/
- name: Restore YAMLCpp cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.YAMLCpp}}
folder-path: bin/Release-linux-x86_64/Dependencies/YAMLCpp/
- name: Restore zlib cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.zlib}}
folder-path: bin/Release-linux-x86_64/Dependencies/zlib/
- name: Add toolchain ppa
run: sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/ppa
- name: Update package list
run: sudo apt update
- name: Install dependencies
run: sudo apt install -y clang-19 llvm-19 mold xorg-dev libwayland-dev libxkbcommon-dev wayland-protocols ninja-build
- name: Make python3 available as python
run: sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
- name: Make pip3 available as pip
run: sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 10
- name: Make llvm-ar-19 available as llvm-ar
run: sudo update-alternatives --install /usr/bin/llvm-ar llvm-ar /usr/bin/llvm-ar-19 10
- name: Make clang-19 available as clang
run: sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-19 10
- name: Make clang++-19 available as clang++
run: sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-19 10
- name: Make scripts and premake executable
run: |
chmod +x libs/premake5/linux/premake5
chmod +x GeneratorScripts/GenerateProjectNinjaClang.sh
- name: Generate Ninja files
run: |
cd GeneratorScripts/
RUN_CICD_PIPELINE=1 ./GenerateProjectNinjaClang.sh
cd ..
- name: Setup problem matchers
uses: ./.github/composite/problem-matchers
- name: Compile code
run: ninja Release -j $(nproc)
- name: Save Box2D cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.Box2D}}
folder-path: bin/Release-linux-x86_64/Dependencies/Box2D/./
- name: Save Catch2 cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.Catch2}}
folder-path: bin/Release-linux-x86_64/Dependencies/Catch2/./
- name: Save fmt cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.fmt}}
folder-path: bin/Release-linux-x86_64/Dependencies/fmt/./
- name: Save GLSLang cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.GLSLang}}
folder-path: bin/Release-linux-x86_64/Dependencies/GLSLang/./
- name: Save ImGui cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ImGui}}
folder-path: bin/Release-linux-x86_64/Dependencies/ImGui/./
- name: Save ImGuizmo cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ImGuizmo}}
folder-path: bin/Release-linux-x86_64/Dependencies/ImGuizmo/./
- name: Save libpng cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.libpng}}
folder-path: bin/Release-linux-x86_64/Dependencies/libpng/./
- name: Save ModernDialogs cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ModernDialogs}}
folder-path: bin/Release-linux-x86_64/Dependencies/ModernDialogs/./
- name: Save QuiteOKImage cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.QuiteOKImage}}
folder-path: bin/Release-linux-x86_64/Dependencies/QuiteOKImage/./
- name: Save SPIRV-Cross cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.SPIRVCross}}
folder-path: bin/Release-linux-x86_64/Dependencies/SPIRV-Cross/./
- name: Save TracyClient cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.TracyClient}}
folder-path: bin/Release-linux-x86_64/Dependencies/TracyClient/./
- name: Save YAMLCpp cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.YAMLCpp}}
folder-path: bin/Release-linux-x86_64/Dependencies/YAMLCpp/./
- name: Save zlib cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.zlib}}
folder-path: bin/Release-linux-x86_64/Dependencies/zlib/./
- name: Finalize data for artifact
run: |
cp -r Games/Headless-Tests/Assets bin/Release-linux-x86_64/Games/Headless-Tests/
cp -r Games/Sandbox/Assets bin/Release-linux-x86_64/Games/Sandbox/
cp -r Games/Tests/Assets bin/Release-linux-x86_64/Games/Tests/
cp -r Games/Tests3D/Assets bin/Release-linux-x86_64/Games/Tests3D/
cp -r Games/TRAP-Editor/Assets bin/Release-linux-x86_64/Games/TRAP-Editor/
cp -r Games/TRAP-Editor/Resources bin/Release-linux-x86_64/Games/TRAP-Editor/
cp -r Utility/QOIConv bin/Release-linux-x86_64/Utility/
cp -r Licenses bin/Release-linux-x86_64/Licenses
rm bin/Release-linux-x86_64/Utility/QOIConv/QOIConv.exe
- name: Upload artifacts (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/artifact-upload
with:
target-filename: Linux Clang Release Executables
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
folder-to-upload: >
bin/Release-linux-x86_64/./Games
bin/Release-linux-x86_64/./Utility
bin/Release-linux-x86_64/./UnitTests
bin/Release-linux-x86_64/./Licenses
- name: Upload artifacts (GitHub)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname == null
uses: actions/upload-artifact@v4
with:
name: Linux Clang Release Executables
path: |
bin/Release-linux-x86_64/Games
bin/Release-linux-x86_64/Utility
bin/Release-linux-x86_64/UnitTests
bin/Release-linux-x86_64/Licenses
build-windows-msvc-2022:
name: Build Windows MSVC 2022
runs-on: [self-hosted, windows, X64, cpu]
steps:
- name: Cleanup workspace
if: ${{ always() }}
uses: gamestrap/[email protected]
- name: Checkout repository and submodules
uses: actions/checkout@v4
with:
submodules: 'true'
- name: Checkout DiscordGameSDK
if: env.HAS_GIT_NDA_DEPS && env.HAS_GIT_NDA_DEPS_DISCORDGAMESDK
env:
HAS_GIT_NDA_DEPS: ${{ secrets.GIT_NDA_DEPS }}
HAS_GIT_NDA_DEPS_DISCORDGAMESDK: ${{ secrets.GIT_NDA_DEPS_DISCORDGAMESDK }}
run: |
cd Dependencies/DiscordGameSDK
git init
git remote add origin ${{ secrets.GIT_NDA_DEPS }}/${{ secrets.GIT_NDA_DEPS_DISCORDGAMESDK }}
git pull origin main
cd ../..
- name: Checkout NVIDIA Nsight Aftermath SDK
if: env.HAS_GIT_NDA_DEPS && env.HAS_GIT_NDA_DEPS_NSIGHTAFTERMATH
env:
HAS_GIT_NDA_DEPS: ${{ secrets.GIT_NDA_DEPS }}
HAS_GIT_NDA_DEPS_NSIGHTAFTERMATH: ${{ secrets.GIT_NDA_DEPS_NSIGHTAFTERMATH }}
run: |
cd Dependencies/Nsight-Aftermath
git init
git remote add origin ${{ secrets.GIT_NDA_DEPS }}/${{ secrets.GIT_NDA_DEPS_NSIGHTAFTERMATH }}
git pull origin main
cd ../..
- name: Checkout Steamworks SDK
if: env.HAS_GIT_NDA_DEPS && env.HAS_GIT_NDA_DEPS_STEAMWORKSSDK
env:
HAS_GIT_NDA_DEPS: ${{ secrets.GIT_NDA_DEPS }}
HAS_GIT_NDA_DEPS_STEAMWORKSSDK: ${{ secrets.GIT_NDA_DEPS_STEAMWORKSSDK }}
run: |
cd Dependencies/SteamworksSDK
git init
git remote add origin ${{ secrets.GIT_NDA_DEPS }}/${{ secrets.GIT_NDA_DEPS_STEAMWORKSSDK }}
git pull origin main
cd ../..
- name: Retrieve keys for cache
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
shell: bash
id: cache-keys
run: |
echo "Box2D=$(git -C Dependencies/Box2D rev-parse HEAD)_Windows_Release" >> "$GITHUB_OUTPUT"
echo "Catch2=$(git -C Dependencies/Catch2 rev-parse HEAD)_Windows_Release" >> "$GITHUB_OUTPUT"
echo "fmt=$(git -C Dependencies/fmt rev-parse HEAD)_Windows_Release" >> "$GITHUB_OUTPUT"
echo "GLSLang=$(git -C Dependencies/GLSLang rev-parse HEAD)_Windows_Release" >> "$GITHUB_OUTPUT"
echo "ImGui=$(git -C Dependencies/ImGui rev-parse HEAD)_Windows_Release" >> "$GITHUB_OUTPUT"
echo "ImGuizmo=$(git -C Dependencies/ImGuizmo rev-parse HEAD)_Windows_Release" >> "$GITHUB_OUTPUT"
echo "libpng=$(git -C Dependencies/libpng rev-parse HEAD)_Windows_Release" >> "$GITHUB_OUTPUT"
echo "ModernDialogs=$(git -C Dependencies/ModernDialogs rev-parse HEAD)_Windows_Release" >> "$GITHUB_OUTPUT"
echo "QuiteOKImage=$(git -C Dependencies/QuiteOKImage rev-parse HEAD)_Windows_Release" >> "$GITHUB_OUTPUT"
echo "SPIRVCross=$(git -C Dependencies/SPIRV-Cross rev-parse HEAD)_Windows_Release" >> "$GITHUB_OUTPUT"
echo "TracyClient=$(git -C Dependencies/Tracy rev-parse HEAD)_Windows_Release" >> "$GITHUB_OUTPUT"
echo "YAMLCpp=$(git -C Dependencies/YAMLCpp rev-parse HEAD)_Windows_Release" >> "$GITHUB_OUTPUT"
echo "zlib=$(git -C Dependencies/zlib rev-parse HEAD)_Windows_Release" >> "$GITHUB_OUTPUT"
- name: Restore Box2D cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.Box2D}}
folder-path: bin/Release-windows-x86_64/Dependencies/Box2D/
- name: Restore Catch2 cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.Catch2}}
folder-path: bin/Release-windows-x86_64/Dependencies/Catch2/
- name: Restore fmt cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.fmt}}
folder-path: bin/Release-windows-x86_64/Dependencies/fmt/
- name: Restore GLSLang cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.GLSLang}}
folder-path: bin/Release-windows-x86_64/Dependencies/GLSLang/
- name: Restore ImGui cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ImGui}}
folder-path: bin/Release-windows-x86_64/Dependencies/ImGui/
- name: Restore ImGuizmo cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ImGuizmo}}
folder-path: bin/Release-windows-x86_64/Dependencies/ImGuizmo/
- name: Restore libpng cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.libpng}}
folder-path: bin/Release-windows-x86_64/Dependencies/libpng/
- name: Restore ModernDialogs cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ModernDialogs}}
folder-path: bin/Release-windows-x86_64/Dependencies/ModernDialogs/
- name: Restore QuiteOKImage cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.QuiteOKImage}}
folder-path: bin/Release-windows-x86_64/Dependencies/QuiteOKImage/
- name: Restore SPIRV-Cross cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.SPIRVCross}}
folder-path: bin/Release-windows-x86_64/Dependencies/SPIRV-Cross/
- name: Restore TracyClient cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.TracyClient}}
folder-path: bin/Release-windows-x86_64/Dependencies/TracyClient/
- name: Restore YAMLCpp cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.YAMLCpp}}
folder-path: bin/Release-windows-x86_64/Dependencies/YAMLCpp/
- name: Restore zlib cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/restore-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.zlib}}
folder-path: bin/Release-windows-x86_64/Dependencies/zlib/
- name: Setup developer console
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Generate Visual Studio 2022 Project files
run: |
cd GeneratorScripts
$ENV:RUN_CICD_PIPELINE=1
.\GenerateProjectNinjaMSVC.bat
cd ..
- name: Setup problem matchers
uses: ./.github/composite/problem-matchers
- name: Compile code
run: |
$maxCPUCount = if($env:CONTAINER_MAX_CPUS) {$env:CONTAINER_MAX_CPUS} Else {$env:NUMBER_OF_PROCESSORS}
ninja Release -j $maxCPUCount
- name: Save Box2D cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.Box2D}}
folder-path: bin/Release-windows-x86_64/Dependencies/Box2D/./
- name: Save Catch2 cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.Catch2}}
folder-path: bin/Release-windows-x86_64/Dependencies/Catch2/./
- name: Save fmt cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.fmt}}
folder-path: bin/Release-windows-x86_64/Dependencies/fmt/./
- name: Save GLSLang cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.GLSLang}}
folder-path: bin/Release-windows-x86_64/Dependencies/GLSLang/./
- name: Save ImGui cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ImGui}}
folder-path: bin/Release-windows-x86_64/Dependencies/ImGui/./
- name: Save ImGuizmo cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ImGuizmo}}
folder-path: bin/Release-windows-x86_64/Dependencies/ImGuizmo/./
- name: Save libpng cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.libpng}}
folder-path: bin/Release-windows-x86_64/Dependencies/libpng/./
- name: Save ModernDialogs cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.ModernDialogs}}
folder-path: bin/Release-windows-x86_64/Dependencies/ModernDialogs/./
- name: Save QuiteOKImage cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.QuiteOKImage}}
folder-path: bin/Release-windows-x86_64/Dependencies/QuiteOKImage/./
- name: Save SPIRV-Cross cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.SPIRVCross}}
folder-path: bin/Release-windows-x86_64/Dependencies/SPIRV-Cross/./
- name: Save TracyClient cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.TracyClient}}
folder-path: bin/Release-windows-x86_64/Dependencies/TracyClient/./
- name: Save YAMLCpp cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.YAMLCpp}}
folder-path: bin/Release-windows-x86_64/Dependencies/YAMLCpp/./
- name: Save zlib cache (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/save-cache
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
key: ${{steps.cache-keys.outputs.zlib}}
folder-path: bin/Release-windows-x86_64/Dependencies/zlib/./
- name: Finalize data for artifact
run: |
Xcopy Games\Headless-Tests\Assets bin\Release-windows-x86_64\Games\Headless-Tests\Assets /I /H /E /C
Xcopy Games\Sandbox\Assets bin\Release-windows-x86_64\Games\Sandbox\Assets /I /H /E /C
Xcopy Games\Tests\Assets bin\Release-windows-x86_64\Games\Tests\Assets /I /H /E /C
Xcopy Games\Tests3D\Assets bin\Release-windows-x86_64\Games\Tests3D\Assets /I /H /E /C
Xcopy Games\TRAP-Editor\Assets bin\Release-windows-x86_64\Games\TRAP-Editor\Assets /I /H /E /C
Xcopy Games\TRAP-Editor\Resources bin\Release-windows-x86_64\Games\TRAP-Editor\Resources /I /H /E /C
Xcopy Licenses bin\Release-windows-x86_64\Licenses /I /H /E /C
Xcopy Utility\QOIConv bin\Release-windows-x86_64\Utility\QOIConv /I /H /E /C
Xcopy Redists bin\Release-windows-x86_64\Redists /I /H /E /C
Get-ChildItem -Path "bin" -Filter "*.pdb" -Recurse | Remove-Item -Force
Remove-Item bin\Release-windows-x86_64\Utility\QOIConv\QOIConv
- name: Upload artifacts (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: ./.github/composite/artifact-upload
with:
target-filename: Windows MSVC Release Executables
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
folder-to-upload: >
bin/Release-windows-x86_64/./Games
bin/Release-windows-x86_64/./Utility
bin/Release-windows-x86_64/./UnitTests
bin/Release-windows-x86_64/./Licenses
bin/Release-windows-x86_64/./Redists
- name: Upload artifacts (GitHub)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname == null
uses: actions/upload-artifact@v4
with:
name: Windows MSVC 2022 Release Executables
path: |
bin/Release-windows-x86_64/Games
bin/Release-windows-x86_64/Utility
bin/Release-windows-x86_64/UnitTests
bin/Release-windows-x86_64/Licenses
bin/Release-windows-x86_64/Redists
test-windows:
name: Unit-Test Windows
runs-on: [self-hosted, windows, X64, cpu]
needs: [build-windows-msvc-2022]
steps:
- name: Cleanup workspace
if: ${{ always() }}
uses: gamestrap/[email protected]
- name: Download artifact (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: gamestrap/[email protected]
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
artifact-name: "Windows MSVC Release Executables"
- name: Download artifact (GitHub)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname == null
uses: actions/download-artifact@v4
with:
name: Windows MSVC 2022 Release Executables
- name: Run Tests
run: |
cd UnitTests
$env:TRACY_NO_INVARIANT_CHECK=1; .\UnitTests.exe; Remove-Item Env:\TRACY_NO_INVARIANT_CHECK
test-linux:
name: Unit-Test Linux
runs-on: [self-hosted, Linux, X64, ubuntu, cpu]
needs: [build-linux-clang-19]
steps:
- name: Cleanup workspace
if: ${{ always() }}
uses: gamestrap/[email protected]
- name: Download artifact (TrappedGames)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname != null
uses: gamestrap/[email protected]
with:
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
artifact-name: "Linux Clang Release Executables"
- name: Download artifact (GitHub)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname == null
uses: actions/download-artifact@v4
with:
name: Linux Clang Release Executables
- name: Run Tests
run: |
cd UnitTests
chmod +x UnitTests
TRACY_NO_INVARIANT_CHECK=1 ./UnitTests