From ae8a82e11d6878e7305daaaa75a875dc1a45dc1c Mon Sep 17 00:00:00 2001 From: Christian Hammond Date: Mon, 21 Sep 2009 01:59:11 -0700 Subject: Release RBTools v0.2 beta 2. --- contrib/internal/release.py | 155 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100755 contrib/internal/release.py (limited to 'contrib/internal/release.py') diff --git a/contrib/internal/release.py b/contrib/internal/release.py new file mode 100755 index 0000000..ea52333 --- /dev/null +++ b/contrib/internal/release.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python +# +# Performs a release of Review Board. This can only be run by the core +# developers with release permissions. +# + +import os +import re +import sys + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..")) +from rbtools import get_package_version, VERSION + + +PY_VERSIONS = ["2.4", "2.5", "2.6"] + +LATEST_PY_VERSION = PY_VERSIONS[-1] + +PACKAGE_NAME = 'RBTools' + +RELEASES_URL = \ + 'review-board.org:/var/www/downloads.review-board.org/' \ + 'htdocs/releases/%s/%s.%s/' % (PACKAGE_NAME, VERSION[0], VERSION[1]) + + +built_files = [] + + +def execute(cmdline): + print ">>> %s" % cmdline + + if os.system(cmdline) != 0: + print "!!! Error invoking command." + sys.exit(1) + + +def run_setup(target, pyver = LATEST_PY_VERSION): + execute("python%s ./setup.py release %s" % (pyver, target)) + + +def build_targets(): + for pyver in PY_VERSIONS: + run_setup("bdist_egg", pyver) + built_files.append("dist/%s-%s-py%s.egg" % + (PACKAGE_NAME, get_package_version(), pyver)) + + run_setup("sdist") + built_files.append("dist/%s-%s.tar.gz" % + (PACKAGE_NAME, get_package_version())) + + +def build_news(): + def linkify_bugs(line): + return re.sub(r'(Bug #(\d+))', + r'\1', + line) + + content = "" + html_content = "" + + saw_version = False + in_list = False + in_item = False + + fp = open("NEWS", "r") + + for line in fp.xreadlines(): + line = line.rstrip() + + if line.startswith("version "): + if saw_version: + # We're done. + break + + saw_version = True + elif line.startswith("\t* "): + if in_item: + html_content += "\n" + in_item = False + + if in_list: + html_content += "\n" + + html_content += "

%s

\n" % line[3:] + html_content += "\n" + + content = content.rstrip() + + filename = "dist/%s-%s.NEWS" % (PACKAGE_NAME, get_package_version()) + built_files.append(filename) + fp = open(filename, "w") + fp.write(content) + fp.close() + + filename = "dist/%s-%s.NEWS.html" % (PACKAGE_NAME, get_package_version()) + fp = open(filename, "w") + fp.write(html_content) + fp.close() + + +def upload_files(): + execute("scp %s %s" % (" ".join(built_files), RELEASES_URL)) + + +def tag_release(): + execute("git tag release-%s" % get_package_version()) + + +def register_release(): + run_setup("register") + + +def main(): + if not os.path.exists("setup.py"): + sys.stderr.write("This must be run from the root of the " + "Djblets tree.\n") + sys.exit(1) + + build_targets() + build_news() + upload_files() + tag_release() + register_release() + + +if __name__ == "__main__": + main() -- cgit v1.2.3