]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Merge r1891497, r1906480, r1906482, r1906501, r1907235, r1907235, r1907236, r1907237...
authorJoe Orton <jorton@apache.org>
Thu, 2 Mar 2023 09:58:30 +0000 (09:58 +0000)
committerJoe Orton <jorton@apache.org>
Thu, 2 Mar 2023 09:58:30 +0000 (09:58 +0000)
* Allow to load /home/travis/build/apache/httpd/.gdbinit

Prep for GitHub actions: move CPAN handling into test scripts,
don't reference /home/travis directly.

Enable simplest CI test cases in GitHub Actions (currently also
still enabled in Travis).  Based on apr/trunk.

Limit triggering on non-code changes, try to capture error_log as
an artifact on failure.

Migrate more tests to Github Actions.

Github: fixes #340, fixes #339

Migrate more tests to Github Actions.

Github: fixes #340, fixes #339

Travis RIP, WIP.

Add todo list for GHA migration.

Further migration of tests to GHA, though HTTP/2, ACME and
i386 build testing are all failing so currently disabled.
Caching needs adjusting to use a different model to Travis.

Further migration of tests to GHA, though HTTP/2, ACME and
i386 build testing are all failing so currently disabled.
Caching needs adjusting to use a different model to Travis.

Clear cache for mod_tls test.

Also run CI for PRs against 2.4.x.

Submitted by: rpluem, jorton

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1907961 13f79535-47bb-0310-9956-ffa450edef68

.github/workflows/linux.yml [new file with mode: 0644]
.travis.yml [deleted file]
test/README.ci [moved from test/README.travis with 52% similarity]
test/travis_before_linux.sh
test/travis_run_linux.sh

diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
new file mode 100644 (file)
index 0000000..b4e5248
--- /dev/null
@@ -0,0 +1,303 @@
+name: Linux
+
+on:
+  push:
+    branches: [ "*" ]
+    paths-ignore:
+      - 'docs/**'
+      - STATUS
+      - CHANGES
+      - changes-entries/*
+  pull_request:
+    branches: [ "trunk", "2.4.x" ]
+    paths-ignore:
+      - 'docs/**'
+      - STATUS
+      - CHANGES
+      - changes-entries/*
+
+env:
+  MARGS: "-j2"
+  CFLAGS: "-g"
+
+jobs:
+  build:
+    strategy:
+      fail-fast: false
+      matrix:
+        include: 
+          # -------------------------------------------------------------------------
+          - name: Empty APLOGNO() test
+            env: |
+              SKIP_TESTING=1
+              TEST_LOGNO=1
+          # -------------------------------------------------------------------------
+          - name: Default
+          # -------------------------------------------------------------------------
+          - name: All-static modules
+            config: --enable-mods-static=reallyall
+          # -------------------------------------------------------------------------
+          - name: Prefork MPM, all-modules (except cgid)
+            config: --enable-mods-shared=reallyall --with-mpm=prefork --disable-cgid
+          # -------------------------------------------------------------------------
+          - name: Worker MPM, all-modules
+            config: --enable-mods-shared=reallyall --with-mpm=worker
+          # -------------------------------------------------------------------------
+          - name: Shared MPMs, all-modules
+            config: --enable-mods-shared=reallyall --enable-mpms-shared=all
+          # -------------------------------------------------------------------------
+          - name: Event MPM, all-modules, mod_cgid only
+            config: --enable-mods-shared=reallyall --with-mpm=event --disable-cgi
+          # -------------------------------------------------------------------------
+          - name: Event MPM, all-modules, no CMSG_DATA
+            config: --enable-mods-shared=reallyall --with-mpm=event ac_cv_have_decl_CMSG_DATA=no
+          # -------------------------------------------------------------------------
+          - name: Default, all-modules + install
+            config: --enable-mods-shared=reallyall
+            env: |
+              TEST_INSTALL=1
+              APACHE_TEST_EXTRA_ARGS=-v
+          # -------------------------------------------------------------------------
+          - name: Default, all-modules, random test order
+            config: --enable-mods-shared=reallyall
+            env: |
+              TEST_ARGS=-order=random
+          # -------------------------------------------------------------------------
+          - name: GCC 10 maintainer-mode w/-Werror, install + VPATH
+            config: --enable-mods-shared=reallyall --enable-maintainer-mode
+            notest-cflags: -Werror -O2 -Wno-deprecated-declarations
+            env: |
+              CC=gcc-10
+              TEST_VPATH=1
+              TEST_INSTALL=1
+              SKIP_TESTING=1
+          # -------------------------------------------------------------------------
+          - name: All-modules, APR 1.7.2, APR-util 1.6.3
+            config: --enable-mods-shared=reallyall
+            env: |
+              APR_VERSION=1.7.2
+              APU_VERSION=1.6.3
+              APU_CONFIG="--with-crypto --with-ldap"
+          # -------------------------------------------------------------------------
+          - name: APR 1.7.x, APR-util 1.7.x
+            config: --enable-mods-shared=reallyall
+            env: |
+              APR_VERSION=1.7.x
+              APU_VERSION=1.7.x
+              APU_CONFIG="--with-crypto --with-ldap"
+              CLEAR_CACHE=1
+          # -------------------------------------------------------------------------
+          - name: Pool-debug
+            config: --enable-mods-shared=reallyall
+            env: |
+              APR_VERSION=1.7.x
+              APR_CONFIG="--enable-pool-debug"
+              APU_VERSION=1.7.x
+              APU_CONFIG="--with-crypto --with-ldap"
+              TEST_MALLOC=1
+              CLEAR_CACHE=1
+          # -------------------------------------------------------------------------
+          - name: Shared MPMs (event), pool-debug, SSL/TLS variants
+            config: --enable-mods-shared=reallyall --enable-mpms-shared=all --with-mpm=event
+            env: |
+              APR_VERSION=1.7.x
+              APR_CONFIG="--enable-pool-debug"
+              APU_VERSION=1.7.x
+              APU_CONFIG="--with-crypto --with-ldap"
+              TEST_MALLOC=1
+              TEST_SSL=1
+              CLEAR_CACHE=1
+          # -------------------------------------------------------------------------
+          - name: Shared MPMs (worker), pool-debug, SSL/TLS variants
+            config: --enable-mods-shared=reallyall --enable-mpms-shared=all --with-mpm=worker
+            env: |
+              APR_VERSION=1.7.x
+              APR_CONFIG="--enable-pool-debug"
+              APU_VERSION=1.7.x
+              APU_CONFIG="--with-crypto --with-ldap"
+              TEST_MALLOC=1
+              TEST_SSL=1
+              CLEAR_CACHE=1
+          # -------------------------------------------------------------------------
+          - name: Shared MPMs (prefork), pool-debug, SSL/TLS variants
+            config: --enable-mods-shared=reallyall --enable-mpms-shared=all --with-mpm=prefork
+            env: |
+              APR_VERSION=1.7.x
+              APR_CONFIG="--enable-pool-debug"
+              APU_VERSION=1.7.x
+              APU_CONFIG="--with-crypto --with-ldap"
+              TEST_MALLOC=1
+              TEST_SSL=1
+              CLEAR_CACHE=1
+          # -------------------------------------------------------------------------
+          - name: litmus WebDAV tests
+            config: --enable-dav --enable-dav-fs
+            env: |
+              LITMUS=1
+              TESTS="t/modules/dav.t"
+            pkgs: litmus
+          # -------------------------------------------------------------------------
+          # MFLAGS= works around https://bz.apache.org/bugzilla/show_bug.cgi?id=63942
+          ## TODO if: *condition_not_24x
+          - name: Regenerate ap_expr
+            config: --enable-mods-shared=reallyall --enable-maintainer-mode
+            notest-cflags: -Werror -Wno-deprecated-declarations
+            env: |
+              BUILDCONFIG="--with-regen-expr"
+              MFLAGS=
+          # -------------------------------------------------------------------------
+          - name: APR 1.7.2, APR-util 1.6.3, LDAP
+            config: --enable-mods-shared=reallyall
+            pkgs: ldap-utils
+            env: |
+              APR_VERSION=1.7.2
+              APU_VERSION=1.6.3
+              APU_CONFIG="--with-crypto --with-ldap"
+              TEST_MALLOC=1
+              TEST_LDAP=1
+              TEST_ARGS="-defines LDAP"
+              TESTS="t/modules/"
+          # -------------------------------------------------------------------------
+          ### TODO: if: *condition_not_24x
+          - name: APR trunk thread debugging
+            config: --enable-mods-shared=reallyall --with-mpm=event
+            env: |
+              APR_VERSION=trunk
+              APR_CONFIG="--with-crypto --enable-thread-debug"
+          # -------------------------------------------------------------------------
+          - name: UBSan
+            notest-cflags: -fsanitize=undefined -fno-sanitize-recover=undefined
+            config: --enable-mods-shared=reallyall --disable-http2
+            env: |
+              NOTEST_LIBS=-lubsan
+              TEST_UBSAN=1
+          # -------------------------------------------------------------------------
+          - name: ASan
+            notest-cflags: -ggdb -fsanitize=address -fno-sanitize-recover=address -fno-omit-frame-pointer
+            config: --enable-mods-shared=reallyall
+            env: |
+              APR_VERSION=1.7.x
+              APU_VERSION=1.7.x
+              APU_CONFIG="--with-crypto --with-ldap"
+              TEST_ASAN=1
+              CLEAR_CACHE=1
+          # -------------------------------------------------------------------------
+          - name: ASan, pool-debug
+            notest-cflags: -ggdb -fsanitize=address -fno-sanitize-recover=address -fno-omit-frame-pointer
+            config: --enable-mods-shared=reallyall
+            env: |
+              APR_VERSION=1.7.x
+              APR_CONFIG="--enable-pool-debug"
+              APU_VERSION=1.7.x
+              APU_CONFIG="--with-crypto --with-ldap"
+              TEST_ASAN=1
+              CLEAR_CACHE=1
+          # -------------------------------------------------------------------------
+          ### TODO: if: *condition_not_24x
+          ### TODO: fails in tests.
+          # - name: HTTP/2 test suite
+          #   config: --enable-mods-shared=reallyall --with-mpm=event --enable-mpms-shared=all
+          #   pkgs: curl python3-pytest nghttp2-client python3-cryptography python3-requests
+          #   env: |
+          #     APR_VERSION=1.7.2
+          #     APU_VERSION=1.6.1
+          #     APU_CONFIG="--with-crypto"
+          #     NO_TEST_FRAMEWORK=1
+          #     TEST_INSTALL=1
+          #     TEST_H2=1
+          #     TEST_CORE=1
+          #     TEST_PROXY=1
+          # -------------------------------------------------------------------------
+          ### TODO: if: *condition_not_24x
+          ### TODO: pebble install is broken.
+          # - name: ACME test suite
+          #   config: --enable-mods-shared=reallyall --with-mpm=event --enable-mpms-shared=event
+          #   pkgs: >-
+          #     python3-pytest nghttp2-client python3-cryptography python3-requests python3-filelock
+          #     golang-1.17 curl
+          #   env: |
+          #     APR_VERSION=1.7.2
+          #     APU_VERSION=1.6.1
+          #     APU_CONFIG="--with-crypto"
+          #     GOROOT=/usr/lib/go-1.17
+          #     NO_TEST_FRAMEWORK=1
+          #     TEST_INSTALL=1
+          #     TEST_MD=1
+          # -------------------------------------------------------------------------
+          ### TODO: if: *condition_not_24x
+          ### TODO: fix caching here.
+          - name: MOD_TLS test suite
+            config: --enable-mods-shared=reallyall --with-mpm=event --enable-mpms-shared=event
+            pkgs: curl python3-pytest nghttp2-client python3-cryptography python3-requests cargo cbindgen
+            env: |
+              APR_VERSION=1.7.2
+              APU_VERSION=1.6.1
+              APU_CONFIG="--with-crypto"
+              NO_TEST_FRAMEWORK=1
+              TEST_INSTALL=1
+              TEST_MOD_TLS=1
+              CLEAR_CACHE=1
+          # -------------------------------------------------------------------------
+          ### TODO if: *condition_not_24x
+          ### TODO: Fails because :i386 packages are not being found.
+          # - name: i386 Shared MPMs, most modules, maintainer-mode w/-Werror
+          #   config: --enable-mods-shared=reallyall --disable-xml2enc --disable-proxy-html --enable-mpms-shared=all --enable-maintainer-mode
+          #   pkgs: >-
+          #     cpanminus libc6-dev-i386 gcc-multilib libexpat1-dev:i386 libssl-dev:i386
+          #     lib32z1-dev libbrotli-dev:i386 libpcre2-dev:i386 libldap2-dev:i386 libtool-bin
+          #     perl-doc libapr1-dev libbrotli-dev:i386
+          #   env: |
+          #     PKG_CONFIG_PATH="/usr/lib/i386-linux-gnu/pkgconfig"
+          #     NOTEST_CFLAGS="-Werror"
+          #     CC="gcc -m32"
+          #     APR_VERSION=1.7.0
+          #     APU_VERSION=1.6.1
+          # APU_CONFIG="--with-crypto --with-ldap"
+    runs-on: ubuntu-latest
+    env:
+      NOTEST_CFLAGS: ${{ matrix.notest-cflags }}
+      CONFIG: ${{ matrix.config }}
+    name: ${{ matrix.name }}
+    steps:
+    - name: Set environment variables
+      run: echo "${{ matrix.env }}" >> $GITHUB_ENV
+    - name: apt refresh
+      run: sudo apt-get -o Acquire::Retries=5 update
+    - name: Install prerequisites
+      run: sudo apt-get install -o Acquire::Retries=5
+                    cpanminus libtool-bin libapr1-dev libaprutil1-dev
+                    liblua5.3-dev libbrotli-dev libcurl4-openssl-dev     
+                    libnghttp2-dev libjansson-dev libpcre2-dev gdb
+                    perl-doc ${{ matrix.pkgs }}
+    - uses: actions/checkout@v3
+    - name: Cache APR build
+      uses: actions/cache@v3
+      env:
+        cache-name: cache-apru
+      with:
+        path: ~/root
+        key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('/home/runner/root/.key-*') }}
+    - name: Cache CPAN modules
+      uses: actions/cache@v3
+      env:
+        cache-name: cache-cpan
+      with:
+        path: ~/perl5
+        key: ${{ runner.os }}-cpan-${{ env.cache-name }}-${{ hashFiles('/home/runner/perl5/.key') }}
+    - name: Configure environment
+      run: ./test/travis_before_linux.sh
+      timeout-minutes: 15
+    - uses: actions/upload-artifact@v3
+      if: failure()
+      with:
+        name: config.log ${{ matrix.node-version }}
+        path: |
+          /home/runner/build/**/config.log
+    - name: Build and test
+      run: ./test/travis_run_linux.sh
+    - uses: actions/upload-artifact@v3
+      if: failure()
+      with:
+        name: error_log ${{ matrix.node-version }}
+        path: test/perl-framework/t/logs/error_log
+
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644 (file)
index 64e42a2..0000000
+++ /dev/null
@@ -1,492 +0,0 @@
-language: c
-os:
-  - linux
-dist: bionic
-cache:
-  directories:
-    - /home/travis/perl5
-    - /home/travis/root
-# The non-x86_64 images currently lack cpanminus, when that is fixed
-# the cpanminus & universe sourceline can be removed.
-addons:
-  apt:
-    update: false
-    sources:
-      - sourceline: 'deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe'
-    packages:
-      - cpanminus
-      - libtool-bin
-      - libapr1-dev
-      - libaprutil1-dev
-      - perl-doc
-      - liblua5.3-dev
-      - libbrotli-dev
-      - libcurl4-openssl-dev
-      - libsystemd-dev
-      - libnghttp2-dev
-      - libjansson-dev
-      - libpcre2-dev
-      - libldap2-dev
-      - ldap-utils
-      - gdb
-env:
-  global:
-    - MFLAGS=-j2
-
-# This defines two condition anchors which can be used in job
-# definitions to either:
-#  condition_24x_only => run the job only for 2.4.x
-#  condition_not_24x  => run the job everywhere EXCEPT 2.4.x
-_cond1: &condition_24x_only (branch is present AND (branch ~= /^2.4/ OR branch ~= /^candidate-2.4/)) OR (tag is present AND tag ~= /^2.4/)
-_cond2: &condition_not_24x (branch is not present OR (branch !~ /^2.4/ AND branch !~ /^candidate-2.4/)) AND (tag is not present OR tag !~ /^2.4/)
-
-jobs:
-  include:
-    - name: Linux Ubuntu, Default module set
-    # -------------------------------------------------------------------------
-    - name: Empty APLOGNO() test
-      env: SKIP_TESTING=1 TEST_LOGNO=1
-    # -------------------------------------------------------------------------
-    - name: Linux s390x Ubuntu, all-modules
-      arch: s390x
-      env: CONFIG="--enable-mods-shared=reallyall"
-    # -------------------------------------------------------------------------
-    - name: Linux ppc64le Ubuntu, all-modules
-      arch: ppc64le
-      env: CONFIG="--enable-mods-shared=reallyall"
-    # -------------------------------------------------------------------------
-    - name: Linux arm64 Ubuntu, all-modules
-      arch: arm64
-      env: CONFIG="--enable-mods-shared=reallyall"
-    # -------------------------------------------------------------------------
-    - if: *condition_not_24x
-      name: Linux i386 Ubuntu, Shared MPMs, most modules, maintainer-mode w/-Werror
-      env: CONFIG="--enable-mods-shared=reallyall --disable-xml2enc --disable-proxy-html --enable-mpms-shared=all --enable-maintainer-mode"
-           PKG_CONFIG_PATH="/usr/lib/i386-linux-gnu/pkgconfig"
-           NOTEST_CFLAGS="-Werror"
-           CC="gcc -m32"
-           APR_VERSION=1.7.0
-           APU_VERSION=1.6.1 APU_CONFIG="--with-crypto --with-ldap"
-      addons:
-        apt:
-          sources:
-            - sourceline: 'deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe'
-          packages:
-            - cpanminus
-            - libc6-dev-i386
-            - gcc-multilib
-            - libexpat1-dev:i386
-            - libssl-dev:i386
-            - lib32z1-dev
-            - libbrotli-dev:i386
-            - libpcre2-dev:i386
-            - libldap2-dev:i386
-            - libtool-bin
-            - perl-doc
-            - libapr1-dev
-            - libbrotli-dev:i386
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, Default, all-modules + install
-      env: CONFIG="--enable-mods-shared=reallyall"
-           TEST_INSTALL=1
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, Default, all-static modules
-      env: CONFIG="--enable-mods-static=reallyall"
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, Default, all-modules, random test order
-      env: CONFIG="--enable-mods-shared=reallyall"
-           TEST_ARGS="-order=random"
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, Prefork MPM, all-modules
-      env: CONFIG="--enable-mods-shared=reallyall --with-mpm=prefork"
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, Worker MPM, all-modules
-      env: CONFIG="--enable-mods-shared=reallyall --with-mpm=worker"
-           CLEAR_CACHE=1
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, Shared MPMs, all-modules
-      env: CONFIG="--enable-mods-shared=reallyall --enable-mpms-shared=all"
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, GCC 7 maintainer-mode w/-Werror, install + VPATH
-      os: linux
-      env: CONFIG="--enable-mods-shared=reallyall --enable-maintainer-mode"
-           NOTEST_CFLAGS='-Werror -O2' CC=gcc-7
-           TEST_VPATH=1 TEST_INSTALL=1 SKIP_TESTING=1
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, Event MPM, all-modules, mod_cgid only
-      env: CONFIG="--enable-mods-shared=reallyall --with-mpm=event --disable-cgi"
-    # -------------------------------------------------------------------------
-    - if: *condition_not_24x
-      name: Linux Ubuntu, Event MPM, all-modules, mod_cgid fdpassing
-      env: CONFIG="--enable-mods-shared=reallyall --with-mpm=event --disable-cgi --enable-cgid-fdpassing"
-    # -------------------------------------------------------------------------
-    - if: *condition_not_24x
-      name: Linux Ubuntu, PCRE 1, GCC 7 maintainer-mode w/-Werror
-      os: linux
-      env: CONFIG="--enable-mods-shared=reallyall --with-pcre=/usr/bin/pcre-config --enable-maintainer-mode NOTEST_CFLAGS=-Werror CC=gcc-7"
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, GCC 8 maintainer-mode w/-Werror
-      env: CONFIG="--enable-mods-shared=reallyall --enable-maintainer-mode" NOTEST_CFLAGS='-Werror -O2' CC=gcc-8
-           SKIP_TESTING=1
-      addons:
-        apt:
-          packages:
-            - gcc-8
-            - libtool-bin
-            - libapr1-dev
-            - libaprutil1-dev
-            - perl-doc
-            - liblua5.3-dev
-            - libbrotli-dev
-            - libcurl4-openssl-dev
-            - libsystemd-dev
-            - libnghttp2-dev
-            - libjansson-dev
-            - libpcre2-dev
-            - libldap2-dev
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, GCC 9 maintainer-mode w/-Werror
-      env: CONFIG="--enable-mods-shared=reallyall --enable-maintainer-mode" NOTEST_CFLAGS='-Werror -O2' CC=gcc-9
-           SKIP_TESTING=1
-      addons:
-        apt:
-          sources:
-            - sourceline: 'ppa:ubuntu-toolchain-r/test'
-          packages:
-            - gcc-9
-            - libtool-bin
-            - libapr1-dev
-            - libaprutil1-dev
-            - perl-doc
-            - liblua5.3-dev
-            - libbrotli-dev
-            - libcurl4-openssl-dev
-            - libsystemd-dev
-            - libnghttp2-dev
-            - libjansson-dev
-            - libpcre2-dev
-            - libldap2-dev
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, GCC 10 maintainer-mode w/-Werror
-      env: CONFIG="--enable-mods-shared=reallyall --enable-maintainer-mode" NOTEST_CFLAGS='-Werror -O2' CC=gcc-10
-           SKIP_TESTING=1
-      addons:
-        apt:
-          sources:
-            - sourceline: 'ppa:ubuntu-toolchain-r/test'
-          packages:
-            - gcc-10
-            - libtool-bin
-            - libapr1-dev
-            - libaprutil1-dev
-            - perl-doc
-            - liblua5.3-dev
-            - libbrotli-dev
-            - libcurl4-openssl-dev
-            - libsystemd-dev
-            - libnghttp2-dev
-            - libjansson-dev
-            - libpcre2-dev
-            - libldap2-dev
-    # -------------------------------------------------------------------------
-    # MFLAGS= works around https://bz.apache.org/bugzilla/show_bug.cgi?id=63942
-    - if: *condition_not_24x
-      name: Linux Ubuntu, Regenerate ap_expr
-      os: linux
-      env: CONFIG="--enable-mods-shared=reallyall --enable-maintainer-mode NOTEST_CFLAGS=-Werror"
-           BUILDCONFIG="--with-regen-expr"
-           MFLAGS=
-    # -------------------------------------------------------------------------
-    - if: *condition_not_24x
-      name: Linux Ubuntu, APR trunk
-      env: APR_VERSION=trunk APR_CONFIG="--with-crypto"
-           CONFIG="--enable-mods-shared=reallyall"
-    # -------------------------------------------------------------------------
-    - if: *condition_24x_only
-      name: Linux Ubuntu Xenial, all-modules, system APR/APR-util
-      os: linux
-      dist: xenial
-      env: CONFIG="--enable-mods-shared=reallyall"
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu Xenial, all-modules, APR 1.7.0, APR-util 1.6.1
-      dist: xenial
-      env: APR_VERSION=1.7.0 APU_VERSION=1.6.1
-           CONFIG="--enable-mods-shared=reallyall"
-           APU_CONFIG="--with-crypto --with-ldap"
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu Focal, all-modules, system APR/APR-util
-      os: linux
-      dist: focal
-      env: CONFIG="--enable-mods-shared=reallyall"
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu Focal, all-modules, APR 1.7.0, APR-util 1.6.1
-      dist: focal
-      env: APR_VERSION=1.7.0 APU_VERSION=1.6.1
-           CONFIG="--enable-mods-shared=reallyall"
-           APU_CONFIG="--with-crypto --with-ldap"
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, APR 1.7.0, APR-util 1.6.1
-      env: APR_VERSION=1.7.0 APU_VERSION=1.6.1
-           CONFIG="--enable-mods-shared=reallyall"
-           APU_CONFIG="--with-crypto --with-ldap"
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, APR 1.7.x, APR-util 1.7.x
-      env: APR_VERSION=1.7.x APU_VERSION=1.7.x
-           CONFIG="--enable-mods-shared=reallyall"
-           APU_CONFIG="--with-crypto --with-ldap"
-           CLEAR_CACHE=1
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, pool-debug
-      env: APR_VERSION=1.7.x APR_CONFIG="--enable-pool-debug"
-           APU_VERSION=1.7.x APU_CONFIG="--with-crypto --with-ldap"
-           CONFIG="--enable-mods-shared=reallyall"
-           TEST_MALLOC=1
-           CLEAR_CACHE=1
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, Shared MPMs (event), pool-debug, SSL/TLS variants
-      env: APR_VERSION=1.7.x APR_CONFIG="--enable-pool-debug"
-           APU_VERSION=1.7.x APU_CONFIG="--with-crypto --with-ldap"
-           CONFIG="--enable-mods-shared=reallyall --enable-mpms-shared=all --with-mpm=event"
-           TEST_MALLOC=1 TEST_SSL=1
-           CLEAR_CACHE=1
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, Shared MPMs (worker), pool-debug, SSL/TLS variants
-      env: APR_VERSION=1.7.x APR_CONFIG="--enable-pool-debug"
-           APU_VERSION=1.7.x APU_CONFIG="--with-crypto --with-ldap"
-           CONFIG="--enable-mods-shared=reallyall --enable-mpms-shared=all --with-mpm=worker"
-           TEST_MALLOC=1 TEST_SSL=1
-           CLEAR_CACHE=1
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, Shared MPMs (prefork), pool-debug, SSL/TLS variants
-      env: APR_VERSION=1.7.x APR_CONFIG="--enable-pool-debug"
-           APU_VERSION=1.7.x APU_CONFIG="--with-crypto --with-ldap"
-           CONFIG="--enable-mods-shared=reallyall --enable-mpms-shared=all --with-mpm=prefork"
-           TEST_MALLOC=1 TEST_SSL=1
-           CLEAR_CACHE=1
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, APR trunk, minimal module set, OpenSSL 3.x
-      if: *condition_not_24x
-      env: APR_VERSION=trunk APR_CONFIG="--without-pgsql --without-mysql --without-odbc --with-crypto"
-           CONFIG="--enable-mods-shared=ssl --with-mpm=event"
-           TEST_SSL=1 TEST_OPENSSL3=3.0.7
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, APR trunk, minimal module set, OpenSSL 3.x -Werror
-      if: *condition_not_24x
-      env: APR_VERSION=trunk APR_CONFIG="--without-pgsql --without-mysql --without-odbc --with-crypto"
-           CONFIG="--enable-mods-shared=ssl --with-mpm=event"
-           TEST_OPENSSL3=3.0.7 SKIP_TESTING=1
-           NOTEST_CFLAGS="-Werror -Wno-deprecated-declarations"
-    # -------------------------------------------------------------------------
-    - if: *condition_24x_only
-      name: Linux Ubuntu, APR 1.7, minimal module set, OpenSSL 3.x
-      env: APR_VERSION=1.7.0
-           APU_VERSION=1.6.1 APU_CONFIG="--without-pgsql --without-mysql --without-odbc --with-crypto"
-           CONFIG="--enable-mods-shared=ssl --with-mpm=event"
-           TEST_SSL=1 TEST_OPENSSL3=3.0.7
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, MPMs [event, worker], core + HTTP/2 test suite
-      dist: focal
-      env: APR_VERSION=1.7.0
-           APU_VERSION=1.6.1 APU_CONFIG="--with-crypto"
-           CONFIG="--enable-mods-shared=reallyall --with-mpm=event --enable-mpms-shared=all"
-           NO_TEST_FRAMEWORK=1 TEST_INSTALL=1 TEST_H2=1 TEST_CORE=1
-      addons:
-        apt:
-          sources:
-            - sourceline: 'deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe'
-          packages:
-            - cpanminus
-            - libtool-bin
-            - libapr1-dev
-            - libaprutil1-dev
-            - perl-doc
-            - liblua5.3-dev
-            - libbrotli-dev
-            - libcurl4-openssl-dev
-            - libsystemd-dev
-            - libnghttp2-dev
-            - libjansson-dev
-            - libpcre2-dev
-            - libldap2-dev
-            - ldap-utils
-            - gdb
-            - curl
-            - python3-pytest
-            - nghttp2-client
-            - python3-cryptography
-            - python3-requests
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, event MPM, ACME test suite
-      dist: focal
-      env: APR_VERSION=1.7.0
-           APU_VERSION=1.6.1 APU_CONFIG="--with-crypto"
-           CONFIG="--enable-mods-shared=reallyall --with-mpm=event --enable-mpms-shared=event"
-           NO_TEST_FRAMEWORK=1 TEST_INSTALL=1 TEST_MD=1
-      addons:
-        apt:
-          sources:
-            - sourceline: 'deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe'
-          packages:
-            - cpanminus
-            - libtool-bin
-            - libapr1-dev
-            - libaprutil1-dev
-            - perl-doc
-            - liblua5.3-dev
-            - libbrotli-dev
-            - libcurl4-openssl-dev
-            - libsystemd-dev
-            - libnghttp2-dev
-            - libjansson-dev
-            - libpcre2-dev
-            - libldap2-dev
-            - ldap-utils
-            - gdb
-            - curl
-            - python3-pytest
-            - nghttp2-client
-            - python3-cryptography
-            - python3-requests
-            - golang-1.14
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, event MPM, MOD_TLS test suite
-      dist: focal
-      env: APR_VERSION=1.7.0
-           APU_VERSION=1.6.1 APU_CONFIG="--with-crypto"
-           CONFIG="--enable-mods-shared=reallyall --with-mpm=event --enable-mpms-shared=event"
-           NO_TEST_FRAMEWORK=1 TEST_INSTALL=1 TEST_MOD_TLS=1
-      addons:
-        apt:
-          sources:
-            - sourceline: 'deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe'
-          packages:
-            - cpanminus
-            - libtool-bin
-            - libapr1-dev
-            - libaprutil1-dev
-            - perl-doc
-            - liblua5.3-dev
-            - libbrotli-dev
-            - libcurl4-openssl-dev
-            - libsystemd-dev
-            - libnghttp2-dev
-            - libjansson-dev
-            - libpcre2-dev
-            - libldap2-dev
-            - ldap-utils
-            - gdb
-            - curl
-            - python3-pytest
-            - nghttp2-client
-            - python3-cryptography
-            - python3-requests
-            - cargo
-            - cbindgen
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, APR 1.7.0, APR-util 1.6.1, LDAP
-      env: APR_VERSION=1.7.0
-           APU_VERSION=1.6.1 APU_CONFIG="--with-crypto --with-ldap"
-           CONFIG="--enable-mods-shared=reallyall"
-           TEST_MALLOC=1 TEST_LDAP=1 TEST_ARGS="-defines LDAP"
-           TESTS="t/modules/"
-    # -------------------------------------------------------------------------
-    - name: Linux Ubuntu, litmus WebDAV tests
-      env: CONFIG="--enable-dav --enable-dav-fs"
-           LITMUS=1 TESTS="t/modules/dav.t"
-      addons:
-        apt:
-          update: false
-          sources:
-            - sourceline: 'deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe'
-          packages:
-            - cpanminus
-            - libtool-bin
-            - libapr1-dev
-            - libaprutil1-dev
-            - perl-doc
-            - liblua5.3-dev
-            - libbrotli-dev
-            - libcurl4-openssl-dev
-            - libsystemd-dev
-            - libnghttp2-dev
-            - libjansson-dev
-            - libpcre2-dev
-            - litmus
-    # -------------------------------------------------------------------------
-    - if: *condition_24x_only
-      name: Linux Ubuntu, APR 1.5.1, APR-util 1.5.4
-      env: APR_VERSION=1.5.1 APU_VERSION=1.5.4
-           CONFIG="--enable-mods-shared=reallyall"
-    # -------------------------------------------------------------------------
-    - if: *condition_24x_only
-      name: Linux Ubuntu, APR 1.4.8, APR-util 1.4.2
-      env: APR_VERSION=1.4.8 APU_VERSION=1.4.2
-           CONFIG="--enable-mods-shared=reallyall"
-    # -------------------------------------------------------------------------
-    - if: *condition_not_24x
-      name: Linux Ubuntu Focal, UBSan
-      dist: focal
-      env: NOTEST_CFLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined" NOTEST_LIBS=-lubsan
-           CONFIG="--enable-mods-shared=reallyall --disable-http2"
-           TEST_UBSAN=1
-    # -------------------------------------------------------------------------
-    # LeakSanitizer segfaults some{how,times}..
-    - name: Linux Ubuntu Focal, ASan
-      dist: focal
-      env: NOTEST_CFLAGS="-ggdb -fsanitize=address -fno-sanitize-recover=address -fno-omit-frame-pointer"
-           APR_VERSION=1.7.x
-           APU_VERSION=1.7.x APU_CONFIG="--with-crypto --with-ldap"
-           CONFIG="--enable-mods-shared=reallyall"
-           TEST_ASAN=1 ASAN_OPTIONS="detect_leaks=0"
-           CLEAR_CACHE=1
-    # -------------------------------------------------------------------------
-    # LeakSanitizer segfaults some{how,times}..
-    - name: Linux Ubuntu Focal, ASan, pool-debug
-      dist: focal
-      env: NOTEST_CFLAGS="-ggdb -fsanitize=address -fno-sanitize-recover=address -fno-omit-frame-pointer"
-           APR_VERSION=1.7.x APR_CONFIG="--enable-pool-debug"
-           APU_VERSION=1.7.x APU_CONFIG="--with-crypto --with-ldap"
-           CONFIG="--enable-mods-shared=reallyall"
-           TEST_ASAN=1 ASAN_OPTIONS="detect_leaks=0"
-           CLEAR_CACHE=1
-  allow_failures:
-    # Intermittent failures:
-    - env: CONFIG="--enable-mods-shared=reallyall --with-mpm=worker"
-    # Currently broken:
-    - env: CONFIG="--enable-mods-shared=reallyall --with-mpm=event --disable-cgi --enable-cgid-fdpassing"
-    # Non-x86 are sometimes flaky:
-    - arch: s390x
-      env: CONFIG="--enable-mods-shared=reallyall"
-    - arch: arm64
-      env: CONFIG="--enable-mods-shared=reallyall"
-    - arch: ppc64le
-      env: CONFIG="--enable-mods-shared=reallyall"
-
-# CPAN modules are to be used with the system Perl and always with
-# CC=gcc, e.g. for the CC="gcc -m32" case the builds are not correct
-# otherwise.
-before_install:
-  - if [ "$TRAVIS_OS_NAME" = "linux" -a ! -v SKIP_TESTING ]; then
-        if [ -v CLEAR_CACHE ]; then rm -rf ~/perl5; fi;
-        cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib);
-        CC=gcc cpanm --notest Net::SSL LWP::Protocol::https LWP::Protocol::AnyEvent::http ExtUtils::Embed Test::More AnyEvent DateTime HTTP::DAV Protocol::HTTP2::Client FCGI AnyEvent::WebSocket::Client Apache::Test;
-    fi
-
-before_script:
-  - ./test/travis_before_${TRAVIS_OS_NAME}.sh
-
-script:
-  - ./test/travis_run_${TRAVIS_OS_NAME}.sh
-
-# Send notifications by default to IRC and dev@, for everything but
-# forks, otherwise any build from a fork will spam the list with CI
-# results.
-notifications:
-  irc:
-    if: fork = false
-    channels:
-      - "irc.libera.chat#httpd-dev"
-  email:
-    if: fork = false
-    recipients:
-      - dev@httpd.apache.org
similarity index 52%
rename from test/README.travis
rename to test/README.ci
index 2806a5fafe4693970331f3c24d695d01e9c6990e..43600b00e6deef2074d5965a17952da4fdd6f211 100644 (file)
@@ -2,7 +2,7 @@
 Variables
 ---------
 
