mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	We document the `deployment.git_repo_url` setting in `/etc/zulip/zulip.conf` to control where this script fetches from, and don't say that it's only read on the first such upgrade and cached thereafter. The documented behavior seems like the right behavior. So use the currently configured URL every time, by writing it anew into the config of our cache repo.
		
			
				
	
	
		
			84 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python
 | 
						|
from __future__ import print_function
 | 
						|
import os
 | 
						|
from six.moves import configparser
 | 
						|
import sys
 | 
						|
import subprocess
 | 
						|
import logging
 | 
						|
 | 
						|
config_file = configparser.RawConfigParser()
 | 
						|
config_file.read("/etc/zulip/zulip.conf")
 | 
						|
LOCAL_GIT_CACHE_DIR = '/srv/zulip.git'
 | 
						|
 | 
						|
ZULIP_COM = config_file.get('machine', 'deploy_type') in ['zulip.com-prod',
 | 
						|
                                                          'zulip.com-staging']
 | 
						|
try:
 | 
						|
    git_url = config_file.get('deployment', 'git_repo_url')
 | 
						|
except (configparser.NoSectionError, configparser.NoOptionError):
 | 
						|
    git_url = "https://github.com/zulip/zulip.git"
 | 
						|
try:
 | 
						|
    deploy_options = config_file.get('deployment', 'deploy_options').strip().split()
 | 
						|
except (configparser.NoSectionError, configparser.NoOptionError):
 | 
						|
    deploy_options = []
 | 
						|
 | 
						|
os.environ["PYTHONUNBUFFERED"] = "y"
 | 
						|
 | 
						|
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
 | 
						|
from scripts.lib.zulip_tools import DEPLOYMENTS_DIR, FAIL, WARNING, ENDC, make_deploy_path, \
 | 
						|
    get_deployment_lock, release_deployment_lock, su_to_zulip
 | 
						|
 | 
						|
logging.basicConfig(format="%(asctime)s update-deployment: %(message)s",
 | 
						|
                    level=logging.INFO)
 | 
						|
 | 
						|
if len(sys.argv) != 2:
 | 
						|
    print(FAIL + "Usage: update-deployment refname" + ENDC)
 | 
						|
    sys.exit(1)
 | 
						|
 | 
						|
refname = sys.argv[1]
 | 
						|
 | 
						|
subprocess.check_call(["mkdir", '-p',
 | 
						|
                       DEPLOYMENTS_DIR,
 | 
						|
                       '/home/zulip/logs'])
 | 
						|
 | 
						|
error_rerun_script = "%s/current/tools/update-deployment %s" % (DEPLOYMENTS_DIR, refname)
 | 
						|
get_deployment_lock(error_rerun_script)
 | 
						|
 | 
						|
try:
 | 
						|
    deploy_path = make_deploy_path()
 | 
						|
    if not os.path.exists(LOCAL_GIT_CACHE_DIR):
 | 
						|
        logging.info("Cloning the repository")
 | 
						|
        subprocess.check_call(["git", "clone", "-q", git_url, "--mirror", LOCAL_GIT_CACHE_DIR],
 | 
						|
                              stdout=open('/dev/null', 'w'))
 | 
						|
        subprocess.check_call(["chown", "-R", "zulip:zulip", LOCAL_GIT_CACHE_DIR])
 | 
						|
 | 
						|
    logging.info("Fetching the latest commits")
 | 
						|
    os.chdir(LOCAL_GIT_CACHE_DIR)
 | 
						|
    subprocess.check_call(["git", "remote", "set-url", "origin", git_url], preexec_fn=su_to_zulip)
 | 
						|
    subprocess.check_call(["git", "fetch", "-q"], preexec_fn=su_to_zulip)
 | 
						|
 | 
						|
    subprocess.check_call(["git", "clone", "-q", "-b", refname, LOCAL_GIT_CACHE_DIR, deploy_path],
 | 
						|
                          stdout=open('/dev/null', 'w'),
 | 
						|
                          preexec_fn=su_to_zulip)
 | 
						|
 | 
						|
    subprocess.check_call(["ln", '-nsf', deploy_path, os.path.join(DEPLOYMENTS_DIR, "next")])
 | 
						|
    os.chdir(deploy_path)
 | 
						|
 | 
						|
    if ZULIP_COM:
 | 
						|
        # Install the zulip.com settings (local_settings.py) as prod_settings.py
 | 
						|
        subprocess.check_call(["ln", "-nsf", os.path.join(deploy_path, "zproject/local_settings.py"),
 | 
						|
                               os.path.join(deploy_path, "zproject/prod_settings.py")])
 | 
						|
    else:
 | 
						|
        # Install the prod_settings.py symlink
 | 
						|
        subprocess.check_call(["ln", "-nsf", "/etc/zulip/settings.py",
 | 
						|
                               os.path.join(deploy_path, "zproject/prod_settings.py")])
 | 
						|
 | 
						|
    # Hack to deploy images not included in open source project
 | 
						|
    if os.path.exists("/etc/zulip/zulip-dropbox.png"):
 | 
						|
        subprocess.check_call(["cp", "-a", "/etc/zulip/zulip-dropbox.png",
 | 
						|
                               os.path.join(deploy_path, "static/images/logo")])
 | 
						|
 | 
						|
    subprocess.check_call(["sudo", os.path.join(deploy_path, "scripts", "lib", "upgrade-zulip-stage-2"),
 | 
						|
                           deploy_path, "--from-git"] + deploy_options)
 | 
						|
finally:
 | 
						|
    release_deployment_lock()
 |