Skip to content

Nightly-Build-CI

Nightly-Build-CI #45

Workflow file for this run

# Nightly Build CI. This compiles TRAP™ for Windows and Linux (Ubuntu)
name: Nightly-Build-CI
# Controls when the workflow will run
on:
# Run the nightly build every day at 3am
schedule:
- cron: '0 3 * * *'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
build-linux:
name: Build Linux
runs-on: [self-hosted, Linux, X64, ubuntu, "24.10", cpu]
strategy:
matrix:
compiler: [clang, gcc]
configuration: [Debug, Release, RelWithDebInfo, Profiling, ASan_LSan_UBSan, TSan]
clang_version: [19]
gcc_version: [14]
env:
CONFIGURATION: ${{matrix.configuration}}
COMPILER: ${{matrix.compiler}}
steps:
- name: Cleanup workspace
if: ${{ always() }}
uses: gamestrap/[email protected]
- name: Checkout repository and submodules
uses: actions/checkout@v4
with:
submodules: 'true'
ref: 'dev' #Nightly Build is always run on dev branch
- 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: Add toolchain ppa
run: sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/ppa
- name: Update package list
run: sudo apt update
- name: Install shared dependencies
run: |
sudo apt install -y mold xorg-dev libwayland-dev libxkbcommon-dev wayland-protocols ninja-build
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 10
- name: Install compiler
run: |
if [ "${{matrix.compiler}}" == "clang" ]; then
sudo apt install -y clang-${{matrix.clang_version}} llvm-${{matrix.clang_version}} libclang-rt-${{matrix.clang_version}}-dev;
sudo update-alternatives --install /usr/bin/llvm-ar llvm-ar /usr/bin/llvm-ar-${{matrix.clang_version}} 10;
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{matrix.clang_version}} 10;
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${{matrix.clang_version}} 10;
export CC=clang-${{matrix.clang_version}};
export CXX=clang++-${{matrix.clang_version}};
elif [ "${{matrix.compiler}}" == "gcc" ]; then
sudo apt install -y g++-${{matrix.gcc_version}};
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${{matrix.gcc_version}} 10;
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{matrix.gcc_version}} 10;
export CC=gcc-${{matrix.gcc_version}};
export CXX=g++-${{matrix.gcc_version}};
fi
- name: Make scripts and premake executable
run: |
chmod +x libs/premake5/linux/premake5;
chmod +x GeneratorScripts/GenerateProjectNinjaGCC.sh
chmod +x GeneratorScripts/GenerateProjectNinjaClang.sh
- name: Generate Ninja files
run: |
cd GeneratorScripts/;
if [ "${{matrix.compiler}}" == "gcc" ]; then
./GenerateProjectNinjaGCC.sh;
elif [ "${{matrix.compiler}}" == "clang" ]; then
./GenerateProjectNinjaClang.sh;
fi
cd ..;
- name: Setup problem matchers
uses: ./.github/composite/problem-matchers
- name: Compile code
run: ninja ${{matrix.configuration}} -j $(nproc)
- name: Finalize data for artifact
run: |
cp -r Games/Headless-Tests/Assets bin/${{matrix.configuration}}-linux-x86_64/Games/Headless-Tests/
cp -r Games/Sandbox/Assets bin/${{matrix.configuration}}-linux-x86_64/Games/Sandbox/
cp -r Games/Tests/Assets bin/${{matrix.configuration}}-linux-x86_64/Games/Tests/
cp -r Games/Tests3D/Assets bin/${{matrix.configuration}}-linux-x86_64/Games/Tests3D/
cp -r Games/TRAP-Editor/Assets bin/${{matrix.configuration}}-linux-x86_64/Games/TRAP-Editor/
cp -r Games/TRAP-Editor/Resources bin/${{matrix.configuration}}-linux-x86_64/Games/TRAP-Editor/
cp -r Utility/QOIConv bin/${{matrix.configuration}}-linux-x86_64/Utility/
cp -r Licenses bin/${{matrix.configuration}}-linux-x86_64/Licenses
rm bin/${{matrix.configuration}}-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 ${{matrix.compiler}} ${{matrix.configuration}} Executables
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
folder-to-upload: >
bin/${{matrix.configuration}}-linux-x86_64/./Games
bin/${{matrix.configuration}}-linux-x86_64/./Utility
bin/${{matrix.configuration}}-linux-x86_64/./UnitTests
bin/${{matrix.configuration}}-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 ${{matrix.compiler}} ${{matrix.configuration}} Executables
path: |
bin/${{matrix.configuration}}-linux-x86_64/Games
bin/${{matrix.configuration}}-linux-x86_64/Utility
bin/${{matrix.configuration}}-linux-x86_64/UnitTests
bin/${{matrix.configuration}}-linux-x86_64/Licenses
build-windows:
name: Build Windows MSVC 2022
runs-on: [self-hosted, windows, X64, cpu]
strategy:
matrix:
configuration: [Debug, Release, RelWithDebInfo, Profiling]
env:
CONFIGURATION: ${{matrix.configuration}}
steps:
- name: Cleanup workspace
if: ${{ always() }}
uses: gamestrap/[email protected]
- name: Checkout repository and submodules
uses: actions/checkout@v4
with:
submodules: 'true'
ref: 'dev' #Nightly Build is always run on dev branch
- 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: Setup developer console
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Generate Ninja files
run: |
cd GeneratorScripts
.\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 ${{matrix.configuration}} -j $maxCPUCount
- name: Finalize data for artifact
run: |
Xcopy Games\Headless-Tests\Assets bin\${{matrix.configuration}}-windows-x86_64\Games\Headless-Tests\Assets /I /H /E /C
Xcopy Games\Sandbox\Assets bin\${{matrix.configuration}}-windows-x86_64\Games\Sandbox\Assets /I /H /E /C
Xcopy Games\Tests\Assets bin\${{matrix.configuration}}-windows-x86_64\Games\Tests\Assets /I /H /E /C
Xcopy Games\Tests3D\Assets bin\${{matrix.configuration}}-windows-x86_64\Games\Tests3D\Assets /I /H /E /C
Xcopy Games\TRAP-Editor\Assets bin\${{matrix.configuration}}-windows-x86_64\Games\TRAP-Editor\Assets /I /H /E /C
Xcopy Games\TRAP-Editor\Resources bin\${{matrix.configuration}}-windows-x86_64\Games\TRAP-Editor\Resources /I /H /E /C
Xcopy Licenses bin\${{matrix.configuration}}-windows-x86_64\Licenses /I /H /E /C
Xcopy Utility\QOIConv bin\${{matrix.configuration}}-windows-x86_64\Utility\QOIConv /I /H /E /C
Xcopy Redists bin\${{matrix.configuration}}-windows-x86_64\Redists /I /H /E /C
Get-ChildItem -Path "bin" -Filter "*.pdb" -Recurse | Remove-Item -Force
Remove-Item bin\${{matrix.configuration}}-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 2022 ${{matrix.configuration}} Executables
server-hostname: ${{ secrets.ARTIFACT_HOST }}
server-share: "artifacts"
server-username: ${{ secrets.ARTIFACT_USERNAME }}
server-password: ${{ secrets.ARTIFACT_PASSWORD }}
folder-to-upload: >
bin/${{matrix.configuration}}-windows-x86_64/./Games
bin/${{matrix.configuration}}-windows-x86_64/./Utility
bin/${{matrix.configuration}}-windows-x86_64/./UnitTests
bin/${{matrix.configuration}}-windows-x86_64/./Licenses
bin/${{matrix.configuration}}-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 ${{matrix.configuration}} Executables
path: |
bin/${{matrix.configuration}}-windows-x86_64/Games
bin/${{matrix.configuration}}-windows-x86_64/Utility
bin/${{matrix.configuration}}-windows-x86_64/UnitTests
bin/${{matrix.configuration}}-windows-x86_64/Licenses
bin/${{matrix.configuration}}-windows-x86_64/Redists
test-linux:
name: Unit-Test Linux
runs-on: [self-hosted, Linux, X64, ubuntu, cpu]
strategy:
matrix:
compiler: [clang, gcc]
configuration: [Debug, Release, RelWithDebInfo, Profiling, ASan_LSan_UBSan, TSan]
needs: build-linux
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 ${{matrix.compiler}} ${{matrix.configuration}} Executables"
- name: Download artifact (GitHub)
env:
artifact_hostname: ${{secrets.ARTIFACT_HOST}}
if: env.artifact_hostname == null
uses: actions/download-artifact@v4
with:
name: Linux ${{matrix.compiler}} ${{matrix.configuration}} Executables
- name: Run Tests
run: |
cd UnitTests
chmod +x UnitTests
TRACY_NO_INVARIANT_CHECK=1 ./UnitTests
test-windows:
name: Unit-Test Windows
runs-on: [self-hosted, windows, X64, cpu]
strategy:
matrix:
configuration: [Debug, Release, RelWithDebInfo, Profiling]
needs: build-windows
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 2022 ${{matrix.configuration}} 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 ${{matrix.configuration}} Executables
- name: Run Tests
run: |
cd UnitTests
$env:TRACY_NO_INVARIANT_CHECK=1; .\UnitTests.exe; Remove-Item Env:\TRACY_NO_INVARIANT_CHECK