[SCM] PostGIS branch master updated. 3.7.0beta1-50-g827e06ab9
git at osgeo.org
git at osgeo.org
Mon Jul 27 09:04:20 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".
The branch, master has been updated
via 827e06ab9152ed04bc82f2e7991c48bffa1b9315 (commit)
via f70445ec395ec9018006e4dde006356c7011d63e (commit)
via ee8c28912cd17bd36ca453c64b6432d43726d94f (commit)
via 16bd690ff08bfff359ec40e0eea70d185f1e0322 (commit)
via 35276a9c68f61a69e8772e4345cbb080fd8d5334 (commit)
via 35f5637489b57a23e8b2d93b90240241a1db5287 (commit)
from f79d1bec72e41ce2054b3586d70de32fa5135eba (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 827e06ab9152ed04bc82f2e7991c48bffa1b9315
Merge: f79d1bec7 f70445ec3
Author: Darafei Praliaskouski <komzpa at gmail.com>
Date: Mon Jul 27 09:04:18 2026 -0700
Merge pull request 'ci: consolidate pipeline reliability fixes' (!559) from Komzpa/postgis:ci/pipeline-reliability-20260727 into master
Reviewed-on: https://gitea.osgeo.org/postgis/postgis/pulls/559
commit f70445ec395ec9018006e4dde006356c7011d63e
Author: Darafei Praliaskouski <me at komzpa.net>
Date: Mon Jul 27 09:42:59 2026 +0400
ci: stop one translation push from breaking the whole docs pipeline
Each `html-<lang>` step is gated on its own language's `.po` files, but was also
chained to the previous language's `html` step. When a push touches a single
language -- which is what Weblate sends, and it sends them constantly -- every
other language's step is pruned by its path filter while the surviving step
still declares `depends_on` on a pruned one. Woodpecker rejects the pipeline
before creating any workflow:
step 'html-ja' depends on unknown step 'html-de'
The pipeline then reports as `error` with zero workflows, which reads on
https://postgis.net/ci/ as a failing `master` even though nothing was built or
tested. The Japanese translation commit f79d1bec72e4 is the current instance;
any single-language push reproduces it.
There were 15 of these cross-language dependencies, covering the entire
`html-*` chain, so master goes red on essentially every translation push.
Each `html-<lang>` now depends only on its own `check-xml-<lang>`, which is the
dependency that actually matters: a language's HTML build needs that language's
XML checked, and nothing else. The cross-language chaining only serialised the
builds, and it cannot coexist with per-language path gating.
diff --git a/.woodpecker/docs.yml b/.woodpecker/docs.yml
index b71ffae6b..87f39a39a 100644
--- a/.woodpecker/docs.yml
+++ b/.woodpecker/docs.yml
@@ -307,7 +307,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/pt_BR local-html
- depends_on: [ check-xml-pt_BR, html-it_IT ]
+ depends_on: check-xml-pt_BR
when:
- path:
include:
@@ -318,7 +318,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/fr local-html
- depends_on: [ check-xml-fr, html-pt_BR ]
+ depends_on: check-xml-fr
when:
- path:
include:
@@ -329,7 +329,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/es local-html
- depends_on: [ check-xml-es, html-fr ]
+ depends_on: check-xml-es
when:
- path:
include:
@@ -340,7 +340,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/pl local-html
- depends_on: [ check-xml-pl, html-es ]
+ depends_on: check-xml-pl
when:
- path:
include:
@@ -351,7 +351,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/ka local-html
- depends_on: [ check-xml-ka, html-pl ]
+ depends_on: check-xml-ka
when:
- path:
include:
@@ -362,7 +362,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/ko_KR local-html
- depends_on: [ check-xml-ko_KR, html-ka ]
+ depends_on: check-xml-ko_KR
when:
- path:
include:
@@ -373,7 +373,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/da local-html
- depends_on: [ check-xml-da, html-ko_KR ]
+ depends_on: check-xml-da
when:
- path:
include:
@@ -384,7 +384,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/de local-html
- depends_on: [ check-xml-de, html-da ]
+ depends_on: check-xml-de
when:
- path:
include:
@@ -395,7 +395,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/ja local-html
- depends_on: [ check-xml-ja, html-de ]
+ depends_on: check-xml-ja
when:
- path:
include:
@@ -406,7 +406,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/ru local-html
- depends_on: [ check-xml-ru, html-ja ]
+ depends_on: check-xml-ru
when:
- path:
include:
@@ -417,7 +417,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/zh_Hans local-html
- depends_on: [ check-xml-zh_Hans, html-ru ]
+ depends_on: check-xml-zh_Hans
when:
- path:
include:
@@ -428,7 +428,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/ro local-html
- depends_on: [ check-xml-ro, html-zh_Hans ]
+ depends_on: check-xml-ro
when:
- path:
include:
@@ -439,7 +439,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/sv local-html
- depends_on: [ check-xml-sv, html-ro ]
+ depends_on: check-xml-sv
when:
- path:
include:
@@ -450,7 +450,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/uk local-html
- depends_on: [ check-xml-uk, html-sv ]
+ depends_on: check-xml-uk
when:
- path:
include:
@@ -461,7 +461,7 @@ steps:
pull: true
commands:
- make -C build-docs/doc/po/be local-html
- depends_on: [ check-xml-be, html-uk ]
+ depends_on: check-xml-be
when:
- path:
include:
commit ee8c28912cd17bd36ca453c64b6432d43726d94f
Author: Darafei Praliaskouski <me at komzpa.net>
Date: Sun Jul 26 20:27:04 2026 +0400
ci: ignore missing generated sources in lcov
diff --git a/.woodpecker/qa-expensive.yml b/.woodpecker/qa-expensive.yml
index 5c9b8ec11..d4f9dbb2f 100644
--- a/.woodpecker/qa-expensive.yml
+++ b/.woodpecker/qa-expensive.yml
@@ -52,7 +52,7 @@ steps:
--enable-debug
- make -j1
- make check RUNTESTFLAGS="--verbose $${QA_REGRESS_HOOKS}"
- - lcov --capture --directory "$${BUILDDIR}" --output-file "$${BUILDDIR}/coverage.info"
+ - lcov --capture --directory "$${BUILDDIR}" --output-file "$${BUILDDIR}/coverage.info" --ignore-errors source
- lcov --list "$${BUILDDIR}/coverage.info"
garden:
commit 16bd690ff08bfff359ec40e0eea70d185f1e0322
Author: Darafei Praliaskouski <me at komzpa.net>
Date: Sun Jul 26 20:26:19 2026 +0400
ci: widen Docker image pull retry window
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e62f529bf..82646b0ba 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -54,7 +54,8 @@ jobs:
retry() {
max_attempts="$1"
delay="$2"
- shift 2
+ max_delay="$3"
+ shift 3
attempt=1
while true; do
"$@" && return 0
@@ -66,12 +67,16 @@ jobs:
echo "Command failed with exit code ${status}; retrying in ${delay}s (${attempt}/${max_attempts}): $*"
sleep "$delay"
attempt=$((attempt + 1))
+ delay=$((delay * 2))
+ if test "$delay" -gt "$max_delay"; then
+ delay="$max_delay"
+ fi
done
}
uname -a
build_image="postgis/postgis-build-env:${{ matrix.ci.tag }}"
- retry 3 15 docker pull "${build_image}"
+ retry 6 20 180 docker pull "${build_image}"
echo "FROM ${build_image}" > Dockerfile
if test "${{ matrix.ci.mode }}" = "garden"; then
echo "USER root" >> Dockerfile
commit 35276a9c68f61a69e8772e4345cbb080fd8d5334
Author: Darafei Praliaskouski <me at komzpa.net>
Date: Mon Jul 27 09:13:51 2026 +0400
ci: create regression roles in private clusters
diff --git a/ci/start-postgresql.sh b/ci/start-postgresql.sh
index c8926c008..16394e94a 100755
--- a/ci/start-postgresql.sh
+++ b/ci/start-postgresql.sh
@@ -48,6 +48,22 @@ pgstart_stop()
fi
}
+pgstart_create_role()
+{
+ role=$1
+ test -n "${role}" || return 0
+
+ psql -XAt --set ON_ERROR_STOP=1 --set role="${role}" template1 <<'SQL'
+SELECT format('CREATE ROLE %I LOGIN', :'role')
+WHERE NOT EXISTS (
+ SELECT 1
+ FROM pg_catalog.pg_roles
+ WHERE rolname = :'role'
+)
+\gexec
+SQL
+}
+
PGROOT=${PGROOT:-$(mktemp -d "${TMPDIR:-/tmp}/postgis-pg${PGVER}.XXXXXX")}
PGDATA=${PGDATA:-${PGROOT}/data}
PGHOST=${PGHOST:-${PGROOT}/socket}
@@ -80,3 +96,6 @@ if ! runuser -u "${PGSTART_USER}" -- "${PGCTL}" -D "${PGDATA}" -l "${PGLOG}" \
echo "ci/start-postgresql.sh: PostgreSQL ${PGVER} failed to start" >&2
exit 1
fi
+
+pgstart_create_role "${POSTGIS_REGRESS_DB_OWNER:-}"
+pgstart_create_role "${POSTGIS_REGRESS_ROLE_EXT_CREATOR:-}"
commit 35f5637489b57a23e8b2d93b90240241a1db5287
Author: Darafei Praliaskouski <me at komzpa.net>
Date: Mon Jul 27 04:56:56 2026 +0400
ci: isolate Woodpecker PostgreSQL state
diff --git a/.woodpecker/qa-expensive.yml b/.woodpecker/qa-expensive.yml
index 8b0d900f2..5c9b8ec11 100644
--- a/.woodpecker/qa-expensive.yml
+++ b/.woodpecker/qa-expensive.yml
@@ -9,19 +9,13 @@ variables:
steps-env: &steps-env
- export PGVER=18
- export PATH=/usr/lib/postgresql/$${PGVER}/bin:$${PATH}
- - export PGHOST=/tmp
- - export PGPORT=$$(grep ^port /etc/postgresql/$${PGVER}/main/postgresql.conf | awk '{print $$3}')
- export POSTGIS_REGRESS_DB_OWNER=postgis_reg_unprivileged_user
- export SRCDIR=$${CI_WORKSPACE}
- export BUILDDIR=$${SRCDIR}/build/qa-$${QA_MODE}-pg$${PGVER}
- export QA_REGRESS_HOOKS="--after-create-db-script $${CI_WORKSPACE}/regress/hooks/configure-pgextwlist.sql"
- pg_config --version
steps-start-postgresql: &steps-start-postgresql
- - runuser -u postgres -- pg_ctl
- -D /var/lib/postgresql/$${PGVER}/main
- -l /tmp/postgresql-$${PGVER}-$${QA_MODE}.log
- -o "-c config_file=/etc/postgresql/$${PGVER}/main/postgresql.conf -c unix_socket_directories=/tmp"
- -t 300 start
+ - . ci/start-postgresql.sh
- psql -c 'select version()' template1
clone:
diff --git a/.woodpecker/qa.yml b/.woodpecker/qa.yml
index 1853ce0b4..2befd93b6 100644
--- a/.woodpecker/qa.yml
+++ b/.woodpecker/qa.yml
@@ -7,19 +7,13 @@ variables:
steps-env: &steps-env
- export PGVER=18
- export PATH=/usr/lib/postgresql/$${PGVER}/bin:$${PATH}
- - export PGHOST=/tmp
- - export PGPORT=$$(grep ^port /etc/postgresql/$${PGVER}/main/postgresql.conf | awk '{print $$3}')
- export POSTGIS_REGRESS_DB_OWNER=postgis_reg_unprivileged_user
- export SRCDIR=$${CI_WORKSPACE}
- export BUILDDIR=$${SRCDIR}/build/qa-$${QA_MODE}-pg$${PGVER}
- export QA_REGRESS_HOOKS="--after-create-db-script $${CI_WORKSPACE}/regress/hooks/configure-pgextwlist.sql"
- pg_config --version
steps-start-postgresql: &steps-start-postgresql
- - runuser -u postgres -- pg_ctl
- -D /var/lib/postgresql/$${PGVER}/main
- -l /tmp/postgresql-$${PGVER}-$${QA_MODE}.log
- -o "-c config_file=/etc/postgresql/$${PGVER}/main/postgresql.conf -c unix_socket_directories=/tmp"
- -t 300 start
+ - . ci/start-postgresql.sh
- psql -c 'select version()' template1
clone:
diff --git a/.woodpecker/regress.yml b/.woodpecker/regress.yml
index 666b16fea..e8402be47 100644
--- a/.woodpecker/regress.yml
+++ b/.woodpecker/regress.yml
@@ -6,8 +6,6 @@ variables:
test-image: &test-image repo.osgeo.org/postgis/build-test:debian13
steps-env: &steps-env
- export PATH=/usr/lib/postgresql/$${PGVER}/bin:$${PATH}
- - export PGHOST=/tmp
- - export PGPORT=$$(grep ^port /etc/postgresql/$${PGVER}/main/postgresql.conf | awk '{print $$3}')
- export POSTGIS_REGRESS_DB_OWNER=postgis_reg_unprivileged_user
- export RUNTESTFLAGS="-v
--after-create-db-script $${CI_WORKSPACE}/regress/hooks/configure-pgextwlist.sql
@@ -17,14 +15,7 @@ variables:
- export CURRENTVERSION=$$(grep '^POSTGIS_' $${SRCDIR}/Version.config | cut -d= -f2 | paste -sd '.')
- pg_config --version
steps-start-postgresql: &steps-start-postgresql
- # The test image can need crash recovery after clone-local startup. Under
- # multi-workflow I/O load, Debian's default 60-second pg_ctl wait is short.
- # Use /tmp for the socket: runner-specific /run mounts are not portable.
- - runuser -u postgres -- pg_ctl
- -D /var/lib/postgresql/$${PGVER}/main
- -l /tmp/postgresql-$${PGVER}.log
- -o "-c config_file=/etc/postgresql/$${PGVER}/main/postgresql.conf -c unix_socket_directories=/tmp"
- -t 300 start
+ - . ci/start-postgresql.sh
- psql -c 'select version()' template1
steps-pg-build: &steps-pg-build
- mkdir -p "$${BUILDDIR}"
@@ -130,6 +121,7 @@ steps:
commands:
- make -C build/pg$${PGVER} install
- make -C build/pg$${SECOND_PGVER} install
+ - export PGPORT=$$((20000 + ($${CI_PIPELINE_NUMBER:-0} % 1000) * 32 + ($${CI_WORKFLOW_NUMBER:-30} % 32)))
- su postgres -c 'utils/check_cluster_upgrade.sh -i regress/hooks/cluster-upgrade-geography.sql /usr/lib/postgresql/'$${PGVER}'/bin/pg_config /usr/lib/postgresql/'$${SECOND_PGVER}'/bin/pg_config'
# Every entry is an independent workflow with its own clone, workspace,
diff --git a/ci/start-postgresql.sh b/ci/start-postgresql.sh
new file mode 100755
index 000000000..c8926c008
--- /dev/null
+++ b/ci/start-postgresql.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+set -eu
+
+: "${PGVER:?PGVER must name the PostgreSQL major version}"
+
+PGBINDIR=${PGBINDIR:-/usr/lib/postgresql/${PGVER}/bin}
+PGCTL=${PGCTL:-${PGBINDIR}/pg_ctl}
+INITDB=${INITDB:-${PGBINDIR}/initdb}
+PGSTART_USER=${PGSTART_USER:-postgres}
+PGSTART_TIMEOUT=${PGSTART_TIMEOUT:-300}
+
+pgstart_number()
+{
+ case "$1" in
+ ''|*[!0-9]*) echo 0 ;;
+ *) echo "$1" ;;
+ esac
+}
+
+pgstart_default_port()
+{
+ pipeline=$(pgstart_number "${CI_PIPELINE_NUMBER:-0}")
+ workflow=$(pgstart_number "${CI_WORKFLOW_NUMBER:-${CI_STEP_NUMBER:-0}}")
+
+ # TCP is disabled below. This only chooses the socket filename inside
+ # the private PGHOST directory.
+ echo $((20000 + (pipeline % 1000) * 32 + (workflow % 32)))
+}
+
+pgstart_print_log()
+{
+ if test -s "${PGLOG}"; then
+ echo "PostgreSQL startup log (${PGLOG}) follows:" >&2
+ tail -n 200 "${PGLOG}" >&2
+ else
+ echo "PostgreSQL startup log (${PGLOG}) is empty or missing" >&2
+ fi
+}
+
+pgstart_stop()
+{
+ if test -n "${PGDATA:-}" && test -s "${PGDATA}/postmaster.pid"; then
+ runuser -u "${PGSTART_USER}" -- "${PGCTL}" -D "${PGDATA}" -m fast -w stop || true
+ fi
+ if test -n "${PGROOT:-}"; then
+ rm -rf "${PGROOT}"
+ fi
+}
+
+PGROOT=${PGROOT:-$(mktemp -d "${TMPDIR:-/tmp}/postgis-pg${PGVER}.XXXXXX")}
+PGDATA=${PGDATA:-${PGROOT}/data}
+PGHOST=${PGHOST:-${PGROOT}/socket}
+PGLOG=${PGLOG:-${PGROOT}/postgresql.log}
+PGPORT=${PGPORT:-$(pgstart_default_port)}
+PGUSER=${PGUSER:-postgres}
+
+export PGROOT PGDATA PGHOST PGLOG PGPORT PGUSER
+
+mkdir -p "${PGROOT}"
+chown "${PGSTART_USER}:${PGSTART_USER}" "${PGROOT}"
+runuser -u "${PGSTART_USER}" -- mkdir -p "${PGDATA}" "${PGHOST}"
+
+INITDB_OPTS=
+if "${INITDB}" --help 2>&1 | grep -q -- '--no-data-checksums'; then
+ INITDB_OPTS="--no-data-checksums"
+fi
+
+if test ! -s "${PGDATA}/PG_VERSION"; then
+ runuser -u "${PGSTART_USER}" -- "${INITDB}" -D "${PGDATA}" -A trust --no-sync ${INITDB_OPTS}
+fi
+
+trap pgstart_stop EXIT
+
+PGSTART_OPTS=${PGSTART_OPTS:-"-F -h '' -p ${PGPORT} -k ${PGHOST} -c fsync=off -c full_page_writes=off -c synchronous_commit=off"}
+
+if ! runuser -u "${PGSTART_USER}" -- "${PGCTL}" -D "${PGDATA}" -l "${PGLOG}" \
+ -o "${PGSTART_OPTS}" -t "${PGSTART_TIMEOUT}" start; then
+ pgstart_print_log
+ echo "ci/start-postgresql.sh: PostgreSQL ${PGVER} failed to start" >&2
+ exit 1
+fi
diff --git a/utils/check_cluster_upgrade.sh b/utils/check_cluster_upgrade.sh
index 972279d7d..88b8c4561 100755
--- a/utils/check_cluster_upgrade.sh
+++ b/utils/check_cluster_upgrade.sh
@@ -1,10 +1,17 @@
#!/bin/sh
-TMPDIR=/tmp/pgis_upgrade_test-$$/
+TMPDIR=$(mktemp -d "${TMPDIR:-/tmp}/pgis_upgrade_test.XXXXXX") || exit 1
DATADIR=${TMPDIR}/cluster
LOGFILE=${TMPDIR}/log
INIT_SCRIPT=
-export PGPORT=15432
+if test -z "${PGPORT:-}"; then
+ pipeline=${CI_PIPELINE_NUMBER:-0}
+ workflow=${CI_WORKFLOW_NUMBER:-30}
+ case "${pipeline}" in ''|*[!0-9]*) pipeline=0 ;; esac
+ case "${workflow}" in ''|*[!0-9]*) workflow=30 ;; esac
+ PGPORT=$((20000 + (pipeline % 1000) * 32 + (workflow % 32)))
+fi
+export PGPORT
export PGHOST=${TMPDIR}
export PGDATABASE=postgis_cluster_upgrade_test
PG_CONFIG_OLD=
-----------------------------------------------------------------------
Summary of changes:
.github/workflows/ci.yml | 9 +++-
.woodpecker/docs.yml | 30 ++++++------
.woodpecker/qa-expensive.yml | 10 +---
.woodpecker/qa.yml | 8 +---
.woodpecker/regress.yml | 12 +----
ci/start-postgresql.sh | 101 +++++++++++++++++++++++++++++++++++++++++
utils/check_cluster_upgrade.sh | 11 ++++-
7 files changed, 137 insertions(+), 44 deletions(-)
create mode 100755 ci/start-postgresql.sh
hooks/post-receive
--
PostGIS
More information about the postgis-tickets
mailing list