tools/release-packages: Remove the ability to push changes.
This commit removes the following: * This script's dependency on gitpython, it is not maintained actively. * The ability to push changes in this and the main zulip/ repo. Doing so automatically was turning out to be cumbersome and buggy and doing it manually doesn't take significantly longer anyway. * The ability to automatically increment PROVISION_VERSION in zulip/version.py. Again, this was too buggy and it doesn't take much longer to just increment it by hand. Removing the above features made the script a lot easier to maintain and read.
This commit is contained in:
parent
13985510b1
commit
3c23dd6c66
|
@ -1,6 +1,5 @@
|
||||||
crayons
|
crayons
|
||||||
twine
|
twine
|
||||||
gitpython
|
|
||||||
coverage>=4.4.1
|
coverage>=4.4.1
|
||||||
pycodestyle==2.3.1
|
pycodestyle==2.3.1
|
||||||
-e ./zulip
|
-e ./zulip
|
||||||
|
|
|
@ -9,14 +9,11 @@ import glob
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
from git import Repo
|
|
||||||
import crayons
|
import crayons
|
||||||
import twine.commands.upload
|
import twine.commands.upload
|
||||||
import setuptools.sandbox
|
import setuptools.sandbox
|
||||||
|
|
||||||
REPO_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
REPO_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
repo = Repo(REPO_DIR)
|
|
||||||
git = repo.git
|
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def cd(newdir):
|
def cd(newdir):
|
||||||
|
@ -70,13 +67,13 @@ def cleanup(package_dir):
|
||||||
|
|
||||||
def _rm_if_it_exists(directory):
|
def _rm_if_it_exists(directory):
|
||||||
if os.path.isdir(directory):
|
if os.path.isdir(directory):
|
||||||
print(crayons.green('Removing {}/*.'.format(directory), bold=True))
|
print(crayons.green('Removing {}/*'.format(directory), bold=True))
|
||||||
shutil.rmtree(directory)
|
shutil.rmtree(directory)
|
||||||
|
|
||||||
if package_dir.endswith("zulip_bots"):
|
if package_dir.endswith("zulip_bots"):
|
||||||
manifest_file = os.path.join(package_dir, 'MANIFEST.in')
|
manifest_file = os.path.join(package_dir, 'MANIFEST.in')
|
||||||
if os.path.isfile(manifest_file):
|
if os.path.isfile(manifest_file):
|
||||||
print(crayons.green('Removing {}/*.'.format(manifest_file), bold=True))
|
print(crayons.green('Removing {}'.format(manifest_file), bold=True))
|
||||||
os.remove(manifest_file)
|
os.remove(manifest_file)
|
||||||
|
|
||||||
_rm_if_it_exists(build_dir)
|
_rm_if_it_exists(build_dir)
|
||||||
|
@ -104,38 +101,10 @@ def set_variable(fp, variable, value):
|
||||||
fp=fp, variable=variable, value=value)
|
fp=fp, variable=variable, value=value)
|
||||||
print(crayons.white(message, bold=True))
|
print(crayons.white(message, bold=True))
|
||||||
|
|
||||||
def push_release_tag(version, upstream_or_origin):
|
|
||||||
print(crayons.yellow('Pushing release tag {}...'.format(version), bold=True))
|
|
||||||
git.tag(version)
|
|
||||||
git.push(upstream_or_origin, version)
|
|
||||||
|
|
||||||
def commit_and_push_version_changes(version, init_files, upstream_or_origin):
|
|
||||||
message = 'Committing version number changes...{}'.format(version)
|
|
||||||
print(crayons.yellow(message, bold=True))
|
|
||||||
|
|
||||||
if upstream_or_origin == 'origin':
|
|
||||||
branch = 'release-{}'.format(version)
|
|
||||||
git.checkout('-b', branch)
|
|
||||||
else:
|
|
||||||
branch = 'master'
|
|
||||||
git.checkout(branch)
|
|
||||||
|
|
||||||
print(crayons.yellow('Diff:'))
|
|
||||||
print(git.diff())
|
|
||||||
|
|
||||||
git.add(*init_files)
|
|
||||||
commit_msg = 'python-zulip-api: Upgrade package versions to {}.'.format(
|
|
||||||
version)
|
|
||||||
print(crayons.yellow('Commit message: {}'.format(commit_msg), bold=True))
|
|
||||||
git.commit('-m', commit_msg)
|
|
||||||
|
|
||||||
git.push(upstream_or_origin, branch)
|
|
||||||
|
|
||||||
def update_requirements_in_zulip_repo(zulip_repo_dir, version, hash_or_tag):
|
def update_requirements_in_zulip_repo(zulip_repo_dir, version, hash_or_tag):
|
||||||
common = os.path.join(zulip_repo_dir, 'requirements', 'common.txt')
|
common = os.path.join(zulip_repo_dir, 'requirements', 'common.txt')
|
||||||
prod_lock = os.path.join(zulip_repo_dir, 'requirements', 'prod_lock.txt')
|
prod_lock = os.path.join(zulip_repo_dir, 'requirements', 'prod_lock.txt')
|
||||||
dev_lock = os.path.join(zulip_repo_dir, 'requirements', 'dev_lock.txt')
|
dev_lock = os.path.join(zulip_repo_dir, 'requirements', 'dev_lock.txt')
|
||||||
version_py = os.path.join(zulip_repo_dir, 'version.py')
|
|
||||||
|
|
||||||
def _edit_reqs_file(reqs, zulip_bots_line, zulip_line):
|
def _edit_reqs_file(reqs, zulip_bots_line, zulip_line):
|
||||||
fh, temp_abs_path = tempfile.mkstemp()
|
fh, temp_abs_path = tempfile.mkstemp()
|
||||||
|
@ -176,59 +145,6 @@ def update_requirements_in_zulip_repo(zulip_repo_dir, version, hash_or_tag):
|
||||||
message = 'Updated zulip API package requirements in the main repo.'
|
message = 'Updated zulip API package requirements in the main repo.'
|
||||||
print(crayons.white(message, bold=True))
|
print(crayons.white(message, bold=True))
|
||||||
|
|
||||||
fh, temp_abs_path = tempfile.mkstemp()
|
|
||||||
with os.fdopen(fh, 'w') as new_file, open(version_py) as old_file:
|
|
||||||
variable_exists = False
|
|
||||||
for line in old_file:
|
|
||||||
if line.startswith('PROVISION_VERSION'):
|
|
||||||
variable_exists = True
|
|
||||||
version_num = float(line.split('=')[-1].strip().replace("'", ''))
|
|
||||||
version_num = version_num + 0.01
|
|
||||||
new_file.write("PROVISION_VERSION = '{}'\n".format(version_num))
|
|
||||||
else:
|
|
||||||
new_file.write(line)
|
|
||||||
|
|
||||||
if not variable_exists:
|
|
||||||
raise Exception('There is no variable named PROVISION_VERSION in {}'.format(version_py))
|
|
||||||
|
|
||||||
os.remove(version_py)
|
|
||||||
shutil.move(temp_abs_path, version_py)
|
|
||||||
|
|
||||||
message = 'Incremented PROVISION_VERSION in the main repo.'
|
|
||||||
print(crayons.white(message, bold=True))
|
|
||||||
|
|
||||||
def commit_and_push_requirements_changes(version, upstream_or_origin,
|
|
||||||
zulip_repo_dir):
|
|
||||||
zulip_repo_dir = os.path.abspath(zulip_repo_dir)
|
|
||||||
common = os.path.join(zulip_repo_dir, 'requirements', 'common.txt')
|
|
||||||
prod_lock = os.path.join(zulip_repo_dir, 'requirements', 'prod_lock.txt')
|
|
||||||
dev_lock = os.path.join(zulip_repo_dir, 'requirements', 'dev_lock.txt')
|
|
||||||
version_py = os.path.join(zulip_repo_dir, 'version.py')
|
|
||||||
|
|
||||||
with cd(zulip_repo_dir):
|
|
||||||
zulip_git = Repo(zulip_repo_dir).git
|
|
||||||
|
|
||||||
message = 'Committing requirements changes...{}'.format(version)
|
|
||||||
print(crayons.yellow(message, bold=True))
|
|
||||||
|
|
||||||
if upstream_or_origin == 'origin':
|
|
||||||
branch = 'upgrade-zulip-packages-{}'.format(version)
|
|
||||||
zulip_git.checkout('-b', branch)
|
|
||||||
else:
|
|
||||||
branch = 'master'
|
|
||||||
zulip_git.checkout(branch)
|
|
||||||
|
|
||||||
print(crayons.yellow('Diff:'))
|
|
||||||
print(zulip_git.diff())
|
|
||||||
|
|
||||||
zulip_git.add(common, prod_lock, dev_lock, version_py)
|
|
||||||
|
|
||||||
commit_msg = 'requirements: Upgrade to version {} of the Zulip API packages.'.format(version)
|
|
||||||
print(crayons.yellow('Commit message: {}'.format(commit_msg), bold=True))
|
|
||||||
zulip_git.commit('-m', commit_msg)
|
|
||||||
|
|
||||||
zulip_git.push(upstream_or_origin, branch)
|
|
||||||
|
|
||||||
def parse_args():
|
def parse_args():
|
||||||
usage = """
|
usage = """
|
||||||
Script to automate the PyPA release of the zulip, zulip_bots and
|
Script to automate the PyPA release of the zulip, zulip_bots and
|
||||||
|
@ -278,27 +194,11 @@ The above command would accomplish the following (in order):
|
||||||
default=False,
|
default=False,
|
||||||
help='Upload the packages to PyPA using twine.')
|
help='Upload the packages to PyPA using twine.')
|
||||||
|
|
||||||
parser.add_argument('--push',
|
|
||||||
metavar='origin or upstream',
|
|
||||||
help=('Commit and push a commit changing package versions'
|
|
||||||
' (can be either "origin" or "upstream"). If "origin'
|
|
||||||
' is specified, a new branch named release-<version> is'
|
|
||||||
' checked out before committing and pushing. If'
|
|
||||||
' "upstream" is supplied, then master is checked out'
|
|
||||||
' before committing and pushing. The process is the'
|
|
||||||
' same for changes made to both repos.'))
|
|
||||||
|
|
||||||
parser.add_argument('--update-zulip-main-repo',
|
parser.add_argument('--update-zulip-main-repo',
|
||||||
metavar='PATH_TO_ZULIP_DIR',
|
metavar='PATH_TO_ZULIP_DIR',
|
||||||
help='Update requirements/* in the main zulip repo and'
|
help='Update requirements/* in the main zulip repo and'
|
||||||
' increment PROVISION_VERSION.')
|
' increment PROVISION_VERSION.')
|
||||||
|
|
||||||
parser.add_argument('--hash',
|
|
||||||
help=('Commit hash to install off of in the main zulip'
|
|
||||||
' repo (used in conjunction with'
|
|
||||||
' --update-requirements). If not supplied,'
|
|
||||||
' release_version is used as a tag.'))
|
|
||||||
|
|
||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
@ -340,31 +240,5 @@ def main():
|
||||||
dist_dirs = glob.glob(os.path.join(REPO_DIR, '*', 'dist', '*'))
|
dist_dirs = glob.glob(os.path.join(REPO_DIR, '*', 'dist', '*'))
|
||||||
twine_upload(dist_dirs)
|
twine_upload(dist_dirs)
|
||||||
|
|
||||||
if options.update_zulip_main_repo:
|
|
||||||
if options.hash:
|
|
||||||
update_requirements_in_zulip_repo(
|
|
||||||
options.update_zulip_main_repo,
|
|
||||||
options.release_version,
|
|
||||||
options.hash
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
update_requirements_in_zulip_repo(
|
|
||||||
options.update_zulip_main_repo,
|
|
||||||
options.release_version,
|
|
||||||
options.release_version
|
|
||||||
)
|
|
||||||
|
|
||||||
if options.push:
|
|
||||||
set_variable(zulip_bots_init, 'IS_PYPA_PACKAGE', False)
|
|
||||||
if options.update_zulip_main_repo:
|
|
||||||
commit_and_push_requirements_changes(
|
|
||||||
options.release_version,
|
|
||||||
options.push,
|
|
||||||
options.update_zulip_main_repo,
|
|
||||||
)
|
|
||||||
push_release_tag(options.release_version, options.push)
|
|
||||||
commit_and_push_version_changes(options.release_version,
|
|
||||||
init_files, options.push)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Reference in a new issue