Update front & back
All checks were successful
Tests / Declarative: Post Actions passed: 14
CI-Multi/pipeline/pr-main This commit looks good

This commit is contained in:
2026-02-22 13:16:54 +01:00
parent 6660035fa3
commit 9297bed50e
4 changed files with 66 additions and 9 deletions

View File

@@ -15,6 +15,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import base64
import html
from typing import Dict, List
import requests
@@ -26,11 +27,9 @@ def _sort_builds(builds: List[Dict]) -> List[Dict]:
return sorted(builds, key=lambda build: build.get("number", 0), reverse=True)
def normalize_build(build: Dict) -> Dict:
changes = build.get("changeSets", [])
def _extract_commits(build: Dict) -> List[Dict]:
commits = []
for cs in changes:
for cs in build.get("changeSets", []):
for item in cs.get("items", []):
commits.append(
{
@@ -39,14 +38,33 @@ def normalize_build(build: Dict) -> Dict:
"author": item.get("author", {}).get("fullName", "unknown"),
}
)
return commits
def _extract_trigger(build: Dict) -> str:
for action in build.get("actions", []):
for cause in action.get("causes", []):
description = cause.get("shortDescription")
if description:
return html.unescape(description).strip()
return ""
def normalize_build(build: Dict) -> Dict:
commits = _extract_commits(build)
trigger = _extract_trigger(build)
status = (build.get("result") or "RUNNING").lower()
if build.get("building"):
status = "running"
return {
"number": build.get("number"),
"status": (build.get("result") or "RUNNING").lower(),
"status": status,
"finished_at": build.get("timestamp"),
"duration_seconds": build.get("duration", 0) // 1000,
"url": build.get("url"),
"commits": commits,
"trigger": trigger,
}
@@ -63,15 +81,16 @@ def fetch_builds(limit: int = 5) -> List[Dict]:
raise ValueError("JENKINS_JOB_NAME not configured")
url = (
f"{settings.jenkins_base_url}/job/{settings.jenkins_job_name}/api/json"
"?tree=builds[number,url,result,timestamp,duration,"
"changesets[items[commitId,msg,author[fullName]]]]"
"?tree=builds[number,url,result,timestamp,duration,building,"
"changeSets[items[commitId,msg,author[fullName]]],"
"actions[causes[shortDescription]]]"
)
resp = requests.get(url, headers=_auth_header(), timeout=5)
resp.raise_for_status()
builds = resp.json().get("builds", [])
return builds[:limit]
return _sort_builds(builds)[:limit]
def build_history() -> Dict: