Skip to content

Instantly share code, notes, and snippets.

@nhosoya
Created April 26, 2015 09:57
Show Gist options
  • Select an option

  • Save nhosoya/7efb97649ac303c209f9 to your computer and use it in GitHub Desktop.

Select an option

Save nhosoya/7efb97649ac303c209f9 to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
set -x
set -u
function init() {
export YMDHMS=`date +%Y%m%d%H%M%S`
}
function validate_environment_variable() {
# `set -e` してるから未定義ならここで落ちるはず
echo WORKSPACE=${WORKSPACE}
echo SLACK_NOTIFICATION_HEADER=${SLACK_NOTIFICATION_HEADER}
echo SLACK_NOTIFICATION_FOOTER=${SLACK_NOTIFICATION_FOOTER}
echo MR_TARGET_BRANCH=${MR_TARGET_BRANCH}
}
function load_tachikoma_setting() {
export BRANCH_NAME=tachikoma/bundle-update-$YMDHMS
export DIFF_TEXT=${WORKSPACE}/diff-$YMDHMS.txt
export DIFF_HTML=${WORKSPACE}/diff.html
export GITLAB_API_ENDPOINT=http://gitlab_url/api/v3
export GITLAB_API_PRIVATE_TOKEN=abcdefghijklmnopqrstuvwxyz
git config user.name "tachikoma"
git config user.email "tachikoma@メールアドレス"
export MR_DESCRIPTION=":one_eyed_robot: tachikomaによって自動生成されたMRです。詳細:${BUILD_URL}"
#TODO 改行文字が分からない。\nはだめだった。
}
function checkout_new_branch() {
git branch | grep ${BRANCH_NAME} && true
if [ $? == 0 ]; then
git branch -D ${BRANCH_NAME}
fi
git checkout -b ${BRANCH_NAME}
}
function create_diff() {
if [ -f ${DIFF_TEXT} ]; then
rm -f ${DIFF_TEXT}
fi
echo ${SLACK_NOTIFICATION_HEADER} >> ${DIFF_TEXT}
git diff -U0 Gemfile.lock >> ${DIFF_TEXT}
echo ${SLACK_NOTIFICATION_FOOTER} >> ${DIFF_TEXT}
git diff -U0 --color Gemfile.lock | /home/jenkins/script/ansi2html.sh > diff.html
}
function notify_diff() {
case "$1" in
"slack")
/home/jenkins/script/slack_post.sh ${SLACK_WEBHOOKURL} ${DIFF_TEXT} ${SLACK_NOTIFICATION_CHANNEL} tachikoma
;;
*)
echo "$1 is not supported."
return 1
;;
esac
}
function create_merge_request() {
git add Gemfile.lock
git commit -m "Bundle update $YMDHMS"
git push origin ${BRANCH_NAME}
# get ProjectID
PROJECT_NAME=`git remote -v | grep -e oigin -e push | awk '{print $2}' | cut -d":" -f2`
echo $PROJECT_NAME
PROJECT_ID=`gitlab projects --only=id,path_with_namespace | grep $PROJECT_NAME | awk '{print $2}'`
echo $PROJECT_ID
gitlab create_merge_request $PROJECT_ID "Exec tachikoma update $YMDHMS" "{\
source_branch: '${BRANCH_NAME}', \
target_branch: '${MR_TARGET_BRANCH}', \
description: '${MR_DESCRIPTION}'\
}"
}
function cleanup() {
git stash
git checkout develop
git branch -D ${BRANCH_NAME}
}
# main
echo "Begin Tachikoma Checking bundle-update..."
init
validate_environment_variable
load_tachikoma_setting
bundle install --no-deployment --without nothing --path vendor/bundle
checkout_new_branch
bundle update
create_diff
notify_diff slack
create_merge_request
cleanup
echo "Finish Tachikoma Checking bundle-update."
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment