name: Linux.

on:
  push:
    paths-ignore:
      - 'docs/**'
      - '**.md'
      - 'changelog.txt'
      - 'LEGAL'
      - 'LICENSE'
      - '.github/**'
      - '!.github/workflows/linux.yml'
      - 'snap/**'
      - 'Telegram/build/**'
      - '!Telegram/build/docker/centos_env/**'
      - 'Telegram/Resources/uwp/**'
      - 'Telegram/Resources/winrc/**'
      - 'Telegram/SourceFiles/platform/win/**'
      - 'Telegram/SourceFiles/platform/mac/**'
      - 'Telegram/Telegram/**'
      - 'Telegram/configure.bat'
      - 'Telegram/Telegram.plist'
  pull_request:
    paths-ignore:
      - 'docs/**'
      - '**.md'
      - 'changelog.txt'
      - 'LEGAL'
      - 'LICENSE'
      - '.github/**'
      - '!.github/workflows/linux.yml'
      - 'snap/**'
      - 'Telegram/build/**'
      - '!Telegram/build/docker/centos_env/**'
      - 'Telegram/Resources/uwp/**'
      - 'Telegram/Resources/winrc/**'
      - 'Telegram/SourceFiles/platform/win/**'
      - 'Telegram/SourceFiles/platform/mac/**'
      - 'Telegram/Telegram/**'
      - 'Telegram/configure.bat'
      - 'Telegram/Telegram.plist'

jobs:

  linux:
    name: Rocky Linux 8
    runs-on: ubuntu-latest

    strategy:
      matrix:
        defines:
          - ""
          - "DESKTOP_APP_DISABLE_X11_INTEGRATION"

    env:
      UPLOAD_ARTIFACT: "true"
      ONLY_CACHE: "false"
      IMAGE_TAG: tdesktop:centos_env

    steps:
      - name: Clone.
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: First set up.
        run: |
          sudo apt update
          curl -sSL https://install.python-poetry.org | python3 -
          cd Telegram/build/docker/centos_env
          poetry install
          DOCKERFILE=$(DEBUG= LTO= poetry run gen_dockerfile)
          echo "$DOCKERFILE" > Dockerfile

      - name: Free up some disk space.
        uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be
        with:
          tool-cache: true

      - name: Set up Docker Buildx.
        uses: docker/setup-buildx-action@v3

      - name: Libraries cache.
        uses: actions/cache@v4
        with:
          path: ${{ runner.temp }}/.buildx-cache
          key: ${{ runner.OS }}-libs-${{ hashFiles('Telegram/build/docker/centos_env/**') }}
          restore-keys: ${{ runner.OS }}-libs-

      - name: Libraries.
        uses: docker/build-push-action@v6
        with:
          context: Telegram/build/docker/centos_env
          load: ${{ env.ONLY_CACHE == 'false' }}
          tags: ${{ env.IMAGE_TAG }}
          cache-from: type=local,src=${{ runner.temp }}/.buildx-cache
          cache-to: type=local,dest=${{ runner.temp }}/.buildx-cache-new,mode=max

      - name: Move cache.
        run: |
          rm -rf ${{ runner.temp }}/.buildx-cache
          mv ${{ runner.temp }}/.buildx-cache{-new,}

      - name: Telegram Desktop build.
        if: env.ONLY_CACHE == 'false'
        run: |
          DEFINE=""
          if [ -n "${{ matrix.defines }}" ]; then
            DEFINE="-D ${{ matrix.defines }}=ON"
            echo Define from matrix: $DEFINE
            echo "ARTIFACT_NAME=Telegram_${{ matrix.defines }}" >> $GITHUB_ENV
          else
            echo "ARTIFACT_NAME=Telegram" >> $GITHUB_ENV
          fi

          docker run --rm \
          -u $(id -u) \
          -v $PWD:/usr/src/tdesktop \
          -e CONFIG=Debug \
          $IMAGE_TAG \
          /usr/src/tdesktop/Telegram/build/docker/centos_env/build.sh \
          -D CMAKE_CONFIGURATION_TYPES=Debug \
          -D CMAKE_C_FLAGS_DEBUG="-O0" \
          -D CMAKE_CXX_FLAGS_DEBUG="-O0" \
          -D CMAKE_COMPILE_WARNING_AS_ERROR=ON \
          -D TDESKTOP_API_TEST=ON \
          -D DESKTOP_APP_DISABLE_AUTOUPDATE=OFF \
          -D DESKTOP_APP_DISABLE_CRASH_REPORTS=OFF \
          $DEFINE

      - name: Check.
        if: env.ONLY_CACHE == 'false'
        run: |
          filePath="out/Debug/Telegram"
          if test -f "$filePath"; then
            echo "Build successfully done! :)"

            size=$(stat -c %s "$filePath")
            echo "File size of ${filePath}: ${size} Bytes."
          else
            echo "Build error, output file does not exist."
            exit 1
          fi

      - name: Move artifact.
        if: env.UPLOAD_ARTIFACT == 'true'
        run: |
          cd out/Debug
          mkdir artifact
          mv {Telegram,Updater} artifact/
      - uses: actions/upload-artifact@v4
        if: env.UPLOAD_ARTIFACT == 'true'
        name: Upload artifact.
        with:
          name: ${{ env.ARTIFACT_NAME }}
          path: out/Debug/artifact/
