Files
dokku/tests/test_deploy
Jose Diaz-Gonzalez dac566e75e refactor: move all shellcheck disable definitions to .shellcheckrc file
This makes standard use of shellcheck work without needing to provide extra configuration anywhere.

Also remove use of inline 'shellcheck disable' calls that are already defined in the .shellcheckrc and don't need to be set inline.
2023-08-05 10:58:57 -04:00

79 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -xeo pipefail
SELF=$(command -v "$0")
APP="$1"
TARGET="$2"
FORWARDED_PORT="$3"
SHOULD_FAIL="$4"
BRANCH="${5:-master}"
REMOTE="dokku@$TARGET"
REPO="test-$(basename "$APP")-$RANDOM"
ssh "$REMOTE" events:on
destroy_app() {
ssh "$REMOTE" apps:destroy "$REPO" --force
ssh "$REMOTE" events:off
}
failed() {
echo "************ $1 failed ************"
destroy_app
exit 1
}
succeeded() {
echo "************ $1 succeeded but should have failed ************"
destroy_app
exit 1
}
TMP=$(mktemp -d "/tmp/$TARGET.XXXXX")
rmdir "$TMP" && cp -r "$(dirname "$SELF")/$APP" "$TMP"
pushd "$TMP" &>/dev/null || exit 1
trap 'popd &>/dev/null || true; rm -rf "$TMP"' INT TERM EXIT
git init
git config user.email "robot@example.com"
git config user.name "Test Robot"
git remote add target "${REMOTE}:${REPO}"
[[ -f gitignore ]] && mv gitignore .gitignore
git add .
[[ -x pre-commit ]] && ./pre-commit "$REMOTE" "$REPO"
git commit -m 'initial commit'
if [[ "$SHOULD_FAIL" == true ]]; then
git push target "master:$BRANCH" && succeeded git-push
else
git push target "master:$BRANCH" || failed git-push
fi
if [[ -x post-deploy ]]; then
./post-deploy "$REMOTE" "$REPO" || failed post-deploy
fi
if [[ "$SHOULD_FAIL" == true ]]; then
echo "-----> Deploy failed (as it should have)!"
destroy_app
exit 0
fi
ssh "$REMOTE" events
ssh "$REMOTE" apps:list
URL=$(ssh "$REMOTE" url "$REPO")$FORWARDED_PORT
sleep 2
if (./check_deploy "$URL"); then
echo "-----> Deploy success!"
else
sleep 4
if (./check_deploy "$URL"); then
echo "-----> Deploy success!"
else
failed check-deploy
fi
fi
destroy_app