Reduce the number of CI builds which do the individual example #4009
Workflow file for this run
This file contains 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
# Compile project on Ubuntu | |
name: Ubuntu | |
on: | |
# Branch pushes that do not only modify other workflow files | |
push: | |
branches: | |
- '**' | |
paths: | |
- "**" | |
- "!.github/**" | |
- ".github/scripts/install_cuda_ubuntu.sh" | |
- ".github/workflows/Ubuntu.yml" | |
# Disabled for now. See https://github.com/FLAMEGPU/FLAMEGPU2/pull/644 | |
# pull_request: | |
# Allow manual invocation. | |
workflow_dispatch: | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
build: | |
runs-on: ${{ matrix.cudacxx.os }} | |
strategy: | |
fail-fast: false | |
# Multiplicative build matrix | |
# optional exclude: can be partial, include: must be specific | |
matrix: | |
cudacxx: | |
- cuda: "12.3" | |
cuda_arch: "50" | |
hostcxx: gcc-12 | |
os: ubuntu-22.04 | |
- cuda: "11.8" | |
cuda_arch: "35" | |
hostcxx: gcc-11 | |
os: ubuntu-22.04 | |
- cuda: "11.0" | |
cuda_arch: "35" | |
hostcxx: gcc-8 | |
os: ubuntu-20.04 | |
python: | |
- "3.12" | |
config: | |
- name: "Release" | |
config: "Release" | |
SEATBELTS: "ON" | |
- name: "Beltsoff" | |
config: "Release" | |
SEATBELTS: "OFF" | |
VISUALISATION: | |
- "ON" | |
- "OFF" | |
exclude: | |
# Exclude VIS=ON for oldest cuda. | |
- cudacxx: | |
cuda: "11.0" | |
VISUALISATION: "ON" | |
# Exclude beltsoff builds for old cuda's | |
- cudacxx: | |
cuda: "11.8" | |
config: | |
name: "Beltsoff" | |
- cudacxx: | |
cuda: "11.0" | |
config: | |
name: "Beltsoff" | |
# Exclude beltsoff vis builds to keep the matrix lighter. | |
- config: | |
name: "Beltsoff" | |
VISUALISATION: "ON" | |
# Name the job based on matrix/env options | |
name: "build (${{ matrix.cudacxx.cuda }}, ${{matrix.python}}, ${{ matrix.VISUALISATION }}, ${{ matrix.config.name }}, ${{ matrix.cudacxx.os }})" | |
# Define job-wide env constants, and promote matrix elements to env constants for portable steps. | |
env: | |
# Workflow specific constants for building a specific example | |
# Note this assumes the example exists in cpp, rather than cpp_rtc subdirectory | |
INDIVIDUAL_EXAMPLE: ${{ fromJSON('{true:"game_of_life",false:""}')[matrix.config.name == 'Release' && matrix.VISUALISATION == 'OFF'] }} | |
# Define constants | |
BUILD_DIR: "build" | |
FLAMEGPU_BUILD_TESTS: "ON" | |
# Conditional based on matrix via awkward almost ternary | |
FLAMEGPU_BUILD_PYTHON: ${{ fromJSON('{true:"ON",false:"OFF"}')[matrix.python != ''] }} | |
# Port matrix options to environment, for more portability. | |
CUDA: ${{ matrix.cudacxx.cuda }} | |
CUDA_ARCH: ${{ matrix.cudacxx.cuda_arch }} | |
HOSTCXX: ${{ matrix.cudacxx.hostcxx }} | |
OS: ${{ matrix.cudacxx.os }} | |
CONFIG: ${{ matrix.config.config }} | |
FLAMEGPU_SEATBELTS: ${{ matrix.config.SEATBELTS }} | |
PYTHON: ${{ matrix.python}} | |
VISUALISATION: ${{ matrix.VISUALISATION }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install CUDA | |
if: ${{ startswith(env.OS, 'ubuntu') && env.CUDA != '' }} | |
env: | |
cuda: ${{ env.CUDA }} | |
run: .github/scripts/install_cuda_ubuntu.sh | |
- name: Install/Select gcc and g++ | |
if: ${{ startsWith(env.HOSTCXX, 'gcc-') }} | |
run: | | |
gcc_version=${HOSTCXX//gcc-/} | |
sudo apt-get install -y gcc-${gcc_version} g++-${gcc_version} | |
echo "CC=/usr/bin/gcc-${gcc_version}" >> $GITHUB_ENV | |
echo "CXX=/usr/bin/g++-${gcc_version}" >> $GITHUB_ENV | |
echo "CUDAHOSTCXX=/usr/bin/g++-${gcc_version}" >> $GITHUB_ENV | |
- name: Select Python | |
if: ${{ env.PYTHON != '' && env.FLAMEGPU_BUILD_PYTHON == 'ON' }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ env.PYTHON }} | |
# @todo - is some/all of this still required when using select Python? | |
- name: Install python dependencies | |
if: ${{ env.PYTHON != '' && env.FLAMEGPU_BUILD_PYTHON == 'ON' }} | |
run: | | |
sudo apt-get install python3-venv | |
python3 -m pip install --upgrade wheel build setuptools | |
- name: Install Visualisation Dependencies | |
if: ${{ startswith(env.OS, 'ubuntu') && env.VISUALISATION == 'ON' }} | |
run: | | |
# Install ubuntu-20.04 packages | |
if [ "$OS" == 'ubuntu-22.04' ]; then | |
sudo apt-get install -y libglew-dev libfontconfig1-dev libsdl2-dev libdevil-dev libfreetype-dev | |
fi | |
if [ "$OS" == 'ubuntu-20.04' ]; then | |
sudo apt-get install -y libglew-dev libfontconfig1-dev libsdl2-dev libdevil-dev libfreetype-dev | |
fi | |
# Install Ubuntu 18.04 packages | |
if [ "$OS" == 'ubuntu-18.04' ]; then | |
sudo apt-get install -y libglew-dev libfontconfig1-dev libsdl2-dev libdevil-dev libfreetype6-dev libgl1-mesa-dev | |
fi | |
- name: Install Swig >= 4.0.2 | |
run: | | |
# Remove existing swig install, so CMake finds the correct swig | |
if [ "$OS" == 'ubuntu-20.04' ]; then | |
sudo apt-get remove -y swig swig4.0 | |
fi | |
# Install Ubuntu 18.04 packages | |
if [ "$OS" == 'ubuntu-18.04' ]; then | |
sudo apt-get remove -y swig | |
fi | |
# Install additional apt-based dependencies required to build swig 4.0.2 | |
sudo apt-get install -y bison | |
# Create a local directory to build swig in. | |
mkdir -p swig-from-source && cd swig-from-source | |
# Install SWIG building from source dependencies | |
wget https://github.com/swig/swig/archive/refs/tags/v4.0.2.tar.gz | |
tar -zxf v4.0.2.tar.gz | |
cd swig-4.0.2/ | |
./autogen.sh | |
./configure | |
make | |
sudo make install | |
- name: Add custom problem matchers for annotations | |
run: echo "::add-matcher::.github/problem-matchers.json" | |
# This pre-emptively patches a bug from ManyLinux where git dir is owned by diff user, blocking buildnumber generation | |
- name: Enable git safe-directory | |
run: git config --global --add safe.directory $GITHUB_WORKSPACE | |
- name: Configure cmake | |
run: > | |
cmake . -B "${{ env.BUILD_DIR }}" | |
-DCMAKE_BUILD_TYPE="${{ env.CONFIG }}" | |
-Werror=dev | |
-DCMAKE_WARN_DEPRECATED="OFF" | |
-DFLAMEGPU_WARNINGS_AS_ERRORS="ON" | |
-DCMAKE_CUDA_ARCHITECTURES="${{ env.CUDA_ARCH }}" | |
-DFLAMEGPU_SEATBELTS="${{ env.FLAMEGPU_SEATBELTS }}" | |
-DFLAMEGPU_BUILD_TESTS="${{ env.FLAMEGPU_BUILD_TESTS }}" | |
-DFLAMEGPU_BUILD_PYTHON="${{ env.FLAMEGPU_BUILD_PYTHON }}" | |
-DPYTHON3_EXACT_VERSION="${{ env.PYTHON }}" | |
-DFLAMEGPU_VISUALISATION="${{ env.VISUALISATION }}" | |
-DFLAMEGPU_ENABLE_NVTX="ON" | |
- name: Build static library | |
working-directory: ${{ env.BUILD_DIR }} | |
run: cmake --build . --target flamegpu --verbose -j `nproc` | |
- name: Build python wheel | |
if: ${{ env.FLAMEGPU_BUILD_PYTHON == 'ON' }} | |
working-directory: ${{ env.BUILD_DIR }} | |
run: cmake --build . --target pyflamegpu --verbose -j `nproc` | |
- name: Build tests | |
if: ${{ env.FLAMEGPU_BUILD_TESTS == 'ON' }} | |
working-directory: ${{ env.BUILD_DIR }} | |
run: cmake --build . --target tests --verbose -j `nproc` | |
- name: Build all remaining targets | |
working-directory: ${{ env.BUILD_DIR }} | |
run: cmake --build . --target all --verbose -j `nproc` | |
- name: Configure Individual example | |
if: ${{ env.INDIVIDUAL_EXAMPLE != '' }} | |
working-directory: examples/cpp/${{ env.INDIVIDUAL_EXAMPLE }} | |
run: > | |
cmake . -B "${{ env.BUILD_DIR }}" | |
-DCMAKE_BUILD_TYPE="${{ env.CONFIG }}" | |
-Werror=dev | |
-DCMAKE_WARN_DEPRECATED="OFF" | |
-DFLAMEGPU_WARNINGS_AS_ERRORS="ON" | |
-DFLAMEGPU_SEATBELTS="${{ env.FLAMEGPU_SEATBELTS }}" | |
-DCMAKE_CUDA_ARCHITECTURES="${{ env.CUDA_ARCH }}" | |
-DFLAMEGPU_VISUALISATION="${{ env.VISUALISATION }}" | |
-DFLAMEGPU_ENABLE_NVTX="ON" | |
- name: Build Individual example | |
if: ${{ env.INDIVIDUAL_EXAMPLE != '' }} | |
working-directory: examples/cpp/${{ env.INDIVIDUAL_EXAMPLE }}/${{ env.BUILD_DIR }} | |
run: cmake --build . --target ${{ env.INDIVIDUAL_EXAMPLE }} --verbose -j `nproc` | |