2021-12-12 21:05:43 +01:00
#!/bin/bash
set -ouo > /dev/null 2>& 1
if [ $# -eq 0 ] ; then
echo "No parameters provided."
echo "Syntax: ./list-missing-commits-by-issue-key.sh <fix-version> <since-tag-name> <to-tag-name>"
echo ""
echo " fix-version : The Jira version for which issues will be compared against the Git history"
echo " since-tag-name : The starting tag to begin inspecting Git history from"
echo " to-tag-name : The ending tag to stop inspecting Git history to"
2022-01-06 18:58:38 +01:00
echo " jira-token : Your Jira access token for authentication"
2021-12-12 21:05:43 +01:00
echo ""
echo "An example of comparing the issues in Jira for 1.8.0.CR1 with Git history would be:"
echo " ./list-missing-commits-by-issue-key.sh 1.8.0.CR1 v1.8.0.Beta1 v1.8.0.CR1"
echo ""
exit 1
fi
FIX_VERSION = $1
SINCE_TAG_NAME = $2
TO_TAG_NAME = $3
2022-01-06 18:58:38 +01:00
JIRA_TOKEN = $4
2021-12-12 21:05:43 +01:00
DIR = " $HOME /debezium-issues "
mkdir -p $DIR
JIRA_URL = "https://issues.redhat.com"
PROJECT_NAME = "Debezium"
GITHUB_REPO_URL = "https://api.github.com/repos/debezium"
EXCLUDED_JIRA_COMPONENTS = "examples,website,user-interface-frontend"
ISSUE_KEYS = " $DIR /debezium-version-issue-keys.txt "
GIT_HISTORY_PREFIX = " $DIR /git-history "
ISSUE_CHECK = " $DIR /issue-check.txt "
SCRIPT_OUTPUT_BAD = " $DIR /debezium-backport-results-not-exists.txt "
SCRIPT_OUTPUT_OK = " $DIR /debezium-backport-results-found.txt "
2022-01-11 16:10:27 +01:00
rc = 0
# Recursive method to check if commit message keys exist in Jira issue list
function handleGitHistoryCommitMessageIssueKeys {
REGEX = '(DBZ-[0-9]+)+'
ARG = $1
if [ [ $ARG = ~ $REGEX ] ] ; then
REGEX_KEY = " ${ BASH_REMATCH [1] } "
cat " $ISSUE_KEYS " | grep " $REGEX_KEY " > " $ISSUE_CHECK "
if [ -s " $ISSUE_CHECK " ] ; then
# The commit message key does not exist in Jira; add it to the not-found file
cat " $SCRIPT_OUTPUT_BAD " | grep " $REGEX_KEY " > " $ISSUE_CHECK "
if [ -s " $ISSUE_CHECK " ] ; then
echo " $REGEX_KEY - $JIRA_URL /browse/ $REGEX_KEY " >> " $SCRIPT_OUTPUT_BAD "
rc = 1
fi
fi
# Call method recursively to handle multiple issue keys per commit message
handleGitHistoryCommitMessageIssueKeys " ${ ARG / ${ BASH_REMATCH [0] } / } "
fi
}
2021-12-12 21:05:43 +01:00
# Repositories to check for existence of commits
2023-06-13 16:33:28 +02:00
declare -a DEBEZIUM_REPOS = ( "debezium" "debezium-server" "debezium-operator" "debezium-connector-db2" "debezium-connector-cassandra" "debezium-connector-vitess" "debezium-connector-spanner" "debezium-connector-jdbc" "container-images" )
2021-12-12 21:05:43 +01:00
# Obtain all issue keys that are part of the fixed version
echo " Getting issues from Jira for project $PROJECT_NAME and version $FIX_VERSION "
echo " components excluded: $EXCLUDED_JIRA_COMPONENTS "
echo ""
2022-01-06 18:58:38 +01:00
curl --silent -X "GET" -H " Authorization: Bearer ${ JIRA_TOKEN } " " $JIRA_URL /rest/api/2/search?jql=project= $PROJECT_NAME %20and%20fixVersion= $FIX_VERSION %20and%20component%20not%20in%20( $EXCLUDED_JIRA_COMPONENTS ) " | jq -r '.issues[].key' > " $ISSUE_KEYS " 2> /dev/null
2021-12-12 21:05:43 +01:00
# Obtain all history between tags for each repository
for REPO in " ${ DEBEZIUM_REPOS [@] } " ;
do
echo " Getting git history for repository $REPO "
GIT_HISTORY_FILE = " $GIT_HISTORY_PREFIX - $REPO .txt "
curl --silent -X "GET" " ${ GITHUB_REPO_URL } / $REPO /compare/ $SINCE_TAG_NAME ... $TO_TAG_NAME " | jq ".commits[] | .commit.message" > " $GIT_HISTORY_FILE "
done
# Read each issue key and verify that at least one commit in one repository exists for the key
2022-01-10 20:22:14 +01:00
echo ""
echo " Comparing Jira issue list with all ${# DEBEZIUM_REPOS [@] } repository git histories "
2021-12-12 21:05:43 +01:00
while IFS = " " read -r ISSUE_KEY
do
# Iterate each repository history file
ISSUE_KEY_FOUND = 0
for REPO in " ${ DEBEZIUM_REPOS [@] } " ;
do
GIT_HISTORY_FILE = " $GIT_HISTORY_PREFIX - $REPO .txt "
cat " $GIT_HISTORY_FILE " | grep " $ISSUE_KEY " > " $ISSUE_CHECK "
if [ -s " $ISSUE_CHECK " ] ; then
# The file isn't empty, so the issue key was found
ISSUE_KEY_FOUND = 1
fi
done
if [ $ISSUE_KEY_FOUND -eq 0 ] ; then
# Issue key was not found
echo " $ISSUE_KEY - $JIRA_URL /browse/ $ISSUE_KEY " >> " $SCRIPT_OUTPUT_BAD "
2022-01-11 16:10:27 +01:00
rc = 1
2021-12-12 21:05:43 +01:00
else
# Issue key was found
echo " $ISSUE_KEY - $JIRA_URL /browse/ $ISSUE_KEY " >> " $SCRIPT_OUTPUT_OK "
fi
done < $ISSUE_KEYS
2022-01-10 20:22:14 +01:00
# For each repository, read the commit message history and verify that each commit message's issue
# keys are in the Jira issue key list. Any that are not will automatically be added to the missing
# list.
echo ""
for REPO in " ${ DEBEZIUM_REPOS [@] } " ;
do
echo " Comparing git history $REPO with Jira issue list "
GIT_HISTORY_FILE = " $GIT_HISTORY_PREFIX - $REPO .txt "
while IFS = " " read -r COMMIT_MSG
do
handleGitHistoryCommitMessageIssueKeys $COMMIT_MSG
done < $GIT_HISTORY_FILE
done
echo ""
echo " Fix Version : $FIX_VERSION "
echo " Comparing : $SINCE_TAG_NAME ... $TO_TAG_NAME "
2021-12-12 21:05:43 +01:00
echo ""
echo "Issues found: "
echo "--------------------------------------------------------"
if [ -s " $SCRIPT_OUTPUT_OK " ] ; then
cat " $SCRIPT_OUTPUT_OK "
fi
echo ""
echo "Issues not found: "
echo "--------------------------------------------------------"
if [ -s " $SCRIPT_OUTPUT_BAD " ] ; then
cat " $SCRIPT_OUTPUT_BAD "
fi
2022-01-11 16:10:27 +01:00
rm -rf $DIR
2022-06-30 09:51:57 +02:00
exit $rc ;