name: CI (Linux)

on:
  workflow_call:
    inputs:
      compiler:
        required: true
        type: string
      cxxcompiler:
        required: true
        type: string
      libraries:
        required: true
        type: string
      extra-cmake-parameters:
        required: true
        type: string

env:
  CTEST_OUTPUT_ON_FAILURE: 1

jobs:
  linux:
    name: CI

    runs-on: ubuntu-24.04
    env:
      CC: ${{ inputs.compiler }}
      CXX: ${{ inputs.cxxcompiler }}

    steps:
    - name: Checkout
      uses: actions/checkout@v6

    - name: Setup vcpkg
      uses: ./.github/actions/setup-vcpkg
      with:
        vcpkg-location: ${{ runner.temp }}/vcpkg
        mono-install-command: 'sudo apt-get install -y --no-install-recommends mono-complete'

    - name: Install dependencies
      run: |
        echo "::group::Update apt"
        sudo apt-get update
        echo "::endgroup::"

        echo "::group::Install dependencies"
        sudo apt-get install -y --no-install-recommends \
          liballegro4-dev \
          libcurl4-openssl-dev \
          libfontconfig-dev \
          libharfbuzz-dev \
          libicu-dev \
          liblzma-dev \
          liblzo2-dev \
          libogg-dev \
          libopus-dev \
          libopusfile-dev \
          ${{ inputs.libraries }} \
          zlib1g-dev \
          # EOF

        echo "::group::Install vcpkg dependencies"

        # Disable vcpkg integration, as we mostly use system libraries.
        mv vcpkg.json vcpkg-disabled.json

        # We only use breakpad from vcpkg, as its CMake files
        # are a bit special. So the Ubuntu's variant doesn't work.
        ${{ runner.temp }}/vcpkg/vcpkg install breakpad

        echo "::endgroup::"
      env:
        DEBIAN_FRONTEND: noninteractive

    - name: Get OpenGFX
      run: |
        mkdir -p ~/.local/share/openttd/baseset
        cd ~/.local/share/openttd/baseset

        echo "::group::Download OpenGFX"
        curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip
        echo "::endgroup::"

        echo "::group::Unpack OpenGFX"
        unzip opengfx-all.zip
        echo "::endgroup::"

        rm -f opengfx-all.zip

    - name: Install GCC problem matcher
      uses: ammaraskar/gcc-problem-matcher@master

    - name: Build
      run: |
        mkdir build
        cd build

        echo "::group::CMake"
        cmake .. -DCMAKE_TOOLCHAIN_FILE=${{ runner.temp }}/vcpkg/scripts/buildsystems/vcpkg.cmake ${{ inputs.extra-cmake-parameters }}
        echo "::endgroup::"

        echo "::group::Build"
        echo "Running on $(nproc) cores"
        cmake --build . -j $(nproc)
        echo "::endgroup::"

    - name: Test
      run: |
        (
          cd build
          ctest -j $(nproc) --timeout 120
        )

        # Re-enable vcpkg.
        mv vcpkg-disabled.json vcpkg.json

        # Check no tracked files have been modified.
        git diff --exit-code
