website/bin/deploy/systemd/conservancy-www-update.sh
Ben Sturmfels 55ee5b53b6
Add a basic script to "push" deploy
Currently updates are published by the "conservancy-www-update.sh" that does a
"pull" deploy with a 5-minutely job that runs on the web server. This doesn't
run `migrate`, `collectstatic` or restart the application, so certain types of
changes don't take effect, and even template changes often don't due to caching
template loader.

This script allows you to deploy more significant updates on-demand, but
requires SSH access.
2024-02-23 15:39:54 +11:00

43 lines
1.2 KiB
Bash
Executable file

#!/bin/sh
# Pull in and apply Conservancy website updates from the git repository.
#
# This is intended to be run on a timer. Note that it does *not* restart the
# Django application or run the migrate and collectstatic commands.
set -e
set -u
set -x
PRODUCTION_BRANCH="${PRODUCTION_BRANCH:-master}"
git_rev_name() {
git rev-parse --abbrev-ref --symbolic-full-name "$@"
}
# If the checkout is not on the production branch,
# assume maintenance is happening and stop.
if [ "$(git_rev_name HEAD)" != "$PRODUCTION_BRANCH" ]; then
exit 0
fi
# Abort if the production branch isn't tracking a remote branch.
if ! git_upstream="$(git_rev_name '@{upstream}' 2>/dev/null)"; then
exit 3
fi
IFS=/ read git_remote git_refspec <<EOF
$git_upstream
EOF
git fetch --quiet --no-tags "$git_remote" "$git_refspec"
if [ "$(git rev-parse "$PRODUCTION_BRANCH")" = "$(git rev-parse "$git_upstream")" ]; then
exit 0
fi
exitcode=0
git merge --quiet --ff-only "${git_remote}/${git_refspec}"
python3 -m compileall -q -x - conservancy || exitcode=$?
chgrp -R www-data conservancy || exitcode=$?
chmod -R g+rX-w,o+X-w conservancy || exitcode=$?
chmod -R o+r conservancy/static || exitcode=$?
exit "$exitcode"