Changeset - r28467:35c1d4d2f0a0
[Not reviewed]
master
0 2 1
Patric Stout - 3 months ago 2024-01-15 21:30:52
truebrain@openttd.org
Change: [CI] upgrade linux-generic to libc 2.28 and introduce linux-legacy (#11792)

linux-legacy is the old variant, which uses libc 2.17, released in 2012.
linux-generic is now upgraded to libc 2.28, released in 2018.
3 files changed with 241 insertions and 43 deletions:
0 comments (0 inline, 0 general)
.github/workflows/release-linux-legacy.yml
Show inline comments
 
new file 100644
 
name: Release (Linux, Legacy)
 

	
 
on:
 
  workflow_call:
 
    inputs:
 
      survey_key:
 
        required: false
 
        type: string
 
        default: ""
 

	
 
jobs:
 
  linux:
 
    name: Linux (Legacy)
 

	
 
    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
 

	
 
    - 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 yum variant of fluidsynth depends on all possible audio drivers,
 
        # like jack, ALSA, pulseaudio, etc. This is not really useful for us,
 
        # as we route the output of fluidsynth back via our sound driver, and
 
        # as such do not use these audio driver outputs at all.
 
        # The vcpkg variant of fluidsynth depends on ALSA. Similar issue here.
 
        # So instead, we compile fluidsynth ourselves, with as few
 
        # dependencies as possible. We do it before anything else is installed,
 
        # to make sure it doesn't pick up on any of the drivers.
 
        echo "::group::Install fluidsynth"
 
        wget https://github.com/FluidSynth/fluidsynth/archive/v2.3.3.tar.gz
 
        tar xf v2.3.3.tar.gz
 
        (
 
          cd fluidsynth-2.3.3
 
          mkdir build
 
          cd build
 
          cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr
 
          cmake --build . -j $(nproc)
 
          cmake --install .
 
        )
 

	
 
        # 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::"
 

	
 
        echo "::group::Install audio drivers"
 
        # These audio libs are to make sure the SDL version of vcpkg adds
 
        # sound-support; these libraries are not added to the resulting
 
        # binary, but the headers are used to enable them in SDL.
 
        yum install -y \
 
          alsa-lib-devel \
 
          jack-audio-connection-kit-devel \
 
          pulseaudio-libs-devel \
 
          # EOF
 
        echo "::endgroup::"
 

	
 
        echo "::group::Install video drivers"
 
        # These video libs are to make sure the SDL version of vcpkg adds
 
        # video-support; these libraries are not added to the resulting
 
        # binary, but the headers are used to enable them in SDL.
 
        yum install -y \
 
          libX11-devel \
 
          libXcursor-devel \
 
          libXext-devel \
 
          libXfixes-devel \
 
          libXi-devel \
 
          libxkbcommon-devel \
 
          libXrandr-devel \
 
          libXScrnSaver-devel \
 
          # EOF
 
        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::"
 

	
 
        echo "::group::Install breakpad dependencies"
 
        cargo install dump_syms
 
        echo "::endgroup::"
 

	
 
    - name: Patch bundle name
 
      run: |
 
        sed -i 's/generic/legacy/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=RelWithDebInfo \
 
          -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 breakpad symbols
 
      run: |
 
        cd build
 
        dump_syms ./openttd --inlines --store symbols
 

	
 
    - 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-legacy
 
        path: build/bundles
 
        retention-days: 5
 

	
 
    - name: Store symbols
 
      uses: actions/upload-artifact@v3
 
      with:
 
        name: symbols-linux-legacy
 
        path: build/symbols
 
        retention-days: 5
.github/workflows/release-linux.yml
Show inline comments
 
@@ -14,9 +14,10 @@ jobs:
 

	
 
    runs-on: ubuntu-latest
 
    container:
 
      # manylinux2014 is based on CentOS 7, but already has a lot of things
 
      # manylinux_2_28 is based on AlmaLinux 8, and already has a lot of things
 
      # installed and preconfigured. It makes it easier to build OpenTTD.
 
      image: quay.io/pypa/manylinux2014_x86_64
 
      # This distro is based on glibc 2.28, released in 2018.
 
      image: quay.io/pypa/manylinux_2_28_x86_64
 

	
 
    steps:
 
    - name: Download source
 
@@ -28,29 +29,11 @@ jobs:
 
      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
 
      uses: Swatinem/rust-cache@v2
 

	
 
    - name: Setup vcpkg caching
 
      uses: actions/github-script@v6
 
@@ -99,22 +82,12 @@ jobs:
 
          cmake --install .
 
        )
 

	
 
        # 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::"
 

	
 
        echo "::group::Install audio drivers"
 
        # These audio libs are to make sure the SDL version of vcpkg adds
 
        # sound-support; these libraries are not added to the resulting
 
        # binary, but the headers are used to enable them in SDL.
 
        yum install -y \
 
          alsa-lib-devel \
 
          jack-audio-connection-kit-devel \
 
          pulseaudio-libs-devel \
 
          # EOF
 
        echo "::endgroup::"
 
@@ -132,6 +105,11 @@ jobs:
 
          libxkbcommon-devel \
 
          libXrandr-devel \
 
          libXScrnSaver-devel \
 
          mesa-libEGL-devel \
 
          mesa-libGL-devel \
 
          mesa-libGLES-devel \
 
          wayland-devel \
 
          wayland-protocols-devel \
 
          # EOF
 
        echo "::endgroup::"
 

	
 
@@ -145,17 +123,6 @@ jobs:
 
          ./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::"
 

	
 
        echo "::group::Install breakpad dependencies"
 
        cargo install dump_syms
 
        echo "::endgroup::"
.github/workflows/release.yml
Show inline comments
 
@@ -31,6 +31,16 @@ jobs:
 
    with:
 
      version: ${{ needs.source.outputs.version }}
 

	
 
  linux-legacy:
 
    name: Linux (Legacy)
 
    needs: source
 

	
 
    uses: ./.github/workflows/release-linux-legacy.yml
 
    secrets: inherit
 

	
 
    with:
 
      survey_key: ${{ needs.source.outputs.survey_key }}
 

	
 
  linux:
 
    name: Linux (Generic)
 
    needs: source
 
@@ -81,6 +91,7 @@ jobs:
 
    needs:
 
    - source
 
    - docs
 
    - linux-legacy
 
    - linux
 
    - macos
 
    - windows
 
@@ -88,7 +99,7 @@ jobs:
 

	
 
    # As windows-store is condition, we need to check ourselves if we need to run.
 
    # The always() makes sure the rest is always evaluated.
 
    if: always() && needs.source.result == 'success' && needs.docs.result == 'success' && needs.linux.result == 'success' && needs.macos.result == 'success' && needs.windows.result == 'success' && (needs.windows-store.result == 'success' || needs.windows-store.result == 'skipped')
 
    if: always() && needs.source.result == 'success' && needs.docs.result == 'success' && needs.linux-legacy.result == 'success' && needs.linux.result == 'success' && needs.macos.result == 'success' && needs.windows.result == 'success' && (needs.windows-store.result == 'success' || needs.windows-store.result == 'skipped')
 

	
 
    uses: ./.github/workflows/upload-cdn.yml
 
    secrets: inherit
0 comments (0 inline, 0 general)