-The Travis scripts use the following environment variables:
+The CI scripts use the following environment variables:
 
 * APR_VERSION - if set, APR of this version is built and installed in
   $HOME/root/apr-$APR_VERSION - a value of "trunk" means trunk is
@@ -44,7 +44,9 @@ The Travis scripts use the following environment variables:
 
 * TEST_ARGS - arguments to pass to ./t/TEST in the Perl test framework
 
-Caching
+* CLEAR_CACHE - if set, the cached $HOME/root is removed before each build
+
+Caching -- NOTE, BROKEN IN GITHUB ACTIONS --
 -------
 
 Perl modules installed in $HOME/perl5 are cached.
@@ -53,27 +55,72 @@ Anything installed into the $HOME/root directory is cached - notably,
 versions of APR/APR-util are installed here and cached across httpd
 build jobs without needing to be rebuilt every time.
 
+The cached installs of APR/APR-util are refreshed if the
+last-changed-revision of the build is stale.
+
+If APR_VERSION and APU_VERSION are both set to 1.x versions, then
+CLEAR_CACHE should also be set to disable APR* caching.  APR-util can
+only be rebuilt if an APR checkout is present, so a APR-util cannot be
+built from source alone.  (i.e. the scripts do not handle the case of
+cached, fresh APR plus a cached but stale APR-util)
+
+Travis to Github Actions Migration TODO
+---------------------------------------
+
+* better path filtering so e.g. CHANGES changes don't trigger CI
+* support branch conditionals again (some tests are 2.4.x only, some trunk only)
+* make caching work properly for APR + CPAN modules
+  - this is using the wrong model at the moment
+  - the cache key needs to be based off (source code, job configuration)
+  - rather than done on the fly in test/travis_before_linux.sh
+  - pebble + Rustls builds should also be cached
+* turn on failure notifications?
+* test across different Ubuntu versions again
+ - and test against OpenSSL 1.x since we're now ONLY building against 3.x
+* update the docs below for testing from PRs/feature branches
+* introduce some job ordering rather than having a flat/concurrent
+  set, if the default "./configure && make && test" works *then* start
+  jobs doing 200 different variations on ./configure --enable-XXX 
+  i.e. stop burning CPU time for a typo which breaks every job
+
 TODO list
 ---------
 
