CI - Build #517
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
name: CI | |
on: | |
pull_request: | |
# push: | |
# branches: | |
# - master | |
workflow_dispatch: | |
inputs: | |
ref: | |
description: 'Ref to build (for Pull Requests, use refs/pull/NNN/head)' | |
required: true | |
env: | |
CTEST_OUTPUT_ON_FAILURE: 1 | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} | |
jobs: | |
emscripten: | |
name: Emscripten | |
runs-on: ubuntu-20.04 | |
container: | |
# If you change this version, change the number in the cache step too. | |
image: emscripten/emsdk:3.1.42 | |
steps: | |
- name: Checkout | |
if: github.event_name != 'workflow_dispatch' | |
uses: actions/checkout@v3 | |
- name: Checkout (Manual) | |
if: github.event_name == 'workflow_dispatch' | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.inputs.ref }} | |
- name: Setup cache | |
uses: actions/cache@v3 | |
with: | |
path: /emsdk/upstream/emscripten/cache | |
key: 3.1.42-${{ runner.os }} | |
- name: Patch Emscripten to support LZMA and nlohmann-json | |
run: | | |
cd /emsdk/upstream/emscripten | |
patch -p1 < ${GITHUB_WORKSPACE}/os/emscripten/emsdk-liblzma.patch | |
patch -p1 < ${GITHUB_WORKSPACE}/os/emscripten/emsdk-nlohmann-json.patch | |
- name: Build (host tools) | |
run: | | |
mkdir build-host | |
cd build-host | |
echo "::group::CMake" | |
cmake .. -DOPTION_TOOLS_ONLY=ON | |
echo "::endgroup::" | |
echo "::group::Build" | |
echo "Running on $(nproc) cores" | |
cmake --build . -j $(nproc) --target tools | |
echo "::endgroup::" | |
- name: Install GCC problem matcher | |
uses: ammaraskar/gcc-problem-matcher@master | |
- name: Build | |
run: | | |
mkdir build | |
cd build | |
echo "::group::CMake" | |
emcmake cmake .. -DHOST_BINARY_DIR=../build-host | |
echo "::endgroup::" | |
echo "::group::Build" | |
echo "Running on $(nproc) cores" | |
cmake --build . -j $(nproc) -t openttd | |
echo "::endgroup::" | |
linux: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name: Clang | |
compiler: clang | |
cxxcompiler: clang++ | |
libraries: libsdl2-dev nlohmann-json3-dev | |
- name: GCC - SDL2 | |
compiler: gcc | |
cxxcompiler: g++ | |
libraries: libsdl2-dev nlohmann-json3-dev | |
- name: GCC - SDL1.2 | |
compiler: gcc | |
cxxcompiler: g++ | |
libraries: libsdl1.2-dev nlohmann-json3-dev | |
- name: GCC - Dedicated | |
compiler: gcc | |
cxxcompiler: g++ | |
extra-cmake-parameters: -DOPTION_DEDICATED=ON -DCMAKE_CXX_FLAGS_INIT="-DRANDOM_DEBUG" | |
# Compile without SDL / SDL2 / nlohmann-json, as that should compile fine too. | |
name: Linux (${{ matrix.name }}) | |
runs-on: ubuntu-20.04 | |
env: | |
CC: ${{ matrix.compiler }} | |
CXX: ${{ matrix.cxxcompiler }} | |
steps: | |
- name: Checkout | |
if: github.event_name != 'workflow_dispatch' | |
uses: actions/checkout@v3 | |
- name: Checkout (Manual) | |
if: github.event_name == 'workflow_dispatch' | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.inputs.ref }} | |
- name: Install dependencies | |
run: | | |
echo "::group::Update apt" | |
sudo apt-get update | |
echo "::endgroup::" | |
echo "::group::Install dependencies" | |
sudo apt-get install -y --no-install-recommends \ | |
liballegro4-dev \ | |
libcurl4-openssl-dev \ | |
libfontconfig-dev \ | |
libharfbuzz-dev \ | |
libicu-dev \ | |
liblzma-dev \ | |
libzstd-dev \ | |
liblzo2-dev \ | |
${{ matrix.libraries }} \ | |
zlib1g-dev \ | |
# EOF | |
echo "::endgroup::" | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
- name: Get OpenGFX | |
run: | | |
mkdir -p ~/.local/share/openttd/baseset | |
cd ~/.local/share/openttd/baseset | |
echo "::group::Download OpenGFX" | |
curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip | |
echo "::endgroup::" | |
echo "::group::Unpack OpenGFX" | |
unzip opengfx-all.zip | |
echo "::endgroup::" | |
rm -f opengfx-all.zip | |
- name: Install GCC problem matcher | |
uses: ammaraskar/gcc-problem-matcher@master | |
- name: Build | |
run: | | |
mkdir build | |
cd build | |
echo "::group::CMake" | |
cmake .. ${{ matrix.extra-cmake-parameters }} | |
echo "::endgroup::" | |
echo "::group::Build" | |
echo "Running on $(nproc) cores" | |
cmake --build . -j $(nproc) -t all openttd_test | |
echo "::endgroup::" | |
- name: Test | |
run: | | |
cd build | |
ctest -j $(nproc) --timeout 120 | |
macos: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- arch: x64 | |
full_arch: x86_64 | |
name: Mac OS (${{ matrix.arch }}) | |
runs-on: macos-latest | |
env: | |
MACOSX_DEPLOYMENT_TARGET: 10.13 | |
steps: | |
- name: Checkout | |
if: github.event_name != 'workflow_dispatch' | |
uses: actions/checkout@v3 | |
- name: Checkout (Manual) | |
if: github.event_name == 'workflow_dispatch' | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.inputs.ref }} | |
- name: Install dependencies | |
env: | |
HOMEBREW_NO_AUTO_UPDATE: 1 | |
HOMEBREW_NO_INSTALL_CLEANUP: 1 | |
run: | | |
brew install \ | |
pkg-config \ | |
# EOF | |
- name: Prepare cache key | |
id: key | |
run: | | |
echo "image=$ImageOS-$ImageVersion" >> $GITHUB_OUTPUT | |
- name: Enable vcpkg cache | |
uses: actions/cache@v3 | |
with: | |
path: /usr/local/share/vcpkg/installed | |
key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-1 # Increase the number whenever dependencies are modified | |
restore-keys: | | |
${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} | |
- name: Prepare vcpkg | |
run: | | |
vcpkg install --triplet=${{ matrix.arch }}-osx \ | |
curl \ | |
liblzma \ | |
libpng \ | |
lzo \ | |
nlohmann-json \ | |
zlib \ | |
zstd \ | |
# EOF | |
- name: Install OpenGFX | |
run: | | |
mkdir -p ~/Documents/OpenTTD/baseset | |
cd ~/Documents/OpenTTD/baseset | |
echo "::group::Download OpenGFX" | |
curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip | |
echo "::endgroup::" | |
echo "::group::Unpack OpenGFX" | |
unzip opengfx-all.zip | |
echo "::endgroup::" | |
rm -f opengfx-all.zip | |
- name: Install GCC problem matcher | |
uses: ammaraskar/gcc-problem-matcher@master | |
- name: Build | |
run: | | |
mkdir build | |
cd build | |
echo "::group::CMake" | |
cmake .. \ | |
-DCMAKE_OSX_ARCHITECTURES=${{ matrix.full_arch }} \ | |
-DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-osx \ | |
-DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \ | |
# EOF | |
echo "::endgroup::" | |
echo "::group::Build" | |
echo "Running on $(sysctl -n hw.logicalcpu) cores" | |
cmake --build . -j $(sysctl -n hw.logicalcpu) -t all openttd_test | |
echo "::endgroup::" | |
- name: Test | |
run: | | |
cd build | |
ctest -j $(sysctl -n hw.logicalcpu) --timeout 120 | |
windows: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [windows-latest, windows-2019] | |
arch: [x86, x64] | |
name: Windows (${{ matrix.os }} / ${{ matrix.arch }}) | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout | |
if: github.event_name != 'workflow_dispatch' | |
uses: actions/checkout@v3 | |
- name: Checkout (Manual) | |
if: github.event_name == 'workflow_dispatch' | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.inputs.ref }} | |
- name: Prepare cache key | |
id: key | |
shell: powershell | |
run: | | |
# Work around caching failure with GNU tar | |
New-Item -Type Junction -Path vcpkg -Target c:\vcpkg | |
Write-Output "image=$env:ImageOS-$env:ImageVersion" >> $env:GITHUB_OUTPUT | |
- name: Enable vcpkg cache | |
uses: actions/cache@v3 | |
with: | |
path: vcpkg/installed | |
key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-1 # Increase the number whenever dependencies are modified | |
restore-keys: | | |
${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} | |
- name: Prepare vcpkg | |
shell: bash | |
run: | | |
vcpkg install --triplet=${{ matrix.arch }}-windows-static \ | |
liblzma \ | |
libpng \ | |
lzo \ | |
nlohmann-json \ | |
zlib \ | |
zstd \ | |
# EOF | |
- name: Install OpenGFX | |
shell: bash | |
run: | | |
mkdir -p "C:/Users/Public/Documents/OpenTTD/baseset" | |
cd "C:/Users/Public/Documents/OpenTTD/baseset" | |
echo "::group::Download OpenGFX" | |
curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip | |
echo "::endgroup::" | |
echo "::group::Unpack OpenGFX" | |
unzip opengfx-all.zip | |
echo "::endgroup::" | |
rm -f opengfx-all.zip | |
- name: Install MSVC problem matcher | |
uses: ammaraskar/msvc-problem-matcher@master | |
- name: Configure developer command prompt for ${{ matrix.arch }} | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
arch: ${{ matrix.arch }} | |
- name: Build | |
shell: bash | |
run: | | |
mkdir build | |
cd build | |
echo "::group::CMake" | |
cmake .. \ | |
-GNinja \ | |
-DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \ | |
-DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" \ | |
# EOF | |
echo "::endgroup::" | |
echo "::group::Build" | |
cmake --build . -t all openttd_test | |
echo "::endgroup::" | |
- name: Test | |
shell: bash | |
run: | | |
cd build | |
ctest --timeout 120 | |
msys2: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- msystem: MINGW64 | |
arch: x86_64 | |
- msystem: MINGW32 | |
arch: i686 | |
name: MinGW (${{ matrix.arch }}) | |
runs-on: windows-latest | |
steps: | |
- name: Checkout | |
if: github.event_name != 'workflow_dispatch' | |
uses: actions/checkout@v3 | |
- name: Checkout (Manual) | |
if: github.event_name == 'workflow_dispatch' | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.inputs.ref }} | |
- name: Setup MSYS2 | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: ${{ matrix.msystem }} | |
release: false | |
install: >- | |
git | |
make | |
mingw-w64-${{ matrix.arch }}-cmake | |
mingw-w64-${{ matrix.arch }}-gcc | |
mingw-w64-${{ matrix.arch }}-lzo2 | |
mingw-w64-${{ matrix.arch }}-libpng | |
mingw-w64-${{ matrix.arch }}-nlohmann-json | |
- name: Install OpenGFX | |
shell: bash | |
run: | | |
mkdir -p "C:/Users/Public/Documents/OpenTTD/baseset" | |
cd "C:/Users/Public/Documents/OpenTTD/baseset" | |
echo "::group::Download OpenGFX" | |
curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip | |
echo "::endgroup::" | |
echo "::group::Unpack OpenGFX" | |
unzip opengfx-all.zip | |
echo "::endgroup::" | |
rm -f opengfx-all.zip | |
- name: Install GCC problem matcher | |
uses: ammaraskar/gcc-problem-matcher@master | |
- name: Build | |
shell: msys2 {0} | |
run: | | |
mkdir build | |
cd build | |
echo "::group::CMake" | |
cmake .. -DOPTION_NO_WARN_UNINIT=1 -G"MSYS Makefiles" | |
echo "::endgroup::" | |
echo "::group::Build" | |
echo "Running on $(nproc) cores" | |
cmake --build . -j $(nproc) -t all openttd_test | |
echo "::endgroup::" | |
- name: Test | |
shell: msys2 {0} | |
run: | | |
cd build | |
ctest --timeout 120 | |
check_annotations: | |
name: Check Annotations | |
needs: | |
- emscripten | |
- linux | |
- macos | |
- windows | |
- msys2 | |
if: always() && github.event_name == 'pull_request' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check annotations | |
uses: OpenTTD/actions/annotation-check@v3 |