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/**' workflow_dispatch: inputs: sign: description: Sign binaries type: choice options: - 'no' - test-signing - release-signing default: test-signing 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.22 # 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: build_variables: name: Get version info runs-on: ubuntu-latest # We want to sign tagged releases with release certificates, but it is only allowed to be ran manually. # Disable automatic runs for tags and force release signing for tags. if: | (startsWith(github.ref, 'refs/tags/v') && github.event_name == 'workflow_dispatch' && github.event.inputs.sign == 'release-signing') || (!startsWith(github.ref, 'refs/tags/v') && github.event.inputs.sign != 'release-signing') outputs: name: ${{ steps.artifact-name.outputs.name }} describe: ${{ steps.ghd.outputs.describe }} short-sha: ${{ steps.ghd.outputs.short-sha }} distance: ${{ steps.ghd.outputs.distance }} tag: ${{ steps.ghd.outputs.tag }} push: ${{ steps.setenv.outputs.push }} sign: ${{ steps.sign.outputs.sign }} certificate: ${{ steps.sign.outputs.certificate }} steps: # We need to fetch entire repo to get the tags and correctly run `describe` - name: Check out code uses: actions/checkout@v4 with: fetch-depth: 0 # We cannot use proudust/gh-describe, as it reports incorrect (too short) short-sha - name: Git describe id: ghd run: | TAG=$(git describe --tags --abbrev=0) DESCRIBE=$(git describe --tags) SHORT_SHA=$(git rev-parse --short HEAD) DISTANCE=$(git rev-list --count $TAG..HEAD) echo "tag=$TAG" echo "describe=$DESCRIBE" echo "short-sha=$SHORT_SHA" echo "distance=$DISTANCE" echo "tag=$TAG" >> $GITHUB_OUTPUT echo "describe=$DESCRIBE" >> $GITHUB_OUTPUT echo "short-sha=$SHORT_SHA" >> $GITHUB_OUTPUT echo "distance=$DISTANCE" >> $GITHUB_OUTPUT - name: Set env id: setenv run: | . scripts/setenv echo "push=$OPENRCT2_PUSH" echo "push=$OPENRCT2_PUSH" >> $GITHUB_OUTPUT # Name now uses the same format as "describe" - name: Get artifact name id: artifact-name run: | echo "name=${{ steps.ghd.outputs.describe }}" echo "name=${{ steps.ghd.outputs.describe }}" >> $GITHUB_OUTPUT - name: Sign id: sign env: SIGNPATH_API_TOKEN: ${{ secrets.SIGNPATH_API_TOKEN }} run: | sign=${{ env.SIGNPATH_API_TOKEN != '' && github.event.inputs.sign != 'no' && (needs.build_variables.outputs.push || startsWith(github.ref, 'refs/tags/v')) }} # if using workflow_dispatch, use the provided certificate if [[ "$GITHUB_EVENT_NAME" == "workflow_dispatch" ]]; then certificate=${{ github.event.inputs.sign }} else # Default to no signing certificate=no sign=false fi echo "sign=$sign" echo "certificate=$certificate" echo "sign=$sign" >> $GITHUB_OUTPUT echo "certificate=$certificate" >> $GITHUB_OUTPUT # 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@v4 # 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:18-format defaults: run: shell: sh steps: - name: Checkout uses: actions/checkout@v4 - 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@v4 - name: Run check-changelog-formatting run: scripts/check-changelog-formatting g2dat: name: Graphics .dat files runs-on: ubuntu-latest needs: build_variables steps: - name: Checkout OpenRCT2 uses: actions/checkout@v4 with: path: OpenRCT2 - name: Download gxc run: | curl -Lo tools.tar.gz https://github.com/IntelOrca/libsawyer/releases/download/v1.3.0/libsawyer-tools-linux-x64.tar.gz mkdir -p "$GITHUB_WORKSPACE/bin" tar -C "$GITHUB_WORKSPACE/bin" -xf tools.tar.gz echo "$GITHUB_WORKSPACE/bin" >> $GITHUB_PATH - name: Build graphics .dat files run: | gxc build g2.dat OpenRCT2/resources/g2/sprites.json gxc build fonts.dat OpenRCT2/resources/fonts/sprites.json gxc build tracks.dat OpenRCT2/resources/tracks/sprites.json - name: Upload graphics .dat files uses: actions/upload-artifact@v4 with: name: graphics-${{ needs.build_variables.outputs.name }} path: | g2.dat fonts.dat tracks.dat windows: name: Windows runs-on: windows-latest needs: [check-code-formatting, build_variables, g2dat] strategy: fail-fast: false matrix: platform: [win32, x64, arm64] env: PLATFORM: ${{ matrix.platform }} DISTANCE_FROM_TAG: ${{ needs.build_variables.outputs.distance }} 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@v4 - name: Install MSVC problem matcher uses: ammaraskar/msvc-problem-matcher@master - name: Build OpenRCT2 run: . scripts/setenv && build - name: Upload unsigned binaries id: upload-windows-binaries-unsigned uses: actions/upload-artifact@v4 with: name: OpenRCT2-${{ needs.build_variables.outputs.name }}-windows-unsigned-${{ matrix.platform }} path: | bin/openrct2.exe bin/openrct2.com # Sign the binaries first, so that all other artifacts (portable, installer, symbols) use signed binaries - name: Sign binaries id: sign-binaries env: SIGNPATH_API_TOKEN: ${{ secrets.SIGNPATH_API_TOKEN }} if: ${{ needs.build_variables.outputs.sign == 'true' }} uses: signpath/github-action-submit-signing-request@v1 with: api-token: '${{ secrets.SIGNPATH_API_TOKEN }}' organization-id: 645b821f-6283-45e1-8198-264997072801 project-slug: OpenRCT2 signing-policy-slug: ${{ needs.build_variables.outputs.certificate }} artifact-configuration-slug: 'binaries' github-artifact-id: ${{ steps.upload-windows-binaries-unsigned.outputs.artifact-id }} wait-for-completion: true output-artifact-directory: files-signed parameters: | version: "${{ env.OPENRCT2_VERSION }}.${{ needs.build_variables.outputs.distance }}-${{ needs.build_variables.outputs.short-sha }}" - name: Use signed binaries if: ${{ needs.build_variables.outputs.sign == 'true' }} run: | mv files-signed/openrct2.com bin/openrct2.com mv files-signed/openrct2.exe bin/openrct2.exe - name: Download graphics .dat files on ARM64 if: matrix.platform == 'arm64' uses: actions/download-artifact@v4 with: name: graphics-${{ needs.build_variables.outputs.name }} path: bin/data - name: Build artifacts run: | . scripts/setenv -q build-portable build-symbols build-installer -i echo "OPENRCT2_VERSION_EXTRA=$OPENRCT2_VERSION_EXTRA" >> "$GITHUB_ENV" - name: Rename artifacts run: | mv artifacts/openrct2-portable-*.zip artifacts/OpenRCT2-${{ needs.build_variables.outputs.name }}-windows-portable-$PLATFORM.zip mv artifacts/openrct2-installer-*.exe artifacts/OpenRCT2-${{ needs.build_variables.outputs.name }}-windows-installer-$PLATFORM.exe mv artifacts/openrct2-symbols-*.zip artifacts/OpenRCT2-${{ needs.build_variables.outputs.name }}-windows-symbols-$PLATFORM.zip - name: Upload portable artifact (CI) uses: actions/upload-artifact@v4 with: name: OpenRCT2-${{ needs.build_variables.outputs.name }}-${{ runner.os }}-portable-${{ matrix.platform }} path: artifacts/OpenRCT2-${{ needs.build_variables.outputs.name }}-windows-portable-${{ matrix.platform }}.zip if-no-files-found: error - name: Upload unsigned installer artifact (CI) id: upload-windows-installer-unsigned uses: actions/upload-artifact@v4 with: name: OpenRCT2-${{ needs.build_variables.outputs.name }}-${{ runner.os }}-installer-${{ matrix.platform }}-unsigned path: artifacts/OpenRCT2-${{ needs.build_variables.outputs.name }}-windows-installer-${{ matrix.platform }}.exe if-no-files-found: error - name: Sign installer id: sign-installer if: ${{ needs.build_variables.outputs.sign == 'true' }} uses: signpath/github-action-submit-signing-request@v1 with: api-token: '${{ secrets.SIGNPATH_API_TOKEN }}' organization-id: 645b821f-6283-45e1-8198-264997072801 project-slug: OpenRCT2 signing-policy-slug: ${{ needs.build_variables.outputs.certificate }} artifact-configuration-slug: 'installer' github-artifact-id: ${{ steps.upload-windows-installer-unsigned.outputs.artifact-id }} wait-for-completion: true output-artifact-directory: files-signed parameters: | version: "${{ env.OPENRCT2_VERSION }}${{ env.OPENRCT2_VERSION_EXTRA }}" product: "OpenRCT2 ${{ matrix.platform }} Installer for Windows 7 and later" - name: Upload signed installer artifact (CI) id: upload-windows-installer-signed if: ${{ needs.build_variables.outputs.sign == 'true' }} uses: actions/upload-artifact@v4 with: name: OpenRCT2-${{ needs.build_variables.outputs.name }}-${{ runner.os }}-installer-${{ matrix.platform }} path: files-signed/OpenRCT2-${{ needs.build_variables.outputs.name }}-windows-installer-${{ matrix.platform }}.exe if-no-files-found: error - name: Upload symbols artifact (CI) uses: actions/upload-artifact@v4 with: name: OpenRCT2-${{ needs.build_variables.outputs.name }}-${{ runner.os }}-symbols-${{ matrix.platform }} path: artifacts/OpenRCT2-${{ needs.build_variables.outputs.name }}-windows-symbols-${{ matrix.platform }}.zip 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 symbols (backtrace.io) run: | . scripts/setenv if [[ "$OPENRCT2_PUSH" == "true" ]]; then upload-backtrace-symbols artifacts/OpenRCT2-${{ needs.build_variables.outputs.name }}-windows-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, build_variables] container: openrct2/openrct2-build:18-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@v4 - name: ccache uses: hendrikmuhs/ccache-action@v1.2.18 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@v4 with: name: OpenRCT2-${{ needs.build_variables.outputs.name }}-Windows-mingw-${{ matrix.platform }} path: bin/openrct2.exe if-no-files-found: error macos-cmake: name: macOS (${{ matrix.arch }}) using CMake runs-on: macos-14 needs: [check-code-formatting, build_variables] strategy: fail-fast: false matrix: arch: [x64, arm64] include: - arch: arm64 cache_key: macos-arm64 # Note: only build/run tests on the native architecture of the CI agent # GitHub macos-12 agents are all Intel, but as of 2024-04-25 new images, e.g. macos-14 (current macos-latest) are arm64 # See https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories build_flags: -DARCH="arm64" -DWITH_TESTS=on run_tests: true - arch: x64 cache_key: macos-x64 build_flags: -DARCH="x86_64" run_tests: false steps: - name: Checkout uses: actions/checkout@v4 - name: ccache uses: hendrikmuhs/ccache-action@v1.2.18 with: key: ${{ matrix.cache_key }} - name: Install GCC problem matcher uses: ammaraskar/gcc-problem-matcher@master - name: Build OpenRCT2 run: | # NB: GitHub comes with `pkg-config` and `ninja` preinstalled on macOS images . 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@v4 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-14 needs: [macos-cmake, build_variables] steps: - name: Checkout uses: actions/checkout@v4 - name: download x64 app bundle uses: actions/download-artifact@v4 with: name: OpenRCT2-${{ runner.os }}-x64-cmake path: macos_universal/x64 - name: download arm64 app bundle uses: actions/download-artifact@v4 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-${{ needs.build_variables.outputs.name }}-macos-universal.zip OpenRCT2.app - name: Upload artifacts (CI) uses: actions/upload-artifact@v4 with: name: OpenRCT2-${{ needs.build_variables.outputs.name }}-${{ runner.os }}-universal path: artifacts/OpenRCT2-${{ needs.build_variables.outputs.name }}-macos-universal.zip if-no-files-found: error linux-portable: name: ${{ matrix.distro }} Linux (${{ matrix.release }}, ${{ matrix.platform }}, portable) runs-on: ubuntu-latest needs: [check-code-formatting, build_variables] 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. - platform: x86_64 distro: Ubuntu release: noble image: openrct2/openrct2-build:18-noble build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz -fno-var-tracking-assignments" - platform: x86_64 distro: Debian release: bookworm image: openrct2/openrct2-build:18-bookworm build_flags: -DCMAKE_POSITION_INDEPENDENT_CODE=on -DCMAKE_CXX_FLAGS="-g -gz -fno-var-tracking-assignments" -DWITH_TESTS=off steps: - name: Checkout uses: actions/checkout@v4 - name: ccache uses: hendrikmuhs/ccache-action@v1.2.18 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 }} strip bin/install/usr/bin/libopenrct2.so - name: Build artifacts run: . scripts/setenv -q && build-portable artifacts/OpenRCT2-${{ needs.build_variables.outputs.name }}-${{ runner.os }}-${{ matrix.release }}-${{ matrix.platform }}.tar.gz bin/install/usr - name: Upload artifacts (CI) uses: actions/upload-artifact@v4 with: name: OpenRCT2-${{ needs.build_variables.outputs.name }}-${{ runner.os }}-${{ matrix.release }}-${{ matrix.platform }} path: artifacts if-no-files-found: error - name: Run Tests run: . scripts/setenv -q && run-tests linux-appimage: name: Ubuntu Linux (AppImage, x86_64) runs-on: ubuntu-latest needs: [check-code-formatting, build_variables] container: openrct2/openrct2-build:14-jammy steps: - name: Checkout uses: actions/checkout@v4 - name: ccache uses: hendrikmuhs/ccache-action@v1.2.18 with: key: linux-appimage - name: Install Clang 15 run: apt update && apt install -y clang-15 software-properties-common - name: Install CMake 3.25 run: add-apt-repository -y ppa:ecal/cmake-3.25 && apt install -y cmake - name: Get pre-reqs run: . scripts/setenv -q && get-discord-rpc - name: Build OpenRCT2 run: | . scripts/setenv -q && build -DCMAKE_C_COMPILER=clang-15 -DCMAKE_CXX_COMPILER=clang++-15 -DCMAKE_BUILD_TYPE=Release -DAPPIMAGE=ON -DOPENRCT2_USE_CCACHE=on strip bin/install/usr/bin/openrct2 - name: Build AppImage env: APPIMAGE_FILE_NAME: OpenRCT2-${{ needs.build_variables.outputs.name }}-linux-x86_64.AppImage run: . scripts/setenv -q && build-appimage - name: Upload artifacts (CI) uses: actions/upload-artifact@v4 with: name: OpenRCT2-${{ needs.build_variables.outputs.name }}-AppImage path: artifacts if-no-files-found: error linux-docker: name: Ubuntu Linux (Docker) needs: [check-code-formatting, build_variables] runs-on: ubuntu-latest steps: - name: Checkout image if: github.repository == 'OpenRCT2/OpenRCT2' && github.ref == 'refs/heads/develop' uses: actions/checkout@v4 with: repository: OpenRCT2/openrct2-docker - name: Build image if: github.repository == 'OpenRCT2/OpenRCT2' && github.ref == 'refs/heads/develop' run: docker build -t openrct2/openrct2-cli:develop develop/cli - name: Push image if: github.repository == 'OpenRCT2/OpenRCT2' && github.ref == 'refs/heads/develop' 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: Ubuntu Linux (noble, debug, [http, network, flac, vorbis OpenGL] disabled) using clang runs-on: ubuntu-latest needs: [check-code-formatting, build_variables] container: openrct2/openrct2-build:18-noble steps: - name: Checkout uses: actions/checkout@v4 - name: ccache uses: hendrikmuhs/ccache-action@v1.2.18 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: Ubuntu Linux (debug) using clang, coverage enabled runs-on: ubuntu-latest needs: [check-code-formatting, build_variables] container: openrct2/openrct2-build:18-noble steps: - name: Checkout uses: actions/checkout@v4 - name: ccache uses: hendrikmuhs/ccache-action@v1.2.18 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 -DENABLE_HEADERS_CHECK=on -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@v4 with: name: OpenRCT2-${{ needs.build_variables.outputs.name }}-${{ 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, build_variables] container: openrct2/openrct2-build:18-android steps: - name: Checkout uses: actions/checkout@v4 - name: ccache uses: hendrikmuhs/ccache-action@v1.2.18 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-${{ needs.build_variables.outputs.name }}-android-arm.apk - name: Upload artifacts (CI) uses: actions/upload-artifact@v4 with: name: OpenRCT2-${{ needs.build_variables.outputs.name }}-Android path: artifacts if-no-files-found: error emscripten: name: Emscripten runs-on: ubuntu-latest needs: [check-code-formatting, build_variables] container: openrct2/openrct2-build:19-emscripten steps: - name: Checkout uses: actions/checkout@v4 - name: ccache uses: hendrikmuhs/ccache-action@v1.2.18 with: key: emscripten - name: Install GCC problem matcher uses: ammaraskar/gcc-problem-matcher@master - name: Build OpenRCT2 run: | . scripts/setenv build-emscripten - name: Upload artifacts (CI) uses: actions/upload-artifact@v4 with: path: build/www name: OpenRCT2-${{ needs.build_variables.outputs.name }}-emscripten release: name: Release runs-on: ubuntu-latest needs: [build_variables, linux-portable, android, linux-appimage, macos-universal, windows] steps: - name: Checkout uses: actions/checkout@v4 with: sparse-checkout: | distribution/changelog.txt - name: Download artifacts uses: actions/download-artifact@v4 with: merge-multiple: true # Having multiple artifacts named the same might be confusing to the users. Drop the unsigned versions. - name: Remove unsigned artifacts run: | rm -rf *unsigned* - name: Concatenate sha1 files run: | ls -lR pushd ${{ github.workspace }} sha1sum OpenRCT2-* > OpenRCT2-${{ needs.build_variables.outputs.name }}-sha1sums.txt popd - name: Create release notes run: | # Print all the lines until an empty line sed -n '1,/^$/p' distribution/changelog.txt >> release_notes.txt echo "" >> release_notes.txt echo "Release created in ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> release_notes.txt echo "" >> release_notes.txt echo "SHA1 checksums:" >> release_notes.txt echo "\`\`\`" >> release_notes.txt cat OpenRCT2-${{ needs.build_variables.outputs.name }}-sha1sums.txt >> release_notes.txt echo "\`\`\`" >> release_notes.txt echo "" >> release_notes.txt cat release_notes.txt # Only upload tagged releases, mark them as draft for manual verification - name: Create tagged release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/v') with: draft: true files: | OpenRCT2-${{ needs.build_variables.outputs.name }}-* body_path: release_notes.txt tag_name: ${{ needs.build_variables.outputs.tag }} # The upload to binaries repository is done from develop only - name: Create tag for binaries repository uses: actions/github-script@v5 if: ${{ needs.build_variables.outputs.push }} with: github-token: ${{ secrets.OPENRCT2_BINARIES_CI_UPLOAD }} script: | github.rest.git.createRef({ owner: 'OpenRCT2', repo: 'OpenRCT2-binaries', ref: 'refs/tags/${{ needs.build_variables.outputs.name }}', sha: '2032e1601f3b35d07f088758d34bedbb84868616' }) - name: Create release in binaries repo uses: softprops/action-gh-release@v2 if: ${{ needs.build_variables.outputs.push }} with: repository: OpenRCT2/OpenRCT2-binaries token: ${{ secrets.OPENRCT2_BINARIES_CI_UPLOAD }} files: | openrct2-${{ needs.build_variables.outputs.name }}-sha1sums.txt OpenRCT2-${{ needs.build_variables.outputs.name }}-* body_path: release_notes.txt tag_name: ${{ needs.build_variables.outputs.name }}