+* non-x86 builds
 * MacOS build
 * Windows build
 * clang-on-Linux build
 * Use containers for non-Ubuntu-based Linux testing
-* sanity checks for use of APLOGNO() - empty arguments, accidental duplicates, etc.
- - not sure how exactly
-* Known test failures
- - "apt-get install" timeout/fails - workaround by moving apt install to before_script phase?
 
-Testing from a Feature Branch
+Known Failures
+--------------
+
+Some known failures:
+
+* prefork, and more rarely non-prefork testing sometimes catches child
+  segfaults under pool-debug from assert()s in (e.g.)
+  __pthread_tpp_change_priority where one child is destroying threads
+  which another is waiting for, or iterating through via
+  apr_pool_walk_tree().
+
+  See dev@httpd threads:
+  msg <5f4abde1b5789_13fde2ecacb40795a1@travis-tasks-5b566d48fc-drkb9.mail>
+  msg <73060f7b-df7f-ad3c-a9fa-dd666a59b31e@kippdata.de> and
+  https://bz.apache.org/bugzilla/show_bug.cgi?id=63098
+  https://bz.apache.org/bugzilla/show_bug.cgi?id=46185
+
+  Not clear if there is a real bug here which can be reproduced
+  outside of pool-debug.
+
+Testing from a Feature Branch [*** N/A FOR GITHUB ACTIONS ***]
 -----------------------------
 
 An SVN branch off trunk should be mirrored to github, and will be
-tested in the same way that trunk is in Travis, so this workflow is
+tested in the same way that trunk is in CI, so this workflow is
 available for those familiar with using Subversion and the standard
 ASF/httpd repository layout.
 
-Tested branches are listed at: https://travis-ci.org/github/apache/httpd/branches
+Tested branches are listed at: https://travis-ci.com/github/apache/httpd/branches
 
 Travis will also run the tests for a PR filed against the httpd Github
 repository at https://github.com/apache/httpd or from a fork of this
@@ -91,16 +138,17 @@ $USERNAME for your github username:
   $ git push -u $USERNAME my-feature:my-feature
 
 To enable testing for a fork, visit the settings page at
-https://travis-ci.org/$USERNAME/httpd/settings - you may need to sync
-your account via https://travis-ci.org/account/repositories for a
+https://travis-ci.com/$USERNAME/httpd/settings - you may need to sync
+your account via https://travis-ci.com/account/repositories for a
 freshly created fork.
 
-To create a Pull Request, go to a URL like:
+To create a Pull Request, go to the URL produced in the "git push"
+command output when pushing to your fork, which is something like:
 https://github.com/apache/httpd/compare/trunk...$USERNAME:trunk
 
 Once a PR has been created, travis will run the tests and link the
 results from a PR comment. All tested PRs are listed here:
