name: Build and Test on Debian

on:
  push:
  pull_request:
    types: [opened, synchronize, reopened]
  release:
    types: [created]

jobs:
  test_basic:
    name: basic PHP ${{ matrix.php }} - I ${{ matrix.imagemagick }}
    strategy:
      fail-fast: false
      matrix:
        os: [ ubuntu-latest ]
        php: [ 8.5 ]
        imagemagick: [
            7.1.0-13,
            6.8.7-0,
        ]
    runs-on: ${{ matrix.os }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v5

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}

      - name: Apt install required packages
        run: |
          sudo apt-get update
          sudo apt-get install -y fonts-urw-base35 || true
          sudo apt-get install -y libfreetype6-dev || true
          sudo apt-get install -y texlive-fonts-recommended || true

      - name: Cache ImageMagick
        uses: actions/cache@v4
        env:
          cache-name: cache-ImageMagick
        with:
          path: ~/im/imagemagick-${{ matrix.imagemagick }}
          key: ${{ runner.os }}-ImageMagick-${{ matrix.imagemagick }}

      - name: Sanity check package.xml and install ImageMagick
        run: |
          for file in tests/*.phpt; do grep $(basename $file) package.xml >/dev/null || (echo "Missing $file from package.xml" ; exit 1); done
          bash ./imagemagick_dependency.sh "${{ matrix.imagemagick }}" $(pwd)

      - name: Configure, install, and basic checks
        run: |
          export NO_INTERACTION=1
          export REPORT_EXIT_STATUS=1
          export SKIP_SLOW_TESTS=1
          export PHP_IMAGICK_VERSION=$(php -r '$sxe = simplexml_load_file ("package.xml"); echo (string) $sxe->version->release;')
          export CFLAGS=$(php util/calculate_cflags.php "${{ matrix.php }}" "${{ matrix.imagemagick }}")
          echo "CFLAGS are ${CFLAGS}"
          phpize
          ./configure --with-imagick="${HOME}/im/imagemagick-${{ matrix.imagemagick }}"
          sudo make install
          php -d extension=imagick.so util/check_fonts.php

      - name: Run Imagick tests
        run: |
          export TEST_PHP_EXECUTABLE=`which php`
          php run-tests.php -d extension=imagick.so -d extension_dir=modules -n ./*.phpt --show-diff -g FAIL,BORK,WARN,LEAK
          export JOBS=$(php util/calculate_test_jobs.php)
          php run-tests.php ${JOBS} -d extension=imagick.so -d extension_dir=modules -n ./tests/*.phpt --show-diff -g FAIL,BORK,WARN,LEAK
          for i in `ls tests/*.diff 2>/dev/null`; do echo "-- START ${i}"; cat $i; echo "-- END"; done
          php ./util/check_version.php

  test_all:
    name: Full PHP ${{ matrix.php }} - I ${{ matrix.imagemagick }}
    needs: test_basic
    strategy:
      fail-fast: false
      matrix:
        os: [ ubuntu-latest ]
        php: [8.4, 8.3, 8.2, 8.1, 8.0, 7.4, 7.3, 7.2, 7.1, 7.0, 5.6]
        imagemagick: [
          7.1.0-13,
          7.0.10-27,
          7.0.8-4,
          7.0.1-0,
          git7,
          6.9.2-0,
          6.8.7-0,
          #6.7.8-0,
          git6
        ]
        exclude:
          - php: 8.3
            imagemagick: git6
          - php: 8.2
            imagemagick: git6
          - php: 8.1
            imagemagick: git6
          - php: 8.0
            imagemagick: git6
          - php: 7.4
            imagemagick: git6
          - php: 7.3
            imagemagick: git6
          - php: 7.2
            imagemagick: git6
          - php: 7.1
            imagemagick: git6
          - php: 7.0
            imagemagick: git6
          - php: 5.6
            imagemagick: git6
          - php: 5.5
            imagemagick: git6
          - php: 8.2
            imagemagick: git7
          - php: 8.1
            imagemagick: git7
          - php: 8.0
            imagemagick: git7
          - php: 7.4
            imagemagick: git7
          - php: 7.3
            imagemagick: git7
          - php: 7.2
            imagemagick: git7
          - php: 7.1
            imagemagick: git7
          - php: 7.0
            imagemagick: git7
          - php: 5.6
            imagemagick: git7
    runs-on: ${{ matrix.os }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v5

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}

      - name: Apt install required packages
        run: |
          sudo apt-get update
          sudo apt-get install -y fonts-urw-base35 || true
          sudo apt-get install -y libfreetype6-dev || true
          sudo apt-get install -y texlive-fonts-recommended || true
          sudo apt-get install -y libdjvulibre21 || true
          sudo apt-get install -y libpcre3-dev || true
          sudo apt-get install -y libraqm0 || true
          sudo apt-get install -y libwmf0.2-7 || true
          sudo apt-get install -y libopenexr-3-1-30 || true

      - name: Cache ImageMagick
        uses: actions/cache@v4
        env:
          cache-name: cache-ImageMagick
        with:
          path: ~/im/imagemagick-${{ matrix.imagemagick }}
          key: ${{ runner.os }}-ImageMagick-${{ matrix.imagemagick }}

      - name: Sanity check package.xml and install ImageMagick
        run: |
          for file in tests/*.phpt; do grep $(basename $file) package.xml >/dev/null || (echo "Missing $file from package.xml" ; exit 1); done
          bash ./imagemagick_dependency.sh "${{ matrix.imagemagick }}" $(pwd)

      - name: Configure and check fonts are present
        run: |
          export PHP_IMAGICK_VERSION=$(php -r '$sxe = simplexml_load_file ("package.xml"); echo (string) $sxe->version->release;')
          export CFLAGS=$(php util/calculate_cflags.php "${{ matrix.php }}" "${{ matrix.imagemagick }}")
          echo "CFLAGS are ${CFLAGS}"
          phpize
          ./configure --with-imagick="${HOME}/im/imagemagick-${{ matrix.imagemagick }}"
          sudo make install
          php -d extension=imagick.so util/check_fonts.php

      - name: Run Imagick tests
        run: |
          export TEST_PHP_EXECUTABLE=`which php`
          export NO_INTERACTION=1
          export REPORT_EXIT_STATUS=1
          export SKIP_SLOW_TESTS=1
          php run-tests.php -d extension=imagick.so -d extension_dir=modules -n ./*.phpt --show-diff -g FAIL,BORK,WARN,LEAK
          export JOBS=$(php util/calculate_test_jobs.php)
          php run-tests.php ${JOBS} -d extension=imagick.so -d extension_dir=modules -n ./tests/*.phpt --show-diff -g FAIL,BORK,WARN,LEAK
          for i in `ls tests/*.diff 2>/dev/null`; do echo "-- START ${i}"; cat $i; echo "-- END"; done
          php ./util/check_version.php
