Skip to content

Instantly share code, notes, and snippets.

@wjkennedy
Last active July 26, 2025 22:58
Show Gist options
  • Select an option

  • Save wjkennedy/47b88a4a960b90b2eae95d3458b439f9 to your computer and use it in GitHub Desktop.

Select an option

Save wjkennedy/47b88a4a960b90b2eae95d3458b439f9 to your computer and use it in GitHub Desktop.
jira-comparator
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