Skip to content

Commit 1b228a1

Browse files
authored
Merge pull request #450 from ricardobranco777/missing_jira
openqa-list-incidents: Fetch missing Jira issues
2 parents 7090e99 + fc50ff6 commit 1b228a1

File tree

1 file changed

+38
-3
lines changed

1 file changed

+38
-3
lines changed

openqa-list-incidents

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,37 @@ def get_bugzilla_issues(issues: list[str]) -> list[dict]:
6262
return bugs
6363

6464

65-
def get_jira_issues(issues: list[str]) -> list[dict]:
65+
def get_jira_issue(url: str) -> dict | None:
66+
"""
67+
Get Jira issue
68+
"""
69+
if not JIRA_TOKEN:
70+
return None
71+
issue = os.path.basename(url)
72+
api_url = f"https://jira.suse.com/rest/api/2/issue/{issue}"
73+
headers = {"Authorization": f"Bearer {JIRA_TOKEN}"}
74+
params = {"fields": "summary"}
75+
try:
76+
got = session.get(api_url, headers=headers, params=params, timeout=TIMEOUT)
77+
got.raise_for_status()
78+
data = got.json()
79+
except RequestException as exc:
80+
print(f"ERROR: {api_url}: {exc}", file=sys.stderr)
81+
return None
82+
return {
83+
"id": issue,
84+
"title": data["fields"]["summary"],
85+
"url": f"https://jira.suse.com/browse/{issue}",
86+
}
87+
88+
89+
def get_jira_issues(urls: list[str]) -> list[dict]:
6690
"""
6791
Get Jira issues
6892
"""
6993
if not JIRA_TOKEN:
7094
return []
71-
issues = [os.path.basename(i) for i in issues]
95+
issues = [os.path.basename(i) for i in urls]
7296
url = "https://jira.suse.com/rest/api/2/search"
7397
headers = {"Authorization": f"Bearer {JIRA_TOKEN}"}
7498
bugs = []
@@ -85,10 +109,21 @@ def get_jira_issues(issues: list[str]) -> list[dict]:
85109
return []
86110
bugs.extend(
87111
[
88-
{"id": issue["key"], "summary": issue["fields"]["summary"]}
112+
{
113+
"id": issue["key"],
114+
"summary": issue["fields"]["summary"],
115+
"url": f"https://jira.suse.com/browse/{issue['key']}",
116+
}
89117
for issue in got.json()["issues"]
90118
]
91119
)
120+
# Some Jira issues may be missing because they were renamed, etc
121+
missing = [u for u in urls if u not in set(b["url"] for b in bugs)]
122+
if missing:
123+
with ThreadPoolExecutor() as executor:
124+
for bug in executor.map(get_jira_issue, missing):
125+
if bug is not None:
126+
bugs.append(bug)
92127
return bugs
93128

94129

0 commit comments

Comments
 (0)