Ben Sturmfels
55ee5b53b6
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.
43 lines
1.2 KiB
Bash
Executable file
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"
|