mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
Previously, we had an architecture where CSS inlining for emails was done at provision time in inline_email_css.py. This was necessary because the library we were using for this, Premailer, was extremely slow, and doing the inlining for every outgoing email would have been prohibitively expensive. Now that we've migrated to a more modern library that inlines the small amount of CSS we have into emails nearly instantly, we are able to remove the complex architecture built to work around Premailer being slow and just do the CSS inlining as the final step in sending each individual email. This has several significant benefits: * Removes a fiddly provisioning step that made the edit/refresh cycle for modifying email templates confusing; there's no longer a CSS inlining step that, if you forget to do it, results in your testing a stale variant of the email templates. * Fixes internationalization problems related to translators working with pre-CSS-inlined emails, and then Django trying to apply the translators to the post-CSS-inlined version. * Makes the send_custom_email pipeline simpler and easier to improve. Signed-off-by: Daniil Fadeev <fadeevd@zulip.com>
122 lines
3.0 KiB
Bash
Executable File
122 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -eu
|
|
|
|
# shellcheck source=lib/git-tools.bash
|
|
. "$(dirname "$0")"/lib/git-tools.bash
|
|
|
|
usage() {
|
|
echo "Usage: $0 <ZULIP_VERSION>" >&2
|
|
exit 1
|
|
}
|
|
|
|
args="$(getopt -o '' -l 'help' -n "$0" -- "$@")"
|
|
eval "set -- $args"
|
|
|
|
while true; do
|
|
case "$1" in
|
|
--)
|
|
shift
|
|
break
|
|
;;
|
|
*) usage ;;
|
|
esac
|
|
done
|
|
|
|
if [ -z "${1:-}" ]; then
|
|
usage
|
|
fi
|
|
|
|
version="$1"
|
|
prefix="zulip-server-$version"
|
|
|
|
require_clean_work_tree 'build a release tarball'
|
|
|
|
set -x
|
|
GITID=$(git rev-parse HEAD)
|
|
|
|
umask 022
|
|
|
|
OUTPUT_DIR=${OUTPUT_DIR:-$(mktemp -d)}
|
|
TARBALL=$OUTPUT_DIR/$prefix.tar
|
|
BASEDIR=$(pwd)
|
|
|
|
git archive -o "$TARBALL" "--prefix=$prefix/" HEAD
|
|
|
|
cd "$OUTPUT_DIR"
|
|
tar -xf "$TARBALL"
|
|
while read -r i; do
|
|
rm -r --interactive=never "${OUTPUT_DIR:?}/$prefix/$i"
|
|
done <"$OUTPUT_DIR/$prefix/tools/release-tarball-exclude.txt"
|
|
tar -cf "$TARBALL" "$prefix"
|
|
rm -rf "$prefix"
|
|
|
|
if tar -tf "$TARBALL" | grep -q -e ^zerver/tests; then
|
|
set +x
|
|
echo "BUG: Excluded files remain in tarball!"
|
|
exit 1
|
|
fi
|
|
cd "$BASEDIR"
|
|
|
|
# Check out a temporary full copy of the index to generate static files
|
|
git checkout-index -f -a --prefix "$OUTPUT_DIR/$prefix/"
|
|
|
|
# Add the Git version information file
|
|
if [[ "$version" =~ ^[0-9]+\.[0-9]+(-[0-9a-z]+)?$ ]]; then
|
|
# We override the merge-base, to avoid having to push the commits before building the tarball.
|
|
OVERRIDE_MERGE_BASE="$version" ./tools/cache-zulip-git-version
|
|
generated_version=$(head -n1 zulip-git-version)
|
|
if [ "$generated_version" != "$version" ]; then
|
|
echo "Version $version looks like a release version, but is not tagged yet! Got $generated_version"
|
|
exit 1
|
|
fi
|
|
else
|
|
./tools/cache-zulip-git-version
|
|
fi
|
|
mv zulip-git-version "$OUTPUT_DIR/$prefix/"
|
|
|
|
cd "$OUTPUT_DIR/$prefix"
|
|
|
|
ln -s "$BASEDIR/zulip-py3-venv" .
|
|
|
|
# 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 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
|
|
|
|
./tools/update-prod-static
|
|
|
|
# We don't need duplicate copies of emoji with hashed paths, and they would break Markdown
|
|
find prod-static/serve/generated/emoji/images/emoji/ -regex '.*\.[0-9a-f]+\.png' -delete
|
|
|
|
echo "$GITID" >build_id
|
|
echo "$version" >version
|
|
|
|
cd "$OUTPUT_DIR"
|
|
|
|
tar --append -f "$TARBALL" "$prefix/prod-static" "$prefix/build_id" "$prefix/version" "$prefix/zulip-git-version" "$prefix/locale" "$prefix/staticfiles.json" "$prefix/webpack-stats-production.json"
|
|
|
|
rm -rf "$prefix"
|
|
|
|
gzip "$TARBALL"
|
|
|
|
set +x
|
|
TARBALL="$TARBALL.gz"
|
|
|
|
echo "Generated $TARBALL"
|