From 22fe79fa8014a013ef06f61201d4562e3c33df42 Mon Sep 17 00:00:00 2001 From: Noah Masur <7386960+nmasur@users.noreply.github.com> Date: Wed, 5 May 2021 20:50:10 -0400 Subject: [PATCH] jira git branch tool --- bin/jira-checkout | 37 +++++++++++++++++++++++++++++++++++++ bin/jira-details | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100755 bin/jira-checkout create mode 100755 bin/jira-details diff --git a/bin/jira-checkout b/bin/jira-checkout new file mode 100755 index 0000000..e677be7 --- /dev/null +++ b/bin/jira-checkout @@ -0,0 +1,37 @@ +#!/bin/sh + +# Adapted from: https://seb.jambor.dev/posts/improving-shell-workflows-with-fzf/ +# Requires the following variables to be set: +# - ATLASSIAN_EMAIL +# - ATLASSIAN_API_TOKEN +# - JIRA_HOSTNAME +# - JIRA_PROJECT + +choose_issue() { + jq_template='"\(.key): \(.fields.summary)"' + query="project=$JIRA_PROJECT AND status not in (\"Done\") AND assignee=currentUser()" + + branch_name=$( + curl \ + --data-urlencode "jql=$query" \ + --get \ + --user "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN" \ + --silent \ + --compressed \ + "https://$JIRA_HOSTNAME/rest/api/2/search" | + jq ".issues[] | $jq_template" | + sed -e 's/"\(.*\)"/\1/' | + fzf \ + --preview='jira-details {1}' \ + --preview-window=top:wrap | + sed -e 's/: /:/' -e 's/[^a-zA-Z0-9:]/-/g' | + awk -F ":" '{printf "%s/%s", $1, tolower($2)}' + ) + + echo "$branch_name" +} + +issue_branch=$(choose_issue) +if [ -n "$issue_branch" ]; then + git checkout -b "$issue_branch" +fi diff --git a/bin/jira-details b/bin/jira-details new file mode 100755 index 0000000..7d73fc5 --- /dev/null +++ b/bin/jira-details @@ -0,0 +1,38 @@ +#!/bin/sh + +# Adapted from: https://seb.jambor.dev/posts/improving-shell-workflows-with-fzf/ +# Requires the following variables to be set: +# - ATLASSIAN_EMAIL +# - ATLASSIAN_API_TOKEN +# - JIRA_HOSTNAME +# - JIRA_PROJECT (for other script) + +issue_details() { + jira_key=$(echo "$1" | cut -d":" -f1) + jq_template='"'\ +'# \(.key): \(.fields.summary)\n'\ +'\n'\ +'*Created*: \(.fields.created)\n'\ +'*Status*: \(.fields.status.statusCategory.name)\n'\ +'*Reporter*: \(.fields.reporter.displayName)\n'\ +'*Priority*: \(.fields.priority.name)\n'\ +"*Epic*: https://$JIRA_HOSTNAME/browse/\(.fields.customfield_10014)\n"\ +'\n'\ +'## Link\n\n'\ +"https://$JIRA_HOSTNAME/browse/\(.key)\n"\ +'\n'\ +'## Description\n\n'\ +'\(.fields.description)'\ +'"' + curl \ + --get \ + --user "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN" \ + --silent \ + --compressed \ + "https://$JIRA_HOSTNAME/rest/api/2/issue/$jira_key" | + jq "$jq_template" | + xargs printf | + bat -l md --color always --style plain +} + +issue_details "$1"