blob: 5128bb7dcfd8feac6d7eefdfa7cd7e0ba397c7f4 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<project xmlns:artifact="urn:maven-artifact-ant">
<!--
USAGE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In order to use this Ant script to produce releases for
. Cocoon Core
. several Cocoon blocks
. the Cocoon Servlet-Service framework
. the Cocoon Configuration sub-project
. a Getting-Started application
make sure that all the user specific properties are set correctly. Also ensure
that you can login to the 'deploy.server' via SSH keys, because the script
doesn't allow passing credentials.
This scripts also relys on having Maven 2.0.6 (or greater) installed correctly and
that 'gpg' is available as commandline tool.
When one of the 'externally available targets' is executed, the release artifacts
are created in the ./target directory and then uploaded to the configured server
location.
This script has only been tested on Linux so far. In order to make it run in
other environements, some modifications are necessary (see all <cmd> calls).
-->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~ external tasks ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<path id="maven-ant-tasks.classpath" path="maven-ant-tasks-2.0.8.jar" />
<typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant" classpathref="maven-ant-tasks.classpath" />
<!-- ~~~~~~~~~~~~~~~~~~~~~~~ properties ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- general properties -->
<property name="target.dir" value="./target" />
<property name="release.base.dir" value="${target.dir}/release"/>
<property name="release.dir" value="${release.base.dir}/module" />
<!-- user specific properties -->
<property name="download.url.base" value="http://people.apache.org/builds/cocoon/" />
<property name="download.url.cocoon" value="${download.url.base}/org/apache/cocoon/" />
<property name="deploy.server" value="people.apache.org" />
<property name="deploy.path" value="/home/reinhard/public_html/cocoon-staging" />
<property name="deploy.user" value="reinhard" />
<property name="gpg-passphrase.file" value="" />
<!-- ~~~~~~~~~~~~~~~~~~~~~~~ externally available targets ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<target name="core" depends="init" description="Release Cocoon Core">
<add-module name="cocoon-core" version="2.2.0" type="core" />
<add-module name="cocoon-pipeline-api" version="1.0.0" type="pipeline-api" />
<add-module name="cocoon-pipeline-impl" version="1.0.0" type="pipeline-impl" />
<add-module name="cocoon-pipeline-components" version="1.0.0" type="pipeline-components" />
<add-module name="cocoon-expression-language-api" version="1.0.0" type="expression-language-api" />
<add-module name="cocoon-expression-language-impl" version="1.0.0" type="expression-language-impl" />
<add-module name="cocoon-sitemap-api" version="1.0.0" type="sitemap-api" />
<add-module name="cocoon-sitemap-components" version="1.0.0" type="sitemap-components" />
<add-module name="cocoon-sitemap-impl" version="1.0.0" type="sitemap-impl" />
<add-module name="cocoon-store-impl" version="1.0.0" type="store-impl" />
<add-module name="cocoon-thread-api" version="1.0.0" type="thread-api" />
<add-module name="cocoon-thread-impl" version="1.0.0" type="thread-impl" />
<add-module name="cocoon-util" version="1.0.0" type="util" />
<add-module name="cocoon-xml-api" version="1.0.0" type="xml-api" />
<add-module name="cocoon-xml-impl" version="1.0.0" type="xml-impl" />
<add-module name="cocoon-xml-resolver" version="1.0.0" type="xml-resolver" />
<add-module name="cocoon-xml-util" version="1.0.0" type="xml-util" />
<dist name="cocoon-2.2.0" deploy-group-name="" />
</target>
<target name="ajax-block" depends="init" description="Release the Cocoon Ajax block">
<create-block-dist-impl name-impl="cocoon-ajax-impl" version="1.0.0" name="cocoon-ajax-block"
docs="../../../site-svn/site/2.2/blocks/ajax/1.0/"/>
</target>
<target name="apples-block" depends="init" description="Release the Cocoon Apples block">
<create-block-dist-impl name-impl="cocoon-apples-impl" version="1.0.0" name="cocoon-apples-block"
docs="../../../site-svn/site/2.2/blocks/apples/1.0/"/>
</target>
<target name="auth-block" depends="init" description="Release the Cocoon Auth block">
<create-block-dist-api-impl name-impl="cocoon-auth-impl" name-api="cocoon-auth-api" version="1.0.0" name="cocoon-auth-block"
docs="../../../site-svn/site/2.2/blocks/auth/1.0/"/>
</target>
<target name="batik-block" depends="init" description="Release the Cocoon Batik block">
<create-block-dist-impl name-impl="cocoon-batik-impl" version="1.0.0" name="cocoon-batik-block"
docs="../../../site-svn/site/2.2/blocks/batik/1.0/"/>
</target>
<target name="captcha-block" depends="init" description="Release the Cocoon Captcha block">
<create-block-dist-impl name-impl="cocoon-captcha-impl" version="1.0.0" name="cocoon-captcha-block"
docs="../../../site-svn/site/2.2/blocks/captcha/1.0/"/>
</target>
<target name="databases-bridge" depends="init" description="Release the Cocoon Databases Bridge block">
<create-block-dist-impl name-impl="cocoon-databases-bridge" version="1.0.0" name="cocoon-databases-bridge-block"
docs="../../../site-svn/site/2.2/blocks/databases-bridge/1.0/"/>
</target>
<target name="databases-hsqldb-client" depends="init" description="Release the Cocoon HsqlDb Client block">
<create-block-dist-impl name-impl="cocoon-databases-hsqldb-client" version="1.0.0" name="cocoon-databases-hsqldb-client-block"
docs="../../../site-svn/site/2.2/blocks/hsqldb-client/1.0/"/>
</target>
<target name="databases-hsqldb-server" depends="init" description="Release the Cocoon HsqlDb Server block">
<create-block-dist-impl name-impl="cocoon-databases-hsqldb-server" version="1.0.0" name="cocoon-databases-hsqldb-server-block"
docs="../../../site-svn/site/2.2/blocks/hsqldb-server/1.0/"/>
</target>
<target name="databases-impl" depends="init" description="Release the Cocoon Databases Implementation block">
<create-block-dist-impl name-impl="cocoon-databases-impl" version="1.0.0" name="cocoon-databases-impl-block"
docs="../../../site-svn/site/2.2/blocks/databases/1.0/"/>
</target>
<target name="flowscript-block" depends="init" description="Release the Cocoon Flowscript block">
<create-block-dist-impl name-impl="cocoon-flowscript-impl" version="1.0.0" name="cocoon-flowscript-block"
docs="../../../site-svn/site/2.2/blocks/flowscript/1.0/"/>
</target>
<target name="fop-block" depends="init" description="Release the Cocoon FOP block">
<create-block-dist-impl name-impl="cocoon-fop-impl" version="1.0.0" name="cocoon-fop-block"
docs="../../../site-svn/site/2.2/blocks/fop/1.0/"/>
</target>
<target name="forms-block" depends="init" description="Release the Cocoon Forms block">
<create-block-dist-impl name-impl="cocoon-forms-impl" version="1.1.0" name="cocoon-forms-block"
docs="../../../site-svn/site/2.2/blocks/forms/1.0/"/>
</target>
<target name="html-block" depends="init" description="Release the Cocoon HTML block">
<create-block-dist-impl name-impl="cocoon-html-impl" version="1.0.0" name="cocoon-html-block"
docs="../../../site-svn/site/2.2/blocks/html/1.0/"/>
</target>
<target name="linkrewriter-block" depends="init" description="Release the Cocoon Linkrewriter block">
<create-block-dist-impl name-impl="cocoon-linkrewriter-impl" version="1.0.0" name="cocoon-linkrewriter-block"
docs="../../../site-svn/site/2.2/blocks/linkrewriter/1.0/"/>
</target>
<target name="mail-block" depends="init" description="Release the Cocoon Mail block">
<create-block-dist-impl name-impl="cocoon-mail-impl" version="1.0.0" name="cocoon-mail-block" docs="../../../site-svn/site/2.2/blocks/mail/1.0/"/>
</target>
<target name="template-block" depends="init" description="Release the Cocoon Template block">
<create-block-dist-impl name-impl="cocoon-template-impl" version="1.1.0" name="cocoon-template-block"
docs="../../../site-svn/site/2.2/blocks/template/1.0/"/>
</target>
<target name="jnet" depends="init" description="Release JNet">
<add-docs dir="../../../site-svn/site/subprojects/jnet/1.1/" type="impl"/>
<add-module name="cocoon-jnet" version="1.1.0" type="impl" />
<add-files dir="legal/default" />
<dist name="cocoon-jnet-1.1.0" deploy-group-name="cocoon-jnet" />
</target>
<target name="block-deployment" depends="init" description="Release Block-Deployment">
<add-docs dir="../../../site-svn/site/subprojects/block-deployment/1.1/" type="impl"/>
<add-module name="cocoon-block-deployment" version="1.1.0" type="impl" />
<add-files dir="legal/default" />
<dist name="cocoon-block-deployment-1.1.0" deploy-group-name="cocoon-block-deployment" />
</target>
<target name="ssf" depends="init" description="Release the Servlet-Service Framework">
<add-docs dir="../../../site-svn/site/subprojects/servlet-service/1.2/servlet-service-impl/1.2/" type="impl"/>
<!--add-docs dir="../../../site-svn/site/subprojects/servlet-service/1.0/servlet-service-components/1.0/" type="cocoon-components"/-->
<add-module name="cocoon-servlet-service-impl" version="1.2.0" type="impl" />
<!--add-module name="cocoon-servlet-service-components" version="1.0.0" type="cocoon-components" /-->
<add-files dir="legal/default" />
<dist name="cocoon-servlet-serivce-framework-1.2.0" deploy-group-name="cocoon-servlet-service-framework" />
</target>
<target name="conf" depends="init" description="Release the Cocoon Configuration subproject">
<!--add-docs dir="../../../site-svn/site/subprojects/configuration/1.0/configuration-api/1.0/" type="configuration-api"/-->
<add-docs dir="../../../site-svn/site/subprojects/configuration/1.0/spring-configurator/2.1/" type="spring-configurator"/>
<!--add-module name="cocoon-configuration-api" version="1.0.2" type="configuration-api" /-->
<add-module name="cocoon-spring-configurator" version="2.1.0" type="components" />
<add-files dir="legal/default" />
<dist name="cocoon-configuration-2.0.0" deploy-group-name="cocoon-configuration" />
</target>
<target name="getting-started" depends="getting-started-create" description="Release the Getting-Started application">
<add-files dir="legal/getting-started" />
<dist name="cocoon-getting-started-2.2.0" deploy-group-name="getting-started" />
</target>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~ internal targets ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<target name="init">
<delete dir="${target.dir}" />
<mkdir dir="${release.dir}" />
</target>
<macrodef name="create-block-dist-api-impl">
<attribute name="name" />
<attribute name="name-api" />
<attribute name="name-impl" />
<attribute name="version" />
<attribute name="docs" />
<sequential>
<add-docs dir="@{docs}" type="impl"/>
<add-module name="@{name-api}" version="@{version}" type="api" />
<add-module name="@{name-impl}" version="@{version}" type="impl" />
<add-files dir="legal/default" />
<dist name="@{name}-@{version}" deploy-group-name="@{name}" />
</sequential>
</macrodef>
<macrodef name="create-block-dist-impl">
<attribute name="name" />
<attribute name="name-impl" />
<attribute name="version" />
<attribute name="docs" />
<sequential>
<add-docs dir="@{docs}" type="impl"/>
<add-module name="@{name-impl}" version="@{version}" type="impl" />
<add-files dir="legal/default" />
<dist name="@{name}-@{version}" deploy-group-name="@{name}" />
</sequential>
</macrodef>
<macrodef name="dist">
<attribute name="name" />
<attribute name="deploy-group-name" />
<sequential>
<property name="file" value="${target.dir}/@{name}" />
<create-package file="${file}" name="@{name}" />
<create-checksum file="${file}" />
<gpg-sign file="${file}" />
<deploy-staging file="${file}" deploy-group-name="@{deploy-group-name}" />
</sequential>
</macrodef>
<macrodef name="add-module">
<attribute name="name" />
<attribute name="version" />
<attribute name="type" />
<attribute name="jarFileName" default="@{name}-@{version}.jar" />
<attribute name="sourcesFileName" default="@{name}-@{version}-sources.jar" />
<attribute name="javadocFileName" default="@{name}-@{version}-javadoc.jar" />
<attribute name="distFileName" default="@{name}-@{version}-dist" />
<sequential>
<get dest="${target.dir}/@{jarFileName}" src="${download.url.cocoon}/@{name}/@{version}/@{jarFileName}" />
<get dest="${target.dir}/@{sourcesFileName}" src="${download.url.cocoon}/@{name}/@{version}/@{sourcesFileName}" />
<get dest="${target.dir}/@{javadocFileName}" src="${download.url.cocoon}/@{name}/@{version}/@{javadocFileName}" />
<!-- unzip Javadocs -->
<unzip src="${target.dir}/@{javadocFileName}" dest="${release.dir}/@{type}/docs/apidocs" />
<!-- unzip Sources -->
<unzip src="${target.dir}/@{sourcesFileName}" dest="${release.dir}/@{type}/src" />
<!-- copy the binaries -->
<copy file="${target.dir}/@{jarFileName}" tofile="${release.dir}/@{jarFileName}" />
</sequential>
</macrodef>
<macrodef name="add-docs">
<attribute name="dir" />
<attribute name="type" />
<sequential>
<copy todir="${release.dir}/@{type}/docs">
<fileset dir="@{dir}">
<exclude name="**/.svn/**"/>
<exclude name="**/LICENSE.txt"/>
<exclude name="**/NOTICE.txt"/>
<exclude name="**/license.txt"/>
<exclude name="**/notice.txt"/>
</fileset>
</copy>
</sequential>
</macrodef>
<macrodef name="add-files">
<attribute name="dir" />
<sequential>
<copy todir="${release.dir}">
<fileset dir="@{dir}" />
</copy>
</sequential>
</macrodef>
<macrodef name="create-package">
<attribute name="file" />
<attribute name="name" />
<sequential>
<!-- rename base directory -->
<property name="release.dir.new" value="${release.base.dir}/@{name}" />
<mkdir dir="${release.dir.new}"/>
<move todir="${release.dir.new}">
<fileset dir="${release.dir}"/>
</move>
<!-- create packages -->
<fixcrlf srcdir="${release.base.dir}" eol="dos">
<include name="**/*.txt"/>
<include name="**/*.xml"/>
<include name="**/*.xslt"/>
<include name="**/*.js"/>
<include name="**/*.xslt"/>
<include name="**/*.java"/>
</fixcrlf>
<zip destfile="@{file}.zip" basedir="${release.base.dir}" level="9" />
<fixcrlf srcdir="${release.base.dir}" eol="unix">
<include name="**/*.txt"/>
<include name="**/*.xml"/>
<include name="**/*.xslt"/>
<include name="**/*.js"/>
<include name="**/*.xslt"/>
<include name="**/*.java"/>
</fixcrlf>
<tar tarfile="@{file}.tar" basedir="${release.base.dir}" />
<gzip zipfile="@{file}.tar.gz" src="@{file}.tar" />
<delete file="@{file}.tar" />
</sequential>
</macrodef>
<macrodef name="create-checksum">
<attribute name="file" />
<sequential>
<!-- checksums -->
<checksum algorithm="SHA" file="@{file}.zip" fileext=".sha1" />
<checksum file="@{file}.zip" fileext=".md5" />
<checksum algorithm="SHA" file="@{file}.tar.gz" fileext=".sha1" />
<checksum file="@{file}.tar.gz" fileext=".md5" />
</sequential>
</macrodef>
<macrodef name="gpg-sign">
<attribute name="file" />
<sequential>
<!-- gpg -->
<gpg-sign-file file="@{file}.zip" />
<gpg-sign-file file="@{file}.zip.md5" />
<gpg-sign-file file="@{file}.zip.sha1" />
<gpg-sign-file file="@{file}.tar.gz" />
<gpg-sign-file file="@{file}.tar.gz.md5" />
<gpg-sign-file file="@{file}.tar.gz.sha1" />
</sequential>
</macrodef>
<macrodef name="deploy-staging">
<attribute name="file" />
<attribute name="deploy-group-name" />
<sequential>
<!-- scp to staging repository -->
<deploy-via-scp file="@{file}.zip" deploy-group-name="@{deploy-group-name}" />
<deploy-via-scp file="@{file}.zip.md5" deploy-group-name="@{deploy-group-name}" />
<deploy-via-scp file="@{file}.zip.sha1" deploy-group-name="@{deploy-group-name}" />
<deploy-via-scp file="@{file}.zip.asc" deploy-group-name="@{deploy-group-name}" />
<deploy-via-scp file="@{file}.zip.md5.asc" deploy-group-name="@{deploy-group-name}" />
<deploy-via-scp file="@{file}.zip.sha1.asc" deploy-group-name="@{deploy-group-name}" />
<deploy-via-scp file="@{file}.tar.gz" deploy-group-name="@{deploy-group-name}" />
<deploy-via-scp file="@{file}.tar.gz.md5" deploy-group-name="@{deploy-group-name}" />
<deploy-via-scp file="@{file}.tar.gz.sha1" deploy-group-name="@{deploy-group-name}" />
<deploy-via-scp file="@{file}.tar.gz.asc" deploy-group-name="@{deploy-group-name}" />
<deploy-via-scp file="@{file}.tar.gz.md5.asc" deploy-group-name="@{deploy-group-name}" />
<deploy-via-scp file="@{file}.tar.gz.sha1.asc" deploy-group-name="@{deploy-group-name}" />
</sequential>
</macrodef>
<macrodef name="deploy-via-scp">
<attribute name="file" />
<attribute name="deploy-group-name" />
<sequential>
<exec command="ssh ${deploy.user}@${deploy.server} 'mkdir ${deploy.path}/@{deploy-group-name}'" />
<exec command="scp @{file} ${deploy.user}@${deploy.server}:${deploy.path}/@{deploy-group-name}" />
</sequential>
</macrodef>
<macrodef name="gpg-sign-file">
<attribute name="file" />
<sequential>
<exec command="gpg -sba --passphrase-file ${gpg-passphrase.file} @{file}" />
</sequential>
</macrodef>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~ getting-started targets ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<target name="getting-started-create" depends="init">
<property name="getting-started.app.dir" value="${release.dir}/app" />
<mkdir dir="${getting-started.app.dir}" />
<mkdir dir="${release.dir}/jetty/lib/" />
<property name="getting-started.orig.dir" value="./getting-started" />
<!-- Copy Jetty files -->
<property name="jetty.download.url.base" value="http://repo1.maven.org/maven2/" />
<get dest="${release.dir}/jetty/lib/jetty-6.1.7.jar" src="${jetty.download.url.base}/org/mortbay/jetty/jetty/6.1.7/jetty-6.1.7.jar" />
<get dest="${release.dir}/jetty/lib/jetty-util-6.1.7.jar" src="${jetty.download.url.base}/org/mortbay/jetty/jetty-util/6.1.7/jetty-util-6.1.7.jar" />
<get dest="${release.dir}/jetty/jetty-start-6.1.7.jar" src="${jetty.download.url.base}/org/mortbay/jetty/start/6.1.7/start-6.1.7.jar" />
<get dest="${release.dir}/jetty/lib/servlet-api-2.5-6.1.7.jar" src="${jetty.download.url.base}/org/mortbay/jetty/servlet-api-2.5/6.1.7/servlet-api-2.5-6.1.7.jar" />
<!-- Create a block -->
<exec dir="${getting-started.app.dir}" executable="mvn" logError="true">
<arg line="org.apache.maven.plugins:maven-archetype-plugin:1.0-alpha-7:create -DarchetypeGroupId=org.apache.cocoon -DarchetypeArtifactId=cocoon-22-archetype-block -DarchetypeVersion=1.0.0 -DgroupId=org.apache.cocoon.gettingstarted -DartifactId=custom-block" />
</exec>
<exec dir="${getting-started.app.dir}/custom-block" executable="mvn" logError="true">
<arg line="install" />
</exec>
<!-- Create the web application -->
<exec dir="${getting-started.app.dir}" executable="mvn" logError="true">
<arg line="org.apache.maven.plugins:maven-archetype-plugin:1.0-alpha-7:create -DarchetypeGroupId=org.apache.cocoon -DarchetypeArtifactId=cocoon-22-archetype-webapp -DarchetypeVersion=1.0.0 -DgroupId=org.apache.cocoon.gettingstarted -DartifactId=webapp" />
</exec>
<replace file="${getting-started.app.dir}/webapp/pom.xml">
<replacetoken><![CDATA[</dependencies>]]></replacetoken>
<replacevalue>
<![CDATA[
<dependency>
<groupId>org.apache.cocoon.gettingstarted</groupId>
<artifactId>custom-block</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
]]>
</replacevalue>
</replace>
<exec dir="${getting-started.app.dir}/webapp" executable="mvn" logError="true">
<arg line="package" />
</exec>
<move todir="${getting-started.app.dir}/lib">
<fileset dir="${getting-started.app.dir}/webapp/target/webapp-1.0-SNAPSHOT/WEB-INF/lib"/>
</move>
<!-- Remove Maven specific files -->
<delete includeemptydirs="true">
<fileset dir="${getting-started.app.dir}">
<include name="**/pom.xml"/>
<include name="**/rcl.properties"/>
<include name="**/target/**"/>
</fileset>
</delete>
<!-- Copy static files -->
<antcall target="copy-static-files" />
</target>
<target name="copy-static-files">
<copy todir="${release.dir}">
<fileset dir="${getting-started.orig.dir}" />
</copy>
</target>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~ Maven Ant tasks experiments ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<target name="test" depends="init">
<artifact:dependencies filesetId="dependency.fileset">
<dependency groupId="org.apache.cocoon" artifactId="cocoon-fop-impl" version="1.0.0">
<exclusion groupId="org.apache.cocoon" artifactId="cocoon-core"/>
</dependency>
</artifact:dependencies>
<copy todir="${release.dir}">
<fileset refid="dependency.fileset" />
<mapper type="flatten" />
</copy>
</target>
</project>