[SCM] PostGIS Buildbots; Jenkins jobs and instructions for setting up winnie and debbie bots. branch freebsd14-runner-iac updated. 42e8c44cfacc272d7bfc823448bcc96e947f4b61

git at osgeo.org git at osgeo.org
Sun Jul 26 17:23:50 PDT 2026


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "PostGIS Buildbots; Jenkins jobs and instructions for setting up winnie and debbie bots.".

The branch, freebsd14-runner-iac has been updated
       via  42e8c44cfacc272d7bfc823448bcc96e947f4b61 (commit)
      from  87f4b37e4f6343a4cea2bb7786c6a6b954fb1234 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 42e8c44cfacc272d7bfc823448bcc96e947f4b61
Author: Darafei Praliaskouski <me at komzpa.net>
Date:   Mon Jul 27 04:23:18 2026 +0400

    Extend FreeBSD runner to full PostGIS suite

diff --git a/freebsd/freebsd14_runner/README.md b/freebsd/freebsd14_runner/README.md
index 3672b27..4fa9869 100644
--- a/freebsd/freebsd14_runner/README.md
+++ b/freebsd/freebsd14_runner/README.md
@@ -2,8 +2,8 @@
 
 This directory contains the reproducible FreeBSD VM recipe for PostGIS-specific CI.
 It fetches a FreeBSD cloud image, seeds SSH access, installs the package set in
-`config/packages.txt`, records a package lock, and verifies the guest by building
-PostGIS `liblwgeom` and running its CUnit suite.
+`config/packages.txt`, records a package lock, and verifies the guest by running
+the complete PostGIS build, regression, installcheck, and upgrade suite.
 
 From a fresh host with QEMU/KVM and project sources available:
 
@@ -26,10 +26,24 @@ ignored.
 for the current checkout path. The checked-in examples use `/srv/postgis` as the
 install root; regenerate them after installing elsewhere.
 
-The sibling lane verified this recipe on 2026-07-26: dependency-layer rebuild
-`386.47s`, boot-to-ready `14s`, verify wall `65.14s`, and liblwgeom CUnit
-`358` tests / `5710` assertions with `0` failures.
+The complete-suite lane verified the recipe on FreeBSD 14.3 on 2026-07-27 at
+PostGIS commit `173625554850bd7c8214087d5dcccd12c3af5865`: build plus tests
+took `2153s` (`35m53s`), or about `41m` including disposable VM boot and source
+copy overhead. `make check`, `installcheck-base`, and the three upgrade phases
+each ran `386` regression tests with `0` failures; CUnit ran `441` tests and
+`51699` assertions with `0` failures.
 
-Measured disk footprint from that run was `630M` for the compressed FreeBSD
-download, `2.5G` for the expanded release image, `4.5G` for the seeded image,
-and `7.9G` for the dependency layer.
+Two recipe details are load-bearing:
+
+* Use PostgreSQL 18 packages together with `gdal`. On this FreeBSD package set,
+  `gdal` is built against PostgreSQL 18 client libraries; starting from another
+  PostgreSQL major lets `pkg` remove the first client/server set while resolving
+  `gdal`.
+* Keep `CPPFLAGS=-I/usr/local/include` and `LDFLAGS=-L/usr/local/lib` in the
+  guest build. Without the library path, the loader tools can fail to link
+  GNU libiconv symbols from `/usr/local/lib`.
+
+A disposable boot recipe is acceptable for adoption because it is reproducible
+and measured at about `41m`, but a persistent Woodpecker local-backend VM avoids
+boot and source-copy overhead and should budget about `36m` for a clean
+build/test run. Start with `16` vCPU, `16 GiB` RAM, and `40-80 GiB` host disk.
diff --git a/freebsd/freebsd14_runner/config/package-lock.txt b/freebsd/freebsd14_runner/config/package-lock.txt
index 32ff134..89a5a34 100644
--- a/freebsd/freebsd14_runner/config/package-lock.txt
+++ b/freebsd/freebsd14_runner/config/package-lock.txt
@@ -90,8 +90,9 @@ pkgconf-2.4.3_1,1
 png-1.6.58
 poppler-26.04.0_1
 poppler-data-0.4.12
-postgresql16-client-16.14
-postgresql16-server-16.14
+postgresql18-client-18.4
+postgresql18-contrib-18.4
+postgresql18-server-18.4
 proj-9.8.1,1
 protobuf-29.6,1
 protobuf-c-1.5.1_4
diff --git a/freebsd/freebsd14_runner/config/packages.txt b/freebsd/freebsd14_runner/config/packages.txt
index c3e2421..975dd84 100644
--- a/freebsd/freebsd14_runner/config/packages.txt
+++ b/freebsd/freebsd14_runner/config/packages.txt
@@ -1,22 +1,32 @@
-# PostGIS build and liblwgeom CUnit dependencies.
+# PostGIS full-suite dependencies. Keep PostgreSQL at the package major that
+# FreeBSD's GDAL package is built against; mixing another PostgreSQL major with
+# gdal makes pkg remove the first server/client set.
 autoconf
 automake
 bison
+cmake
 cunit
+docbook
+docbook-xsl
 gdal
 geos
 gmake
+gettext-tools
 json-c
 libiconv
 libtool
 libxml2
+libxslt
+llvm
 pcre2
 perl5
 pkgconf
-postgresql16-client
-postgresql16-server
+postgresql18-client
+postgresql18-contrib
+postgresql18-server
 proj
 protobuf-c
+rsync
 sfcgal
 sqlite3
 wget
diff --git a/freebsd/freebsd14_runner/config/runner.env b/freebsd/freebsd14_runner/config/runner.env
index 2e39c7d..8cf3f97 100644
--- a/freebsd/freebsd14_runner/config/runner.env
+++ b/freebsd/freebsd14_runner/config/runner.env
@@ -1,5 +1,5 @@
 # Declared inputs for the reproducible FreeBSD PostGIS CI runner.
-FREEBSD_VERSION="14.4-RELEASE"
+FREEBSD_VERSION="14.3-RELEASE"
 FREEBSD_ARCH="amd64"
 FREEBSD_IMAGE_FLAVOR="BASIC-CLOUDINIT-ufs"
 FREEBSD_IMAGE_FORMAT="qcow2"
@@ -21,6 +21,7 @@ QEMU_CPU="host"
 POSTGIS_SRC="/srv/postgis/postgis-src"
 GUEST_WORKDIR="/usr/local/src/postgis"
 VERIFY_JOBS="16"
+PG_VERSION="18"
 
 WOODPECKER_AGENT_VERSION="3.9.0"
 WOODPECKER_SERVER="https://woodpecker.example.invalid"
diff --git a/freebsd/freebsd14_runner/scripts/build-deps.sh b/freebsd/freebsd14_runner/scripts/build-deps.sh
index f59cfd6..6d8f964 100755
--- a/freebsd/freebsd14_runner/scripts/build-deps.sh
+++ b/freebsd/freebsd14_runner/scripts/build-deps.sh
@@ -11,16 +11,12 @@ cp images/seeded.qcow2 images/deps.qcow2
 qemu-img info images/deps.qcow2 > artifacts/deps-qemu-img-info.before.txt
 ./scripts/vm.sh start images/deps.qcow2
 ./scripts/wait-ssh.sh
-if [ -s config/package-lock.txt ]; then
-  pkg_source=config/package-lock.txt
-else
-  pkg_source=config/packages.txt
-fi
+pkg_source=config/packages.txt
 pkg_list=$(awk 'NF && $1 !~ /^#/ {print $1}' "$pkg_source" | awk '!seen[$0]++')
 remote_list=$(printf '%s ' $pkg_list)
 log "installing packages: $remote_list"
 start=$(date +%s)
-ssh "${SSH_OPTS[@]}" "${SSH_USER}@${SSH_HOST}" "set -eu; env ASSUME_ALWAYS_YES=yes pkg bootstrap -f; pkg update -f; pkg install -y $remote_list; pkg clean -ay; service sshd enable || true" | tee logs/pkg-install.log
+ssh "${SSH_OPTS[@]}" "${SSH_USER}@${SSH_HOST}" "set -eu; env ASSUME_ALWAYS_YES=yes pkg bootstrap -f; pkg update -f; pkg install -y $remote_list; sysrc postgresql_enable=YES; service postgresql initdb || true; service postgresql start || true; su -m postgres -c 'createuser -s ${SSH_USER}' || true; su -m postgres -c 'createdb ${SSH_USER}' || true; pkg clean -ay; service sshd enable || true" | tee logs/pkg-install.log
 end=$(date +%s); printf 'dependency_layer\t%s\n' "$((end-start))" >> artifacts/timings.tsv
 ./scripts/package-lock.sh
 ssh "${SSH_OPTS[@]}" "${SSH_USER}@${SSH_HOST}" 'pkg info | sort' > artifacts/deps-packages.tsv
diff --git a/freebsd/freebsd14_runner/scripts/common.sh b/freebsd/freebsd14_runner/scripts/common.sh
index 34fdd13..39ea871 100755
--- a/freebsd/freebsd14_runner/scripts/common.sh
+++ b/freebsd/freebsd14_runner/scripts/common.sh
@@ -5,6 +5,9 @@ cd "$ROOT"
 export TMPDIR="$ROOT/.tmp"
 mkdir -p "$TMPDIR" downloads images logs artifacts secrets
 source config/runner.env
+if [ -f config/runner.local.env ]; then
+  source config/runner.local.env
+fi
 if [ -n "${FREEBSD_IMAGE_FLAVOR:-}" ]; then
   IMAGE_NAME="FreeBSD-${FREEBSD_VERSION}-${FREEBSD_ARCH}-${FREEBSD_IMAGE_FLAVOR}.${FREEBSD_IMAGE_FORMAT}"
 else
@@ -14,6 +17,7 @@ IMAGE_XZ="${IMAGE_NAME}.xz"
 RELEASE_URL="${FREEBSD_IMAGE_BASE_URL}/${FREEBSD_VERSION}/${FREEBSD_ARCH}/Latest/${IMAGE_XZ}"
 CHECKSUM_URL="${FREEBSD_IMAGE_BASE_URL}/${FREEBSD_VERSION}/${FREEBSD_ARCH}/Latest/CHECKSUM.SHA256"
 SSH_OPTS=(-o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=5 -i "$SSH_KEY" -p "$SSH_PORT")
+SCP_OPTS=(-o BatchMode=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=5 -i "$SSH_KEY" -P "$SSH_PORT")
 need() { command -v "$1" >/dev/null || { echo "missing required command: $1" >&2; exit 1; }; }
 log() { printf '[%(%FT%T%z)T] %s\n' -1 "$*"; }
 time_cmd() { local label=$1; shift; local start end; start=$(date +%s); "$@"; end=$(date +%s); printf '%s\t%s\n' "$label" "$((end-start))" >> artifacts/timings.tsv; }
diff --git a/freebsd/freebsd14_runner/scripts/verify-postgis.sh b/freebsd/freebsd14_runner/scripts/verify-postgis.sh
index 79ea747..127b939 100755
--- a/freebsd/freebsd14_runner/scripts/verify-postgis.sh
+++ b/freebsd/freebsd14_runner/scripts/verify-postgis.sh
@@ -9,16 +9,53 @@ log "copying PostGIS source into guest"
 git -C "$POSTGIS_SRC" rev-parse HEAD > artifacts/postgis-head.txt
 ssh "${SSH_OPTS[@]}" "${SSH_USER}@${SSH_HOST}" "rm -rf '$GUEST_WORKDIR'; mkdir -p '$GUEST_WORKDIR'"
 git -C "$POSTGIS_SRC" archive --format=tar HEAD | ssh "${SSH_OPTS[@]}" "${SSH_USER}@${SSH_HOST}" "tar -C '$GUEST_WORKDIR' -xf -"
-log "building and running liblwgeom CUnit"
+log "building and running the complete PostGIS suite"
 start=$(date +%s)
 set +e
