Skip to content

Instantly share code, notes, and snippets.

@inokappa
Last active January 22, 2017 06:48
Show Gist options
  • Save inokappa/a018bcd924f1477645f0ee3529bd9092 to your computer and use it in GitHub Desktop.
Save inokappa/a018bcd924f1477645f0ee3529bd9092 to your computer and use it in GitHub Desktop.
curl で Backlog 子課題を作成するシェルスクリプトの例(親課題有りき)
#!/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