Software release versioning discussion ============================= https://docs.google.com/spreadsheet/ccc?key=0Ai3ryhJR2IgZdEJMaWx5TnJraExpU3VNNU1vZUQ1dHc Release mechanisms ------------------------------- -- Debian packages -- mainly for CN packages -- Maven releases in Maven Central -- mainly for Java libraries -- Python eggs in PyPI -- mainly for python libraries and clients -- website downloads -- everything, but especially standalone software -- http://releases.dataone.org -- SVN checkouts -- everything should be backed by a single tagged SVN directory Versioning --------------- ( https://repository.dataone.org/documents/Projects/cicore/development/build/html/software_versioning.html ) major.minor.patch_{alpha##|beta##|rc##] patch = completely backwards compatible, identical API minor = completely backwards compatible, includes new features major == breaks compatibilty alpha == feature incomplete, unstable beta == featuer complete, unstable rc == feature complete, potentially stable, in testing released == feature complete, stable SNAPSHOT == alpha or beta? Dependencies -------------------- metacat-2.0.0 -> d1_libclient_java-1.0.1 -> d1_common_java-1.0.1 -> d1_schemas_1.0.2 Stable Unstable Testing http://releases.dataone.org Distributions for: ----------------------- -- End Users -- installing app that may depend on a library -- a. either use OS packaging mechanism (e.g., apt-get) -- b. or distribute within the app -- 3rd party Developers -- using lib for development of an app -- use maven/pypi -- internal development Release Process Proposal (based on maven release plugin) http://maven.apache.org/plugins/maven-release-plugin/index.html - to be done from a clean checkout, - to be done on a "build machine" - not on a developers machine Prepare Release: 1. Verify no snapshots in dependencies. 2. Update version in pom from SNAPSHOT to 'rc', 'release'. 3. Update SCM element with tag destination info. 4. Verify tests pass. 5. Commit modified poms. 6. Tag code in SCM w/release version tag. 7. Update version in pom back to snapshot. 8. Commit modified poms. Release: 1. Checkout from SCM w/optional tag. 2. Run deploy goals (deploy, site-deploy) (copy build artifacts to buildout location). 3. Build debian packages. 4. Copy fresh debian packages to appropriate distribution channel. ============= cd $WORKSPACE/cn-buildout; export TAGS="DATAONE-CN-INDEX_v1.0.0-RC1 DATAONE-CN-METACAT_v1.0.0-RC1 DATAONE-CN-OS-CORE_v1.0.0-RC1 DATAONE-CN-PORTAL_v1.0.0-RC1 DATAONE-CN-PROCESSDAEMON_v1.0.0-RC1 DATAONE-CN-REST-SERVICE_v1.0.0-RC1 DATAONE-CN-SOLR_v1.0.0-RC1 DATAONE-CN-VERSION-TOOL_v1.0.0-RC1" for TAG in $TAGS; do echo $TAG; TAGDEST=`echo $TAG | awk '{sub(/_v(.*)/,""); print tolower($0)}'` svn co "https://repository.dataone.org/software/cicore/tags/$TAG" $TAGDEST done export SVNREVISION=`svn info . | awk '/^Revision:/{print $2}'`; make -f $WORKSPACE/cn-buildout/Makefile_hudson publish