Shell script to attach PTF docs to a Jira issue - IBA-mainframe-dev/Global-Repository-for-Mainframe-Developers GitHub Wiki

attachPTFdocs.sh is intended to fill Transmittal_note.txt with information(tool name, tool release, APARs, etc.) from Jira issue and to attach RCA.xlsx and Transmittal_note.txt for PTF to a Jira issue.

RCA.xlsx document is placed in the git repository Script, PTF_docs/.

Template for Transmittal_note.txt is placed in the PTF_docs/template.

The script is to be used from Jenkins, connection to Git is to be opened with Jenkins plugin.

Please, make sure that the user has all the required access.

Instructions:

Execution format::

>./attachPTFdocs.sh [jiraID] [baseJiraURL] [JiraUser] [JiraPassword]
jiraID                            key and number ofthe issue. For  example: TEST-225
baseJiraURL                       host name of the Jira server. For example: jira.test.by
JiraUser/JiraPassword		  auth information to connect to Jira

Example:

>./attachPTFdocs.sh ${jiraID} ${BASE_JIRA_URL} $USERNAME $PASSWORD

>./attachPTFdocs.sh TEST-225 jira.test.by $USERNAME $PASSWORD

attachPTFdocs.sh

#!/bin/bash
jiraID=$1
baseJiraURL=$2
JiraUser=$3
JiraPassword=$4


#get variables values
VAR_PATH="/$PWD/script/config/vardefs"
. "$VAR_PATH"
echo $defaultHLQ
echo get zOs config file:
configFile=$defaultHLQ'.CONFIG(VARPROG)'
echo $configFile

DOC_PATH=script/PTF_docs
RCA=RCA.xlsx
TRNOTE=Transmittal_note.txt
TEMPLATE_PATH=script/PTF_docs/templates
CHANGESLIST=changesList.txt

TMPFILE=tmp.txt

echo "
open $HOST
quote USER $USERID
quote PASS $USERPSW
quote SITE FILE=SEQ
get '$configFile' $configFile
bye
" | ftp -nv > $TMPFILE

echo ---------------
cat $TMPFILE
echo ---------------

PTFNAME=$(grep 'PTFNAME' $configFile | sed -n -e 's/.*=//p')

rm $TMPFILE
rm $configFile

add_comment() {
	curl -L  --post301 -D- -u ${JiraUser}:${JiraPassword}  -X POST  --data "{\"body\":\"$1\"}"  -H "Content-type: application/json" -H "X-Atlassian-Token: nocheck" http://${baseJiraURL}/rest/api/2/issue/${jiraID}/comment
}

delete_attach(){
	curl -L --post301 -D- -u ${JiraUser}:${JiraPassword} -X GET -H "X-Atlassian-Token: nocheck"  http://${baseJiraURL}/rest/api/2/issue/${jiraID}/?fields=attachment > attach.txt
	DOCID=$(grep -o "\"id\":\"[0-9]*\",\"filename\":\"$1\"" attach.txt |grep -o [0-9]*)
	rm attach.txt
	if [ -z "$DOCID" ]
	then
		echo "There is no already attached $1"
	else
		echo "DOCID:" ${DOCID}
		curl -L --post301 -D- -u ${JiraUser}:${JiraPassword} -X DELETE -H "X-Atlassian-Token: nocheck"  http://${baseJiraURL}/rest/api/2/attachment/${DOCID}
	fi
}

attach_doc(){
        curl -L --post301 -D- -u ${JiraUser}:${JiraPassword} -X POST -H "X-Atlassian-Token: nocheck" -F "file=@$1" http://${baseJiraURL}/rest/api/2/issue/${jiraID}/attachments
}

fill_trnote(){
cp $PWD/${TEMPLATE_PATH}/${TRNOTE} $PWD

curl -L --post301 -D- -u ${JiraUser}:${JiraPassword} -X GET -H "X-Atlassian-Token: nocheck"  http://${baseJiraURL}/rest/api/2/issue/${jiraID}/?fields=labels > ${TMPFILE}
label=$((grep -Po '(?<=(\"labels\":\[)).*(?=\])' ${TMPFILE})|tr '"' ' '|tr -d ' ')
IFS=',' read -r -a label_arr <<< "$label"

curl -L --post301 -D- -u ${JiraUser}:${JiraPassword} -X GET -H "X-Atlassian-Token: nocheck"  http://${baseJiraURL}/rest/api/2/issue/${jiraID}/?fields=fixVersions > ${TMPFILE}
fix_version=$(grep -Po '(?<=(\"name\":\")).*(?=\",)' ${TMPFILE})

rm ${TMPFILE}

modified=$((cat $PWD/${CHANGESLIST})|sed s'/^.//')
added=$((grep '^A' $PWD/${CHANGESLIST})|sed s'/^.//')
deleted=$((grep '^D' $PWD/${CHANGESLIST})|sed s'/^.//')
while read line
do
        case $line in
                *"Tool Name"*) echo $line ${label_arr[0]} >> ${TMPFILE};;
                *"Tool Release"*) echo $line ${fix_version} >> ${TMPFILE};;
                *"FMID"*) echo $line ${label_arr[1]} >> ${TMPFILE};;
                *"APAR"*) echo $line ${label_arr[2]} >> ${TMPFILE};;
                *"JIRA tickets"*) echo $line ${jiraID} >> ${TMPFILE};;
                *"List of fix related datasets"*) echo $line  >> ${TMPFILE}
                        if [ ! -z "$modified" ]
                        then
                                echo "$modified" >> ${TMPFILE}
                        fi
                        ;;
                *"New Part"*) echo $line >> ${TMPFILE}
                        if [ ! -z "$added" ]
                        then
                                echo "$added" >> ${TMPFILE}
                        fi
                        ;;
                *"Deleted Part"*) echo $line >> ${TMPFILE}
                        if [ ! -z "$deleted" ]
                        then
                                echo "$deleted" >> ${TMPFILE}
                        fi
                        ;;
                *) echo $line >> ${TMPFILE};;
        esac
done < ${TRNOTE}

cp $TMPFILE $TRNOTE
rm ${TMPFILE}
}



delete_attach ${TRNOTE}
fill_trnote
attach_doc $PWD/${TRNOTE}
add_comment "Transmittal note for PTF $PTFNAME was attached"

if [ -d "$PWD/$DOC_PATH/$PTFNAME" ]
then
        cd $PWD/$DOC_PATH/$PTFNAME
	if [ -f $RCA ]
	then
		delete_attach ${RCA}
		attach_doc $PWD/${RCA}
		add_comment "RCA document for PTF $PTFNAME was attached"
	else
		add_comment "There is no RCA document for PTF $PTFNAME to be attached to Jira ticket"
	fi
else
        add_comment "There are no existing documents for PTF $PTFNAME, nothing will be attached to Jira ticket"
fi
⚠️ **GitHub.com Fallback** ⚠️