Update front & back
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user