Files @ 55ee5b53b6f6
Branch filter:

Location: website/bin/deploy/systemd/conservancy-www-update.sh

bsturmfels
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.
#!/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"