Merge Localisation/master into OpenRCT2/develop #250
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: | |
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.6 | |
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value | |
concurrency: | |
group: ${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
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@v5 | |
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 | |
check-changelog-formatting: | |
name: Check changelog formatting | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Run check-changelog-formatting | |
run: scripts/check-changelog-formatting | |
windows: | |
name: Windows | |
runs-on: windows-latest | |
needs: check-code-formatting | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [win32, x64, arm64] | |
env: | |
PLATFORM: ${{ matrix.platform }} | |
steps: | |
- name: Setup environment | |
run: | | |
BRANCH=$(echo $GITHUB_REF | cut -d'/' -f 3) | |
if [[ $BRANCH == 'develop' || $BRANCH == 'master' ]]; then | |
echo "CONFIGURATION=ReleaseLTCG" >> "$GITHUB_ENV" | |
else | |
echo "CONFIGURATION=Release" >> "$GITHUB_ENV" | |
fi | |
- 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: Test Summary | |
uses: test-summary/action@v2 | |
with: | |
paths: "artifacts/test-**.xml" | |
if: matrix.platform != 'arm64' | |
- name: Upload artifacts (openrct2.org) | |
run: | | |
. scripts/setenv | |
if [[ "$OPENRCT2_PUSH" == "true" ]]; then | |
upload-build artifacts/openrct2-portable-*.zip "windows-portable-$PLATFORM.zip" $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH | |
upload-build artifacts/openrct2-installer-*.exe "windows-installer-$PLATFORM.exe" $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH | |
upload-build artifacts/openrct2-symbols-*.zip "windows-symbols-$PLATFORM.zip" $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:12-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: Configure ccache | |
run: | | |
# See https://github.com/hendrikmuhs/ccache-action/issues/146 | |
ccache --set-config=compiler_check=content | |
- name: Install GCC problem matcher | |
uses: ammaraskar/gcc-problem-matcher@master | |
- name: Build OpenRCT2 | |
run: | | |
HOMEBREW_NO_ANALYTICS=1 brew install ninja pkg-config | |
. scripts/setenv -q && build -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=on ${{ matrix.build_flags }} | |
- 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 | |
- name: Run Tests | |
if: ${{matrix.run_tests}} | |
run: . scripts/setenv -q && run-tests | |
- name: Test Summary | |
uses: test-summary/action@v2 | |
with: | |
paths: "artifacts/test-**.xml" | |
if: ${{matrix.run_tests}} | |
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-universal.zip $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: | |
# Use `-fno-var-tracking-assignments` to reduce amount of produced debug information. This is necessary due to 100MiB limit of GitHub / openrct2.org API. | |
# For focal the debug information still takes too much space, so reduce amount of debug info to minimum using `-g1` (`-g` means `-g2`), which is enough for backtraces only. | |
- platform: x86_64 | |
distro: bionic | |
image: openrct2/openrct2-build:4-bionic | |
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz -fno-var-tracking-assignments" -DWITH_TESTS=off -DDISABLE_FLAC=ON -DDISABLE_VORBIS=ON | |
- platform: x86_64 | |
distro: focal | |
image: openrct2/openrct2-build:12-focal | |
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g1 -gz" -DWITH_TESTS=off | |
- platform: x86_64 | |
distro: jammy | |
image: openrct2/openrct2-build:12-jammy | |
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz -fno-var-tracking-assignments" | |
- platform: x86_64 | |
distro: bullseye | |
image: openrct2/openrct2-build:12-bullseye | |
build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz -fno-var-tracking-assignments" -DWITH_TESTS=off | |
- platform: i686 | |
distro: focal | |
image: openrct2/openrct2-build:12-focal32 | |
build_flags: -DFORCE32=ON -DENABLE_SCRIPTING=OFF -DCMAKE_CXX_FLAGS="-m32 -g1 -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) | |
run: | | |
# Build identification code: https://github.com/Limetric/OpenRCT2.org/blob/e5b738f3dadcc5a3b78e8dfd434756ff31eaa1d3/src/misc/releaseAsset.js#L94-L116 | |
. scripts/setenv -q | |
if [[ "$OPENRCT2_PUSH" == "true" ]]; then | |
upload-build artifacts/OpenRCT2-${{ runner.os }}-${{ matrix.distro }}-${{ matrix.platform }}.tar.gz linux-${{ matrix.platform }}-${{ matrix.distro }}.tar.gz $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH | |
else | |
echo 'Not going to push build' | |
fi | |
linux-appimage: | |
name: Linux (x86_64, AppImage) | |
runs-on: ubuntu-latest | |
needs: check-code-formatting | |
container: openrct2/openrct2-build:12-focal | |
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 | |
- name: Upload artifacts (openrct2.org) | |
run: | | |
# Build identification code: https://github.com/Limetric/OpenRCT2.org/blob/e5b738f3dadcc5a3b78e8dfd434756ff31eaa1d3/src/misc/releaseAsset.js#L94-L116 | |
. scripts/setenv -q | |
if [[ "$OPENRCT2_PUSH" == "true" ]]; then | |
upload-build artifacts/OpenRCT2-x86_64.AppImage linux.AppImage $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH | |
else | |
echo 'Not going to push build' | |
fi | |
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, flac, vorbis OpenGL] disabled) using clang | |
runs-on: ubuntu-latest | |
needs: check-code-formatting | |
container: openrct2/openrct2-build:12-jammy | |
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_FLAC=ON -DDISABLE_VORBIS=ON -DDISABLE_OPENGL=ON | |
linux-clang-tests: | |
name: Linux (Debug) using clang, coverage enabled | |
runs-on: ubuntu-latest | |
needs: check-code-formatting | |
container: openrct2/openrct2-build:12-jammy | |
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 -DCMAKE_CXX_FLAGS="-fprofile-instr-generate -fcoverage-mapping" -DWITH_TESTS=on | |
- name: Run Tests | |
run: . scripts/setenv -q && LLVM_PROFILE_FILE="openrct2-coverage-%p.profraw" run-tests | |
- name: Test Summary | |
uses: test-summary/action@v2 | |
with: | |
paths: "artifacts/test-**.xml" | |
if: always() | |
- name: Process coverage information | |
run: | | |
cd bin | |
llvm-profdata merge -sparse openrct2-coverage*profraw -o openrct2.profdata | |
llvm-cov export -instr-profile=openrct2.profdata ./OpenRCT2Tests > coverage.json | |
llvm-cov report ./OpenRCT2Tests -instr-profile=openrct2.profdata | |
xz -1v openrct2.profdata | |
xz -1v coverage.json | |
xz -1v OpenRCT2Tests | |
- name: Upload artifacts (CI) | |
uses: actions/upload-artifact@v3 | |
with: | |
name: OpenRCT2-${{ runner.os }}-coverage | |
path: | | |
bin/*profdata* | |
bin/coverage.json* | |
bin/OpenRCT2Tests.xz | |
if-no-files-found: error | |
android: | |
name: Android | |
runs-on: ubuntu-latest | |
needs: check-code-formatting | |
container: openrct2/openrct2-build:12-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.apk $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH | |
else | |
echo 'Not going to push build' | |
fi |