Last active
January 22, 2017 06:48
-
-
Save inokappa/a018bcd924f1477645f0ee3529bd9092 to your computer and use it in GitHub Desktop.
curl で Backlog 子課題を作成するシェルスクリプトの例(親課題有りき)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
_BACKLOG_URL="https://${貴方の Backlog チーム}.backlog.jp" | |
_BACKLOG_PROJECT_KEY="${プロジェクトキー}" | |
_BACKLOG_PARENTISSUE_KEY="${親課題キー}" | |
_BACKLOG_PARENTISSUE_COMMENT_ID="${お知らせするユーザー一覧が登録されたコメント ID}" | |
_BACKLOG_ASSIGNEE_NAME="担当者名" | |
# プライオリティ「中」 | |
_BACKLOG_PRIORITY_ID=3 | |
_CURL_OPTION="--connect-timeout 10 --max-time 20 -s" | |
_CMD_NAME=$(basename $0) | |
function usage(){ | |
echo "Usage: ${_CMD_NAME} [GHE version]" 1>&2 | |
} | |
if [ $# -ne 1 ]; then | |
usage | |
exit 1 | |
fi | |
read -p "Your Name: " _OPERATION_USER | |
read -p "Backlog API Key: " _BACKLOG_API_KEY | |
echo "" | |
echo "Backlog に課題を起票します." | |
echo "処理を続行しますか? [Y/n]" | |
read ANSWER | |
case ${ANSWER} in | |
[yY]) echo "処理を続行します..." | |
;; | |
[nN]) echo "$(date '+%Y-%m-%d %H:%M:%S') 処理を終了します..." | |
exit 0 ;; | |
*) echo "$(date '+%Y-%m-%d %H:%M:%S') 処理を終了します..." | |
exit 0 ;; | |
esac | |
# Backlog プロジェクト ID を取得 | |
_BACKLOG_PROJECT_ID=$(curl ${_CURL_OPTION} "${_BACKLOG_URL}/api/v2/projects/${_BACKLOG_PROJECT_KEY}?apiKey=${_BACKLOG_API_KEY}" | jq -r .id) | |
# 親課題の ID を取得 | |
_BACKLOG_PARENTISSUE_ID=$(curl ${_CURL_OPTION} "${_BACKLOG_URL}/api/v2/issues/${_BACKLOG_PARENTISSUE_KEY}?apiKey=${_BACKLOG_API_KEY}" | jq -r .id) | |
# 課題タイプ(タスク)の ID を取得 | |
_BACKLOG_ISSUETYPE_ID=$(curl ${_CURL_OPTION} "${_BACKLOG_URL}/api/v2/projects/${_BACKLOG_PROJECT_KEY}/issueTypes?apiKey=${_BACKLOG_API_KEY}" | jq -r '.[]|select(.name == "タスク").id') | |
# 担当者名の ID を取得 | |
_BACKLOG_ASSIGNEE_UID=$(curl ${_CURL_OPTION} "${_BACKLOG_URL}/api/v2/issues/${_BACKLOG_PARENTISSUE_KEY}/comments/${_BACKLOG_PARENTISSUE_COMMENT_ID}/notifications?apiKey=${_BACKLOG_API_KEY}" | jq -r ".[]|select(.user.name == \"${_BACKLOG_ASSIGNEE_NAME}\").user.id") | |
# 通知したいユーザーの ID を取得 | |
_BACKLOG_UIDS=$(curl ${_CURL_OPTION} "${_BACKLOG_URL}/api/v2/issues/${_BACKLOG_PARENTISSUE_KEY}/comments/${_BACKLOG_PARENTISSUE_COMMENT_ID}/notifications?apiKey=${_BACKLOG_API_KEY}" | jq -r .[].user.id) | |
# 課題のタイトルを指定 | |
_BACKLOG_SUMMARY="あれやこれや" | |
# 課題の詳細を指定 | |
_BACKLOG_DESCRIPTION=$(cat << DESC | |
${_BACKLOG_ASSIGNEE_NAME} 様 | |
cc: 各位 | |
あれや | |
これや | |
宜しくお願いします。 | |
DESC | |
) | |
# 通知したいユーザー ID のリクエストオプションを生成 | |
declare -a _UID_ARRAY=() | |
for _UID in ${_BACKLOG_UIDS} | |
do | |
_UID_ARRAY=(${_UID_ARRAY[@]} "--data "notifiedUserId[]=${_UID}"") | |
done | |
# 課題を作成する | |
_BACKLOG_ISSUE_KEY=$(curl ${_CURL_OPTION} \ | |
-X POST \ | |
--data "projectId=${_BACKLOG_PROJECT_ID}" \ | |
--data-urlencode "parentIssueId=${_BACKLOG_PARENTISSUE_ID}" \ | |
--data-urlencode "summary=${_BACKLOG_SUMMARY}" \ | |
--data-urlencode "description=${_BACKLOG_DESCRIPTION}" \ | |
--data-urlencode "issueTypeId=${_BACKLOG_ISSUETYPE_ID}" \ | |
--data-urlencode "priorityId=${_BACKLOG_PRIORITY_ID}" \ | |
--data-urlencode "assigneeId=${_BACKLOG_ASSIGNEE_UID}" \ | |
$(echo "${_UID_ARRAY[@]}") \ | |
-H "Content-Type:application/x-www-form-urlencoded" \ | |
"${_BACKLOG_URL}/api/v2/issues?apiKey=${_BACKLOG_API_KEY}" | jq -r .issueKey) | |
[ $? == 0 -a -n "${_BACKLOG_ISSUE_KEY}" ] && echo "${_BACKLOG_URL}/view/${_BACKLOG_ISSUE_KEY} に起票しました." || echo "Backlog 課題起票に失敗しました." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment