Author: hwright
Date: Sat Jun 11 00:14:03 2011
New Revision: 1134489

URL: http://svn.apache.org/viewvc?rev=1134489&view=rev
Log:
The first bits of a script to handle releases.  This is far from finished,
but should eventually supplant construct-rolling-environment.sh, dist.sh,
roll.sh, getsigs.py, and a whole host of other manual steps.

Improvements welcomed.

* tools/dist/release.py:
  New.

Added:
    subversion/trunk/tools/dist/release.py   (with props)

Added: subversion/trunk/tools/dist/release.py
URL: 
http://svn.apache.org/viewvc/subversion/trunk/tools/dist/release.py?rev=1134489&view=auto
==============================================================================
--- subversion/trunk/tools/dist/release.py (added)
+++ subversion/trunk/tools/dist/release.py Sat Jun 11 00:14:03 2011
@@ -0,0 +1,136 @@
+#!/usr/bin/env python
+#
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+
+# About this script:
+#   This script is intended to simplify creating Subversion releases, by
+#   automating as much as is possible.  It works well with our Apache
+#   infrastructure, and should make rolling, posting, and announcing
+#   releases dirt simple.
+#
+#   This script may be run on a number of platforms, but it is intended to
+#   be run on people.apache.org.  As such, it may have dependencies (such
+#   as Python version) which may not be common, but are guaranteed to be
+#   available on people.apache.org.
+
+
+# Stuff we need
+import os
+import sys
+import shutil
+import urllib2
+import argparse       # standard in Python 2.7
+
+
+def get_prefix(base_dir):
+    return os.path.join(base_dir, 'prefix')
+
+def get_tempdir(base_dir):
+    return os.path.join(base_dir, 'tempdir')
+
+
+def cleanup(base_dir):
+    'Remove generated files and folders.'
+
+    shutil.rmtree(get_prefix(base_dir), True)
+    shutil.rmtree(get_tempdir(base_dir), True)
+
+
+def build_env(base_dir, args):
+    'Download prerequisites for a release and prepare the environment.'
+
+    # Versions of our environment
+    params = { 'autoconf'           : 'autoconf-2.68',
+               'libtool'            : 'libtool-2.4',
+               'swig'               : 'swig-2.0.4',
+               'sf_mirror'          : args.sf_mirror,
+             }
+
+    prefix = get_prefix(base_dir)
+    if os.path.exists(prefix):
+        raise RuntimeError("Directory exists: '%s'" % prefix)
+    os.mkdir(prefix)
+
+    tempdir = get_tempdir(base_dir)
+    if os.path.exists(tempdir):
+        raise RuntimeError("Directory exists: '%s'" % tempdir)
+    os.mkdir(tempdir)
+
+    objects = { 'autoconf' : 
'http://ftp.gnu.org/gnu/autoconf/%(autoconf)s.tar.gz',
+                'libtool' : 
'http://ftp.gnu.org/gnu/libtool/%(libtool)s.tar.gz',
+                'swig' : 
'http://sourceforge.net/projects/swig/files/swig/%(swig)s/%(swig)s.tar.gz/download?use_mirror=%(sf_mirror)s'
+              }
+
+    # Grab each of the prerequisite tarballs
+    for key, value in objects.items():
+        url = value % params
+        response = urllib2.urlopen(url)
+        target = open(os.path.join(get_tempdir(base_dir), key + '.tar.gz'), 
'w')
+        target.write(response.read())
+
+
+def roll_tarballs(base_dir, args):
+    'Create the release artifacts.'
+
+
+def announce(base_dir, args):
+    'Write the release announcement.'
+
+
+def main():
+    'Parse arguments, and drive the appropriate subcommand.'
+
+    # Setup our main parser
+    parser = argparse.ArgumentParser(
+                            description='Create an Apache Subversion release.')
+    parser.add_argument('--clean', action='store_true', default=False,
+                   help='Remove any directories previously created by 
%(prog)s')
+    parser.add_argument('--base-dir', default=os.getcwd(),
+                   help='''The directory in which to create needed files and
+                           folders.  The default is the current working
+                           directory.''')
+    subparsers = parser.add_subparsers(title='subcommands')
+
+    # Setup the parser for the build-env subcommand
+    build_env_parser = subparsers.add_parser('build-env',
+                    help='''Download release prerequisistes, including 
autoconf,
+                            libtool, and swig.''')
+    build_env_parser.set_defaults(func=build_env)
+    build_env_parser.add_argument('--sf-mirror', default='softlayer',
+                    help='''The mirror to use for downloading files from
+                            SourceForge.  If in the EU, you may want to use
+                            'kent' for this value.''')
+
+    # Parse the arguments
+    args = parser.parse_args()
+
+    # first, process any global operations
+    if args.clean:
+        cleanup(args.base_dir)
+
+    sys.path.append(os.path.join(get_prefix(args.base_dir), 'bin'))
+
+    # finally, run the subcommand, and give it the parsed arguments
+    args.func(args.base_dir, args)
+
+
+if __name__ == '__main__':
+    main()

Propchange: subversion/trunk/tools/dist/release.py
------------------------------------------------------------------------------
    svn:executable = *


Reply via email to