Plugins with commands will need to implement a catch-all command that exits with the `DOKKU_NOT_IMPLEMENTED_EXIT`` code (10). This signals to dokku that a given plugin has indeed not executed anything for a plugin (which may not always be the case). Using plugins that do not implement this pattern will result in those plugins silencing the error message.
66 lines
1.7 KiB
Bash
Executable File
66 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|
|
|
git_archive_all() {
|
|
APP=$1; REV=$2
|
|
TMP_WORK_DIR=$(mktemp -d)
|
|
chmod 755 $TMP_WORK_DIR
|
|
unset GIT_DIR GIT_WORK_TREE
|
|
git clone $DOKKU_ROOT/$APP $TMP_WORK_DIR &> /dev/null
|
|
pushd $TMP_WORK_DIR > /dev/null
|
|
git config advice.detachedHead false
|
|
git checkout $REV &> /dev/null
|
|
git submodule update --init --recursive &> /dev/null
|
|
find -name .git -prune -exec rm -rf {} \; > /dev/null
|
|
tar c .
|
|
popd > /dev/null
|
|
rm -rf $TMP_WORK_DIR > /dev/null
|
|
}
|
|
|
|
case "$1" in
|
|
git-hook)
|
|
APP=$2
|
|
|
|
while read oldrev newrev refname
|
|
do
|
|
# Only run this script for the master branch. You can remove this
|
|
# if block if you wish to run it for others as well.
|
|
if [[ $refname = "refs/heads/master" ]] ; then
|
|
git_archive_all $APP $newrev | dokku receive $APP | sed -u "s/^/"$'\e[1G'"/"
|
|
else
|
|
echo $'\e[1G\e[K'"-----> WARNING: deploy did not complete, you must push to master."
|
|
echo $'\e[1G\e[K'"-----> for example, try 'git push <dokku> ${refname/refs\/heads\/}:master'"
|
|
fi
|
|
done
|
|
;;
|
|
|
|
git-*)
|
|
APP="$(echo $2 | perl -pe 's/(?<!\\)'\''//g' | sed 's/\\'\''/'\''/g')"
|
|
APP_PATH=$DOKKU_ROOT/$APP
|
|
|
|
if [[ $1 == "git-receive-pack" && ! -d "$APP_PATH/refs" ]]; then
|
|
git init --bare $APP_PATH > /dev/null
|
|
PRERECEIVE_HOOK="$APP_PATH/hooks/pre-receive"
|
|
cat > $PRERECEIVE_HOOK <<EOF
|
|
#!/usr/bin/env bash
|
|
set -e; set -o pipefail;
|
|
|
|
cat | DOKKU_ROOT="$DOKKU_ROOT" dokku git-hook $APP
|
|
EOF
|
|
chmod +x $PRERECEIVE_HOOK
|
|
fi
|
|
|
|
args=$@
|
|
git-shell -c "$args"
|
|
;;
|
|
|
|
help | git:help)
|
|
cat
|
|
;;
|
|
|
|
*)
|
|
exit $DOKKU_NOT_IMPLEMENTED_EXIT
|
|
;;
|
|
|
|
esac
|