Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ verify_ssl = true
[packages]
flask = "~=2.3.0"
requests = "~=2.32.3"
jira = "~=3.0.0"
jira = "~=3.10.0"
logging-formatter-anticrlf = "~=1.2.1"

[dev-packages]
Expand Down
8 changes: 7 additions & 1 deletion action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ inputs:
description: 'Custom reopen state'
required: false
default: 'To Do'
jira_api_version:
description: 'Jira REST API version. Use "3" for Jira Cloud (default), "2" for Jira Server/Data Center.'
required: false
default: '3'
runs:
using: composite
steps:
Expand All @@ -51,6 +55,7 @@ runs:
INPUTS_SYNC_DIRECTION: ${{ inputs.sync_direction }}
INPUTS_ISSUE_END_STATE: ${{ inputs.issue_end_state }}
INPUTS_ISSUE_REOPEN_STATE: ${{ inputs.issue_reopen_state }}
INPUTS_JIRA_API_VERSION: ${{ inputs.jira_api_version }}
run: |
pip3 install pipenv
pipenv install
Expand All @@ -68,4 +73,5 @@ runs:
--jira-labels "$INPUTS_JIRA_LABELS" \
--direction "$INPUTS_SYNC_DIRECTION" \
--issue-end-state "$INPUTS_ISSUE_END_STATE" \
--issue-reopen-state "$INPUTS_ISSUE_REOPEN_STATE"
--issue-reopen-state "$INPUTS_ISSUE_REOPEN_STATE" \
--jira-api-version "$INPUTS_JIRA_API_VERSION"
13 changes: 9 additions & 4 deletions cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def serve(args):
fail("No Webhook secret specified!")

github = ghlib.GitHub(args.gh_url, args.gh_token)
jira = jiralib.Jira(args.jira_url, args.jira_user, args.jira_token)
jira = jiralib.Jira(args.jira_url, args.jira_user, args.jira_token, args.jira_api_version)
s = Sync(
github,
jira.getProject(args.jira_project, args.jira_labels),
Expand Down Expand Up @@ -81,7 +81,7 @@ def sync(args):
fail("No GitHub repository specified!")

github = ghlib.GitHub(args.gh_url, args.gh_token)
jira = jiralib.Jira(args.jira_url, args.jira_user, args.jira_token)
jira = jiralib.Jira(args.jira_url, args.jira_user, args.jira_token, args.jira_api_version)
jira_project = jira.getProject(
args.jira_project,
args.issue_end_state,
Expand Down Expand Up @@ -143,7 +143,7 @@ def install_hooks(args):
if args.jira_url:
if not args.jira_user or not args.jira_token:
fail("No JIRA credentials specified!")
jira = jiralib.Jira(args.jira_url, args.jira_user, args.jira_token)
jira = jiralib.Jira(args.jira_url, args.jira_user, args.jira_token, args.jira_api_version)
jira.create_hook("github_jira_synchronization_hook", args.hook_url, args.secret)


Expand Down Expand Up @@ -175,7 +175,7 @@ def list_hooks(args):
if not args.jira_user or not args.jira_token:
fail("No JIRA credentials specified!")

jira = jiralib.Jira(args.jira_url, args.jira_user, args.jira_token)
jira = jiralib.Jira(args.jira_url, args.jira_user, args.jira_token, args.jira_api_version)

for h in jira.list_hooks():
print(json.dumps(h, indent=4))
Expand Down Expand Up @@ -203,6 +203,11 @@ def main():
)
credential_base.add_argument("--jira-project", help="JIRA project key")
credential_base.add_argument("--jira-labels", help="JIRA bug label(s)")
credential_base.add_argument(
"--jira-api-version",
help="JIRA REST API version (default: 3). Use '2' for Jira Server/Data Center.",
default=os.getenv("GH2JIRA_JIRA_API_VERSION", "3"),
)
credential_base.add_argument(
"--secret",
help="Webhook secret. Alternatively, the GH2JIRA_SECRET may be set.",
Expand Down
8 changes: 4 additions & 4 deletions jiralib.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,11 @@


class Jira:
def __init__(self, url, user, token):
def __init__(self, url, user, token, api_version="3"):
self.url = url
self.user = user
self.token = token
self.j = JIRA(url, basic_auth=(user, token))
self.j = JIRA(url, basic_auth=(user, token), options={"rest_api_version": api_version})

def auth(self):
return self.user, self.token
Expand Down Expand Up @@ -119,7 +119,7 @@ def get_state_issue(self, issue_key="-"):
issues = list(
filter(
lambda i: i.fields.summary == STATE_ISSUE_SUMMARY,
self.j.search_issues(issue_search, maxResults=0),
self.j.enhanced_search_issues(issue_search, maxResults=0),
)
)

Expand Down Expand Up @@ -218,7 +218,7 @@ def fetch_issues(self, key):
lambda i: i.is_managed(),
[
JiraIssue(self, raw)
for raw in self.j.search_issues(issue_search, maxResults=0)
for raw in self.j.enhanced_search_issues(issue_search, maxResults=0)
],
)
)
Expand Down
Loading