#!/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="LUIS" # 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 SUBTASK_LIST=" 01: SRS - Software Requirement Specifications 02: SDD - Design Diagram - plantuml 03: SDR - Design Review 04: DEV - Feature Implementation 05: DEV - Diagnostic - if needed 06: DEV - Modularize - if needed 07: DEV - Dialin Implementation 08: DEV - Simulator Implementation 09: BLD - Develop Build - version , release notes 10: SDD - Functionality - doxygen pdf 11: SCR - Code Review 12: BLD - Staging Build - version , release notes 13: SUT - Software Unit Tests - QtTest 14: SIT - Software Integration Tests - SquishQt 15: COC - Code Coverage - SquishCoco 16: CQR - Code Quality Report - SUIT+SIT+COC 17: BLD - Master Build - version , release notes " # LDT-112 - Basic Dialysis Treatment - Update PRS/SSRS Requirements # LDT-113 - Basic Dialysis Treatment - Update Sys Architecture # LDT-114 - Basic Dialysis Treatment - Update Sys Hazard Analysis # LDT-115 - Basic Dialysis Treatment - Update Sys Verification Test Cases # LDT-116 - Basic Dialysis Treatment - Update SRS Requirements # LDT-117 - Basic Dialysis Treatment - Update Software Verification Test Cases # LDT-118 - Basic Dialysis Treatment - Update Software Architecture # LDT-119 - Basic Dialysis Treatment - Update Software Hazard Analysis/SFMEA # LDT-120 - Basic Dialysis Treatment - Update Software Detailed Design (SDD) # LDT-121 - Basic Dialysis Treatment - Update Software Integration Test Cases # LDT-122 - Basic Dialysis Treatment - Update Unit Tests # LDT-123 - Basic Dialysis Treatment - Implement TD Code # LDT-124 - Basic Dialysis Treatment - Implement DD Code # LDT-125 - Basic Dialysis Treatment - Implement FP Code # LDT-126 - Basic Dialysis Treatment - Implement SW Code # LDT-127 - Basic Dialysis Treatment - Dry Run Unit Tests # LDT-128 - Basic Dialysis Treatment - Dry Run Software Verification Tests # LDT-129 - Basic Dialysis Treatment - Dry Run Software Integration Tests # LDT-130 - Basic Dialysis Treatment - Dry Run System Verification Tests # LDT-131 - Basic Dialysis Treatment - Staging Software Release # LDT-132 - Basic Dialysis Treatment - Master Software 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 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" : "'"$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" # 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"'" , "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 $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 } 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)"' )" 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 ;; "-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 PROJECT_KEY="$1" EPIC="$2" SUMMARY="$3" DESCRIPTION="$4" ASSIGNEE="$5" 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 KEY="$( createStroy "$EPIC" "$STORY_PREFIX: $SUMMARY" "$DESCRIPTION" )" echo "$ISSUE_TYPE_PARENT $KEY created in project $PROJECT_KEY: $SUMMARY." # createSubtaskList "$KEY" "$SUMMARY" echo "" exit 0