Created
August 21, 2025 09:24
-
-
Save vikrantyadav11/38d4b36cad21e74268884062e8b572ee to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import requests | |
| import csv | |
| # Jira credentials (hardcoded for now) | |
| EMAIL = "[email protected]" | |
| API_TOKEN = "your_api_token" | |
| BASE_URL = "https://YOU_DOMAIN.atlassian.net/rest/api/3" | |
| AUTH = (EMAIL, API_TOKEN) | |
| HEADERS = {"Accept": "application/json"} | |
| def get_projects(): | |
| """Fetch all Jira projects""" | |
| url = f"{BASE_URL}/project" | |
| response = requests.get(url, auth=AUTH, headers=HEADERS) | |
| response.raise_for_status() | |
| return response.json() | |
| def get_project_workflow_scheme(project_id): | |
| """Fetch workflow scheme for a project""" | |
| url = f"{BASE_URL}/workflowscheme/project?projectId={project_id}" | |
| response = requests.get(url, auth=AUTH, headers=HEADERS) | |
| response.raise_for_status() | |
| data = response.json() | |
| if "values" in data and len(data["values"]) > 0: | |
| return data["values"][0]["workflowScheme"] | |
| return None | |
| def get_workflow_scheme_details(workflow_url): | |
| """Fetch workflow scheme details from self URL""" | |
| response = requests.get(workflow_url, auth=AUTH, headers=HEADERS) | |
| response.raise_for_status() | |
| return response.json() | |
| def main(): | |
| projects = get_projects() | |
| all_issue_types = set() | |
| project_data = [] | |
| # First pass: gather all issue types across projects | |
| for project in projects: | |
| category = project.get("projectCategory", {}).get("name", "") | |
| if category == "Active Release Projects": | |
| project_id = project["id"] | |
| project_key = project["key"] | |
| project_name = project["name"] | |
| workflow_scheme = get_project_workflow_scheme(project_id) | |
| if workflow_scheme: | |
| wf_name = workflow_scheme.get("name", "") | |
| wf_self = workflow_scheme.get("self", "") | |
| # Fetch detailed workflow scheme (issueTypes + mappings) | |
| wf_details = get_workflow_scheme_details(wf_self) | |
| default_wf = wf_details.get("defaultWorkflow", "") | |
| issue_types = wf_details.get("issueTypes", {}) | |
| mappings = wf_details.get("issueTypeMappings", {}) | |
| # Build a mapping of issue type name → workflow | |
| mapping_resolved = {} | |
| for issue_id, wf in mappings.items(): | |
| issue_name = issue_types.get(issue_id, {}).get("name", f"Unknown({issue_id})") | |
| mapping_resolved[issue_name] = wf | |
| all_issue_types.add(issue_name) | |
| project_data.append({ | |
| "Project ID": project_id, | |
| "Project Key": project_key, | |
| "Project Name": project_name, | |
| "Workflow Scheme Name": wf_name, | |
| "Default Workflow": default_wf, | |
| "Issue Mappings": mapping_resolved | |
| }) | |
| # Prepare CSV with wide format | |
| fieldnames = ["Project ID", "Project Key", "Project Name", "Workflow Scheme Name", "Default Workflow"] + sorted(all_issue_types) | |
| with open("jira_projects_workflows.csv", "w", newline="", encoding="utf-8") as f: | |
| writer = csv.DictWriter(f, fieldnames=fieldnames) | |
| writer.writeheader() | |
| for pdata in project_data: | |
| row = { | |
| "Project ID": pdata["Project ID"], | |
| "Project Key": pdata["Project Key"], | |
| "Project Name": pdata["Project Name"], | |
| "Workflow Scheme Name": pdata["Workflow Scheme Name"], | |
| "Default Workflow": pdata["Default Workflow"] | |
| } | |
| # Fill workflow per issue type (leave blank if missing) | |
| for itype in all_issue_types: | |
| row[itype] = pdata["Issue Mappings"].get(itype, "") | |
| writer.writerow(row) | |
| print("CSV file 'jira_projects_workflows.csv' generated successfully.") | |
| if __name__ == "__main__": | |
| main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment