summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-x.local/bin/jira-CR.php79
-rwxr-xr-x.local/bin/jira-codereview46
2 files changed, 125 insertions, 0 deletions
diff --git a/.local/bin/jira-CR.php b/.local/bin/jira-CR.php
new file mode 100755
index 0000000..e87d265
--- /dev/null
+++ b/.local/bin/jira-CR.php
@@ -0,0 +1,79 @@
+#!/usr/bin/env php
+<?php
+$padlen = 50;
+print(str_pad("\rGetting tickets from jira...", $padlen));
+$tickets = explode("\n", rtrim(`jira-cli issues list -q"project IS NOT EMPTY and project != AUTO and project != NET and project != MSP and project != SYST and project != LOYAL" --order-by="Sprint" -s"Code Review" --columns=KEY --plain | grep -v '^KEY$'`));
+
+print(str_pad("\rGetting OnBDC2 PR's from github...", $padlen));
+$prs_jsons[] = json_decode(`gh pr list -R BetterCarPeople/OnBDC2 --json 'title,url,statusCheckRollup,reviews,author,reviewDecision,reviewRequests,headRefName'`, true);
+print(str_pad("\rGetting maple-ai PR's from github...", $padlen));
+$prs_jsons[] = json_decode(`gh pr list -R BetterCarPeople/maple-ai --json 'title,url,statusCheckRollup,reviews,author,reviewDecision,reviewRequests,headRefName'`, true);
+print(str_pad("\rGetting maple-web PR's from github...", $padlen));
+$prs_jsons[] = json_decode(`gh pr list -R BetterCarPeople/maple-web --json 'title,url,statusCheckRollup,reviews,author,reviewDecision,reviewRequests,headRefName'`, true);
+
+print(str_pad("\r", $padlen));
+print("\r");
+
+$prs_json = array_merge(...$prs_jsons);
+$output = "";
+foreach ($prs_json as $pr) {
+    $pr_ticket = null;
+    $pr_ticket = in_array($pr['headRefName'], $tickets) ? $pr['headRefName'] : null;
+    $pr_ticket ??= (preg_match("/^[^: ]*/", $pr['title'], $matches) && in_array($matches[0], $tickets)) ? $matches[0] : null;
+    if ($pr_ticket) {
+        // These are github PR's that are in code review in Jira
+        $title = str_pad($pr['title'], 38);
+        if (strlen($title) > 38) {
+            $title = substr($title,0,35)."...";
+        }
+        $author = $pr['author']['login'];
+
+        // Show approvers
+        $review_status = "";
+
+        $changeNames = [];
+        foreach ($pr['reviews'] as $r) {
+            if ($r['state'] === "CHANGES_REQUESTED") {
+                $changeNames[] = $r['author']['login'];
+            }
+        }
+        $changes = $changeNames ? (str_repeat("❌", count($changeNames)) . ": " . implode(", ", $changeNames) . '. ') : '';
+
+        $requestNames = [];
+        foreach ($pr['reviewRequests'] as $rr) {
+            if ($rr['__typename'] === "Team") {
+                $requestNames[] = $rr['name'];
+            } else {
+                $requestNames[] = $rr['login'];
+            }
+        }
+        $reviewRequests = $requestNames ? (str_repeat("🟡", count($requestNames)) . ": " . implode(", ", $requestNames) . '. ') : '';
+
+        $approvers = [];
+        foreach ($pr['reviews'] as $r) {
+            if ($r['state'] === "APPROVED") {
+                $approvers[] = $r['author']['login'];
+            }
+        }
+        $approvals = $approvers ? (str_repeat("✅", count($approvers)) . ": " . implode(", ", $approvers) . '. ') : '';
+
+        $commentNames = [];
+        foreach ($pr['reviews'] as $r) {
+            $newName = $r['author']['login'];
+            if ($r['state'] === "COMMENTED" && !in_array($newName, $approvers) && !in_array($newName, $requestNames) && $newName != $author) {
+                $commentNames[] = $newName;
+            }
+        }
+        $commentNames = array_unique($commentNames);
+        $comments = $commentNames ? (str_repeat("💬", count($commentNames)) . ": " . implode(", ", $commentNames) . '. ') : '';
+
+        $review_status = $changes . $reviewRequests . $approvals . $comments;
+        // Show review requested for
+        // show other review statuses
+        
+        echo "$pr[url]?T=$title($author)\t$review_status\n";
+    }
+}
+exit(1);
+
+
diff --git a/.local/bin/jira-codereview b/.local/bin/jira-codereview
new file mode 100755
index 0000000..9fbdfc3
--- /dev/null
+++ b/.local/bin/jira-codereview
@@ -0,0 +1,46 @@
+#!/bin/sh
+if test "$1"; then
+    ticket=$1
+else
+    ticket=$(jira-cli issues list -q"project IS NOT EMPTY and project != AUTO and project != NET and project != MSP and project != SYST and project != LOYAL" --order-by="Sprint" -s"Code Review" --columns=KEY,PRIORITY,SUMMARY,ASSIGNEE | fzf --print-query | tail -n1 | cut -f1)
+    ticket=$(printf "%s" $ticket)
+fi
+if test "$ticket"; then
+    echo "Reviewing $ticket ..."
+    # ugh
+    #xdg-open https://proactivedealersolutions.atlassian.net/browse/$ticket
+    xdg-open "https://github.com/pulls?q=is%3Aopen+is%3Apr+user%3ABetterCarPeople+$ticket"
+    #xdg-open "https://github.com/search?q=is%3Aopen+is%3Apr+org%3ABetterCarPeople+$ticket"
+else
+    exit 1;
+fi
+
+start=$(date +%H%M)
+start_uts=$(date +%s)
+#started="$(date -Iseconds | tr 'T' ' ')"
+started="$(date +'%Y-%m-%d %H:%M:%S')"
+tz="America/New_York"
+
+date
+echo "Press enter when you're done reviewing"
+read -r hi
+date
+
+end=$(date +%H%M)
+end_uts=$(date +%s)
+
+printf "%s - %s %s CR\n" "$start" "$end" "$ticket"
+minutes_rounded_up=$(( ((($end_uts - $start_uts )/300)+ 1 ) * 5 ))
+printf "should log %dm\n" "$minutes_rounded_up"
+
+
+jira-cli issue worklog add "$ticket" --comment="CR" --started="$started" --timezone="$tz"
+
+printf "%s - %s %s CR\n" "$start" "$end" "$ticket" | wl-copy
+
+
+echo "Do you want to move the ticket?"
+echo 'jira-cli issue edit '$ticket' --label DBA_Approved --no-input'
+echo 'jira-cli issue move '$ticket' "Check out My Work"' #"Pending Demo"'
+echo 'jira-cli issue edit '$ticket' --label "Post-mortem_(Demo)" --no-input && jira-cli issue move '$ticket' "Testing"'
+