Files
zulip/scripts/upgrade-zulip
Tim Abbott 5f92ccb422 [manual] Move update-prod-static and update-deployments back to tools/.
update-deployment has been replaced by upgrade-zulip for local server
instances, since it won't be running off a git repository, and
update-prod-static won't be needed since we plan on shipping minified
javascript.

When we deploy this, the deployment will fail, and then we'll need to
update the git checkout from which post-receive runs on git.zulip.net.

(imported from commit 86aaedbab09c60ae86ac1d0ae492d0d1bc45569f)
2013-11-04 13:22:41 -05:00

68 lines
2.1 KiB
Python
Executable File

#!/usr/bin/python -u
import os
import sys
import subprocess
import logging
import datetime
import shutil
import time
import tempfile
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
from zulip_tools import DEPLOYMENTS_DIR, LOCK_DIR, TIMESTAMP_FORMAT, FAIL, WARNING, ENDC
logging.basicConfig(format="%(asctime)s upgrade-zulip: %(message)s",
level=logging.INFO)
if len(sys.argv) != 2:
print FAIL + "Usage: %s <tarball>" % (sys.argv[0],) + ENDC
sys.exit(1)
tarball_path = sys.argv[1]
subprocess.check_call(["mkdir", '-p', DEPLOYMENTS_DIR, '/home/zulip/logs'])
start_time = time.time()
got_lock = False
while time.time() - start_time < 300:
try:
os.mkdir(LOCK_DIR)
got_lock = True
break
except OSError:
print WARNING + "Another deployment in progress; waiting for lock..." + ENDC
time.sleep(10)
if not got_lock:
print FAIL + "Deployment already in progress. Please run\n" \
+ " %s/current/scripts/upgrade-zulip %s\n" % (DEPLOYMENTS_DIR, tarball_path) \
+ "manually when the previous deployment finishes, or run\n" \
+ " rmdir %s\n" % (LOCK_DIR,) \
+ "if the previous deployment crashed." \
+ ENDC
sys.exit(1)
timestamp = datetime.datetime.now().strftime(TIMESTAMP_FORMAT)
deploy_path = os.path.join(DEPLOYMENTS_DIR, timestamp)
logging.info("Unpacking the tarball")
extract_path = tempfile.mkdtemp()
subprocess.check_call(["tar", "-xf", tarball_path, "-C", extract_path])
subprocess.check_call(["mv", os.path.join(extract_path, "zulip-server"), deploy_path])
subprocess.check_call(["rmdir", extract_path])
os.chdir(deploy_path)
# Update static files
# TODO: Remove this and replace it with shipping already minified js.
logging.info("Updating static files")
subprocess.check_call(["./tools/update-prod-static", "--prev-deploy",
os.path.join(DEPLOYMENTS_DIR, 'current')])
logging.info("Restarting server...")
subprocess.check_call(["./scripts/restart-server"])
logging.info("Deployment complete")
shutil.rmtree(LOCK_DIR)
subprocess.check_call(["./scripts/purge-old-deployments"])