on:
  workflow_dispatch:
  schedule:
  - cron: 0 6 * * *
  push:
    branches:
    - main
    paths:
    - '.github/workflows/daily.yml'
  pull_request:
    branches:
    - main
    paths:
    - '.github/workflows/daily.yml'

permissions:
  contents: read

name: Daily
jobs:
  change_log:
    name: 'Create ChangeLog.md'
    runs-on: ubuntu-24.04

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
        with:
          fetch-depth: 0
          persist-credentials: false

      - name: Install dependencies
        run: npm install -g git+https://github.com/CookPete/auto-changelog.git#5ba380ad0044dd5be1b2bf4067f64d87202c98bd #v2.5.0

      - name: Create ChangeLog.md
        run: |
          export NEXT_VERSION=$(grep -oP "PACKAGE_VERSION='\K[0-9\.-]*" configure)
          git tag $NEXT_VERSION
          auto-changelog --sort-commits date
          mkdir artifacts
          mv ChangeLog.md artifacts/ChangeLog.md

      - name: Upload ChangeLog.md
        uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f #v7.0.0
        with:
          name: ChangeLog
          path: artifacts

  build_linux:
    name: 'Linux Q${{matrix.quantum}}-x64 hdri=${{matrix.hdri}} (${{matrix.modules}}) (${{ matrix.compiler }})'
    container:
      image: ubuntu:22.04
    runs-on: ubuntu-24.04

    strategy:
      fail-fast: false
      matrix:
        compiler: [ gcc, clang ]
        quantum: [ 8, 16, 32, 64 ]
        hdri: [ yes, no ]
        modules: [ 'with-modules', 'without-modules' ]
        exclude:
          - quantum: 8
            hdri: yes
          - quantum: 32
            hdri: no
          - quantum: 64
            hdri: no
        include:
          - compiler: gcc
            cxx_compiler: g++
            compiler_flags: -Wall -Wextra -Werror -Wno-builtin-declaration-mismatch
            packages: gcc g++
          - compiler: clang
            cxx_compiler: clang++
            compiler_flags: -Wall -Wextra -Werror -Wno-unused-function -Wno-incompatible-library-redeclaration -Wno-compound-token-split-by-macro
            packages: clang

    steps:
      - name: Install dependencies
        run: |
          set -e
          export DEBIAN_FRONTEND=noninteractive
          apt update
          apt-get install -y autoconf libfontconfig1-dev libfreetype6-dev libltdl-dev make pkg-config ${{ matrix.packages }}

      - name: Clone msttcorefonts
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
        with:
          repository: ImageMagick/msttcorefonts
          persist-credentials: false

      - name: Install msttcorefonts
        run: |
          set -e
          ./install.sh

      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
        with:
          persist-credentials: false

      - name: Configure ImageMagick
        env:
          CC: ${{ matrix.compiler }}
          CXX: ${{ matrix.cxx_compiler }}
          CFLAGS: ${{ matrix.compiler_flags }}
          CXXFLAGS: ${{ matrix.compiler_flags }}
        run: |
          ./configure --with-perl --with-quantum-depth=${{matrix.quantum}} --enable-hdri=${{matrix.hdri}} --${{matrix.modules}}

      - name: Build ImageMagick
        run: |
          make install

      - name: Test ImageMagick
        run: |
          make check || exit_code=$?
          if [ "$exit_code" != "0" ] ; then cat ./test-suite.log ; fi
          exit $exit_code

      - name: Test PerlMagick
        run: |
          cd PerlMagick
          make test TEST_VERBOSE=1

  build_windows:
    name: Windows ${{matrix.quantum}}${{matrix.hdri_flag}}-${{matrix.architecture}} (${{matrix.buildType}})
    needs:
      - change_log
    runs-on: windows-2022

    strategy:
      fail-fast: false
      matrix:
        architecture: [ x64, arm64, x86 ]
        buildType: [ dynamic, static ]
        quantum: [ Q8, Q16, Q32 ]
        hdri: [ hdri, noHdri ]
        exclude:
          - quantum: Q8
            hdri: hdri
          - quantum: Q32
            hdri: noHdri
        include:
          - hdri: hdri
            hdri_flag: -HDRI

    steps:
      - name: Clone ImageMagick
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
        with:
          path: ImageMagick
          persist-credentials: false

      - name: Download configure
        shell: cmd
        run: |
          ImageMagick\.github\build\windows\download-configure.cmd

      - name: Download dependencies
        shell: cmd
        run: |
          ImageMagick\.github\build\windows\download-dependencies.cmd windows-${{matrix.architecture}}-${{matrix.buildType}}-openMP.zip

      - name: Download ChangeLog.md
        uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c #v8.0.1
        with:
          name: ChangeLog
          path: ImageMagick

      - name: Configure ImageMagick
        shell: cmd
        working-directory: Configure
        run: |
          Configure.Release.x64.exe /noWizard /VS2022 /deprecated /${{matrix.architecture}} /${{matrix.buildType}} /${{matrix.quantum}} /${{matrix.hdri}}

      - name: Build ImageMagick
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
          msbuild /m /t:Rebuild /p:Configuration=Release,Platform=${{matrix.architecture}}

  build_windows_zero_configuration:
    name: 'Windows Q16-HDRI-x64 (zero configuration ${{matrix.buildType}})'
    runs-on: windows-2022

    strategy:
      fail-fast: false
      matrix:
        buildType: [ dynamic, static ]

    steps:
      - name: Clone ImageMagick
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
        with:
          path: ImageMagick
          persist-credentials: false

      - name: Download configure
        shell: cmd
        run: |
          ImageMagick\.github\build\windows\download-configure.cmd

      - name: Download dependencies
        shell: cmd
        run: |
          ImageMagick\.github\build\windows\download-dependencies.cmd windows-x64-${{matrix.buildType}}-openMP.zip

      - name: Configure ImageMagick
        shell: cmd
        working-directory: Configure
        run: |
          Configure.Release.x64.exe /noWizard /VS2022 /x64 /${{matrix.buildType}} /zeroConfigurationSupport

      - name: Build ImageMagick
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
          msbuild /m /t:Rebuild /p:Configuration=Release,Platform=x64

  build_msys2:
    name: MSYS2 Q16-${{matrix.toolchain}}
    runs-on: windows-2022

    strategy:
      matrix:
        include: [
          { msystem: clang64, toolchain: clang-x86_64 },
          { msystem: mingw64, toolchain: x86_64 },
          { msystem: ucrt64, toolchain: ucrt-x86_64 },
        ]
      fail-fast: false

    steps:
      - name: Prepare git
        run: git config --global core.autocrlf false

      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
        with:
          persist-credentials: false

      - uses: msys2/setup-msys2@4f806de0a5a7294ffabaff804b38a9b435a73bda #v2.30.0
        with:
          install: mingw-w64-${{ matrix.toolchain }}-toolchain base-devel binutils
          update: true
          cache: false

      - name: Build ImageMagick
        run: cd .github/build/msys2 && makepkg-mingw --noconfirm --syncdeps
        env:
          MINGW_ARCH: ${{ matrix.msystem }}
          PKGEXT: ".pkg.tar.xz"
        shell: msys2 {0}
