#!/bin/bash #TODO # 1 - Add UI prefix # 2 - Description # 3 - Assignee # 4 - Summary max len 0f 20-25 [TBD] ## VAriables # Jira Credentials JIRA_BASE_URL="https://diality.atlassian.net" JIRA_USER="bNematiPour@diality.com" # Get the api token from the following link after log in to your account: # https://id.atlassian.com/manage-profile/security/api-tokens #JIRA_API_TOKEN="ATATT3xFfGF0TOvNF5ieQ3b-z9z5X8p3IrdeTbkjEPE_I4gMeSEllXc7abcdhXhN_r_t4xTN0UwR3DWSsn7Un21CASxWeXmrXvfjLZ3MMxO92zf1o0D9Zm2kynJj_haXxPGEwhIw_F9UECV7jf8X-Q41QQ9hrfbC_YgZL15Xgh6VPYcSbzzemHQ=491E1343" JIRA_API_TOKEN="ATATT3xFfGF0RFUld5-CIAjh75DnHIs9PTTsa-gyabVVlIpZIQdKylVWQ2ySaHIDzeSsJo4ygvg3Bmpp33ejTDl8Pya7xrC5QXQ3KGKL6WXYncsS2mQmMbDmrRFzG7dxIFCtLW24c8wUGa6UTWhPZL0ymLP0wetlzKds1gs2eC1ElkpyBNIP0vk=89EE1FC4" PROJECT_KEY="" # Story details ISSUE_TYPE_PARENT="Story" ISSUE_TYPE_CHILD="Subtask" ERROR_KEY="errorMessages" ERROR_STR="ERROR:" #TODO get list from jira USER_BEHROUZ="5d6f09ceab129d0c306d9ddb" USER_DARA="63bdca0294d18cbf67728f0c" USER_TIFFANY="60e7528f84c99200718a2beb" ASSIGNEE="" SUBTASK_LIST=() #Sub-Tasks list of titles #SW - InitialIntegration-TreatmentBroadcassts SW_SUBTASK_LIST_RnI=( # Requirements and Implementation "01: SRS - Software Requirement Specifications - Jama" "02: SWA - Software Architecture - Visio/Word" "03: SDD - Design Diagram - plantuml" "04: SDR - Design Review" "05: DEV - Feature Implementation" "06: DEV - Diagnostic - if needed" "07: DEV - Modularize - if needed" "08: DEV - Dialin Implementation" "09: SDD - Functions Documentation" "10: DVT - Simulator Implementation & Dev Test" "11: BLD - Develop Build - version & release notes" "12: SCR - Code Review" "13: BLD - Staging Build - version & release notes" "14: SUT - Software Unit Tests - Qt Test" ) SW_SUBTASK_LIST_QnR=( "14: SUT - Software Unit Tests - Qt Test" "15: SIT - Software Integration Tests - Squish Qt" "16: COC - Code Coverage - Squish Coco" "17: CQR - Code Quality Report - SUIT+SIT+COC" "18: BLD - Master Build - version & release notes" ) # FW - FW_SUBTASK_LIST=( "01: SRS - Software Requirement Specifications - Jama" "02: SWA - Software Architecture - Visio/Word" "03: SDD - Design Diagram - plantuml" "04: DEV - Feature Implementation" "05: DEV - Dialin Implementation - if needed" "06: BLD - Develop Build - version & release notes" "07: DVT - Lab Test" "08: SCR - Code Review" "09: BLD - Staging Build - version & release notes" "10: SUT - Software Unit Tests" "11: SIT - Software Integration Tests" "12: BLD - Master Build - version & release notes" ) # OPS - Software package OP_SUBTASK_LIST=( "01: PKG - Develop" "02: PKG - Staging" "03: PKG - Master/Release" ) # SVV - Update Software Verification Test Cases VV_SUBTASK_LIST_DEF=( "01: SRS Review" "02: Test Protocols Outline - Jama" "03: Test Protocols Implementation, Identify missing items" ) # SVV - Dry Run Software Verification Test Cases VV_SUBTASK_LIST_RUN=( "01: Dry Run - Develop" "02: Dry Run - Staging" "03: Dry Run - Master/Release" ) #Error codes ERROR_INVALID_RESPONSE=1 ERROR_MISSING_SUMMARY=2 ERROR_MISSING_DESCRIPTION=3 ERROR_MISSING_PARENT=4 ERROR_MISSING_ISSUE_TYPE=5 ERROR_EXECUTION=6 ERROR_MISSING_PROJECTKEY=7 ERROR_MISSING_USERNAME=8 ERROR_MISSING_ASSIGNEE=9 ERROR_INVALID_GROUP=10 ERROR_MISSING_ISSUEKEY=11 ##Functions # Creates story # $1 - Summary # $2 - Description # return the Created story ID # e.g: # "$EPIC" "$SUMMARY" "$DESCRIPTION" createStroy() { if [ "$1" = "" ]; then echo "ERROR_MISSING_PARENT" exit $ERROR_MISSING_PARENT fi local PARENT_KEY="$1" if [ "$2" != "" ]; then local SUMMARY=" - $2" fi if [ "$3" != "" ]; then local DESCRIPTION="$3" fi # echo $PARENT_KEY $SUMMARY $DESCRIPTION $ASSIGNEE # exit 0 # Create the Story using curl local SUMMARY_PREFIX="$EPIC_SUMMARY" if [ "$GROUP" != "" ]; then SUMMARY_PREFIX="$EPIC_SUMMARY - $GROUP" fi local RESPONSE="$( curl \ -s -X POST \ --url "$JIRA_BASE_URL/rest/api/2/issue/" \ --user "$JIRA_USER:$JIRA_API_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "fields" : { "project" : { "key" : "'"$PROJECT_KEY"'" } , "summary" : "'"$SUMMARY_PREFIX $SUMMARY"'" , "description" : "'"$DESCRIPTION"'" , "issuetype" : { "name" : "'"$ISSUE_TYPE_PARENT"'" } , "parent" : { "key" : "'"$PARENT_KEY"'" } , "assignee" : { "accountId" : "'"$ASSIGNEE"'" } } }' )" local RESULT=$? if [ $RESULT -ne 0 ] ; then echo "EXEC $ERROR_STR $RESULT\n" echo "$COMMAND\n" exit $ERROR_EXECUTION fi # Extract Story Key using grep and sed if [ "$RESPONSE" != "${RESPONSE#*$ERROR_KEY}" ]; then # in case that cannot be parsed could mean that there is an error echo "$ERROR_STR $RESPONSE" exit "$ERROR_INVALID_RESPONSE" else KEY=$(echo "$RESPONSE" | grep -o '"key":"[^"]*' | sed 's/"key":"//') if [ "$KEY" = "" ]; then echo "$ERROR_STR $RESPONSE" exit "$ERROR_INVALID_RESPONSE" fi fi echo "$KEY" } # Creates Sub-task under the given parent ID # $1 - Parent Key/ID # $2 - Summary # $3 - Description # return the Created sub-task ID createSubtask() { if [ "$1" = "" ]; then echo "ERROR_MISSING_PARENT" exit $ERROR_MISSING_PARENT fi local PARENT_KEY="$1" if [ "$2" = "" ]; then echo "ERROR_MISSING_SUMMERY" exit $ERROR_MISSING_SUMMERY fi local SUMMARY="$2" if [ "$3" = "" ]; then echo "ERROR_MISSING_DESCRIPTION" exit $ERROR_MISSING_DESCRIPTION fi local DESCRIPTION="$3" local PARENT_TITLE="" if [ "$4" != "" ]; then PARENT_TITLE="$4" fi # echo "----- PROJECT_KEY " $PROJECT_KEY # echo "----- SUMMARY " $SUMMARY # echo "----- DESCRIPTION " $DESCRIPTION # echo "----- ISSUE_TYPE_CHILD " $ISSUE_TYPE_CHILD # echo "----- PARENT_KEY " $PARENT_KEY # echo "----- PARENT_SUMMARY " $PARENT_TITLE # echo "----- ASSIGNEE " $ASSIGNEE local SUMMARY_PREFIX="$EPIC_SUMMARY" if [ "$GROUP" != "" ]; then SUMMARY_PREFIX="$EPIC_SUMMARY - $GROUP" fi if [ "$PARENT_TITLE" != "" ]; then SUMMARY_PREFIX="$EPIC_SUMMARY - $GROUP - $PARENT_TITLE" fi # Create the Story using curl local RESPONSE="$( curl \ -s -X POST \ --url "$JIRA_BASE_URL/rest/api/2/issue/" \ --user "$JIRA_USER:$JIRA_API_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "fields" : { "project" : { "key" : "'"$PROJECT_KEY"'" } , "summary" : "'"$SUMMARY_PREFIX - $SUMMARY"'", "description" : "'"$DESCRIPTION"'" , "issuetype" : { "name" : "'"$ISSUE_TYPE_CHILD"'" } , "parent" : { "key" : "'"$PARENT_KEY"'" } , "assignee" : { "accountId" : "'"$ASSIGNEE"'" } } }' )" local RESULT=$? if [ $RESULT -ne 0 ] ; then echo "EXEC $ERROR_STR $RESULT\n" echo "$COMMAND\n" exit $ERROR_EXECUTION fi # Extract Story Key using grep and sed if [ "$RESPONSE" != "${RESPONSE#*$ERROR_KEY}" ]; then # in case that cannot be parsed could mean that there is an error echo "$ERROR_STR $RESPONSE" exit "$ERROR_INVALID_RESPONSE" else KEY=$(echo "$RESPONSE" | grep -o '"key":"[^"]*' | sed 's/"key":"//') if [ "$KEY" = "" ]; then echo "$ERROR_STR $RESPONSE" exit "$ERROR_INVALID_RESPONSE" fi fi echo "$KEY" } # Creates the subtasks by SUBTASK_LIST list under the given parent ID # $1 - Parent ID # $2 - Summary of the parent ticket to be concatenated with the sub-task # return prints out each notification of each created sub-tasks, # and message of total created sub-tasks createSubtaskList() { local COUNT=0 local STORY="$1" local SUMMARY="$2" # if [ "$2" = "" ]; then # SUMMARY="$STORY" # fi for TITLE in "${SUBTASK_LIST[@]}"; do if [ "$TITLE" = "" ]; then continue fi # echo "----- TITLE " $TITLE local TASK="$( createSubtask "$STORY" "$TITLE" "$TITLE" "$SUMMARY")" echo "$ISSUE_TYPE_CHILD $TASK created in $ISSUE_TYPE_PARENT $STORY: $TITLE." COUNT=$(( COUNT + 1 )) done echo "Total number of $COUNT $ISSUE_TYPE_CHILD added to the $ISSUE_TYPE_PARENT $STORY" } summary() { #echo ~$1~ local ISSUE_SUMMARY="$( curl \ -X GET \ -u "$JIRA_USER:$JIRA_API_TOKEN" \ -H "Content-Type: application/json" \ "$JIRA_BASE_URL/rest/api/2/issue/$1" \ | jq -r '.fields.summary' )" local RESULT=$? if [ $RESULT -ne 0 ] ; then echo "EXEC $ERROR_STR $RESULT\n" echo "$COMMAND\n" exit $ERROR_EXECUTION fi echo "$ISSUE_SUMMARY" # echo $RESULT } userInformation() { local USER_INFO="$( curl \ -X GET \ -u "$JIRA_USER:$JIRA_API_TOKEN" \ -H "Content-Type: application/json" \ "$JIRA_BASE_URL/rest/api/3/user/search?query=$1" \ | jq -r '.[0] | "\(.accountId) - \(.emailAddress) - \(.displayName) - \(.active)"' )" local RESULT=$? echo "$USER_INFO" # echo $RESULT } accountId() { local USER_INFO="$( curl \ -X GET \ -u "$JIRA_USER:$JIRA_API_TOKEN" \ -H "Content-Type: application/json" \ "$JIRA_BASE_URL/rest/api/3/user/search?query=$1" \ | jq -r '.[0] | "\(.accountId)"' )" local RESULT=$? echo "$USER_INFO" # echo $RESULT } children() { local CHILDREN="$( curl \ -X GET \ -u "$JIRA_USER:$JIRA_API_TOKEN" \ -H "Content-Type: application/json" \ "$JIRA_BASE_URL/rest/api/3/search?jql=parent=$1" \ | jq -r '.issues[] | "\(.key) - \(.fields.summary)"' \ | sed -e '1!G;h;$!d' \ )" local RESULT=$? echo "$CHILDREN" } linkTypes() { local linktype="$( curl \ -X GET \ -u "$JIRA_USER:$JIRA_API_TOKEN" \ -H "Content-Type: application/json" \ "$JIRA_BASE_URL/rest/api/3/issueLinkType" \ | jq -r '.issueLinkTypes[] | "\(.name) : \(.inward) - \(.outward)"'\ )" local RESULT=$? echo "$linktype" } linkIssues() { local type="Polaris issue link" local inwardIssue="$1" local outwardIssue="$2" local RESPONSE="$( curl \ -s -X POST \ --url "$JIRA_BASE_URL/rest/api/3/issueLink/" \ --user "$JIRA_USER:$JIRA_API_TOKEN" \ --header "Content-Type: application/json" \ --data '{ "type" : { "name": "'"$type"'" }, "inwardIssue" : { "key" : "'"$inwardIssue"'" }, "outwardIssue" : { "key" : "'"$outwardIssue"'" } }' )" echo "$RESPONSE" } issueTypes() { local RESPONSE="$( curl \ -X GET \ -u "$JIRA_USER:$JIRA_API_TOKEN" \ -H "Content-Type: application/json" \ "$JIRA_BASE_URL/rest/api/3/project/$1" \ | jq -r '.issueTypes[]' \ )" local RESULT=$? echo "$RESPONSE" } issueStatuses() { local RESPONSE="$( curl \ -X GET \ -u "$JIRA_USER:$JIRA_API_TOKEN" \ -H "Content-Type: application/json" \ "$JIRA_BASE_URL/rest/api/3/issue/$1/transitions" \ | jq -r '.transitions[] | {id, name}' \ )" local RESULT=$? echo "$RESPONSE" } help() { echo "usage:" echo "$0 " } case "$1" in "-userInfo") if [ "$2" = "" ]; then echo "ERROR_MISSING_USERNAME" exit $ERROR_MISSING_USERNAME fi userInformation "$2" exit 0 ;; "-userId") if [ "$2" = "" ]; then echo "ERROR_MISSING_USERNAME" exit $ERROR_MISSING_USERNAME fi accountId "$2" exit 0 ;; "-issueTypes") if [ "$2" = "" ]; then echo "ERROR_MISSING_PROJECTKEY" exit $ERROR_MISSING_PROJECTKEY fi issueTypes "$2" exit 0 ;; "-issueStatuses") if [ "$2" = "" ]; then echo "ERROR_MISSING_ISSUEKEY" exit $ERROR_MISSING_ISSUEKEY fi issueStatuses "$2" exit 0 ;; "-h") help exit 0 ;; *) ;; esac ## Main code echo "" # WIP : TESTING # linkTypes # children "$1" # linkIssues "$1" "$2" # # └ β ./Jira_Create_Story.sh LEAH-2078 LDT-116 # exit 0 #./Jira_Create_Story.sh \ # "Application: clean up the application for Leahi" \ # "The application which is currently using the Denali code base needs to get cleaned up by removing the Model, View, and controller modifications to get ready for adding Leahi new messages.\nThe cleaned up application need to be buildable and executable and be able to run with -L that has been defined to use only for logging." \ # LEAH \ # 5d6f09ceab129d0c306d9ddb # Behrouz 5d6f09ceab129d0c306d9ddb - bnematipour@diality.com - Behrouz NematiPour - true # Sean 612ea6656fa73c006a74b38a - snash@diality.com - Sean Nash - true # Dara 63bdca0294d18cbf67728f0c - dnavaei@diality.com - Dara Navaei - true # Michael 612ea6656b6661006902b6a6 - mgarthwaite@diality.com - Michael Garthwaite - true # Tiffany 60e7528f84c99200718a2beb - tmejia@diality.com - Tiffany Mejia - true # Sarina 5f84db2c57ca8c0076426fbb - scheung@diality.com - Sarina Cheung - true # Vinay 712020:786e2eb8-3cdd-4975-aa18-c3f40b0d6871 - vmani@diality.com - Vinayakam Mani - true # Jonny 712020:af6bd98b-1897-4870-aaf6-fd6169805d9e - jpaguio@diality.com - Jonny Paguio - true # Daniel 712020:1cd45b7c-2a8a-4635-beb4-fe4680cd2c44 - dho@diality.com - Daniel Ho - true PROJECT_KEY="$1" EPIC="$2" GROUP="$3" SUMMARY="$4" DESCRIPTION="$5" ASSIGNEE="$6" if [ "$PROJECT_KEY" = "" ]; then echo "ERROR_MISSING_PROJECTKEY" exit $ERROR_MISSING_PROJECTKEY fi if [ "$ASSIGNEE" = "" ]; then echo "ERROR_MISSING_ASSIGNEE" exit $ERROR_MISSING_ASSIGNEE fi if [ "$PROJECT_KEY" = "UI" ]; then ISSUE_TYPE_CHILD="Sub-task" fi EPIC_SUMMARY="$( summary $EPIC )" # KEY="$( createStroy "$EPIC" "$SUMMARY" "$DESCRIPTION" )" # echo "$ISSUE_TYPE_PARENT $KEY created in project $PROJECT_KEY: $SUMMARY." # # echo "+++++ EPIC_SUMMARY " $EPIC_SUMMARY # echo "+++++ ISSUE_TYPE_PARENT " $ISSUE_TYPE_PARENT # echo "+++++ KEY " $KEY # echo "+++++ PROJECT_KEY " $PROJECT_KEY # echo "+++++ SUMMARY " $SUMMARY case "$GROUP" in "SW") SW_SUMMARY="$SUMMARY" SUMMARY="01 - $SW_SUMMARY - R&I" DESCRIPTION="This story includes subtasks related to the Requirements, Architecure, Design, Impementation, and Development Testing of the feature up to the staging branch.\n$DESCRIPTION" KEY="$( createStroy "$EPIC" "$SUMMARY" "$DESCRIPTION" )" echo "$ISSUE_TYPE_PARENT $KEY created in project $PROJECT_KEY: $SUMMARY." SUBTASK_LIST=("${SW_SUBTASK_LIST_RnI[@]}") createSubtaskList "$KEY" "$SUMMARY" SUMMARY="02 - $SW_SUMMARY - Q&R" DESCRIPTION="This story includes subtasks related to the Unit Test, Integration Test, Code Coverage, Static Code Analysis, and generating reports of the tests executions, up to the master branch.\n$DESCRIPTION" KEY="$( createStroy "$EPIC" "$SUMMARY" "$DESCRIPTION" )" echo "$ISSUE_TYPE_PARENT $KEY created in project $PROJECT_KEY: $SUMMARY." SUBTASK_LIST=("${SW_SUBTASK_LIST_QnR[@]}") createSubtaskList "$KEY" "$SUMMARY" ;; "TD") KEY="$( createStroy "$EPIC" "$SUMMARY" "$DESCRIPTION" )" echo "$ISSUE_TYPE_PARENT $KEY created in project $PROJECT_KEY: $SUMMARY." SUBTASK_LIST=("${FW_SUBTASK_LIST[@]}") createSubtaskList "$KEY" "$SUMMARY" ;; "DD") KEY="$( createStroy "$EPIC" "$SUMMARY" "$DESCRIPTION" )" echo "$ISSUE_TYPE_PARENT $KEY created in project $PROJECT_KEY: $SUMMARY." SUBTASK_LIST=("${FW_SUBTASK_LIST[@]}") createSubtaskList "$KEY" "$SUMMARY" ;; "FP") KEY="$( createStroy "$EPIC" "$SUMMARY" "$DESCRIPTION" )" echo "$ISSUE_TYPE_PARENT $KEY created in project $PROJECT_KEY: $SUMMARY." SUBTASK_LIST=("${FW_SUBTASK_LIST[@]}") createSubtaskList "$KEY" "$SUMMARY" ;; "OP") GROUP="" SUMMARY="Software Packages" DESCRIPTION=$SUMMARY KEY="$( createStroy "$EPIC" "$SUMMARY" "$DESCRIPTION" )" echo "$ISSUE_TYPE_PARENT $KEY created in project $PROJECT_KEY: $SUMMARY." SUBTASK_LIST=("${OP_SUBTASK_LIST[@]}") createSubtaskList "$KEY" "" ;; "VV") # GROUP="" SUMMARY="Update Software Verification Test Cases" DESCRIPTION=$SUMMARY KEY="$( createStroy "$EPIC" "$SUMMARY" "$DESCRIPTION" )" echo "$ISSUE_TYPE_PARENT $KEY created in project $PROJECT_KEY: $SUMMARY." SUBTASK_LIST=("${VV_SUBTASK_LIST_DEF[@]}") createSubtaskList "$KEY" "" SUMMARY="Dry Run Software Verification Test Cases" DESCRIPTION=$SUMMARY KEY="$( createStroy "$EPIC" "$SUMMARY" "$DESCRIPTION" )" echo "$ISSUE_TYPE_PARENT $KEY created in project $PROJECT_KEY: $SUMMARY." SUBTASK_LIST=("${VV_SUBTASK_LIST_RUN[@]}") createSubtaskList "$KEY" "" ;; *) echo "ERROR_INVALID_GROUP" exit $ERROR_INVALID_GROUP ;; esac echo "" exit 0