#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
# autoconf.yml -- Configuration for autoconf GitHub Action workflow.
#

name: autoconf

on:
  push:
    branches: ["*"]
    paths-ignore:
      - 'doc/**'
      - 'notes/**'
      - CHANGES
      - COMMITTERS
      - INSTALL
      - STATUS
      - README
  pull_request:
    branches: ["*"]
    paths-ignore:
      - 'doc/**'
      - 'notes/**'
      - CHANGES
      - COMMITTERS
      - INSTALL
      - STATUS
      - README

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: false

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        check-target: [check, davautocheck]
        os: [ubuntu-latest, ubuntu-22.04-arm]
        httpd: [system, trunk, 2.4.x]
        # Only run davautocheck for httpd trunk/2.4.x
        exclude:
          - check-target: check
            httpd: trunk
          - check-target: check
            httpd: 2.4.x

    runs-on: ${{ matrix.os }}
    name: ${{ matrix.os }}, target ${{ matrix.check-target }}, ${{ matrix.httpd }} httpd

    steps:
      - name: Install dependencies (Linux, apt-get)
        if: runner.os == 'Linux'
        run: >
          sudo apt-get update &&
          sudo apt-get install
          libtool
          libtool-bin
          libapr1-dev
          libaprutil1-dev
          libserf-dev
          libexpat1-dev
          zlib1g-dev
          libsqlite3-dev
          liblz4-dev
          libutf8proc-dev
          ${{ matrix.httpd == 'system' && 'apache2-dev' || '' }}
          libsecret-1-dev
          python3-lxml
          python3-rnc2rng

      - name: Use LF for Git checkout
        run: |
          git config --global core.autocrlf false
          git config --global core.eol lf

      - name: Install Apache httpd
        run: |
          test "${{ matrix.httpd }}" != 'system' || exit 0
          git clone -q --depth=1 -b ${{ matrix.httpd }} https://github.com/apache/httpd
          cd httpd
          ./buildconf --with-apr=/usr/bin/apr-1-config
          ./configure --prefix=$HOME/root/httpd --enable-mpms-shared=event --enable-mods-shared=most --enable-dav
          make -j
          make install
      - uses: actions/checkout@v6

      - name: autogen
        run: ./autogen.sh

      - name: Configure
        run: |
          ./configure --enable-maintainer-mode \
              --with-apxs=${{ matrix.httpd == 'system' && '/usr/bin/apxs' || '${HOME}/root/httpd/bin/apxs' }}

      - name: Build (make)
        run: make -j

      - name: Run tests
        run: |
          make ${{matrix.check-target}} PARALLEL=16 APACHE_MPM=event \
              CHECK_XML_SCHEMA=1

      - name: Archive test logs
        if: always()
        uses: actions/upload-artifact@v7
        with:
          name: tests-${{matrix.os}}-${{matrix.check-target}}-${{matrix.httpd}}
          path: |
            tests.log
            subversion/tests/cmdline/httpd**/*_log

      - name: Install (make install)
        run: sudo make install
