Files
JIRA_SPRINT_EXPORTER/sprint_exporter.py
2026-03-19 14:36:35 +00:00

55 lines
1.8 KiB
Python

import requests
from requests.auth import HTTPBasicAuth
# --- CONFIGURATION ---
JIRA_DOMAIN = "flowbird.atlassian.net"
EMAIL = "david.rice@arrive.com"
API_TOKEN = "ATATT3xFfGF0qWIGGGsvwb0oBnekYh88S8jr8XKbwvRkaoFWwq7cPGS2S5gzZkG-o_JXoDuYR5hOSGiL4GIj5XfTfm05mq313yxmkr8DZqVXDdbgwt8HNcxjLPmcWi9cQDy9wJ-Rc17uXIToYZSvZBCHyWiNZQhh5WlTkTwl0yjgGd-x_F-tOn8=F97E27B2"
BOARD_ID = 3417 # Replace with your board ID
auth = HTTPBasicAuth(EMAIL, API_TOKEN)
headers = {"Accept": "application/json"}
# --- Get All Sprints for the Board ---
sprints_url = f"https://{JIRA_DOMAIN}/rest/agile/1.0/board/{BOARD_ID}/sprint"
sprints = []
start_at = 0
max_results = 50
while True:
params = {"startAt": start_at, "maxResults": max_results}
resp = requests.get(sprints_url, headers=headers, auth=auth, params=params)
resp.raise_for_status()
data = resp.json()
sprints.extend(data.get("values", []))
if data["isLast"]:
break
start_at += max_results
print(f"Found {len(sprints)} sprints.")
# --- Loop Through Each Sprint and Get Issues ---
for sprint in sprints:
sprint_id = sprint["id"]
sprint_name = sprint["name"]
print(f"\nSprint: {sprint_name} (ID: {sprint_id})")
issues_url = f"https://{JIRA_DOMAIN}/rest/agile/1.0/sprint/{sprint_id}/issue"
start_at_issues = 0
while True:
params = {"startAt": start_at_issues, "maxResults": max_results}
issues_resp = requests.get(issues_url, headers=headers, auth=auth, params=params)
issues_resp.raise_for_status()
issues_data = issues_resp.json()
issues = issues_data.get("issues", [])
for issue in issues:
key = issue["key"]
summary = issue["fields"]["summary"]
print(f" {key}: {summary}")
if start_at_issues + max_results >= issues_data["total"]:
break
start_at_issues += max_results