Revision 0c42bae4f1dff2ff94f7217f8df4a2ae0bfb3294 authored by Fabien Campagne on 08 June 2012, 17:23:53 UTC, committed by Fabien Campagne on 08 June 2012, 17:24:11 UTC
1 parent fe55482
Raw File
release.xml
<?xml version="1.0"?>
<project name="goby-release" basedir="." default="release">
    <import file="${basedir}/buildsupport/build.xml"/>

    <property file="${config}/release.properties"/>

    <tstamp>
        <format property="exportdate" pattern="yyyyMMddHHmmss"/>
    </tstamp>

	<target name="init" depends="getrevision, gettag">
	    <property name="exportdir" value="tmp-${tag}"/>
		<property name="releasedir" value="release-${tag}"/>
        <property name="label" value="${tag}"/>

    	<mkdir dir="${releasedir}"/>

	    <property name="srcfile" value="${releasedir}/${tag}-src.zip"/>
        <property name="cpp-srcfile" value="${releasedir}/${tag}-cpp.zip"/>
        <property name="depsfile" value="${releasedir}/${tag}-deps.zip"/>
	    <property name="apidocfile" value="${releasedir}/${tag}-apidoc.zip"/>
	    <property name="datafile" value="${releasedir}/${tag}-data.zip"/>
        <property name="gobyfile" value="${releasedir}/${tag}-goby.zip"/>
        <property name="srcUrl" value="https://${svnhost}/public/svn/icb/trunk/goby"/>
        <property name="tagUrl" value="https://${svnhost}/public/svn/icb/tags/${tag}"/>
	</target>

    <target name="getrevision" unless="revision" description="Get the SVN revision to use for the release">
        <!-- the default revision uses the current date and time -->
        <property name="defaultrevision" value="HEAD"/>

        <input message="Enter a revision for the build:"
               addproperty="revision"
               defaultvalue="${defaultrevision}"/>
        <echo level="debug" message="revision is ${revision}"/>
    </target>

	<target name="gettag" unless="tag" description="Get the tag to use for the release">
	    <!-- the default tag uses the current date and time -->
	    <property name="defaulttag" value="goby_${exportdate}"/>

        <input message="Enter a tag for the build:"
               addproperty="tag"
               defaultvalue="${defaulttag}"/>
        <echo level="debug" message="tag is ${tag}"/>
    </target>

	<target name="tag" depends="init" unless="nocopy" description="Tag the current trunk release in SVN">
        <echo level="info" message="Tagging current directory with ${tag}"/>
    	<svn>
    		<copy message="${tag}" srcUrl="${srcUrl}"
    			  destUrl="${tagUrl}" revision="${revision}"/>
    	</svn>
    </target>

    <target name="export" depends="init" unless="noexport" description="Export a tagged version of the source code">
        <available property="exportdirexists" file="${exportdir}" type="dir"/>
        <fail if="exportdirexists" message="${basedir}/${exportdir} already exists."/>

    	<mkdir dir="${exportdir}"/>
        <echo level="info" message="Exporting using tag: ${tag}"/>

        <!-- get the tagged version from svn -->
    	<svn>
    		<export srcUrl="${tagUrl}" destPath="${exportdir}/${tag}"/>
        </svn>

        <!-- Remove any files that should not be included in the formal release -->
        <!-- NOTE: These files should probably be on a branch or something -->
        <delete dir="${exportdir}/${tag}">
            <include name="src/edu/cornell/med/icb/goby/algorithmic/data/AnnotationRPKM.java"/>
            <include name="src/edu/cornell/med/icb/goby/modes/AggregatePeaks*"/>
            <include name="src/edu/cornell/med/icb/goby/modes/AnnotationPenaltyMode*"/>
            <include name="src/edu/cornell/med/icb/goby/modes/CountsArchiveToUnionPeaksAnnotationMode*"/>
        </delete>

         <!-- Create a "version" file which contains the release number -->
     	<writeln file="${exportdir}/${tag}/VERSION.txt" message="${tag}" append="false"/>
    </target>

    <target name="release" description="Tag and release build"
	    	depends="tag, source, cpp-source, jar, data, dependencies, javadocs, goby">
        <!-- make links to the release files to match what the web server expects -->
        <symlink link="${releasedir}/goby-cpp.zip" resource="${tag}-cpp.zip"/>
	    <symlink link="${releasedir}/goby-src.zip" resource="${tag}-src.zip"/>
        <symlink link="${releasedir}/goby-deps.zip" resource="${tag}-deps.zip"/>
	    <symlink link="${releasedir}/goby-apidoc.zip" resource="${tag}-apidoc.zip"/>
	    <symlink link="${releasedir}/goby-data.zip" resource="${tag}-data.zip"/>
        <symlink link="${releasedir}/goby.zip" resource="${tag}-goby.zip"/>

        <!-- copy the changes and version info files to the release directory -->
     	<copy todir="${releasedir}">
         	<fileset dir="${exportdir}/${tag}">
             	<include name="CHANGES.txt"/>
         	    <include name="VERSION.txt"/>
         	</fileset>
     	</copy>

        <!-- bundle everything up so it can be easily transferred to the release site -->
