Files
zulip/tools/build-release-tarball
Daniil Fadeev 2f203f4de1 emails: Inline CSS in emails in build_email.
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>
2023-04-05 12:22:29 -07:00

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"