diff --git a/.github/workflows/release-linux-dedicated.yml b/.github/workflows/release-linux-dedicated.yml new file mode 100644 index 0000000000..37a678e98e --- /dev/null +++ b/.github/workflows/release-linux-dedicated.yml @@ -0,0 +1,163 @@ +name: Release (Linux, Dedicated) + +on: + workflow_call: + inputs: + survey_key: + required: false + type: string + default: "" + +jobs: + linux: + name: Linux (Dedicated) + + runs-on: ubuntu-latest + container: + # manylinux2014 is based on CentOS 7, and already has a lot of things + # installed and preconfigured. It makes it easier to build OpenTTD. + # This distro is based on glibc 2.17, released in 2012. + image: quay.io/pypa/manylinux2014_x86_64 + + steps: + - name: Download source + uses: actions/download-artifact@v3 + with: + name: internal-source + + - name: Unpack source + run: | + tar -xf source.tar.gz --strip-components=1 + + # curl is too old for most of the tools to work properly. For example, + # rust-toolchain doesn't work properly, neither vcpkg caching. + # The easier solution here is to upgrade curl. + - name: Update curl + run: | + yum install -y \ + openssl-devel \ + # EOF + + mkdir /curl + cd /curl + curl -o curl-7.81.0.zip https://curl.se/download/curl-7.81.0.zip + unzip curl-7.81.0.zip + cd curl-7.81.0 + ./configure --with-ssl --with-zlib --prefix=/usr --libdir=/usr/lib64 + make -j $(nproc) + make install + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Enable Rust cache + uses: Swatinem/rust-cache@v2.7.0 + with: + key: dedicated + + - name: Setup vcpkg caching + uses: actions/github-script@v6 + with: + script: | + core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); + core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); + core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite') + + - name: Install dependencies + run: | + echo "::group::Install system dependencies" + # perl-IPC-Cmd, wget, and zip are needed to run vcpkg. + # autoconf-archive is needed to build ICU. + yum install -y \ + autoconf-archive \ + perl-IPC-Cmd \ + wget \ + zip \ + # EOF + + # aclocal looks first in /usr/local/share/aclocal, and if that doesn't + # exist only looks in /usr/share/aclocal. We have files in both that + # are important. So copy the latter to the first, and we are good to + # go. + cp /usr/share/aclocal/* /usr/local/share/aclocal/ + echo "::endgroup::" + + # The container we use is old enough, that it doesn't know SHF_COMPRESSED. + # But, breakpad needs this symbol to exist. So we patch it in our system + # libraries. + ( + cd / + patch -p1 < ${GITHUB_WORKSPACE}/os/linux/shf-compressed.patch + ) + echo "::endgroup::" + + # We use vcpkg for our dependencies, to get more up-to-date version. + echo "::group::Install vcpkg and dependencies" + + git clone https://github.com/microsoft/vcpkg /vcpkg + + ( + cd /vcpkg + ./bootstrap-vcpkg.sh -disableMetrics + ) + + # Make Python3 available for other packages. This needs to be done + # first, as otherwise dependencies fail to build because Python3 is + # not available. + ( + cd / + + /vcpkg/vcpkg install python3 + ln -sf /vcpkg/installed/x64-linux/tools/python3/python3.[0-9][0-9] /usr/bin/python3 + ) + echo "::endgroup::" + + - name: Patch bundle name + run: | + sed -i 's/generic/dedicated/g' cmake/InstallAndPackage.cmake + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir -p build + cd build + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -DCMAKE_TOOLCHAIN_FILE=/vcpkg/scripts/buildsystems/vcpkg.cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DOPTION_DEDICATED=ON \ + -DOPTION_COMPRESS_DEBUG=ON \ + -DOPTION_LTO=ON \ + -DOPTION_TRIM_PATH_PREFIX=ON \ + -DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \ + -DOPTION_PACKAGE_DEPENDENCIES=ON \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + cmake --build . -j $(nproc) --target openttd + echo "::endgroup::" + + - name: Create bundles + run: | + cd ${GITHUB_WORKSPACE}/build + echo "::group::Run CPack" + cpack + echo "::endgroup::" + + echo "::group::Cleanup" + # Remove the sha256 files CPack generates; we will do this ourself at + # the end of this workflow. + rm -f bundles/*.sha256 + echo "::endgroup::" + + - name: Store bundles + uses: actions/upload-artifact@v3 + with: + name: openttd-linux-dedicated + path: build/bundles + retention-days: 5 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2bdd479e55..bf547910ec 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -61,6 +61,16 @@ jobs: with: survey_key: ${{ needs.source.outputs.survey_key }} + linux-dedicated: + name: Linux (Dedicated) + needs: source + + uses: ./.github/workflows/release-linux-dedicated.yml + secrets: inherit + + with: + survey_key: ${{ needs.source.outputs.survey_key }} + macos: name: MacOS needs: source