From 903ee5bd8dc9d41e778f64b85f955b39882350f1 Mon Sep 17 00:00:00 2001 From: Ralph Bean Date: Jun 15 2016 20:28:33 +0000 Subject: Merge branch 'release/0.2' --- diff --git a/.gitignore b/.gitignore index 74e40f7..59c3958 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ fedmsg.d/zz_sync2jira.py .eggs .coverage .tox +dist diff --git a/MANIFEST.in b/MANIFEST.in index 340ff2d..2e03475 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,3 +4,4 @@ include CHANGELOG.rst include fedmsg.d/sync2jira.py include requirements.txt include test-requirements.txt +include systemd/sync2jira.service diff --git a/fedmsg.d/sync2jira.py b/fedmsg.d/sync2jira.py index 47e5317..dccc95e 100644 --- a/fedmsg.d/sync2jira.py +++ b/fedmsg.d/sync2jira.py @@ -31,7 +31,7 @@ config = { 'map': { 'pagure': { 'pungi': { 'project': 'COMPOSE', 'component': 'Pungi', }, - #'koji': { 'project': 'RCMPROJ', 'component': 'Brew', }, + #'koji': { 'project': 'BREW', 'component': None, }, }, 'github': { #'product-definition-center/product-definition-center': { diff --git a/setup.py b/setup.py index e24c9d0..c3e2acb 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ with open('test-requirements.txt', 'rb') as f: setup( name='sync2jira', - version='0.1', + version='0.2', description="Sync pagure and github issues to jira, via fedmsg", long_description=long_description, author='Ralph Bean', diff --git a/sync2jira/downstream.py b/sync2jira/downstream.py index c4f1b18..b85528f 100644 --- a/sync2jira/downstream.py +++ b/sync2jira/downstream.py @@ -33,8 +33,9 @@ def get_existing_jira_issues(downstream, config): client = jira.client.JIRA(**config['sync2jira']['jira']) query = " AND ".join([ "=".join([k, v]) for k, v in downstream.items() + if v is not None ]) + " AND resolution is null" - results = client.search_issues(query, maxResults=500) + results = client.search_issues(query) # TODO -- handle pagination here... jira_cache[key] = results return jira_cache[key] @@ -46,15 +47,20 @@ def create_jira_issue(issue, config): log.info("Testing flag is true. Skipping actual creation.") else: client = jira.client.JIRA(**config['sync2jira']['jira']) - return client.create_issue( + kwargs = dict( summary=issue.title, description=issue.url, - project=issue.downstream['project'], - component=issue.downstream['component'], + issuetype=dict(name="Bug"), # TODO - make this configurable per stream ) + if issue.downstream['project']: + kwargs['project'] = dict(key=issue.downstream['project']) + if issue.downstream['component']: + kwargs['components'] = [dict(name=issue.downstream['component'])] # TODO - make this a list in the config + return client.create_issue(**kwargs) def sync_with_jira(issue, config): existing_issues = get_existing_jira_issues(issue.downstream, config) - if issue.title not in [i.fields.summary for i in existing_issues]: + existing_summaries = [i.fields.summary for i in existing_issues] + if issue.title not in existing_summaries: create_jira_issue(issue, config) diff --git a/systemd/sync2jira.service b/systemd/sync2jira.service new file mode 100644 index 0000000..33f29c9 --- /dev/null +++ b/systemd/sync2jira.service @@ -0,0 +1,14 @@ +[Unit] +Description=Synchronizes a JIRA instance with tickets filed on pagure and github +After=network.target +Documentation=https://pagure.io/sync-to-jira + +[Service] +ExecStart=/usr/bin/sync2jira +Type=simple +User=fedmsg +Group=fedmsg +Restart=on-failure + +[Install] +WantedBy=multi-user.target