-ssh "${SSH_OPTS[@]}" "${SSH_USER}@${SSH_HOST}" "cd '$GUEST_WORKDIR' && ./autogen.sh && ./configure --without-raster --without-topology --without-address-standardizer && gmake -j$VERIFY_JOBS -C liblwgeom check" 2>&1 | tee logs/verify-liblwgeom-cunit.log
+ssh "${SSH_OPTS[@]}" "${SSH_USER}@${SSH_HOST}" "cat > /tmp/run-postgis-suite.sh" <<EOF
+#!/usr/bin/env bash
+set -euo pipefail
+export MAKE=gmake
+export TMPDIR=/tmp/postgis-freebsd
+export PATH=/usr/local/bin:\$PATH
+export CPPFLAGS="-I/usr/local/include \${CPPFLAGS:-}"
+export LDFLAGS="-L/usr/local/lib \${LDFLAGS:-}"
+mkdir -p "\$TMPDIR" /tmp/postgis-results
+cd "$GUEST_WORKDIR"
+phase() {
+  name=\$1
+  shift
+  start=\$(date +%s)
+  echo "PHASE_START \$name \$(date -u +%Y-%m-%dT%H:%M:%SZ)" | tee -a /tmp/postgis-results/timings.txt
+  set +e
+  "\$@" > "/tmp/postgis-results/\$name.log" 2>&1
+  rc=\$?
+  set -e
+  end=\$(date +%s)
+  echo "PHASE_END \$name rc=\$rc seconds=\$((end-start)) \$(date -u +%Y-%m-%dT%H:%M:%SZ)" | tee -a /tmp/postgis-results/timings.txt
+  return "\$rc"
+}
+phase autogen ./autogen.sh
+phase configure ./configure --with-pgconfig=/usr/local/bin/pg_config
+phase build gmake -j"$VERIFY_JOBS"
+phase make-check gmake check
+su -m root -c 'cd "$GUEST_WORKDIR" && gmake install' > /tmp/postgis-results/install.log 2>&1
+phase installcheck-base gmake installcheck-base
+phase upgrade-unpackaged gmake installcheck-upgrade-from-unpackaged
+phase upgrade-unpackaged-by-func gmake installcheck-upgrade-from-unpackaged-by-func
+phase upgrade-packaged-by-func gmake installcheck-upgrade-from-packaged-by-func
+phase installcheck-meta gmake -n installcheck
+find . \( -name '*regression.diffs' -o -name '*regression.out' -o -name '*regression.log' -o -name 'regress_log' \) | sort > /tmp/postgis-results/regression-files.txt
+tar -C /tmp -czf /tmp/postgis-results.tgz postgis-results
+EOF
+ssh "${SSH_OPTS[@]}" "${SSH_USER}@${SSH_HOST}" "chmod +x /tmp/run-postgis-suite.sh; /tmp/run-postgis-suite.sh" 2>&1 | tee logs/verify-postgis-full-suite.log
 status=${PIPESTATUS[0]}
 set -e
-end=$(date +%s); printf 'verify_liblwgeom_cunit\t%s\n' "$((end-start))" >> artifacts/timings.tsv
+end=$(date +%s); printf 'verify_full_suite\t%s\n' "$((end-start))" >> artifacts/timings.tsv
+scp "${SCP_OPTS[@]}" "${SSH_USER}@${SSH_HOST}:/tmp/postgis-results.tgz" artifacts/postgis-results.tgz || true
 ./scripts/vm.sh stop
 if [ "$status" -ne 0 ]; then
-  echo "PostGIS liblwgeom CUnit verification failed" >&2
+  echo "PostGIS FreeBSD full-suite verification failed" >&2
   exit "$status"
 fi
 log "verification passed"

-----------------------------------------------------------------------

Summary of changes:
 freebsd/freebsd14_runner/README.md                 | 30 +++++++++++----
 freebsd/freebsd14_runner/config/package-lock.txt   |  5 ++-
 freebsd/freebsd14_runner/config/packages.txt       | 16 ++++++--
 freebsd/freebsd14_runner/config/runner.env         |  3 +-
 freebsd/freebsd14_runner/scripts/build-deps.sh     |  8 +---
 freebsd/freebsd14_runner/scripts/common.sh         |  4 ++
 freebsd/freebsd14_runner/scripts/verify-postgis.sh | 45 ++++++++++++++++++++--
 7 files changed, 87 insertions(+), 24 deletions(-)


hooks/post-receive
-- 
PostGIS Buildbots; Jenkins jobs and instructions for setting up winnie and debbie bots.


More information about the postgis-tickets mailing list