#!/bin/sh #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_PREFIX="" # Story details ISSUE_TYPE_PARENT="Story" ISSUE_TYPE_CHILD="Sub-task" ERROR_KEY="errorMessages" ERROR_STR="ERROR:" #TODO get list from jira USER_BEHROUZ="5d6f09ceab129d0c306d9ddb" USER_DARA="63bdca0294d18cbf67728f0c" USER_TIFFANY="60e7528f84c99200718a2beb" USER_AMIR="712020:18638c6b-26a8-4529-839a-172ac06ac020" ASSIGNEE="" #Sub-Tasks list of titles #SW - InitialIntegration-TreatmentBroadcassts SW_SUBTASK_LIST=" 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 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 ##Functions # Creates story # $1 - Summary # $2 - Description # return the Created story ID # e.g: # "$EPIC" "$STORY_PREFIX: $SUMMARY" "$DESCRIPTION" createStroy() { if [ "$1" = "" ]; then echo "ERROR_MISSING_PARENT" exit $ERROR_MISSING_PARENT fi local PARENT_KEY="$1" if [ "$2" = "" ]; then echo "ERROR_MISSING_SUMMARY" exit $ERROR_MISSING_SUMMARY fi local SUMMARY="$2" if [ "$3" = "" ]; then echo "ERROR_MISSING_DESCRIPTION" exit $ERROR_MISSING_DESCRIPTION fi local DESCRIPTION="$3" # echo $PARENT_KEY $SUMMARY $DESCRIPTION $ASSIGNEE # exit 0 # 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" : "'"$EPIC_SUMMARY - $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" if [ "$4" != "" ]; then local 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 "----- ASSIGNEE " $ASSIGNEE # 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" : "'"$EPIC_SUMMARY - $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() { OLD_IFS=$IFS IFS=' ' local COUNT=0 local STORY="$1" local SUMMARY="$2" if [ "$2" = "" ]; then SUMMARY="$STORY" fi for TITLE in $SW_SUBTASK_LIST; do if [ "$TITLE" = "" ]; then continue fi local TASK="$( createSubtask "$STORY" "$STORY_PREFIX$TITLE" "$TITLE" )" 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" IFS=$OLD_IFS } sw_createSubtaskList () { echo } td_createSubtaskList () { echo } dd_createSubtaskList () { echo } fp_createSubtaskList () { echo } op_createSubtaskList () { echo } vv_createSubtaskList () { echo } 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" } help() { echo "usage:" echo "$0 " } case "$1" in "-u") if [ "$2" = "" ]; then echo "ERROR_MISSING_USERNAME" exit $ERROR_MISSING_USERNAME fi userInformation "$2" exit 0 ;; "-i") if [ "$2" = "" ]; then echo "ERROR_MISSING_USERNAME" exit $ERROR_MISSING_USERNAME fi accountId "$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 # Vinay 712020:786e2eb8-3cdd-4975-aa18-c3f40b0d6871 - vmani@diality.com - Vinayakam Mani - true # Amir 712020:18638c6b-26a8-4529-839a-172ac06ac020 - amanesh@diality.com - Amir Manesh - 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 EPIC_SUMMARY="$( summary $EPIC )" KEY="$( createStroy "$EPIC" "$STORY_PREFIX$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 createSubtaskList "$KEY" "$SUMMARY" echo "" exit 0