diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..592a0e6 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,46 @@ +#!/bin/sh + +set -eux + +if test "$#" -gt 1; then + echo >&2 "Usage: $0 [branch]" + exit 2 +fi + +# Check that worktree is clean +if test -n "$(git status --porcelain)"; then + echo >&2 "FATAL: Tree not clean, refusing to deploy" + echo "Hint: This is current \`git status\`:" + git status + exit 1 +fi + +local branch + +if test "$#" -eq 1; then + branch="$1" +else + branch=master +fi + +local currentbranch="$(git branch --show-current)" + +# If we are not on target branch, switch and run again +if test "$currentbranch" -ne "$branch" + exec /bin/sh -eu "git checkout $branch && exec $0" +fi + +echo "Deploying branch $branch" + +### Deploying starts here ### + +git pull +. venv/bin/activate +pip install -U pip setuptools +pip install -r requirements.txt +./manage.py migrate +./manage.py collectstatic # --noinput? +systemctl --user restart wish.service +# TODO: Self-checks? i.e. ./manage.py --check and ./manage.py test? +echo # Just a blank line +echo '=== Deploy successful ==='