update changelog
[phorkie.git] / build.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <project name="phorkie" default="zip" basedir=".">
3   <!--
4     phorkie phing build file.
5     This script should provide a one-stop tool for all administrative
6     tasks around phorkie, like creating a release version,
7     tagging a release
8   -->
9   <property file="build.properties" />
10
11   <property name="version-m"  value="0.3" />
12   <property name="version"    value="0.3.0" />
13   <property name="stability"  value="alpha" />
14   <property name="releasenotes" value="
15 Version 0.3.0 - 2012-09-27
16 --------------------------
17
18 * Fix bug #10: error when nothing submitted [cweiske]
19 * Fix bug #11: do not index edit, delete and tool pages [cweiske]
20 * Fix bug #20: elasticsearch error on deletion [cweiske]
21 * Fix bug #22: Edited pastes not in 'recently created' [cweiske]
22 * Fix bug #23: 'work dir not found' on failed remote fork [cweiske]
23 * Implement request #5: Add OpenID authentication [jnovack]
24 * Implement request #9: autodetect file type [cweiske]
25 * Implement request #12: DOAP and rel='vcs-git' support [cweiske]
26 * Implement request #13: remote forking support [cweiske]
27 * Hide additional file fields by default, button to toggle their visibility
28   [cweiske]
29 * Markdown support [jnovack]
30 * Added nginx rewrite rules to README [skl]
31 " />
32   <property name="zipfile"     value="${phing.project.name}-${version}.tar.bz2" />
33   <property name="pkgfile"     value="${phing.project.name}-${version}.tgz" />
34   <property name="distfile"    value="dist/${zipfile}" />
35   <property name="distpkgfile" value="dist/pear/${pkgfile}" />
36   <property name="sfproject"   value="phorkie" />
37   <property name="sffilepath"  value="p/ph/phorkie/" />
38
39   <fileset id="fs.zip" dir=".">
40    <include name="data/**"/>
41    <include name="scripts/**"/>
42    <include name="src/**"/>
43    <include name="www/**"/>
44
45    <include name="ChangeLog"/>
46    <include name="LICENSE"/>
47    <include name="NEWS.rst"/>
48    <include name="README.rst"/>
49
50    <exclude name="**/.gitignore/"/>
51    <exclude name="data/config.php"/>
52   </fileset>
53
54   <fileset id="fs.doc" dir=".">
55    <include name="README.rst"/>
56    <include name="NEWS.rst"/>
57   </fileset>
58
59   <taskdef name="rST" classname="phing.tasks.ext.rSTTask" />
60   <taskdef name="d51pearpkg2" classname="phing.tasks.ext.d51PearPkg2Task" />
61
62   <target name="zip" depends="check"
63    description="Create zip file for release"
64    >
65     <!--
66       The release file is for end users, so it is safe to
67       remove anything developer-related.
68
69       Test your zip with: unzip -l phorkie-0.1.0.zip
70     -->
71     <echo msg="Creating distribution zip for phorkie ${version}"/>
72     <delete file="${distfile}" failonerror="false"/>
73     <tar compression="bzip2" destfile="${distfile}"
74          prefix="${phing.project.name}-${version}/"
75     >
76      <fileset refid="fs.zip"/>
77     </tar>
78   </target>
79
80
81
82   <target name="package" depends="check"
83    description="Creates the pear package"
84   >
85    <d51pearpkg2 dir="." baseinstalldir="/">
86      <name>phorkie</name>
87      <summary>Self-hosted pastebin software</summary>
88      <description>
89       Self-hosted pastebin software written in PHP.
90       Pastes are editable, may have multiple files and are stored in git repositories.
91      </description>
92      <channel>phorkie.sourceforge.net</channel>
93
94      <lead user="cweiske" name="Christian Weiske" email="cweiske@cweiske.de" />
95      <license>AGPL</license>
96
97      <version   release="${version}"   api="${version}" />
98      <stability release="${stability}" api="${stability}" />
99
100      <notes>${releasenotes}</notes>
101
102      <dependencies>
103        <php minimum_version="5.3.0" />
104        <pear minimum_version="1.9.0" />
105
106        <package name="Date_HumanDiff"
107                 channel="pear.php.net"
108                 minimum_version="0.4.0"
109                 />
110        <package name="HTTP_Request2"
111                 channel="pear.php.net"
112                 minimum_version="2.1.0"
113                 />
114        <package name="OpenID"
115                 channel="pear.php.net"
116                 minimum_version="0.3.3"
117                 />
118        <package name="Pager"
119                 channel="pear.php.net"
120                 minimum_version="2.4.8"
121                 />
122        <package name="Services_Libravatar"
123                 channel="pear.php.net"
124                 minimum_version="0.2.2"
125                 />
126        <package name="VersionControl_Git"
127                 channel="pear.php.net"
128                 minimum_version="0.4.4"
129                 />
130
131        <package name="geshi"
132                 channel="mediawiki.googlecode.com/svn"
133                 minimum_version="1.0.0"
134                 />
135        <package name="Markdown"
136                 channel="pear.michelf.ca"
137                 minimum_version="0.0.2"
138                 />
139        <package name="MIME_Type_PlainDetect"
140                 channel="zustellzentrum.cweiske.de"
141                 minimum_version="0.0.2"
142                 />
143        <package name="Twig"
144                 channel="pear.twig-project.org"
145                 minimum_version="1.6.0"
146                 />
147
148      </dependencies>
149
150      <!-- map directory (key) to role -->
151      <dirroles key="data">data</dirroles>
152      <dirroles key="scripts">data</dirroles>
153      <dirroles key="src">php</dirroles>
154      <dirroles key="www">www</dirroles>
155
156      <!-- do not add the following files to the package.
157           copied from excludes above -->
158      <ignore>**/.gitignore</ignore>
159      <ignore>build*</ignore>
160      <ignore>data/config.php</ignore>
161      <ignore>dist/**</ignore>
162      <ignore>*.properties</ignore>
163      <ignore>*.tgz</ignore>
164
165      <replacement path="www/www-header.php"
166       type="pear-config" from="@data_dir@" to="data_dir"
167       />
168
169
170    </d51pearpkg2>
171
172    <!-- time to fix the package.xml file since the task does not
173         allow everything we need:
174         - strip the base directory names like src, data and www
175         - remove that dumb baseinstalldir from files
176         - md5sums are generated automatically when packaging
177    -->
178    <!-- yes, we need to generate a 2nd file and move it back -->
179    <copy file="package.xml" tofile="package2.xml" overwrite="true">
180     <filterchain>
181      <replaceregexp>
182       <!-- remove md5sums -->
183       <regexp
184        pattern="md5sum=&quot;[a-z0-9]{32}&quot; "
185        replace=""
186        />
187       <!-- remove baseinstalldir for files -->
188       <regexp
189        pattern="&lt;file baseinstalldir=&quot;/&quot;"
190        replace="&lt;file"
191        />
192       <!-- install-as for different directories -->
193       <regexp
194        pattern="(&lt;file name=&quot;data/(.+?)&quot;)"
195        replace="\1 install-as=&quot;\2&quot;"
196        />
197       <regexp
198        pattern="(&lt;file name=&quot;doc/(.+?)&quot;)"
199        replace="\1 install-as=&quot;\2&quot;"
200        />
201       <regexp
202        pattern="(&lt;file name=&quot;tests/(.+?)&quot;)"
203        replace="\1 install-as=&quot;\2&quot;"
204        />
205       <regexp
206        pattern="(&lt;file name=&quot;www/(.+?)&quot;)"
207        replace="\1 install-as=&quot;phorkie/\2&quot;"
208        />
209       <regexp
210        pattern="(&lt;file name=&quot;src/(.+?)&quot;)"
211        replace="\1 install-as=&quot;\2&quot;"
212        />
213      </replaceregexp>
214     </filterchain>
215    </copy>
216    <move file="package2.xml" tofile="package.xml" overwrite="true" />
217
218    <!-- package up -->
219    <exec command="pear package" passthru="true" />
220    <move file="${pkgfile}" todir="dist/pear/" />
221
222    <delete file="package.xml" failonerror="true" />
223   </target>
224
225
226   <target name="build-docs" description="render documentation">
227    <rST format="html" uptodate="true">
228     <fileset refid="fs.doc"/>
229     <mapper type="regexp" from="^(.+?).rst$" to="dist/docs/\1.html"/>
230    </rST>
231   </target>
232
233   <target name="clean-docs" description="delete rendered documentation files">
234    <delete dir="dist/docs" includeemptydirs="yes"/>
235   </target>
236
237
238   <target name="release" depends="check,zip,package,deploy-sf"
239    description="Release the version on sourceforge"
240    >
241    <!-- meta-target -->
242   </target>
243
244
245   <!--
246   /home/frs/project/p/ph/phorkie/phorkie/v0.1/
247   /home/frs/project/p/ph/phorkie/phorkie/v0.1/phorkie-v0.1.0.zip
248   /home/frs/project/p/ph/phorkie/phorkie/v0.1/phorkie-v0.1.1.zip
249   https://sourceforge.net/apps/trac/sourceforge/wiki/Release%20files%20for%20download
250   -->
251   <target name="deploy-sf" depends="check,zip"
252    description="Upload release to sourceforge"
253    >
254     <delete dir="dist/deploy-sf" /><!-- make empty -->
255     <mkdir dir="dist/deploy-sf" />
256     <mkdir dir="dist/deploy-sf/v${version-m}" />
257     <copy file="${distfile}" tofile="dist/deploy-sf/v${version-m}/${zipfile}"/>
258     <!-- test
259     <exec command="rsync -av dist/deploy-sf/ /tmp/test/" escape="false" />
260     -->
261     <exec
262      command="rsync -av -e ssh dist/deploy-sf/ ${sfuser},${sfproject}@frs.sourceforge.net:/home/frs/project/${sffilepath}/${sfproject}/"
263      escape="false" checkreturn="false"
264      />
265     <!-- rsync always returns code 23 on sourceforge releases, so we
266          can't check return values -->
267   </target>
268
269
270   <target name="check"
271    description="Check variables"
272    >
273     <fail unless="version" message="Version not defined!" />
274     <fail unless="sfuser" message="Sourceforge username not defined!" />
275     <fail unless="sfproject" message="Sourceforge project name not defined!" />
276     <fail unless="sffilepath" message="Sourceforge project file path not defined!" />
277
278     <mkdir dir="dist" />
279   </target>
280
281 </project>