From 94023eb23329eb53cb0b164487afb85925e89c51 Mon Sep 17 00:00:00 2001 From: Melih Mutlu Date: Fri, 2 Sep 2022 23:10:02 +0300 Subject: [PATCH 1/2] Added Windows with MinGW environment in Cirrus CI CI task on Windows Server with MinGW has been added as optional. --- .cirrus.yml | 103 ++++++++++++++++++++++++++------ src/tools/ci/cores_backtrace.sh | 17 +++++- 2 files changed, 100 insertions(+), 20 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index a9193c2c34f..60f9ae2b65c 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -34,6 +34,7 @@ on_failure: &on_failure - "**/*.log" - "**/*.diffs" - "**/regress_log_*" + - "**/*.stackdump" type: text/plain task: @@ -339,13 +340,33 @@ task: cores_script: src/tools/ci/cores_backtrace.sh macos "${HOME}/cores" +WINDOWS_ENVIRONMENT_BASE: &WINDOWS_ENVIRONMENT_BASE + env: + # Half the allowed per-user CPU cores + CPUS: 4 + # The default working dir is in a directory msbuild complains about + CIRRUS_WORKING_DIR: "c:/cirrus" + + # Avoids port conflicts between concurrent tap test runs + PG_TEST_USE_UNIX_SOCKETS: 1 + + # git's tar doesn't deal with drive letters, see + # https://postgr.es/m/b6782dc3-a7b0-ed56-175f-f8f54cb08d67%40dunslane.net + TAR: "c:/windows/system32/tar.exe" + + sysinfo_script: | + chcp + systeminfo + powershell -Command get-psdrive -psprovider filesystem + set + task: + << : *WINDOWS_ENVIRONMENT_BASE name: Windows - Server 2019, VS 2019 - env: - # Half the allowed per-user CPU cores - CPUS: 4 + only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*windows.*' + env: # 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 @@ -355,15 +376,9 @@ task: # likely can be improved upon further. PROVE_FLAGS: -j10 --timer - # The default cirrus working dir is in a directory msbuild complains about - CIRRUS_WORKING_DIR: "c:/cirrus" # Avoid re-installing over and over NO_TEMP_INSTALL: 1 - # git's tar doesn't deal with drive letters, see - # https://postgr.es/m/b6782dc3-a7b0-ed56-175f-f8f54cb08d67%40dunslane.net - TAR: "c:/windows/system32/tar.exe" - # 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 @@ -387,8 +402,6 @@ task: # currently have a tool for that... CIRRUS_ESCAPING_PROCESSES: 1 - only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*windows.*' - windows_container: #image: $CONTAINER_REPO/windows_ci_vs_2019:latest #image: cirrusci/windowsservercore:visualstudio2019-2021.12.07 @@ -398,12 +411,6 @@ task: cpu: $CPUS memory: 4G - sysinfo_script: | - chcp - systeminfo - powershell -Command get-psdrive -psprovider filesystem - set - setup_additional_packages_script: | REM 3min REM choco install -y --no-progress --version=1.0.0 visualstudio2022-workload-vctools --install-args="--add Microsoft.VisualStudio.Component.VC.CLI.Support" @@ -475,6 +482,66 @@ task: path: "crashlog-*.txt" type: text/plain +task: + << : *WINDOWS_ENVIRONMENT_BASE + name: Windows - Server 2019, MinGW64 + + only_if: $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-include:[^\n]*mingw.* || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*mingw.*' + + windows_container: + image: $CONTAINER_REPO/windows_ci_mingw64:latest + cpu: $CPUS + memory: 4G + env: + CCACHE_DIR: C:/msys64/ccache + BUILD_DIR: "%CIRRUS_WORKING_DIR%/build" + + ccache_cache: + folder: ${CCACHE_DIR} + + setup_additional_packages_script: | + REM C:\msys64\usr\bin\pacman.exe -S --noconfirm ... + + mingw_info_script: + - C:\msys64\usr\bin\dash.exe -lc "where gcc" + - C:\msys64\usr\bin\dash.exe -lc "gcc --version" + - C:\msys64\usr\bin\dash.exe -lc "where perl" + - C:\msys64\usr\bin\dash.exe -lc "perl --version" + + configure_script: + # Try to configure with the cache file, and retry without if it fails, in case the flags changed. + - C:\msys64\usr\bin\dash.exe -lc "mkdir %BUILD_DIR% && + cd %BUILD_DIR% && for i in 1 2; do + %CIRRUS_WORKING_DIR%/configure + --cache-file=${CCACHE_DIR}/configure.cache + --enable-cassert + --enable-debug + --enable-tap-tests + --with-icu + --with-libxml + --with-libxslt + --with-lz4 + CC='ccache gcc' + CXX='ccache g++' + CFLAGS='-Og -ggdb -pipe' + CXXFLAGS='-Og -ggdb' && break; + rm -v ${CCACHE_DIR}/configure.cache; + done + " + + build_script: + C:\msys64\usr\bin\dash.exe -lc "cd %BUILD_DIR% && make -s world-bin -j${CPUS}" + + upload_caches: ccache + + tests_script: + - set "NoDefaultCurrentDirectoryInExePath=0" + - C:\msys64\usr\bin\dash.exe -lc "cd %BUILD_DIR% && make -s ${CHECK} ${CHECKFLAGS} -j${CPUS} TMPDIR=%BUILD_DIR%/tmp_install" + + on_failure: + <<: *on_failure + cores_script: + - C:\tools\cygwin\bin\dash.exe --login -c "cd '%cd%' && src/tools/ci/cores_backtrace.sh msys ." task: name: CompilerWarnings diff --git a/src/tools/ci/cores_backtrace.sh b/src/tools/ci/cores_backtrace.sh index 28d3cecfc67..93e90f284e6 100755 --- a/src/tools/ci/cores_backtrace.sh +++ b/src/tools/ci/cores_backtrace.sh @@ -10,11 +10,24 @@ directory=$2 case $os in freebsd|linux|macos) - ;; + ;; + + msys) + # XXX Evidently I don't know how to write two arguments here without pathname expansion later, other than eval. + #findargs='-name "*.stackdump"' + for corefile in $(find "$directory" -type f -name "*.stackdump") ; do + binary=`basename "$corefile" .stackdump` + echo;echo; + echo "dumping ${corefile} for ${binary}" + awk '/^0/{print $2}' $corefile |addr2line -f -i -e ./src/backend/postgres.exe + done + exit 0 + ;; + *) echo "unsupported operating system ${os}" exit 1 - ;; + ;; esac first=1 -- 2.17.1