CI - Build #587
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@v4 | |
- name: Checkout (Manual) | |
if: github.event_name == 'workflow_dispatch' | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.inputs.ref }} | |
- name: Setup cache | |
uses: actions/cache@v4 | |
with: | |
path: /emsdk/upstream/emscripten/cache | |
key: 3.1.42-${{ runner.os }} | |
- name: Patch Emscripten to support LZMA | |
run: | | |
cd /emsdk/upstream/emscripten | |
patch -p1 < ${GITHUB_WORKSPACE}/os/emscripten/emsdk-liblzma.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 - Debug | |
compiler: clang-15 | |
cxxcompiler: clang++-15 | |
libraries: libsdl2-dev | |
- name: Clang - Release | |
compiler: clang-15 | |
cxxcompiler: clang++-15 | |
libraries: libsdl2-dev | |
extra-cmake-parameters: -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOPTION_USE_ASSERTS=OFF | |
- name: GCC - SDL2 | |
compiler: gcc | |
cxxcompiler: g++ | |
libraries: libsdl2-dev | |
- name: GCC - SDL1.2 | |
compiler: gcc | |
cxxcompiler: g++ | |
libraries: libsdl1.2-dev | |
- name: GCC - Dedicated | |
compiler: gcc | |
cxxcompiler: g++ | |
libraries: grfcodec | |
extra-cmake-parameters: -DOPTION_DEDICATED=ON -DCMAKE_CXX_FLAGS_INIT="-DRANDOM_DEBUG" -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON | |
# Compile without SDL / SDL2, as that should compile fine too. | |
name: Linux (${{ matrix.name }}) | |
runs-on: ubuntu-latest | |
env: | |
CC: ${{ matrix.compiler }} | |
CXX: ${{ matrix.cxxcompiler }} | |
steps: | |
- name: Checkout | |
if: github.event_name != 'workflow_dispatch' | |
uses: actions/checkout@v4 | |
- name: Checkout (Manual) | |
if: github.event_name == 'workflow_dispatch' | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.inputs.ref }} | |
- name: Setup vcpkg caching | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); | |
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); | |
core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') | |
- 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 "::group::Install vcpkg dependencies" | |
# Disable vcpkg integration, as we mostly use system libraries. | |
mv vcpkg.json vcpkg-disabled.json | |
# We only use breakpad from vcpkg, as its CMake files | |
# are a bit special. So the Ubuntu's variant doesn't work. | |
#vcpkg install breakpad | |
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 | |
) | |
# Re-enable vcpkg. | |
mv vcpkg-disabled.json vcpkg.json | |
# Check no tracked files have been modified. | |
git diff --exit-code | |
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@v4 | |
- name: Checkout (Manual) | |
if: github.event_name == 'workflow_dispatch' | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.inputs.ref }} | |
- name: Setup vcpkg caching | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); | |
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); | |
core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') | |
- 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@v4 | |
- name: Checkout (Manual) | |
if: github.event_name == 'workflow_dispatch' | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.inputs.ref }} | |
- name: Setup vcpkg caching | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); | |
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); | |
core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') | |
- 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@v4 | |
- name: Checkout (Manual) | |
if: github.event_name == 'workflow_dispatch' | |
uses: actions/checkout@v4 | |
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 | |
- 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@v5 |