<!-- Ant tar task doesn't seem to handle softlinks properly but just makes duplicate copies :-(
        <tar destfile="release-${tag}.tgz" compression="gzip">
            <tarfileset dir="">
                <include name="${releasedir}/**"/>
            </tarfileset>
        </tar>
-->
        <shellscript shell="bash" dir="${basedir}">
            tar zcvf release-${tag}.tgz ${releasedir}
        </shellscript>

        <!-- copy the zip to the web folder -->
        <!-- todo -->
        <!-- notify webmaster about new file -->
        <!-- todo -->

        <!-- delete the temp files to clean up -->
        <!--<delete dir="${exportdir}"/>-->
    </target>

	<target name="source" depends="export" description="Assemble a source code release">
        <zip destfile="${srcfile}" comment="Goby version: ${tag}">
            <!-- don't include all the libraries and data -->
        	<fileset dir="${exportdir}">
                <exclude name="${tag}/lib/**"/>
                <exclude name="${tag}/data/**"/>
                <exclude name="${tag}/scripts/pbs/**"/>
                <exclude name="${tag}/scripts/sge/**"/>
                <exclude name="${tag}/scripts/swift/**"/>
                <exclude name="${tag}/scripts/util/**"/>
			</fileset>
       	</zip>
	</target>

    <target name="cpp-source" depends="export" description="Assemble a cpp source code release">
        <zip destfile="${cpp-srcfile}" comment="Goby version: ${tag}">
            <!-- don't include all the libraries and data -->
            <fileset dir="${exportdir}">
                <include name="${tag}/cpp/**"/>
            </fileset>
        </zip>
    </target>

    <target name="data" depends="export" description="Assemble a data release">
        <zip destfile="${datafile}" comment="Goby version: ${tag}">
            <fileset dir="${exportdir}">
                <include name="${tag}/data/**"/>
            </fileset>
        </zip>
    </target>

    <target name="dependencies" depends="export" description="Assemble dependency release">
        <zip destfile="${depsfile}" comment="Goby version: ${tag}">
        	<fileset dir="${exportdir}">
        		<include name="${tag}/lib/**"/>
        	</fileset>
        </zip>
    </target>

	<target name="javadocs">
        <!-- run the java docs -->
        <ant target="javadocs" dir="${exportdir}/${tag}">
            <property name="classes" location="${exportdir}/${tag}/classes"/>
            <property name="config" location="${exportdir}/${tag}/config"/>
            <property name="javadocs" location="${exportdir}/${tag}/javadocs"/>
            <property name="lib" location="${exportdir}/${tag}/lib"/>
            <property name="logs" location="${exportdir}/${tag}/logs"/>
            <property name="src" location="${exportdir}/${tag}/src"/>
        </ant>

        <!-- zip the api documentation for the website -->
        <zip destfile="${apidocfile}" basedir="${exportdir}" includes="${tag}/javadocs/**" comment="Goby version: ${tag}"/>
	</target>

	<target name="jar" depends="export" description="create and package the jar files">
        <ant target="jar" dir="${exportdir}/${tag}">
        	<property name="buildstamp" value="${exportdate}"/>
            <property name="classes" location="${exportdir}/${tag}/classes"/>
            <property name="config" location="${exportdir}/${tag}/config"/>
            <property name="lib" location="${exportdir}/${tag}/lib"/>
            <property name="logs" location="${exportdir}/${tag}/logs"/>
            <property name="src" location="${exportdir}/${tag}/src"/>
       	</ant>

         <!-- note: the copy is important, the bdval target will look for it -->
        <copy file="${exportdir}/${tag}/goby.jar" todir="${releasedir}"/>
        <move file="${exportdir}/${tag}/goby-api.jar" todir="${releasedir}"/>
	</target>

    <target name="goby" description="Create the binary distribtion for Goby">
        <chmod file="${exportdir}/${tag}/goby" perm="+x"/>
        <zip destfile="${gobyfile}" comment="Goby version: ${tag}">
        	<fileset dir="${exportdir}">
                <include name="${tag}/README-Goby.txt"/>
                <include name="${tag}/CHANGES.txt"/>
                <include name="${tag}/VERSION.txt"/>
                <include name="${tag}/COPYING"/>
                <include name="${tag}/GPL3.license"/>
                <include name="${tag}/LGPL3.license"/>
                <include name="${tag}/data/**"/>
                <include name="${tag}/goby.jar"/>
                <include name="${tag}/goby-io.jar"/>
                <include name="${tag}/goby-io-api.jar"/>
                <include name="${tag}/goby-spi.jar"/>
                <include name="${tag}/config/**"/>
                <include name="${tag}/scripts/distrib/**"/>
                <include name="${tag}/goby"/>
            </fileset>
        </zip>
    </target>
</project>
back to top