Last active
July 26, 2025 22:58
-
-
Save wjkennedy/47b88a4a960b90b2eae95d3458b439f9 to your computer and use it in GitHub Desktop.
jira-comparator
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 csv | |
| from jira import JIRA | |
| # Configuration for both instances | |
| DC_SERVER = 'https://your-datacenter-jira-instance.com' | |
| DC_API_TOKEN = 'your_dc_api_token' | |
| DC_EMAIL = 'your_dc_email@example.com' | |
| CLOUD_SERVER = 'https://your-cloud-jira-instance.atlassian.net' | |
| CLOUD_API_TOKEN = 'your_cloud_api_token' | |
| CLOUD_EMAIL = 'your_cloud_email@example.com' | |
| # Connect to Jira instances | |
| jira_dc = JIRA(server=DC_SERVER, token_auth=DC_API_TOKEN) | |
| jira_cloud = JIRA(server=CLOUD_SERVER, basic_auth=(CLOUD_EMAIL, CLOUD_API_TOKEN)) | |
| # Utility function to write CSV | |
| def write_csv(filename, data): | |
| if not data: | |
| return | |
| headers = sorted({k for row in data for k in row.keys()}) | |
| with open(filename, mode='w', newline='', encoding='utf-8') as file: | |
| writer = csv.DictWriter(file, fieldnames=headers) | |
| writer.writeheader() | |
| for row in data: | |
| writer.writerow(row) | |
| # Helper to fetch paginated data | |
| def fetch_paginated(method, result_attr='values', **kwargs): | |
| start_at = 0 | |
| max_results = 100 | |
| results = [] | |
| while True: | |
| page = method(startAt=start_at, maxResults=max_results, **kwargs) | |
| items = getattr(page, result_attr, page) if hasattr(page, result_attr) else page | |
| results.extend(items) | |
| if len(items) < max_results: | |
| break | |
| start_at += max_results | |
| return results | |
| # Helper to fetch and export data from a Jira instance | |
| def export_jira_data(jira_instance, suffix): | |
| # Projects | |
| projects = jira_instance.projects() | |
| project_data = [{'key': p.key, 'name': p.name, 'id': p.id} for p in projects] | |
| write_csv(f'projects_{suffix}.csv', project_data) | |
| # Custom Fields | |
| fields = jira_instance.fields() | |
| custom_fields = [f for f in fields if f.get('custom')] | |
| write_csv(f'custom_fields_{suffix}.csv', custom_fields) | |
| # Filters | |
| filters = fetch_paginated(jira_instance.search_filters, result_attr='values') | |
| filter_data = [{'id': f.id, 'name': f.name, 'jql': f.jql, 'owner': f.owner.displayName} for f in filters] | |
| write_csv(f'filters_{suffix}.csv', filter_data) | |
| # Dashboards | |
| dashboards = fetch_paginated(jira_instance.dashboards, result_attr='dashboards') | |
| dashboards_data = [{'id': d.id, 'name': d.name} for d in dashboards] | |
| write_csv(f'dashboards_{suffix}.csv', dashboards_data) | |
| # Groups | |
| groups_response = jira_instance.groups() | |
| group_data = [{'name': g} for g in groups_response.get('groups', [])] | |
| write_csv(f'groups_{suffix}.csv', group_data) | |
| # Users | |
| users = fetch_paginated(jira_instance.search_users, query='.') | |
| user_data = [{'name': u.displayName, 'email': getattr(u, 'emailAddress', 'N/A')} for u in users] | |
| write_csv(f'users_{suffix}.csv', user_data) | |
| # Issue Types | |
| issue_types = jira_instance.issue_types() | |
| issue_type_data = [{'id': it.id, 'name': it.name, 'description': it.description} for it in issue_types] | |
| write_csv(f'issue_types_{suffix}.csv', issue_type_data) | |
| # Priorities | |
| priorities = jira_instance.priorities() | |
| priority_data = [{'id': p.id, 'name': p.name, 'description': p.description} for p in priorities] | |
| write_csv(f'priorities_{suffix}.csv', priority_data) | |
| # Resolutions | |
| resolutions = jira_instance.resolutions() | |
| resolution_data = [{'id': r.id, 'name': r.name, 'description': r.description} for r in resolutions] | |
| write_csv(f'resolutions_{suffix}.csv', resolution_data) | |
| # Statuses | |
| statuses = jira_instance.statuses() | |
| status_data = [{'id': s.id, 'name': s.name, 'description': s.description} for s in statuses] | |
| write_csv(f'statuses_{suffix}.csv', status_data) | |
| # Components | |
| for project in projects: | |
| components = jira_instance.project_components(project.id) | |
| component_data = [{'project': project.key, 'name': c.name, 'description': getattr(c, 'description', '')} for c in components] | |
| write_csv(f'components_{suffix}_{project.key}.csv', component_data) | |
| # Versions | |
| for project in projects: | |
| versions = jira_instance.project_versions(project.id) | |
| version_data = [{'project': project.key, 'name': v.name, 'description': getattr(v, 'description', '')} for v in versions] | |
| write_csv(f'versions_{suffix}_{project.key}.csv', version_data) | |
| # Export from both instances | |
| export_jira_data(jira_dc, 'dc') | |
| export_jira_data(jira_cloud, 'cloud') | |
| print("Export complete. CSV files for both DC and Cloud have been created.") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment