mirror of
https://github.com/zulip/zulip.git
synced 2025-11-01 12:33:40 +00:00
70 lines
2.8 KiB
Python
Executable File
70 lines
2.8 KiB
Python
Executable File
#!/usr/bin/env python
|
|
#
|
|
# This script contains the actual logic for upgrading from an old
|
|
# version of Zulip to the new version. upgrade-zulip-stage-2 is
|
|
# always run from the new version of Zulip, so any bug fixes take
|
|
# effect on the very next upgrade.
|
|
from __future__ import print_function
|
|
import argparse
|
|
import subprocess
|
|
import os
|
|
import sys
|
|
import logging
|
|
|
|
os.environ["PYTHONUNBUFFERED"] = "y"
|
|
|
|
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))
|
|
from zulip_tools import FAIL, WARNING, ENDC, su_to_zulip
|
|
|
|
logging.basicConfig(format="%(asctime)s upgrade-zulip-stage-2: %(message)s",
|
|
level=logging.INFO)
|
|
|
|
if os.getuid() != 0:
|
|
logging.error("Must be run as root.")
|
|
sys.exit(1)
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("deploy_path", metavar="deploy_path",
|
|
help="Path to deployment directory")
|
|
parser.add_argument("--skip-puppet", dest="skip_puppet", action='store_true',
|
|
help="Skip doing puppet/apt upgrades.")
|
|
parser.add_argument("--skip-migrations", dest="skip_migrations", action='store_true',
|
|
help="Skip doing migrations.")
|
|
args = parser.parse_args()
|
|
|
|
deploy_path = args.deploy_path
|
|
|
|
if not args.skip_puppet:
|
|
logging.info("Upgrading system packages...")
|
|
subprocess.check_call(["apt-get", "update"])
|
|
subprocess.check_call(["apt-get", "-y", "upgrade"])
|
|
|
|
subprocess.check_call([os.path.join(deploy_path, "scripts", "lib", "create-production-venv"),
|
|
os.path.join(deploy_path, "zulip-venv")])
|
|
|
|
if os.path.exists("/etc/supervisor/conf.d/zulip_db.conf"):
|
|
subprocess.check_call(["supervisorctl", "stop", "process-fts-updates"], preexec_fn=su_to_zulip)
|
|
|
|
if not (args.skip_puppet and args.skip_migrations):
|
|
# If we're running either puppet or migrations, we shut the server down for the duration
|
|
logging.info("Stopping Zulip...")
|
|
subprocess.check_call(["supervisorctl", "stop", "zulip-workers:*", "zulip-django",
|
|
"zulip-tornado", "zulip-senders:*"], preexec_fn=su_to_zulip)
|
|
|
|
if not args.skip_puppet:
|
|
logging.info("Applying puppet changes...")
|
|
subprocess.check_call(["./scripts/zulip-puppet-apply", "--force"])
|
|
subprocess.check_call(["apt-get", "upgrade"])
|
|
|
|
if not args.skip_migrations:
|
|
logging.info("Applying database migrations...")
|
|
subprocess.check_call(["./manage.py", "migrate", "--noinput"], preexec_fn=su_to_zulip)
|
|
|
|
logging.info("Restarting Zulip...")
|
|
subprocess.check_call(["cp", "-rT", os.path.join(deploy_path, 'prod-static/serve'),
|
|
'/home/zulip/prod-static'], preexec_fn=su_to_zulip)
|
|
subprocess.check_output(["./scripts/restart-server"], preexec_fn=su_to_zulip)
|
|
|
|
if os.path.exists("/etc/supervisor/conf.d/zulip_db.conf"):
|
|
subprocess.check_call(["supervisorctl", "start", "process-fts-updates"], preexec_fn=su_to_zulip)
|