aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.cirrus.yml310
1 files changed, 135 insertions, 175 deletions
diff --git a/.cirrus.yml b/.cirrus.yml
index fe8da021eda..f7868c358ef 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -22,13 +22,14 @@ env:
CHECK: check-world PROVE_FLAGS=$PROVE_FLAGS
CHECKFLAGS: -Otarget
PROVE_FLAGS: --timer
+ MTEST_ARGS: --print-errorlogs --no-rebuild -C build
PGCTLTIMEOUT: 120 # avoids spurious failures during parallel tests
TEMP_CONFIG: ${CIRRUS_WORKING_DIR}/src/tools/ci/pg_ci_base.conf
PG_TEST_EXTRA: kerberos ldap ssl
# What files to preserve in case tests fail
-on_failure: &on_failure
+on_failure_ac: &on_failure_ac
log_artifacts:
paths:
- "**/*.log"
@@ -36,8 +37,26 @@ on_failure: &on_failure
- "**/regress_log_*"
type: text/plain
+on_failure_meson: &on_failure_meson
+ testrun_artifacts:
+ paths:
+ - "build/testrun/**/*.log"
+ - "build/testrun/**/*.diffs"
+ - "build/testrun/**/regress_log_*"
+ type: text/plain
+
+ # In theory it'd be nice to upload the junit files meson generates, so that
+ # cirrus will nicely annotate the commit. Unfortunately the files don't
+ # contain identifieable file + line numbers right now, so the annotations
+ # don't end up useful. We could probably improve on that with a some custom
+ # conversion script, but ...
+ meson_log_artifacts:
+ path: "build/meson-logs/*.txt"
+ type: text/plain
+
+
task:
- name: FreeBSD - 13
+ name: FreeBSD - 13 - Meson
env:
# FreeBSD on GCP is slow when running with larger number of CPUS /
@@ -47,6 +66,7 @@ task:
TEST_JOBS: 3
CCACHE_DIR: /tmp/ccache_dir
+ CFLAGS: -Og -ggdb
only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*freebsd.*'
@@ -80,48 +100,28 @@ task:
setup_additional_packages_script: |
#pkg install -y ...
- # NB: Intentionally build without --with-llvm. The freebsd image size is
- # already large enough to make VM startup slow, and even without llvm
- # freebsd already takes longer than other platforms except for windows.
+ # NB: Intentionally build without -Dllvm. The freebsd image size is already
+ # large enough to make VM startup slow, and even without llvm freebsd
+ # already takes longer than other platforms except for windows.
configure_script: |
su postgres <<-EOF
- ./configure \
- --enable-cassert --enable-debug --enable-tap-tests \
- --enable-nls \
- \
- --with-gssapi \
- --with-icu \
- --with-ldap \
- --with-libxml \
- --with-libxslt \
- --with-lz4 \
- --with-pam \
- --with-perl \
- --with-python \
- --with-ssl=openssl \
- --with-tcl --with-tclconfig=/usr/local/lib/tcl8.6/ \
- --with-uuid=bsd \
- --with-zstd \
- \
- --with-includes=/usr/local/include \
- --with-libs=/usr/local/lib \
- \
- CC="ccache cc" \
- CXX="ccache c++" \
- CFLAGS="-Og -ggdb"
+ meson setup \
+ --buildtype=debug \
+ -Dcassert=true -Dssl=openssl -Duuid=bsd -Dtcl_version=tcl86 -Ddtrace=auto \
+ -DPG_TEST_EXTRA="$PG_TEST_EXTRA" \
+ build
EOF
- build_script: su postgres -c "gmake -s -j${BUILD_JOBS} world-bin"
+ build_script: su postgres -c 'ninja -C build -j${BUILD_JOBS}'
upload_caches: ccache
- # The use of script avoids make -Otarget complaints about fcntl() on
- # platforms without support for locking pipes. See also
- # https://savannah.gnu.org/bugs/?60774
- # script uses pseudo-ttys, which do support locking.
- test_world_script:
- - su postgres -c "time script test.log gmake -s -j${TEST_JOBS} ${CHECK} ${CHECKFLAGS}"
+ test_world_script: |
+ su postgres <<-EOF
+ ulimit -c unlimited
+ meson test $MTEST_ARGS --num-processes ${TEST_JOBS}
+ EOF
on_failure:
- <<: *on_failure
+ <<: *on_failure_meson
cores_script: src/tools/ci/cores_backtrace.sh freebsd /tmp/cores
@@ -145,10 +145,13 @@ LINUX_CONFIGURE_FEATURES: &LINUX_CONFIGURE_FEATURES >-
--with-uuid=ossp
--with-zstd
+LINUX_MESON_FEATURES: &LINUX_MESON_FEATURES >-
+ -Dllvm=enabled
+ -Dssl=openssl
+ -Duuid=e2fs
-task:
- name: Linux - Debian Bullseye
+task:
env:
CPUS: 4
BUILD_JOBS: 4
@@ -157,7 +160,13 @@ task:
CCACHE_DIR: /tmp/ccache_dir
DEBUGINFOD_URLS: "https://debuginfod.debian.net"
+ CFLAGS: -Og -ggdb
+ CXXFLAGS: -Og -ggdb
+ CC: ccache gcc
+ CXX: ccache g++
+
LINUX_CONFIGURE_FEATURES: *LINUX_CONFIGURE_FEATURES
+ LINUX_MESON_FEATURES: *LINUX_MESON_FEATURES
only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*linux.*'
@@ -192,36 +201,61 @@ task:
#apt-get update
#DEBIAN_FRONTEND=noninteractive apt-get -y install ...
- configure_script: |
- su postgres <<-EOF
- ./configure \
- --enable-cassert --enable-debug --enable-tap-tests \
- --enable-nls \
- \
- ${LINUX_CONFIGURE_FEATURES} \
- \
- CC="ccache gcc" \
- CXX="ccache g++" \
- CLANG="ccache clang" \
- CFLAGS="-Og -ggdb" \
- CXXFLAGS="-Og -ggdb"
- EOF
- build_script: su postgres -c "make -s -j${BUILD_JOBS} world-bin"
- upload_caches: ccache
-
- test_world_script: |
- su postgres <<-EOF
- ulimit -c unlimited # default is 0
- make -s ${CHECK} ${CHECKFLAGS} -j${TEST_JOBS}
- EOF
+ matrix:
+ - name: Linux - Debian Bullseye - Autoconf
+
+ configure_script: |
+ su postgres <<-EOF
+ ./configure \
+ --enable-cassert --enable-debug --enable-tap-tests \
+ --enable-nls \
+ \
+ ${LINUX_CONFIGURE_FEATURES} \
+ \
+ CLANG="ccache clang"
+ EOF
+ build_script: su postgres -c "make -s -j${BUILD_JOBS} world-bin"
+ upload_caches: ccache
+
+ test_world_script: |
+ su postgres <<-EOF
+ ulimit -c unlimited # default is 0
+ make -s ${CHECK} ${CHECKFLAGS} -j${TEST_JOBS}
+ EOF
+
+ on_failure:
+ <<: *on_failure_ac
+
+ - name: Linux - Debian Bullseye - Meson
+
+ configure_script: |
+ su postgres <<-EOF
+ meson setup \
+ --buildtype=debug \
+ -Dcassert=true \
+ ${LINUX_MESON_FEATURES} \
+ -DPG_TEST_EXTRA="$PG_TEST_EXTRA" \
+ build
+ EOF
+
+ build_script: su postgres -c 'ninja -C build -j${BUILD_JOBS}'
+ upload_caches: ccache
+
+ test_world_script: |
+ su postgres <<-EOF
+ ulimit -c unlimited
+ meson test $MTEST_ARGS --num-processes ${TEST_JOBS}
+ EOF
+
+ on_failure:
+ <<: *on_failure_meson
on_failure:
- <<: *on_failure
cores_script: src/tools/ci/cores_backtrace.sh linux /tmp/cores
task:
- name: macOS - Monterey
+ name: macOS - Monterey - Meson
env:
CPUS: 12 # always get that much for cirrusci macOS instances
@@ -233,6 +267,11 @@ task:
HOMEBREW_CACHE: ${HOME}/homebrew-cache
PERL5LIB: ${HOME}/perl5/lib/perl5
+ CC: ccache cc
+ CXX: ccache c++
+ CFLAGS: -Og -ggdb
+ CXXFLAGS: -Og -ggdb
+
only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*(macos|darwin|osx).*'
osx_instance:
@@ -269,6 +308,7 @@ task:
llvm \
lz4 \
make \
+ meson \
openldap \
openssl \
python \
@@ -282,77 +322,45 @@ task:
folder: $CCACHE_DIR
configure_script: |
brewpath="/usr/local"
- INCLUDES="${brewpath}/include:${INCLUDES}"
- LIBS="${brewpath}/lib:${LIBS}"
+ PKG_CONFIG_PATH="${brewpath}/lib/pkgconfig:${PKG_CONFIG_PATH}"
for pkg in icu4c krb5 openldap openssl zstd ; do
pkgpath="${brewpath}/opt/${pkg}"
- INCLUDES="${pkgpath}/include:${INCLUDES}"
- LIBS="${pkgpath}/lib:${LIBS}"
PKG_CONFIG_PATH="${pkgpath}/lib/pkgconfig:${PKG_CONFIG_PATH}"
+ PATH="${pkgpath}/bin:${pkgpath}/sbin:$PATH"
done
- export PKG_CONFIG_PATH
-
- ./configure \
- --enable-cassert --enable-debug --enable-tap-tests \
- --enable-nls \
- \
- --with-bonjour \
- --with-gssapi \
- --with-icu \
- --with-ldap \
- --with-libxml \
- --with-libxslt \
- --with-lz4 \
- --with-perl \
- --with-python \
- --with-ssl=openssl \
- --with-tcl --with-tclconfig=${brewpath}/opt/tcl-tk/lib/ \
- --with-uuid=e2fs \
- --with-zstd \
- \
- --prefix=${HOME}/install \
- --with-includes="${INCLUDES}" \
- --with-libs="${LIBS}" \
- \
- CC="ccache cc" \
- CXX="ccache c++" \
- CLANG="ccache ${brewpath}/llvm/bin/ccache" \
- CFLAGS="-Og -ggdb" \
- CXXFLAGS="-Og -ggdb" \
- \
- LLVM_CONFIG=${brewpath}/llvm/bin/llvm-config \
- PYTHON=python3
- build_script: gmake -s -j${BUILD_JOBS} world-bin
+ export PKG_CONFIG_PATH PATH
+
+ meson setup \
+ --buildtype=debug \
+ -Dextra_include_dirs=${brewpath}/include \
+ -Dextra_lib_dirs=${brewpath}/lib \
+ -Dcassert=true \
+ -Dssl=openssl -Duuid=e2fs -Ddtrace=auto \
+ -DPG_TEST_EXTRA="$PG_TEST_EXTRA" \
+ build
+
+ build_script: ninja -C build -j${BUILD_JOBS}
upload_caches: ccache
test_world_script: |
ulimit -c unlimited # default is 0
ulimit -n 1024 # default is 256, pretty low
- # See freebsd use of script for explanation
- script test.log gmake -s -j${TEST_JOBS} ${CHECK} ${CHECKFLAGS}
+ meson test $MTEST_ARGS --num-processes ${TEST_JOBS}
on_failure:
- <<: *on_failure
+ <<: *on_failure_meson
cores_script: src/tools/ci/cores_backtrace.sh macos "${HOME}/cores"
task:
- name: Windows - Server 2019, VS 2019
+ name: Windows - Server 2019, VS 2019 - Meson & ninja
env:
# Half the allowed per-user CPU cores
CPUS: 4
-
- # Our windows infrastructure doesn't have test concurrency above the level
- # of a single vcregress test target. Due to that, it's useful to run prove
- # with multiple jobs. For the other tasks it isn't, because two sources
- # (make and prove) of concurrency can overload machines.
- #
- # The concrete choice of 10 is based on a small bit of experimentation and
- # likely can be improved upon further.
- PROVE_FLAGS: -j10 --timer
+ TEST_JOBS: 8 # wild guess, data based value welcome
# The default cirrus working dir is in a directory msbuild complains about
CIRRUS_WORKING_DIR: "c:/cirrus"
@@ -364,20 +372,6 @@ task:
# Avoids port conflicts between concurrent tap test runs
PG_TEST_USE_UNIX_SOCKETS: 1
PG_REGRESS_SOCK_DIR: "c:/cirrus/"
- # -m enables parallelism
- # verbosity:minimal + Summary reduce verbosity, while keeping a summary of
- # errors/warnings
- # ForceNoAlign prevents msbuild from introducing line-breaks for long lines
- # disable file tracker, we're never going to rebuild, and it slows down the
- # build
- MSBFLAGS: -m -verbosity:minimal "-consoleLoggerParameters:Summary;ForceNoAlign" /p:TrackFileAccess=false -nologo
-
- # If tests hang forever, cirrus eventually times out. In that case log
- # output etc is not uploaded, making the problem hard to debug. Of course
- # tests internally should have shorter timeouts, but that's proven to not
- # be sufficient. 15min currently is fast enough to finish individual test
- # "suites".
- T_C: "\"C:/Program Files/Git/usr/bin/timeout.exe\" -v -k60s 15m"
# startcreate_script starts a postgres instance that we don't want to get
# killed at the end of that script (it's stopped in stop_script). Can't
@@ -411,56 +405,21 @@ task:
setup_additional_packages_script: |
REM choco install -y --no-progress ...
- configure_script:
- # copy errors out when using forward slashes
- - copy src\tools\ci\windows_build_config.pl src\tools\msvc\config.pl
- - vcvarsall x64
- - perl src/tools/msvc/mkvcbuild.pl
- build_script:
- - vcvarsall x64
- - msbuild %MSBFLAGS% pgsql.sln
- tempinstall_script:
- # Installation on windows currently only completely works from src/tools/msvc
- - cd src/tools/msvc && perl install.pl %CIRRUS_WORKING_DIR%/tmp_install
-
- test_regress_parallel_script: |
- %T_C% perl src/tools/msvc/vcregress.pl check parallel
- startcreate_script: |
- rem paths to binaries need backslashes
- tmp_install\bin\pg_ctl.exe initdb -D tmp_check/db -l tmp_check/initdb.log --options=--no-sync
- echo include '%TEMP_CONFIG%' >> tmp_check/db/postgresql.conf
- tmp_install\bin\pg_ctl.exe start -D tmp_check/db -l tmp_check/postmaster.log
-
- test_pl_script: |
- %T_C% perl src/tools/msvc/vcregress.pl plcheck
- test_isolation_script: |
- %T_C% perl src/tools/msvc/vcregress.pl isolationcheck
- test_modules_script: |
- %T_C% perl src/tools/msvc/vcregress.pl modulescheck
- test_contrib_script: |
- %T_C% perl src/tools/msvc/vcregress.pl contribcheck
- stop_script: |
- tmp_install\bin\pg_ctl.exe stop -D tmp_check/db -l tmp_check/postmaster.log
- test_ssl_script: |
- set with_ssl=openssl
- %T_C% perl src/tools/msvc/vcregress.pl taptest ./src/test/ssl/
- test_subscription_script: |
- %T_C% perl src/tools/msvc/vcregress.pl taptest ./src/test/subscription/
- test_authentication_script: |
- %T_C% perl src/tools/msvc/vcregress.pl taptest ./src/test/authentication/
- test_recovery_script: |
- %T_C% perl src/tools/msvc/vcregress.pl recoverycheck
- test_bin_script: |
- %T_C% perl src/tools/msvc/vcregress.pl bincheck
- test_ecpg_script: |
- rem tries to build additional stuff
+ # Use /DEBUG:FASTLINK to avoid high memory usage during linking
+ configure_script: |
+ vcvarsall x64
+ meson setup --backend ninja --buildtype debug -Dc_link_args=/DEBUG:FASTLINK -Dcassert=true -Dssl=openssl -Dextra_lib_dirs=c:\openssl\1.1\lib -Dextra_include_dirs=c:\openssl\1.1\include -DTAR=c:/windows/system32/tar.exe -DPG_TEST_EXTRA="%PG_TEST_EXTRA%" build
+
+ build_script: |
+ vcvarsall x64
+ ninja -C build
+
+ check_world_script: |
vcvarsall x64
- rem References ecpg_regression.proj in the current dir
- cd src/tools/msvc
- %T_C% perl vcregress.pl ecpgcheck
+ meson test %MTEST_ARGS% --num-processes %TEST_JOBS%
on_failure:
- <<: *on_failure
+ <<: *on_failure_meson
crashlog_artifacts:
path: "crashlog-*.txt"
type: text/plain
@@ -471,7 +430,7 @@ task:
# To limit unnecessary work only run this once the normal linux test succeeds
depends_on:
- - Linux - Debian Bullseye
+ - Linux - Debian Bullseye - Meson
env:
CPUS: 4
@@ -483,6 +442,7 @@ task:
CCACHE_DIR: "/tmp/ccache_dir"
LINUX_CONFIGURE_FEATURES: *LINUX_CONFIGURE_FEATURES
+ LINUX_MESON_FEATURES: *LINUX_MESON_FEATURES
# task that did not run, count as a success, so we need to recheck Linux'
# condition here ...