OpenRCT2/.github/workflows/ci.yml

320 lines
11 KiB
YAML

name: CI
on: [push, pull_request]
env:
OPENRCT2_BUILD_SERVER: GitHub
OPENRCT2_ORG_TOKEN: ${{ secrets.OPENRCT2_ORG_TOKEN }}
BACKTRACE_IO_TOKEN: ${{ secrets.BACKTRACE_IO_TOKEN }}
OPENRCT2_VERSION: 0.3.2
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@v2
with:
fetch-depth: 0
- name: Lint Commit Messages
uses: wagoid/commitlint-github-action@v1
with:
configFile: .commitlint.json
check-code-formatting:
name: Check code formatting
runs-on: ubuntu-latest
container:
image: openrct2/openrct2-build:0.3.1-format
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Run clang-format
shell: sh
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@v1
- name: Build OpenRCT2
shell: bash
run: . scripts/setenv && build
- name: Build artifacts
shell: bash
run: |
. scripts/setenv -q
build-portable
build-symbols
build-installer -i
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v2-preview
with:
name: "OpenRCT2-Windows-${{ matrix.platform }}"
path: artifacts/*
- name: Run Tests
shell: bash
run: . scripts/setenv -q && run-tests
- name: Upload artifacts (openrct2.org)
shell: bash
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 (win32) using mingw
runs-on: ubuntu-latest
needs: [check-code-formatting]
container:
image: openrct2/openrct2-build:0.3.1-mingw
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Build OpenRCT2
run: |
sudo su
mkdir bin && cd bin
cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt -DCMAKE_BUILD_TYPE=MinSizeRel -DDISABLE_IPO=on -DFORCE32=on -DBUILD_SHARED_LIBS=ON -DENABLE_SCRIPTING=OFF
ninja -k0
windows-mingw-nt51:
name: Windows (win32, WinNT5.1) using mingw
runs-on: ubuntu-latest
needs: [check-code-formatting]
container:
image: openrct2/openrct2-build:0.3.1-mingw
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Build OpenRCT2
run: |
sudo su
mkdir bin && cd bin
cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt -DCMAKE_BUILD_TYPE=MinSizeRel -DDISABLE_IPO=on -DDISABLE_HTTP=Off -DFORCE32=on -DENABLE_SCRIPTING=ON -DCMAKE_CXX_FLAGS="-Wno-error=cast-function-type -Wno-error=unused-function" -DSTATIC=on -DMINGW_TARGET_NT5_1=ON
ninja -k0
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v2-preview
with:
name: "OpenRCT2-NT5.1"
path: bin/openrct2.exe
macos:
name: macOS
runs-on: macos-latest
needs: [check-code-formatting]
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Build OpenRCT2
run: |
. scripts/setenv
xcodebuild -configuration Release
mkdir -p artifacts
mv build/Release/OpenRCT2.app artifacts
echo -e "\033[0;36mCompressing OpenRCT2.app...\033[0m"
cd artifacts
zip -rq openrct2-macos.zip OpenRCT2.app
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v2-preview
with:
name: "OpenRCT2-macOS"
path: artifacts/openrct2-macos.zip
- 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 (x64, portable)
runs-on: ubuntu-latest
needs: [check-code-formatting]
container:
image: openrct2/openrct2-build:0.3.1-bionic
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Get pre-reqs
shell: bash
run: . scripts/setenv && get-discord-rpc
- name: Build OpenRCT2
shell: bash
run: . scripts/setenv -q && build -DWITH_TESTS=on -DCMAKE_BUILD_TYPE=MinSizeRel -DBUILD_SHARED_LIBS=ON -DPORTABLE=ON -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz"
- name: Build artifacts
shell: bash
run: . scripts/setenv -q && build-portable artifacts/OpenRCT2-Linux-x86_64.tar.gz bin/install/usr
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v1
with:
name: "OpenRCT2-Linux-x86_64"
path: artifacts
- name: Run Tests
shell: bash
run: . scripts/setenv -q && run-tests
- name: Upload artifacts (openrct2.org)
shell: bash
run: |
. scripts/setenv -q
if [[ "$OPENRCT2_PUSH" == "true" ]]; then
upload-build artifacts/OpenRCT2-Linux-x86_64.tar.gz linux-x86_64 $OPENRCT2_VERSION $OPENRCT2_SHA1 $OPENRCT2_BRANCH
else
echo 'Not going to push build'
fi
linux-portable-32:
name: Linux (i686, portable)
runs-on: ubuntu-latest
needs: [check-code-formatting]
container:
image: openrct2/openrct2-build:0.3.1-bionic32
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Get pre-reqs
shell: bash
run: . scripts/setenv && get-discord-rpc
- name: Build OpenRCT2
shell: bash
env:
TESTPAINT: true
run: . scripts/setenv -q && build -DWITH_TESTS=on -DCMAKE_BUILD_TYPE=MinSizeRel -DBUILD_SHARED_LIBS=ON -DPORTABLE=ON -DFORCE32=ON -DENABLE_SCRIPTING=OFF -DCMAKE_CXX_FLAGS="-m32 -gz"
- name: Build artifacts
shell: bash
run: . scripts/setenv -q && build-portable artifacts/OpenRCT2-Linux-i686.tar.gz bin/install/usr
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v1
with:
name: "OpenRCT2-Linux-i686"
path: artifacts
- name: Run Tests
shell: bash
run: . scripts/setenv -q && run-tests
- name: Run testpaint
shell: bash
run: . scripts/setenv -q && run-testpaint
- name: Upload artifacts (openrct2.org)
shell: bash
run: |
. scripts/setenv -q
if [[ "$OPENRCT2_PUSH" == "true" ]]; then
upload-build artifacts/OpenRCT2-Linux-i686.tar.gz linux-i686 $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:
image: openrct2/openrct2-build:0.3.1-bionic
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Get pre-reqs
shell: bash
run: . scripts/setenv -q && get-discord-rpc
- name: Build OpenRCT2
shell: bash
run: . scripts/setenv -q && build -DCMAKE_BUILD_TYPE=Release -DAPPIMAGE=ON -DOPENRCT2_USE_CCACHE=off
- name: Build AppImage
shell: bash
run: . scripts/setenv -q && build-appimage
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v1
with:
name: OpenRCT2-AppImage
path: artifacts
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: Build image
run: |
git clone --depth 1 https://github.com/OpenRCT2/openrct2-docker .
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:
image: openrct2/openrct2-build:0.3.1-bionic
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Build OpenRCT2
shell: bash
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:
image: openrct2/openrct2-build:0.3.1-android
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Build OpenRCT2
shell: bash
run: |
. scripts/setenv
pushd src/openrct2-android
./gradlew app:assemblePR
popd
mkdir -p artifacts
mv src/openrct2-android/app/build/outputs/apk/arm/pr/app-arm-pr.apk artifacts/openrct2-arm.apk
- name: Upload artifacts (CI)
uses: actions/upload-artifact@v1
with:
name: "OpenRCT2-Android"
path: artifacts
- name: Upload artifacts (openrct2.org)
shell: bash
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