Files
zulip/tools/build-release-tarball
Tim Abbott e2ee1951e0 storage: Fix static files storage reuse issues.
Zulip's previous model for managing static asset files via Django
pipeline had some broken behavior around upgrades.  In particular, it
was for some reason storing the information as to which static files
should be used in a memcached cache that was shared between different
deployments of Zulip.  This means that during the upgrade process,
some clients might be served a version of the static assets that does
not correspond to the server they were connected to.

We've replaced that model with using ManifestStaticFilesStorage, which
instead allows each Zulip deployment directory to have its own
complete copy of the mapping of files to static assets, as it should
be.

We have to do a little bit of hackery with the staticfiles.json path
to make this work, basically because Django expects staticfiles.json
to be under STATIC_ROOT (aka the path nginx is serving to users), but
doing that doesn't really make sense for Zulip, since that directory
is shared between different deployments.
2017-02-06 16:10:24 -08:00

121 lines
3.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eux
usage() {
echo "Usage: $0 [--py3] <ZULIP_VERSION>" >&2
exit 1
}
args="$(getopt -o '' -l 'py3' -n "$0" -- "$@")"
eval "set -- $args"
py3=
while true; do
case "$1" in
--py3) py3=t; shift;;
--) shift; break;;
*) usage;;
esac
done
GITID=$(git rev-parse HEAD)
if [ -z "${1:-}" ]; then
usage
fi
version="$1"
prefix="zulip-server-$version"
if [ "$(uname)" = "Darwin" ]; then
TMPDIR=/tmp/voyager-build
rm -Rf "$TMPDIR"
mkdir -p "$TMPDIR"
else
TMPDIR=$(mktemp -d)
fi
if ! git diff --exit-code >/dev/null; then
set +x
echo; echo "\033[31mWARNING: tarballs builds are based on a commit hash so your changes will not be included\033[0m"; echo
set -x
fi
TMP_CHECKOUT=$TMPDIR/$prefix/
TARBALL=$TMPDIR/$prefix.tar
# .gitattributes lists the files that are not exported
git archive -o "$TARBALL" "--prefix=$prefix/" HEAD
if tar -tf "$TARBALL" | grep -q -e zilencer -e zproject/local_settings.py -e puppet/zulip_internal; then
echo "Excluded files remain in tarball!";
echo "Versions of git 1.8.1.1 - 1.8.1.6 have broken .gitattributes syntax";
exit 1;
else
echo "Check for excluded files passed";
fi
if [ "$py3" ]; then
tools/replace-tarball-shebang \
'#!/usr/bin/env python' '#!/usr/bin/env python3' \
< "$TARBALL" > "$TARBALL.new"
mv "$TARBALL.new" "$TARBALL"
fi
# Check out a temporary full copy of the index to generate static files
git checkout-index -f -a --prefix "$TMP_CHECKOUT"
cd "$TMP_CHECKOUT"
# create var/log directory in the new temporary checkout
mkdir -p "var/log"
# Some settings need to be updated for update-prod-static to work
#
# TODO: Would be much better to instead run the below tools with some
# sort of environment hack to make settings.VOYAGER=True so that we
# don't need to create this dummy secrets file.
cat >> zproject/prod_settings_template.py <<EOF
DEBUG = False
EOF
cat >> zproject/dev-secrets.conf <<EOF
[secrets]
local_database_password = ''
secret_key = 'not_used_here'
shared_secret = 'not_used_here'
avatar_salt = 'not_used_here'
rabbitmq_password = 'not_used_here'
initial_password_salt = 'not_used_here'
EOF
# update-prod-static generates the prod-static directory.
# See COLLECTSTATIC in settings.py
set +x
# We do a bit of gymnastics to have update-prod-static.log be easily
# visible to the user and end up in the same directory as the final
# release tarball.
USER_PROD_STATIC_LOGPATH="${TMPDIR}/update-prod-static.log"
BUILD_PROD_STATIC_LOGPATH="${TMP_CHECKOUT}/var/log/update-prod-static.log"
ln -nfs "$BUILD_PROD_STATIC_LOGPATH" "$USER_PROD_STATIC_LOGPATH"
echo; echo -e "\033[33mRunning update-prod-static; check ${TMPDIR}/update-prod-static.log if it fails\033[0m"; echo
set -x
./tools/update-prod-static
echo "$GITID" > build_id
echo "$version" > version
rm -f "$USER_PROD_STATIC_LOGPATH"
mv "$BUILD_PROD_STATIC_LOGPATH" "$USER_PROD_STATIC_LOGPATH"
rm -f zproject/dev-secrets.conf
# We don't need duplicate copies of emoji with hashed paths, and they would break bugdown
find prod-static/serve/generated/emoji/images/emoji/ -regex '.*\.[0-9a-f]+\.png' -delete
cd "$TMPDIR"
tar --append -f "$TARBALL" "$prefix/prod-static" "$prefix/build_id" "$prefix/version" "$prefix/staticfiles.json"
rm -rf "$prefix"
gzip "$TARBALL"
echo "Generated $TARBALL.gz"