-https://travis-ci.org/github/apache/httpd/pull_requests
+https://travis-ci.com/github/apache/httpd/pull_requests
 
 To merge from github back to SVN trunk, create a patch from e.g.:
 
index 7f4f9b53b3ceeb7db1cf20d36df4ce40f8b7aeec..bc4d65942b3cfa9a9f47f9d696e8fca0f85bbd51 100755 (executable)
@@ -68,9 +68,9 @@ function install_apx() {
 
     local revision=`svn info --show-item last-changed-revision ${url}`
 
-    # Blow away the cached install root if the revision does not
-    # match.
-    test -f ${prefix}/.revision-is-${revision} || rm -rf ${prefix}
+    # Blow away the cached install root if the cached install is stale
+    # or doesn't match the expected configuration.
+    grep -q "${version} ${revision} ${config} CC=$CC" ${HOME}/root/.key-${name} || rm -rf ${prefix}
 
     if test -d ${prefix}; then
         return 0
@@ -84,13 +84,33 @@ function install_apx() {
          make install
     popd
 
-    touch ${prefix}/.revision-is-${revision}
+    echo ${version} ${revision} "${config}" "CC=${CC}" > ${HOME}/root/.key-${name}
 }
 
+# Allow to load $HOME/build/apache/httpd/.gdbinit
+echo "add-auto-load-safe-path $HOME/build/apache/httpd/.gdbinit" >> $HOME/.gdbinit
 
+# Prepare perl-framework test environment
 if ! test -v SKIP_TESTING; then
-    ### Temporary: purge old svn checkout from the cache
-    rm -rf $HOME/root/framework
+    # Clear CPAN cache if necessary
+    if [ -v CLEAR_CACHE ]; then rm -rf ~/perl5; fi
+    
+    cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
+
+    pkgs="Net::SSL LWP::Protocol::https                                 \
+           LWP::Protocol::AnyEvent::http ExtUtils::Embed Test::More     \
+           AnyEvent DateTime HTTP::DAV FCGI                             \
+           AnyEvent::WebSocket::Client Apache::Test"
+
+    # CPAN modules are to be used with the system Perl and always with
+    # CC=gcc, e.g. for the CC="gcc -m32" case the builds are not correct
+    # otherwise.
+    CC=gcc cpanm --notest $pkgs
+
+    # Set cache key.
+    echo $pkgs > ~/perl5/.key
+    unset pkgs
+
     # Make a shallow clone of httpd-tests git repo.
     git clone --depth=1 https://github.com/apache/httpd-tests.git test/perl-framework
 fi
index fd13385e7cebbd4637fe8a028d62be6931720c48..58370700437f14dfbe8e8bfb7eeb224cc04d3a67 100755 (executable)
@@ -39,6 +39,9 @@ if test ! -v SKIP_TESTING; then
         CONFIG="--with-test-suite=test/perl-framework $CONFIG"
         WITH_TEST_SUITE=1
     fi
+
+    # Use the CPAN environment.
+    eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
 fi
 if test -v APR_VERSION; then
     CONFIG="$CONFIG --with-apr=$HOME/root/apr-${APR_VERSION}"
@@ -191,7 +194,6 @@ if ! test -v SKIP_TESTING; then
         # Run ACME tests.
         # need the go based pebble as ACME test server
         # which is a package on debian sid, but not on focal
-        export GOROOT=/usr/lib/go-1.14
         export GOPATH=${PREFIX}/gocode
         mkdir -p "${GOPATH}"
         export PATH="${GOROOT}/bin:${GOPATH}/bin:${PATH}"