[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