Commit 4a5ce8f0b3e5
Changed files (1)
dots
agents
skills
quarterly-report
reference
dots/agents/skills/quarterly-report/reference/generate.py
@@ -16,8 +16,9 @@
# The advisory table (adv_rows + group headers + Outcome badges) and the
# stats strip are data-driven and portable across quarters.
-import json, html
-from collections import Counter, defaultdict
+import json
+import html
+from collections import defaultdict
d = json.load(open('/tmp/q2-daily-plan.json'))
style = open('/tmp/q2-style.html').read()
@@ -35,7 +36,8 @@ n_repos = len(set(x['repo'] for x in merged+reviewed+issues))
# group helper
def by_repo(items):
g = defaultdict(list)
- for x in items: g[x['repo']].append(x)
+ for x in items:
+ g[x['repo']].append(x)
# order by count desc
return sorted(g.items(), key=lambda kv: -len(kv[1]))
@@ -44,9 +46,12 @@ CORE = {'tektoncd/pipeline','tektoncd/cli','tektoncd/operator','tektoncd/trigger
INFRA = {'tektoncd/plumbing','tektoncd/infra','openshift-pipelines/plumbing','tektoncd/.github','tektoncd/actions'}
def group_label(repo):
- if repo in CORE: return ('โก Tekton Core', 0)
- if repo in INFRA: return ('๐ง CI / Infrastructure', 1)
- if repo.startswith('openshift-pipelines'): return ('๐ OpenShift Pipelines', 2)
+ if repo in CORE:
+ return ('โก Tekton Core', 0)
+ if repo in INFRA:
+ return ('๐ง CI / Infrastructure', 1)
+ if repo.startswith('openshift-pipelines'):
+ return ('๐ OpenShift Pipelines', 2)
return ('๐ Community, Catalog & Website', 3)
def pr_rows(items, limit_per_repo=12):
@@ -72,7 +77,9 @@ def pr_rows(items, limit_per_repo=12):
def jira_rows():
out=[]
for j in jira:
- key=j.get('key'); summ=j.get('summary'); st=j.get('status','Closed')
+ key=j.get('key')
+ summ=j.get('summary')
+ st=j.get('status','Closed')
url=f"https://issues.redhat.com/browse/{key}"
out.append(
f'<tr><td><a href="{esc(url)}" target="_blank" class="key-badge">{esc(key)}</a></td>'
@@ -90,11 +97,16 @@ def adv_rows(items):
state_style={'closed':'green','published':'red','draft':'amber','triage':'blue','withdrawn':'purple'}
state_label={'closed':'Closed','published':'Published','draft':'Draft','triage':'In triage','withdrawn':'Withdrawn'}
for a in items:
- ghsa=a.get('ghsa_id'); cve=a.get('cve_id'); sev=a.get('severity'); summ=a.get('summary'); url=a.get('url') or (f"https://github.com/advisories/{ghsa}" if ghsa else '#')
+ ghsa=a.get('ghsa_id')
+ cve=a.get('cve_id')
+ sev=a.get('severity')
+ summ=a.get('summary')
+ url=a.get('url') or (f"https://github.com/advisories/{ghsa}" if ghsa else '#')
st=a.get('state') or ''
cve_badge=f'<span class="cve-badge">{esc(cve)}</span>' if cve else ''
sevtag={'critical':'red','high':'red','medium':'amber','low':'blue'}.get(sev,'blue')
- sttag=state_style.get(st,'blue'); stlabel=state_label.get(st,st or '-')
+ sttag=state_style.get(st,'blue')
+ stlabel=state_label.get(st,st or '-')
out.append(
f'<tr><td><a class="pr-link" href="{esc(url)}" target="_blank">{esc(ghsa)}</a>{cve_badge}</td>'
f'<td>{esc(summ)}</td>'