[SCM] PostGIS branch master updated. 3.7.0alpha1-654-g8fe1b52b5
git at osgeo.org
git at osgeo.org
Sun Jul 19 23:26:21 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 8fe1b52b5e32598d807da1e7d8ae3704f9952dcc (commit)
via e8f2be193d3518a5bafe9aeec1835ed85457666b (commit)
via 9c9850bff8384f437f7955f4f29e4ab02a0af1ea (commit)
from 590881519946958409ed9cdc9f9f459ab34027d5 (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 8fe1b52b5e32598d807da1e7d8ae3704f9952dcc
Merge: 590881519 e8f2be193
Author: Darafei Praliaskouski <komzpa at gmail.com>
Date: Sun Jul 19 23:26:19 2026 -0700
Merge pull request 'ci: show queued Jenkins branch checks' (!466) from Komzpa/postgis:ci/jenkins-queue-dashboard into master
Reviewed-on: https://gitea.osgeo.org/postgis/postgis/pulls/466
commit e8f2be193d3518a5bafe9aeec1835ed85457666b
Author: Darafei Praliaskouski <me at komzpa.net>
Date: Mon Jul 20 10:25:34 2026 +0400
ci: limit Winnie dashboard checks to active jobs
diff --git a/utils/ci-status.json b/utils/ci-status.json
index 7d2306ab8..56a3004d5 100644
--- a/utils/ci-status.json
+++ b/utils/ci-status.json
@@ -133,7 +133,12 @@
"name": "Jenkins / Winnie",
"provider": "jenkins",
"required": true,
- "job_url": "https://winnie.postgis.net/view/PostGIS/job/PostGIS_${version_or_trunk}/"
+ "job_url": "https://winnie.postgis.net/view/PostGIS/job/PostGIS_${version_or_trunk}/",
+ "branches": [
+ "master",
+ "stable-3.6",
+ "stable-3.5"
+ ]
},
{
"name": "Jenkins / Bessie",
commit 9c9850bff8384f437f7955f4f29e4ab02a0af1ea
Author: Darafei Praliaskouski <me at komzpa.net>
Date: Mon Jul 20 10:19:46 2026 +0400
ci: show queued Jenkins branch checks
diff --git a/utils/ci-status.py b/utils/ci-status.py
index e9c4b0a9b..d6659a47c 100755
--- a/utils/ci-status.py
+++ b/utils/ci-status.py
@@ -641,6 +641,74 @@ def jenkins_matches_branch(build, check, branch):
return any(value == expected for name, value in params.items() if name == branch_parameter or name.lower() == branch_parameter.lower())
+def jenkins_queue_url(job_url):
+ parsed = urllib.parse.urlparse(job_url)
+ if parsed.scheme not in ("http", "https") or not parsed.netloc:
+ raise ConfigError(f"cannot build Jenkins queue URL for {job_url}")
+ return urllib.parse.urlunparse((parsed.scheme, parsed.netloc, "/queue/api/json", "", "", ""))
+
+
+def jenkins_project_url(job_url):
+ parsed = urllib.parse.urlparse(job_url)
+ path = parsed.path.rstrip("/") + "/"
+ if path.startswith("/view/") and "/job/" in path:
+ path = "/job/" + path.split("/job/", 1)[1]
+ if "/label=" in path:
+ path = path.split("/label=", 1)[0].rstrip("/") + "/"
+ return urllib.parse.urlunparse((parsed.scheme, parsed.netloc, path, "", "", ""))
+
+
+def jenkins_queue_items(job_url, timeout):
+ tree = (
+ "items[id,task[name,url],why,params,inQueueSince,url,blocked,buildable,stuck,"
+ "actions[parameters[name,value]]]"
+ )
+ url = jenkins_queue_url(job_url) + "?" + urllib.parse.urlencode({"tree": tree})
+ return http_json(url, timeout=timeout).get("items") or []
+
+
+def jenkins_queue_item_matches(item, job_url, check, branch):
+ task = item.get("task") or {}
+ task_url = (task.get("url") or "").rstrip("/") + "/"
+ if task_url != jenkins_project_url(job_url):
+ return False
+ branch_parameter = check.get("branch_parameter")
+ if not branch_parameter:
+ return True
+ expected = f"refs/heads/{branch['name']}"
+ params = jenkins_parameters(item)
+ return any(value == expected for name, value in params.items() if name == branch_parameter or name.lower() == branch_parameter.lower())
+
+
+def jenkins_queued_check(check, branch, job_url, timeout):
+ if not check.get("branch_parameter"):
+ return None
+ try:
+ queued = [
+ item for item in jenkins_queue_items(job_url, timeout)
+ if jenkins_queue_item_matches(item, job_url, check, branch)
+ ]
+ except RECOVERABLE_PROVIDER_ERRORS:
+ return None
+ if not queued:
+ return None
+ item = sorted(queued, key=lambda value: value.get("inQueueSince") or 0)[0]
+ params = jenkins_parameters(item)
+ message = f"queued item {item.get('id')}"
+ if item.get("why"):
+ message = f"{message}: {item['why']}"
+ return make_result(
+ check,
+ branch,
+ IN_PROGRESS,
+ url=job_url,
+ debug_url=jenkins_queue_url(job_url),
+ revision=params.get("after") or params.get("BRANCH"),
+ completed_at=item.get("inQueueSince"),
+ message=message,
+ )
+
+
def jenkins_builds(job_url, check, timeout):
try:
limit = int(check.get("build_scan_limit", 200 if check.get("branch_parameter") else 25))
@@ -722,6 +790,7 @@ def jenkins_badge_check(check, branch, job_url, timeout, api_error=None):
def jenkins_check(check, branch, timeout):
job_url = render_template(check["job_url"], branch).rstrip("/") + "/"
+ queued_result = jenkins_queued_check(check, branch, job_url, timeout)
try:
builds = [
build for build in jenkins_builds(job_url, check, timeout)
@@ -730,6 +799,8 @@ def jenkins_check(check, branch, timeout):
except RECOVERABLE_PROVIDER_ERRORS as exc:
return jenkins_badge_check(check, branch, job_url, timeout, api_error=exc)
if not builds:
+ if queued_result:
+ return queued_result
badge_result = jenkins_badge_check(check, branch, job_url, timeout)
if badge_result["status"] != UNKNOWN or badge_result.get("status_label") == "Not run":
return badge_result
@@ -737,6 +808,9 @@ def jenkins_check(check, branch, timeout):
current = builds[0]
previous = next((build for build in builds[1:] if not build.get("building")), None)
+ if queued_result and not current.get("building"):
+ queued_result.update(previous_fields(normalize_jenkins_status(current), current))
+ return queued_result
result = make_result(
check,
branch,
-----------------------------------------------------------------------
Summary of changes:
utils/ci-status.json | 7 ++++-
utils/ci-status.py | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 80 insertions(+), 1 deletion(-)
hooks/post-receive
--
PostGIS
More information about the postgis-tickets
mailing list