Lately we had a few times that people pushed to their PR branch a few times to make small changes. Sadly, this triggers all CIs every time, which takes ~20 minutes. As we are limited in the amount of runners we get assigned to us, this means all other CI, even for other repositories within OpenTTD, are delayed too. We can avoid this by simply cancelling old runs when a new PR is pushed. There is a downside: sometimes people already push a new commit, but still want to know if the old one passed. That will no longer be possible with this change.
427 lines
10 KiB
YAML
427 lines
10 KiB
YAML
name: CI
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- master
|
|
|
|
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.28
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Setup cache
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: /emsdk/upstream/emscripten/cache
|
|
key: 3.1.28-${{ 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)
|
|
echo "::endgroup::"
|
|
|
|
linux:
|
|
name: Linux
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- compiler: clang
|
|
cxxcompiler: clang++
|
|
libsdl: libsdl2-dev
|
|
- compiler: gcc
|
|
cxxcompiler: g++
|
|
libsdl: libsdl2-dev
|
|
- compiler: gcc
|
|
cxxcompiler: g++
|
|
libsdl: libsdl1.2-dev
|
|
- compiler: gcc
|
|
cxxcompiler: g++
|
|
extra-cmake-parameters: -DOPTION_DEDICATED=ON -DCMAKE_CXX_FLAGS_INIT="-DRANDOM_DEBUG"
|
|
|
|
runs-on: ubuntu-20.04
|
|
env:
|
|
CC: ${{ matrix.compiler }}
|
|
CXX: ${{ matrix.cxxcompiler }}
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- 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 \
|
|
libicu-dev \
|
|
liblzma-dev \
|
|
liblzo2-dev \
|
|
${{ matrix.libsdl }} \
|
|
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)
|
|
echo "::endgroup::"
|
|
|
|
- name: Test
|
|
run: |
|
|
cd build
|
|
ctest -j $(nproc) --timeout 120
|
|
|
|
macos:
|
|
name: Mac OS
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- arch: x64
|
|
full_arch: x86_64
|
|
|
|
runs-on: macos-latest
|
|
env:
|
|
MACOSX_DEPLOYMENT_TARGET: 10.13
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- 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 }}-0 # 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 \
|
|
zlib \
|
|
# 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 ${GITHUB_WORKSPACE} \
|
|
-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)
|
|
echo "::endgroup::"
|
|
|
|
- name: Test
|
|
run: |
|
|
cd build
|
|
ctest -j $(sysctl -n hw.logicalcpu) --timeout 120
|
|
|
|
windows:
|
|
name: Windows
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [windows-latest, windows-2019]
|
|
arch: [x86, x64]
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- 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 }}-0 # 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 \
|
|
zlib \
|
|
# 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 .
|
|
echo "::endgroup::"
|
|
|
|
- name: Test
|
|
shell: bash
|
|
run: |
|
|
cd ${GITHUB_WORKSPACE}/build
|
|
ctest --timeout 120
|
|
|
|
|
|
msys2:
|
|
name: msys2
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- msystem: MINGW64
|
|
arch: x86_64
|
|
- msystem: MINGW32
|
|
arch: i686
|
|
|
|
runs-on: windows-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- 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 .. -G"MSYS Makefiles"
|
|
echo "::endgroup::"
|
|
|
|
echo "::group::Build"
|
|
echo "Running on $(nproc) cores"
|
|
cmake --build . -j $(nproc)
|
|
echo "::endgroup::"
|
|
|
|
- name: Test
|
|
shell: msys2 {0}
|
|
run: |
|
|
cd build
|
|
ctest -j $(nproc) --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
|