niclas 2004/04/13 23:48:18 Added: maven-plugins/versioning plugin.jelly plugin.properties project.properties project.xml maven-plugins/versioning/src/plugin-resources entity-template.ent maven-plugins/versioning/xdocs changes.xml goals.xml index.xml navigation.xml properties.xml Log: First cut of the new Versioning Plugin. Revision Changes Path 1.1 avalon/maven-plugins/versioning/plugin.jelly Index: plugin.jelly =================================================================== <?xml version="1.0"?> <!-- /* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed 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:j="jelly:core" xmlns:define="jelly:define" xmlns:util="jelly:util" xmlns:maven="jelly:maven" xmlns:ant="jelly:ant" xmlns:x="jelly:xml" xmlns:increment="increment"> <define:taglib uri="increment"> <define:tag name="inc-number" > <j:set var="number" value="${ number + 1 }" scope="parent" /> </define:tag> <define:tag name="update-entities" > <increment:read/> <ant:copy tofile="${maven.increment.central.entities}/${pom.artifactId}.ent" file="${plugin.resources}/entity-template.ent" filtering="true" overwrite="true" > <filterset> <filter token="PROJECT-ID" value="${pom.artifactId}"/> <filter token="VERSION" value="${major}.${minor}.${phase}${number}"/> </filterset> </ant:copy> </define:tag> <define:tag name="read"> <j:set var="versionFile" value="${maven.increment.dir}/build.numbers" /> <util:file var="incrementSystem" name="${versionFile}"/> <j:if test="${ ! incrementSystem.exists() }" > <j:set var="major" value="1" scope="parent" /> <j:set var="minor" value="0" scope="parent" /> <j:set var="phase" value="dev-" scope="parent" /> <j:set var="number" value="0" scope="parent" /> </j:if> <j:if test="${ incrementSystem.exists() }" > <util:properties file="${versionFile}" var="versionProperties"/> <j:set var="major" value="${versionProperties.getProperty('build.major').trim()}" scope="parent" /> <j:set var="minor" value="${versionProperties.getProperty('build.minor').trim()}" scope="parent" /> <j:set var="phase" value="${versionProperties.getProperty('build.phase').trim()}" scope="parent" /> <j:set var="number" value="${versionProperties.getProperty('build.number').trim()}" scope="parent" /> </j:if> </define:tag> <define:tag name="store"> <ant:mkdir dir="${maven.increment.dir}" /> <ant:echo file="${maven.increment.dir}/build.numbers"> build.major=${major} build.minor=${minor} build.phase=${phase} build.number=${number} </ant:echo> <increment:update-entities /> </define:tag> <define:tag name="commit"> <j:set var="commitToCVS" value="${maven.increment.commit}" /> <j:if test="${commitToCVS}" > <ant:cvs command="-q commit -m "New distribution (${pom.currentVersion}) created and uploaded to http://www.apache.org/dist/avalon/avalon-logkit/distributions/ " " /> </j:if> </define:tag> <define:tag name="tag"> <j:if test="${tagCVS}" > <j:set var="tagCVS" value="${maven.increment.tag}" /> <util:replace var="tag" oldChar="-" newChar="_" value="DIST_${major}_${minor}_${phase}${number}"/> <ant:cvs command="-q tag ${tag}" /> </j:if> </define:tag> </define:taglib> <preGoal name="dist:deploy" > <j:set var="enable" value="${maven.increment.enable}" /> <j:if test="${enable}" > <util:file var="incrementSystem" name="${maven.increment.dir}/build.numbers"/> <j:if test="${ ! incrementSystem.exists() }" > <ant:echo> ***************************************************************************** * * The Increment system was not initialized. * It has now been initialized but it is required that Maven is restarted. * Please make sure that the ${maven.increment.dir}/build.numbers contains * the version numbers you intend to use. * ***************************************************************************** </ant:echo> <attainGoal name="increment:initialize" /> </j:if> <j:if test="${ incrementSystem.exists() }" > <j:set var="distDeployInProgress" value="true" /> <attainGoal name="jar:deploy" /> </j:if> </j:if> </preGoal> <preGoal name="jar:deploy" > <j:set var="enable" value="${maven.increment.enable}" /> <j:if test="${enable}" > <util:file var="incrementSystem" name="${maven.increment.dir}/build.numbers"/> <j:if test="${ ! incrementSystem.exists() }" > <ant:echo> ***************************************************************************** * * The Increment system was not initialized. * It has now been initialized but it is required that Maven is restarted. * Please make sure that the ${maven.increment.dir}/build.numbers contains * the version numbers you intend to use. * ***************************************************************************** </ant:echo> <attainGoal name="increment:initialize" /> </j:if> </j:if> </preGoal> <postGoal name="dist:deploy" > <j:set var="enable" value="${maven.increment.enable}" /> <j:if test="${enable}" > <increment:read /> <increment:inc-number/> <increment:store /> <increment:commit /> </j:if> </postGoal> <postGoal name="jar:deploy" > <j:set var="enable" value="${maven.increment.enable}" /> <j:if test="${! distDeployInProgress }" > <j:if test="${enable}" > <increment:read /> <increment:inc-number/> <increment:store /> <increment:commit /> </j:if> </j:if> </postGoal> <goal name="increment:major" description="Increases the MAJOR version number." > <j:set var="enable" value="${maven.increment.enable}" /> <j:if test="${enable}" > <increment:read /> <j:set var="major" value="${ major + 1 }" /> <j:set var="minor" value="0" /> <j:set var="phase" value="dev-" /> <j:set var="number" value="0" /> <increment:store /> </j:if> </goal> <goal name="increment:minor" description="Increases the MINOR version number." > <j:set var="enable" value="${maven.increment.enable}" /> <j:if test="${enable}" > <increment:read /> <j:set var="minor" value="${ minor + 1 }" /> <j:set var="phase" value="dev-" /> <j:set var="number" value="0" /> <increment:store /> </j:if> </goal> <goal name="increment:phase" description="Changes the PHASE of the project/artifact." > <j:set var="enable" value="${maven.increment.enable}" /> <j:if test="${enable}" > <increment:read /> <j:if test="${ phase.equals( 'rc-' )}" > <j:set var="phase" value=" " /> </j:if> <j:if test="${ phase.equals( 'dev-' )}" > <j:set var="phase" value="rc-" /> </j:if> <j:set var="number" value="0" /> <increment:store /> </j:if> </goal> <goal name="increment:micro" > <j:set var="enable" value="${maven.increment.enable}" /> <j:if test="${enable}" > <increment:read /> <increment:inc-number /> <increment:store /> </j:if> </goal> <goal name="increment:initialize" description="Initializes the Incrementor system." > <j:set var="enable" value="${maven.increment.enable}" /> <j:if test="${enable}" > <increment:read /> <increment:store /> <increment:update-entities /> </j:if> </goal> <goal name="increment" description="Automatic Versioning System, designed for Avalon." > <ant:echo> The 'Incrementor' is a versioning system, made specifically for the Avalon project. It uses a version format of; MAJOR "." MINOR "." PHASE NUMBER where PHASE is "dev-", "rc-", "" To increment any of MAJOR, MINOR or PHASE, invoke the increment:major increment:minor increment:phase The NUMBER is incremented automatically when the artifact/project is deployed to the central repository. Whenever a position is incremented, all the position to its right are reset to their respective start values. MINOR=0 PHASE=dev- NUMBER=0 Example of a cycle; 2.1.dev-34, 2.1.dev-35, 2.1.rc-0, 2.1.rc-1, 2.1.0, 2.1.1, 2.2.dev-0 Before start using it, one must invoke the increment:initialize or, if it is forgotten, it will do so automatically and require you to restart Maven, since the pom.currentVersion can't be updated after start. The following properties are used (with their default values); # This property must be set to true, to enable the Versioning system maven.increment.enable = false # The directory where the versioning information is persisted. maven.increment.dir=${basedir}/versioning # The directory where the versioning information is persisted. maven.increment.central.entities=${basedir}/versioning # If the version number data should be committed to CVS after a deploy. maven.increment.commit=true </ant:echo> </goal> </project> 1.1 avalon/maven-plugins/versioning/plugin.properties Index: plugin.properties =================================================================== # ------------------------------------------------------------------- # Copyright 2001-2004 The Apache Software Foundation. # # Licensed 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. # ------------------------------------------------------------------- # This property must be set to true, to enable the Versioning system maven.increment.enable = false # The directory where the versioning information is persisted. maven.increment.dir = ${basedir}/versioning # The directory where the versioning information is persisted. maven.increment.central.entities = ${basedir}/versioning # If the version number data should be committed to CVS after a deploy. maven.increment.commit = true 1.1 avalon/maven-plugins/versioning/project.properties Index: project.properties =================================================================== # ------------------------------------------------------------------- # Copyright 2001-2004 The Apache Software Foundation. # # Licensed 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. # ------------------------------------------------------------------- # ------------------------------------------------------------------- # P R O J E C T P R O P E R T I E S # ------------------------------------------------------------------- maven.xdoc.date=left maven.xdoc.version=${pom.currentVersion} maven.license.licenseFile=${basedir}/../../LICENSE.txt maven.checkstyle.header.file=${basedir}/../../LICENSE.txt maven.checkstyle.format = turbine maven.junit.fork=yes 1.1 avalon/maven-plugins/versioning/project.xml Index: project.xml =================================================================== <?xml version="1.0" encoding="UTF-8"?> <!-- /* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed 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> <extend>../project.xml</extend> <id>avalon-versioning-plugin</id> <name>Avalon Versioning Maven Plugin</name> <currentVersion>1.0.dev-4</currentVersion> <description/> <shortDescription>Automatic generation and updates of Versions.</shortDescription> <url>http://avalon.apache.org/plugins/versioning/</url> <siteDirectory>/www/avalon.apache.org/plugins/versioning</siteDirectory> </project> 1.1 avalon/maven-plugins/versioning/src/plugin-resources/entity-template.ent Index: entity-template.ent =================================================================== <!ENTITY @[EMAIL PROTECTED] "@PROJECT-ID@"> <!ENTITY @[EMAIL PROTECTED] "@PROJECT-ID@"> <!ENTITY @[EMAIL PROTECTED] "@VERSION@"> 1.1 avalon/maven-plugins/versioning/xdocs/changes.xml Index: changes.xml =================================================================== <?xml version="1.0" encoding="UTF-8"?> <!-- /* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed 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. */ --> <document> <properties> <title>Changes</title> <author email="[EMAIL PROTECTED]">Vincent Massol</author> </properties> <body> <release version="1.4" date="2004-03-07"> <action dev="dion" type="fix">Prefix basedir on copied ant build file. Only create ant build file if the project has source. Only copy maven.src.dir if it exists.</action> <action dev="dion" type="update">Moved properties out to plugin.properties</action> <action dev="dion" type="fix">add ${basedir} to ant build file being moved</action> </release> <release version="1.3" date="2003-09-29"> <action dev="dion" type="update">update to use maven.docs.*/maven.gen.docs</action> <action dev="dion" type="update">update to commons-lang 1.0.1</action> </release> <release version="1.1" date="2002-09-16"> <action dev="jvanzyl" type="update">Released.</action> </release> </body> </document> 1.1 avalon/maven-plugins/versioning/xdocs/goals.xml Index: goals.xml =================================================================== <?xml version="1.0"?> <!-- /* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed 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. */ --> <document> <properties> <title>Avalon Versioning Maven Plug-in Goals</title> <author email="[EMAIL PROTECTED]">Niclas Hedhman</author> </properties> <body> <goals> <goal> <name>increment</name> <description> This is the default goal of the plugin and simply print out an explaination about this plugin </description> </goal> <goal> <name>increment:initialize</name> <description> Initializes the Versioning system. Need to be run once before starting to use the plugin. If it has not been run, it will be run automatically at the first dist:deploy or jar:deploy, but require you to restart Maven's build again. </description> </goal> <goal> <name>increment:major</name> <description> This goal increments the <strong>Major</strong> number and reset the positions to the right. </description> </goal> <goal> <name>increment:minor</name> This goal increments the <strong>Minor</strong> number and reset the positions to the right. <description> </description> </goal> <goal> <name>increment:phase</name> This goal increments the <strong>Phase</strong> number and reset the build number to zero. <description> </description> </goal> <goal> <name>increment:micro</name> <description> This goal is mainly for internal and testing purposes. It increases the build number, and should probably never be used directly. </description> </goal> </goals> </body> </document> 1.1 avalon/maven-plugins/versioning/xdocs/index.xml Index: index.xml =================================================================== <?xml version="1.0"?> <!-- /* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed 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. */ --> <document> <properties> <title>Avalon Versioning Maven Plug-in</title> <author email="[EMAIL PROTECTED]">Niclas Hedhman</author> </properties> <body> <section name="Avalon Versioning Maven Plug-in"> <p> This plugin triggers on dist:deploy and jar:deploy goals, and increment the build number when the jar or distro has been uploaded. The CVS will also be tagged with the version, for proper maintenance. </p> <p> The plugin will need to initialize the project first, which is done with; </p> <source> maven increment:initialize </source> <p> This will create the initial setup and enable the Versioning plugin for the project. However, you will need to set the maven.versioning.enable property in the project.properties file to true as well. </p> <p> Initially the version is set to 1.0.dev-0. The 'dev-' part means that it is development in-progress. We call this the "phase". There are only 3 phases, "dev-", "rc-" and "", where "rc" stands for <strong>release candidate</strong>. The workflow is, when a new Minor version is started, the version starts in the "dev-" phase, and any deployment will increment the number (digits right of dev-). Once the code has stablized, i.e. no more incompatible changes, and community-wide testing to start, the phase is incremented to "rc-". This is done by; </p> <source> maven increment:phase </source> <p> That will bring the version from, for instance, "1.0.dev-176" to "1.0.rc-0". Next time the increment:phase goal is called the result would become "1.0.0". </p> <p> To increment the <strong>Major</strong> and <strong>Minor</strong> parts, you invoke </p> <source> maven increment:minor maven increment:major </source> <p> respectively. For a Minor increment, it will be set to "X.y.dev-0" and for a Major increment the version will be set to "X.0.dev-0". </p> </section> </body> </document> 1.1 avalon/maven-plugins/versioning/xdocs/navigation.xml Index: navigation.xml =================================================================== <?xml version="1.0" encoding="ISO-8859-1"?> <!-- /* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed 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 name="Avalon Versioning Maven Plugin"> <title>Avalon Versioning Maven Plugin</title> <body> <links> <item name="Maven" href="http://maven.apache.org/"/> </links> <menu name="Overview"> <item name="Goals" href="/goals.html" /> <item name="Properties" href="/properties.html" /> </menu> </body> </project> 1.1 avalon/maven-plugins/versioning/xdocs/properties.xml Index: properties.xml =================================================================== <?xml version="1.0" encoding="ISO-8859-1"?> <!-- /* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed 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. */ --> <document> <properties> <title>Versioning Properties</title> <author email="[EMAIL PROTECTED]">Niclas Hedhman</author> </properties> <body> <section name="Versioning Settings"> <table> <tr><th>Property</th><th>Optional?</th><th>Description</th></tr> <tr> <td>maven.increment.enable</td> <td>yes - default is false</td> <td> This enables Versioning for the project. If it is false, all versioning goals are disabled. </td> </tr> <tr> <td>maven.increment.dir</td> <td>yes - default is ${basedir}/versioning</td> <td> The directory where the versioning information is stored. </td> </tr> <tr> <td>maven.increment.central.entities</td> <td>yes - default is ${basedir}/versioning</td> <td> The directory where the XML <!ENTITY ... > file is stored, which is used to keep all versions in sync throughout all projects. </td> </tr> <tr> <td>maven.increment.commit</td> <td>yes - default is true</td> <td> If true, the the whole source tree is committed, to ensure that the released version is placed into the CVS, and not only exist on the local system. <strong>NOTE:</strong> The commit only occurs when the content is uploaded to central repository. And the Entity file is NOT committed! </td> </tr> <tr> <td>maven.increment.commit</td> <td>yes - default is true</td> <td> If true, the the whole source tree is tagged when a dist:deploy is done, to ensure that the released version is marked properly in the CVS. <strong>NOTE:</strong> Only the ${basedir} and below is tagged. </td> </tr> </table> </section> </body> </document>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]