Inline notes about changes since the last version.
On Thu, Jul 28, 2022 at 05:44:28PM -0500, Justin Pryzby wrote:
> I think the "only_if" should allow separately running one but not both of the
> windows instances, like:
>
> + only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' ||
> $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*mingw64'
>
> I'm not sure, but maybe this task should only run "by request", and omit the
> first condition:
>
> + only_if: $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*mingw64'
The patch shouldn't say this during development, or else cfbot doesn't run it..
Oops.
> I think it should include something like
>
> + setup_additional_packages_script: |
> + REM C:\msys64\usr\bin\pacman.exe -S --noconfirm ...
>
> Let's see what others think about those.
>
> Do you know if this handles logging of crash dumps ?
It does now, although I hardcoded "postgres.exe" ...
> + setup_additional_packages_script: |
> + REM C:\msys64\usr\bin\pacman.exe -S --noconfirm busybox
This should include choco, too.
> - CXXFLAGS='-Og -ggdb'"
> + CXXFLAGS='-Og -ggdb' && break;
> + rm -v ${CCACHE_DIR}/configure.cache;
> + done
I noticed that this doesn't seem to do the right thing with the exit status -
configure can fail without cirrusci noticing, and then the build fails at the
next step.
> for item in `find "$sourcetree" -name Makefile -print -o -name GNUmakefile
> -print | grep -v "$sourcetree/doc/src/sgml/images/"`; do
> - filename=`expr "$item" : "$sourcetree\(.*\)"`
> - if test ! -f "${item}.in"; then
> - if cmp "$item" "$buildtree/$filename" >/dev/null 2>&1; then : ; else
> - ln -fs "$item" "$buildtree/$filename" || exit 1
> - fi
> - fi
> + filename=${item#$sourcetree}
> + [ -e "$buildtree/$filename" ] && continue
I fixed this to check for ".in" files as intended.
It'd be a lot better if the image didn't take so long to start. :(
--
Justin
>From 32646786299672d333cbf1f49bafac9e90e0d3be Mon Sep 17 00:00:00 2001
From: Melih Mutlu <[email protected]>
Date: Mon, 21 Feb 2022 14:46:05 +0300
Subject: [PATCH 1/2] Added Windows with MinGW environment in Cirrus CI
---
.cirrus.yml | 78 ++++++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 65 insertions(+), 13 deletions(-)
diff --git a/.cirrus.yml b/.cirrus.yml
index a9193c2c34f..472661c0936 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -339,13 +339,29 @@ 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
+
+ only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*windows.*'
+
+ 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
-
# 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 +371,11 @@ 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
@@ -398,12 +410,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 +481,52 @@ task:
path: "crashlog-*.txt"
type: text/plain
+task:
+ << : *WINDOWS_ENVIRONMENT_BASE
+ name: Windows - Server 2019, MinGW64
+ 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}
+
+ 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:
+ - C:\msys64\usr\bin\dash.exe -lc "mkdir %BUILD_DIR% &&
+ cd %BUILD_DIR% &&
+ %CIRRUS_WORKING_DIR%/configure
+ --enable-cassert
+ --enable-tap-tests
+ --with-icu
+ --with-libxml
+ --with-libxslt
+ --with-lz4
+ --enable-debug
+ CC='ccache gcc'
+ CXX='ccache g++'
+ CFLAGS='-Og -ggdb -pipe'
+ CXXFLAGS='-Og -ggdb'"
+
+ 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
task:
name: CompilerWarnings
--
2.17.1
>From 49a49939827dde731f513d334e53e1f56be44b5f Mon Sep 17 00:00:00 2001
From: Justin Pryzby <[email protected]>
Date: Thu, 28 Jul 2022 10:57:26 -0500
Subject: [PATCH 2/2] f!
ci-os-only: mingw
---
.cirrus.yml | 31 +++++++++++++++++++++++--------
config/prep_buildtree | 20 ++++++++------------
src/tools/ci/cores_backtrace.sh | 17 +++++++++++++++--
3 files changed, 46 insertions(+), 22 deletions(-)
diff --git a/.cirrus.yml b/.cirrus.yml
index 472661c0936..b51a625d210 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -34,6 +34,7 @@ on_failure: &on_failure
- "**/*.log"
- "**/*.diffs"
- "**/regress_log_*"
+ - "**/*.stackdump"
type: text/plain
task:
@@ -349,8 +350,6 @@ WINDOWS_ENVIRONMENT_BASE: &WINDOWS_ENVIRONMENT_BASE
# Avoids port conflicts between concurrent tap test runs
PG_TEST_USE_UNIX_SOCKETS: 1
- only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*windows.*'
-
sysinfo_script: |
chcp
systeminfo
@@ -361,6 +360,8 @@ task:
<< : *WINDOWS_ENVIRONMENT_BASE
name: Windows - Server 2019, VS 2019
+ 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
@@ -484,6 +485,8 @@ task:
task:
<< : *WINDOWS_ENVIRONMENT_BASE
name: Windows - Server 2019, MinGW64
+ #XXX only_if: $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*mingw.*'
+
windows_container:
image: $CONTAINER_REPO/windows_ci_mingw64:latest
cpu: $CPUS
@@ -495,6 +498,10 @@ task:
ccache_cache:
folder: ${CCACHE_DIR}
+ setup_additional_packages_script: |
+ REM choco install -y --no-progress ...
+ REM C:\msys64\usr\bin\pacman.exe -S --noconfirm busybox
+
mingw_info_script:
- C:\msys64\usr\bin\dash.exe -lc "where gcc"
- C:\msys64\usr\bin\dash.exe -lc "gcc --version"
@@ -502,20 +509,25 @@ task:
- 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% &&
+ 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
- --enable-debug
CC='ccache gcc'
CXX='ccache g++'
CFLAGS='-Og -ggdb -pipe'
- CXXFLAGS='-Og -ggdb'"
+ 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}"
@@ -523,10 +535,13 @@ task:
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"
+ - 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
+ 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/config/prep_buildtree b/config/prep_buildtree
index a0eabd3dee2..97bf65967f1 100644
--- a/config/prep_buildtree
+++ b/config/prep_buildtree
@@ -26,20 +26,16 @@ buildtree=`cd ${2:-'.'} && pwd`
# If we did, it would interfere with installation of prebuilt docs from
# the source tree, if a VPATH build is done from a distribution tarball.
# See bug #5595.
-for item in `find "$sourcetree" -type d \( \( -name CVS -prune \) -o \( -name .git -prune \) -o -print \) | grep -v "$sourcetree/doc/src/sgml/\+"`; do
- subdir=`expr "$item" : "$sourcetree\(.*\)"`
- if test ! -d "$buildtree/$subdir"; then
- mkdir -p "$buildtree/$subdir" || exit 1
- fi
-done
+( cd "$sourcetree" && find . -type d \( \( -name CVS -prune \) -o \( -name .git -prune \) -o -print \) |grep -v "doc/src/sgml/\+" ) |
+ ( cd "$buildtree" && xargs mkdir -p )
for item in `find "$sourcetree" -name Makefile -print -o -name GNUmakefile -print | grep -v "$sourcetree/doc/src/sgml/images/"`; do
- filename=`expr "$item" : "$sourcetree\(.*\)"`
- if test ! -f "${item}.in"; then
- if cmp "$item" "$buildtree/$filename" >/dev/null 2>&1; then : ; else
- ln -fs "$item" "$buildtree/$filename" || exit 1
- fi
- fi
+ [ -e "$item.in" ] && echo "skipping: $item" &&
+ continue
+
+ filename=${item#$sourcetree}
+ cmp "$item" "$buildtree/$filename" >/dev/null 2>&1 ||
+ ln -fs "$item" "$buildtree/$filename"
done
exit 0
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