mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-18 04:23:20 +01:00
As much as I'd love to continue supporting NT5.1 mingw job as something that could potentially run on ReactOS, I think it's time for it to go. The sad truth is those builds were not able to run on such systems for a while, no matter how much we tried to keep our project not polluted with modern symbols, our dependencies haven't been so pristine. The latest bug with those relates to how the static executable gets created and even after solving that issue, there comes another one that isn't ours but a play between freetype and GCC which I'm not interested in solving. NT5.1 is no more. It's ceased to be. NT5.1's expired and gone to meet its maker.
409 lines
15 KiB
YAML
409 lines
15 KiB
YAML
name: CI
|
|
on:
|
|
push:
|
|
paths-ignore:
|
|
- '.editorconfig'
|
|
- '.gitattributes'
|
|
- '.github/*_TEMPLATE/**'
|
|
- '.github/workflows/localisation.yml'
|
|
- '.gitignore'
|
|
- '.vscode/**'
|
|
pull_request:
|
|
paths-ignore:
|
|
- '.editorconfig'
|
|
- '.gitattributes'
|
|
- '.github/*_TEMPLATE/**'
|
|
- '.github/workflows/localisation.yml'
|
|
- '.gitignore'
|
|
- '.vscode/**'
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
env:
|
|
OPENRCT2_BUILD_SERVER: GitHub
|
|
OPENRCT2_ORG_TOKEN: ${{ secrets.OPENRCT2_ORG_TOKEN }}
|
|
BACKTRACE_IO_TOKEN: ${{ secrets.BACKTRACE_IO_TOKEN }}
|
|
OPENRCT2_VERSION: 0.4.0
|
|
jobs:
|
|
lint-commit:
|
|
name: Lint Commit Message
|
|
if: github.event_name == 'pull_request'
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Lint Commit Messages
|
|
uses: wagoid/commitlint-github-action@v3
|
|
with:
|
|
configFile: .commitlint.json
|
|
check-code-formatting:
|
|
name: Check code formatting
|
|
runs-on: ubuntu-latest
|
|
container: openrct2/openrct2-build:4-format
|
|
defaults:
|
|
run:
|
|
shell: sh
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: Run clang-format
|
|
run: scripts/check-code-formatting
|
|
windows:
|
|
name: Windows
|
|
runs-on: windows-latest
|
|
needs: check-code-formatting
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
platform: [win32, x64]
|
|
env:
|
|
CONFIGURATION: Release
|
|
PLATFORM: ${{ matrix.platform }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: Git describe for shallow checkout
|
|
id: ghd
|
|
uses: proudust/gh-describe@v1
|
|
- name: Update GA environment
|
|
run: echo "OPENRCT2_DESCRIBE=${{ steps.ghd.outputs.describe }}" >> $GITHUB_ENV
|
|
- name: Install MSVC problem matcher
|
|
uses: ammaraskar/msvc-problem-matcher@master
|
|
- name: Build OpenRCT2
|
|
run: . scripts/setenv && build
|
|
- name: Build artifacts
|
|
run: |
|
|
. scripts/setenv -q
|
|
build-portable
|
|
build-symbols
|
|
build-installer -i
|
|
- name: Upload artifacts (CI)
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: OpenRCT2-${{ runner.os }}-${{ matrix.platform }}
|
|
path: artifacts
|
|
if-no-files-found: error
|
|
- name: Run Tests
|
|
if: matrix.platform != 'arm64'
|
|
run: . scripts/setenv -q && run-tests
|
|
- name: Upload artifacts (openrct2.org)
|
|
run: |
|
|
. scripts/setenv -q
|
|
if [[ "$OPENRCT2_PUSH" == "true" ]]; then
|
|
upload-build artifacts/openrct2-portable-*.zip "windows-portable-$PLATFORM" $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
|
|
upload-build artifacts/openrct2-installer-*.exe "windows-installer-$PLATFORM" $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
|
|
upload-build artifacts/openrct2-symbols-*.zip "windows-symbols-$PLATFORM" $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
|
|
upload-backtrace-symbols artifacts/openrct2-symbols-*.zip
|
|
else
|
|
echo 'Not going to push build'
|
|
fi
|
|
windows-mingw:
|
|
name: Windows (${{ matrix.platform_name }}) using mingw
|
|
runs-on: ubuntu-latest
|
|
needs: check-code-formatting
|
|
container: openrct2/openrct2-build:8-mingw
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
platform: [win32]
|
|
include:
|
|
- platform: win32
|
|
platform_name: win32
|
|
cache_key: windows-mingw
|
|
build_flags: -DBUILD_SHARED_LIBS=ON -DENABLE_SCRIPTING=ON
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: ccache
|
|
uses: hendrikmuhs/ccache-action@v1
|
|
with:
|
|
key: ${{ matrix.cache_key }}
|
|
- name: Install GCC problem matcher
|
|
uses: ammaraskar/gcc-problem-matcher@master
|
|
- name: Build OpenRCT2
|
|
run: |
|
|
sudo su
|
|
cmake -B bin -G Ninja -DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt -DCMAKE_BUILD_TYPE=Release -DDISABLE_IPO=on -DFORCE32=on ${{ matrix.build_flags }}
|
|
cd bin
|
|
ninja -k0
|
|
- name: Upload artifacts (CI)
|
|
if: matrix.platform == 'NT5.1'
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: OpenRCT2-Windows-${{ matrix.platform }}
|
|
path: bin/openrct2.exe
|
|
if-no-files-found: error
|
|
macos-cmake:
|
|
name: macOS (${{ matrix.arch }}) using CMake
|
|
runs-on: macos-latest
|
|
needs: check-code-formatting
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
arch: [x64, arm64]
|
|
include:
|
|
- arch: x64
|
|
cache_key: macos-x64
|
|
# Note: only build/run tests on the native architecture of the CI agent
|
|
# GitHub macos-latest agents are currently all Intel
|
|
build_flags: -DARCH="x86_64" -DWITH_TESTS=on
|
|
run_tests: true
|
|
- arch: arm64
|
|
cache_key: macos-arm64
|
|
build_flags: -DARCH="arm64"
|
|
run_tests: false
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: ccache
|
|
uses: hendrikmuhs/ccache-action@v1
|
|
with:
|
|
key: ${{ matrix.cache_key }}
|
|
- name: Install GCC problem matcher
|
|
uses: ammaraskar/gcc-problem-matcher@master
|
|
- name: Build OpenRCT2
|
|
run: |
|
|
HOMEBREW_NO_ANALYTICS=1 brew install ninja
|
|
. scripts/setenv -q && build -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=on ${{ matrix.build_flags }}
|
|
- name: Run Tests
|
|
if: ${{matrix.run_tests}}
|
|
run: . scripts/setenv -q && run-tests
|
|
- name: Build artifacts
|
|
run: |
|
|
. scripts/setenv
|
|
mkdir -p artifacts
|
|
mv bin/OpenRCT2.app artifacts
|
|
echo -e "\033[0;36mCompressing OpenRCT2.app...\033[0m"
|
|
cd artifacts
|
|
zip -rqy openrct2-macos.zip OpenRCT2.app
|
|
- name: Upload artifacts (CI)
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: OpenRCT2-${{ runner.os }}-${{ matrix.arch }}-cmake
|
|
path: artifacts/openrct2-macos.zip
|
|
if-no-files-found: error
|
|
macos-universal:
|
|
name: macOS universal app bundle
|
|
runs-on: macos-latest
|
|
needs: macos-cmake
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: download x64 app bundle
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: OpenRCT2-${{ runner.os }}-x64-cmake
|
|
path: macos_universal/x64
|
|
- name: download arm64 app bundle
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: OpenRCT2-${{ runner.os }}-arm64-cmake
|
|
path: macos_universal/arm64
|
|
- name: Make Universal app bundle
|
|
run: |
|
|
. scripts/setenv
|
|
cd macos_universal
|
|
unzip x64/openrct2-macos.zip -d x64
|
|
unzip arm64/openrct2-macos.zip -d arm64
|
|
create-macos-universal
|
|
- name: Create artifact
|
|
run: |
|
|
. scripts/setenv
|
|
mkdir -p artifacts
|
|
mv macos_universal/OpenRCT2-universal.app artifacts/OpenRCT2.app
|
|
echo -e "\033[0;36mCompressing OpenRCT2.app...\033[0m"
|
|
cd artifacts
|
|
zip -rqy openrct2-macos.zip OpenRCT2.app
|
|
- name: Upload artifacts (CI)
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: OpenRCT2-${{ runner.os }}-universal
|
|
path: artifacts/openrct2-macos.zip
|
|
if-no-files-found: error
|
|
- name: Upload artifacts (openrct2.org)
|
|
run: |
|
|
. scripts/setenv
|
|
if [[ "$OPENRCT2_PUSH" == "true" ]]; then
|
|
upload-build artifacts/openrct2-macos.zip macos $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
|
|
else
|
|
echo 'Not going to push build'
|
|
fi
|
|
linux-portable:
|
|
name: Linux (${{ matrix.platform }}, ${{ matrix.distro }}, portable)
|
|
runs-on: ubuntu-latest
|
|
needs: check-code-formatting
|
|
container: ${{ matrix.image }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- platform: x86_64
|
|
distro: bionic
|
|
image: openrct2/openrct2-build:4-bionic
|
|
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz" -DWITH_TESTS=off
|
|
- platform: x86_64
|
|
distro: focal
|
|
image: openrct2/openrct2-build:8-focal
|
|
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz"
|
|
- platform: x86_64
|
|
distro: jammy
|
|
image: openrct2/openrct2-build:8-jammy
|
|
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz"
|
|
- platform: x86_64
|
|
distro: bullseye
|
|
image: openrct2/openrct2-build:8-bullseye
|
|
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz"
|
|
- platform: i686
|
|
distro: bionic
|
|
image: openrct2/openrct2-build:4-bionic32
|
|
build_flags: -DFORCE32=ON -DENABLE_SCRIPTING=OFF -DCMAKE_CXX_FLAGS="-m32 -g -gz" -DWITH_TESTS=off
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: ccache
|
|
uses: hendrikmuhs/ccache-action@v1
|
|
with:
|
|
key: linux-${{ matrix.platform }}-${{ matrix.distro }}
|
|
- name: Get pre-reqs
|
|
run: . scripts/setenv && get-discord-rpc
|
|
- name: Install GCC problem matcher
|
|
uses: ammaraskar/gcc-problem-matcher@master
|
|
- name: Build OpenRCT2
|
|
run: . scripts/setenv -q && build -DWITH_TESTS=on -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DPORTABLE=ON ${{ matrix.build_flags }}
|
|
- name: Build artifacts
|
|
run: . scripts/setenv -q && build-portable artifacts/OpenRCT2-${{ runner.os }}-${{ matrix.distro }}-${{ matrix.platform }}.tar.gz bin/install/usr
|
|
- name: Upload artifacts (CI)
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: OpenRCT2-${{ runner.os }}-${{ matrix.distro }}-${{ matrix.platform }}
|
|
path: artifacts
|
|
if-no-files-found: error
|
|
- name: Run Tests
|
|
run: . scripts/setenv -q && run-tests
|
|
- name: Upload artifacts (openrct2.org)
|
|
if: matrix.distro == 'bionic' # Need to get openrct2.org updated before other distros can be enabled
|
|
run: |
|
|
. scripts/setenv -q
|
|
if [[ "$OPENRCT2_PUSH" == "true" ]]; then
|
|
upload-build artifacts/OpenRCT2-${{ runner.os }}-${{ matrix.distro }}-${{ matrix.platform }}.tar.gz linux-${{ matrix.platform }} $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
|
|
else
|
|
echo 'Not going to push build'
|
|
fi
|
|
linux-appimage:
|
|
name: Linux (x64, AppImage)
|
|
runs-on: ubuntu-latest
|
|
needs: check-code-formatting
|
|
container: openrct2/openrct2-build:0.3.1-bionic
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: ccache
|
|
uses: hendrikmuhs/ccache-action@v1
|
|
with:
|
|
key: linux-appimage
|
|
- name: Get pre-reqs
|
|
run: . scripts/setenv -q && get-discord-rpc
|
|
- name: Build OpenRCT2
|
|
run: . scripts/setenv -q && build -DCMAKE_BUILD_TYPE=Release -DAPPIMAGE=ON -DOPENRCT2_USE_CCACHE=on
|
|
- name: Build AppImage
|
|
run: . scripts/setenv -q && build-appimage
|
|
- name: Upload artifacts (CI)
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: OpenRCT2-AppImage
|
|
path: artifacts
|
|
if-no-files-found: error
|
|
linux-flathub-beta:
|
|
name: Linux (Flathub beta channel)
|
|
if: github.repository == 'OpenRCT2/OpenRCT2' && github.ref == 'refs/heads/develop' && github.event_name == 'push'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Send dispatch event to OpenRCT2 Flathub repository
|
|
uses: peter-evans/repository-dispatch@v1
|
|
with:
|
|
token: ${{ secrets.OPENRCT2_FLATHUB_TOKEN }}
|
|
repository: flathub/io.openrct2.OpenRCT2
|
|
event-type: openrct2_develop_push
|
|
client-payload: '{ "commit": "${{ github.sha }}" }'
|
|
linux-docker:
|
|
name: Linux (docker)
|
|
needs: check-code-formatting
|
|
if: github.repository == 'OpenRCT2/OpenRCT2'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout image
|
|
uses: actions/checkout@v3
|
|
with:
|
|
repository: OpenRCT2/openrct2-docker
|
|
- name: Build image
|
|
run: docker build -t openrct2/openrct2-cli:develop develop/cli
|
|
- name: Push image
|
|
env:
|
|
OPENRCT2_DOCKER_USER: ${{ secrets.OPENRCT2_DOCKER_USER }}
|
|
OPENRCT2_DOCKER_PASS: ${{ secrets.OPENRCT2_DOCKER_PASS }}
|
|
run: |
|
|
OPENRCT2_BRANCH=$(echo "$GITHUB_REF" | sed 's/refs\/heads\///')
|
|
echo "Current branch is $OPENRCT2_BRANCH"
|
|
if [ "$OPENRCT2_BRANCH" = 'develop' ]; then
|
|
docker login -u "$OPENRCT2_DOCKER_USER" -p "$OPENRCT2_DOCKER_PASS"
|
|
docker push openrct2/openrct2-cli:develop
|
|
else
|
|
echo 'Image not pushed'
|
|
fi
|
|
linux-clang:
|
|
name: Linux (Debug, [http, network, OpenGL] disabled) using clang
|
|
runs-on: ubuntu-latest
|
|
needs: check-code-formatting
|
|
container: openrct2/openrct2-build:0.3.1-bionic
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: ccache
|
|
uses: hendrikmuhs/ccache-action@v1
|
|
with:
|
|
key: linux-clang
|
|
- name: Install GCC problem matcher
|
|
uses: ammaraskar/gcc-problem-matcher@master
|
|
- name: Build OpenRCT2
|
|
run: . scripts/setenv && build -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Debug -DDISABLE_NETWORK=ON -DDISABLE_HTTP=ON -DDISABLE_OPENGL=ON
|
|
android:
|
|
name: Android
|
|
runs-on: ubuntu-latest
|
|
needs: check-code-formatting
|
|
container: openrct2/openrct2-build:4-android
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: ccache
|
|
uses: hendrikmuhs/ccache-action@v1
|
|
with:
|
|
key: android
|
|
- name: Install GCC problem matcher
|
|
uses: ammaraskar/gcc-problem-matcher@master
|
|
- name: Build OpenRCT2
|
|
run: |
|
|
. scripts/setenv
|
|
pushd src/openrct2-android
|
|
./gradlew app:assembleRelease
|
|
popd
|
|
mkdir -p artifacts
|
|
mv src/openrct2-android/app/build/outputs/apk/release/app-release.apk artifacts/openrct2-arm.apk
|
|
- name: Upload artifacts (CI)
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: OpenRCT2-Android
|
|
path: artifacts
|
|
if-no-files-found: error
|
|
- name: Upload artifacts (openrct2.org)
|
|
run: |
|
|
. scripts/setenv -q
|
|
if [[ "$OPENRCT2_PUSH" == "true" ]]; then
|
|
upload-build artifacts/openrct2-arm.apk android-arm $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
|
|
else
|
|
echo 'Not going to push build'
|
|
fi
|