174fe3a809d81bc2259612a632551f6d73472fb9
[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.4" />
12   <property name="version"    value="0.4.0" />
13   <property name="stability"  value="alpha" />
14   <property name="releasenotes" value="
15 Version 0.3.1 - 2012-09-27
16 --------------------------
17 * Check for OpenID package in SetupCheck
18 * Fix bug #24: setupcheck: verify geshi installation
19 * Fix bug #25: setupcheck: verify markdown
20
21 Version 0.3.0 - 2012-09-27
22 --------------------------
23
24 * Fix bug #10: error when nothing submitted [cweiske]
25 * Fix bug #11: do not index edit, delete and tool pages [cweiske]
26 * Fix bug #20: elasticsearch error on deletion [cweiske]
27 * Fix bug #22: Edited pastes not in 'recently created' [cweiske]
28 * Fix bug #23: 'work dir not found' on failed remote fork [cweiske]
29 * Implement request #5: Add OpenID authentication [jnovack]
30 * Implement request #9: autodetect file type [cweiske]
31 * Implement request #12: DOAP and rel='vcs-git' support [cweiske]
32 * Implement request #13: remote forking support [cweiske]
33 * Hide additional file fields by default, button to toggle their visibility
34   [cweiske]
35 * Markdown support [jnovack]
36 * Added nginx rewrite rules to README [skl]
37 " />
38   <property name="libdir"      value="${phing.dir}/lib"/>
39   <property name="zipfile"     value="${phing.project.name}-${version}.tar.bz2" />
40   <property name="pharfile"    value="${phing.dir}/dist/${phing.project.name}-${version}.phar" />
41   <property name="pkgfile"     value="${phing.project.name}-${version}.tgz" />
42   <property name="distfile"    value="dist/${zipfile}" />
43   <property name="distpkgfile" value="dist/pear/${pkgfile}" />
44   <property name="sfproject"   value="phorkie" />
45   <property name="sffilepath"  value="p/ph/phorkie/" />
46
47   <fileset id="fs.zip" dir=".">
48    <include name="data/**"/>
49    <include name="scripts/**"/>
50    <include name="src/**"/>
51    <include name="www/**"/>
52
53    <include name="ChangeLog"/>
54    <include name="LICENSE"/>
55    <include name="NEWS.rst"/>
56    <include name="README.rst"/>
57
58    <exclude name="**/.git/"/>
59    <exclude name="**/.gitignore/"/>
60    <exclude name="data/config.php"/>
61    <exclude name="www/**/.phar"/>
62    <exclude name="www/repos"/>
63   </fileset>
64
65   <fileset id="fs.phar" dir="${phing.dir}">
66    <include name="data/**"/>
67    <include name="lib/**"/>
68    <include name="scripts/**"/>
69    <include name="src/**"/>
70    <include name="www/**"/>
71
72    <include name="ChangeLog"/>
73    <include name="README.rst"/>
74
75    <exclude name="data/config.php"/>
76    <exclude name="**/.git/"/>
77    <exclude name="**/.gitignore/"/>
78    <exclude name="www/**/.phar"/>
79    <exclude name="www/repos"/>
80   </fileset>
81
82   <fileset id="fs.doc" dir=".">
83    <include name="README.rst"/>
84    <include name="NEWS.rst"/>
85   </fileset>
86
87   <taskdef name="d51pearpkg2" classname="phing.tasks.ext.d51PearPkg2Task" />
88
89
90   <target name="phar" depends="preparedirs,collectdeps"
91           description="Create phar file for release"
92   >
93    <delete file="${pharfile}"/>
94    <exec command="php scripts/build-rewritemap.php" dir="${phing.dir}"/>
95    <pharpackage basedir="${phing.dir}"
96                 destfile="${pharfile}"
97                 stub="${phing.dir}/src/stub-phar.php"
98                 alias="phorkie.phar"
99    >
100     <fileset refid="fs.phar"/>
101    </pharpackage>
102
103    <exec executable="bzip2" dir="${phing.dir}/dist">
104     <arg value="-kf"/>
105     <arg file="${pharfile}"/>
106    </exec>
107   </target>
108
109
110   <target name="collectdeps" description="Copy package dependencies to lib/">
111    <delete dir="${libdir}"/>
112    <mkdir dir="${libdir}"/>
113
114    <!-- requires phing >= 2.8.0 -->
115    <copy todir="${libdir}">
116     <pearPackageFileset package="pear.php.net/Cache_Lite"/><!-- OpenID -->
117     <pearPackageFileset package="pear.php.net/Console_Getopt"/>
118     <pearPackageFileset package="pear.php.net/Crypt_DiffieHellman"/><!-- OpenID -->
119     <pearPackageFileset package="pear.php.net/Date_HumanDiff"/>
120     <pearPackageFileset package="pear.geshi.org/geshi">
121      <!-- remove files that are probably not needed to save space in the .phar -->
122      <exclude name="geshi/arm.php"/>
123      <exclude name="geshi/autoit.php"/>
124      <exclude name="geshi/thinbasic.php"/>
125     </pearPackageFileset>
126     <pearPackageFileset package="pear.php.net/HTTP2"/>
127     <pearPackageFileset package="pear.php.net/HTTP_Request2"/>
128     <pearPackageFileset package="pear.php.net/MIME_Type"/>
129     <pearPackageFileset package="zustellzentrum.cweiske.de/MIME_Type_PlainDetect"/>
130     <pearPackageFileset package="zustellzentrum.cweiske.de/MIME_Type_PlainDetect" role="data"/>
131     <pearPackageFileset package="pear.michelf.com/Markdown"/>
132     <pearPackageFileset package="pear.php.net/Net_URL2"/>
133     <pearPackageFileset package="pear.php.net/OpenID"/>
134     <pearPackageFileset package="pear.php.net/Pager"/>
135     <pearPackageFileset package="pear.php.net/PEAR">
136      <include name="PEAR/Exception.php"/>
137      <include name="PEAR.php"/>
138      <include name="PEAR5.php"/>
139      <include name="OS/Guess.php"/>
140      <include name="System.php"/>
141     </pearPackageFileset>
142     <pearPackageFileset package="pear.php.net/Services_Libravatar"/>
143     <pearPackageFileset package="pear2.php.net/PEAR2_Services_Linkback"/>
144     <pearPackageFileset package="pear.php.net/Services_Yadis"/>
145     <pearPackageFileset package="pear.php.net/System_Command"/>
146     <pearPackageFileset package="pear.twig-project.org/Twig"/>
147     <pearPackageFileset package="pear.php.net/Validate"/>
148     <pearPackageFileset package="pear.php.net/VersionControl_Git"/>
149    </copy>
150   </target>
151
152
153   <target name="zip" depends="preparedirs"
154    description="Create zip file for release"
155    >
156     <!--
157       The release file is for end users, so it is safe to
158       remove anything developer-related.
159
160       Test your zip with: unzip -l phorkie-0.1.0.zip
161     -->
162     <echo msg="Creating distribution zip for phorkie ${version}"/>
163     <delete file="${distfile}" failonerror="false"/>
164     <tar compression="bzip2" destfile="${distfile}"
165          prefix="${phing.project.name}-${version}/"
166     >
167      <fileset refid="fs.zip"/>
168     </tar>
169   </target>
170
171
172
173   <target name="package" depends="check"
174    description="Creates the pear package"
175   >
176    <d51pearpkg2 dir="." baseinstalldir="/">
177      <name>phorkie</name>
178      <summary>Self-hosted pastebin software</summary>
179      <description>
180       Self-hosted pastebin software written in PHP.
181       Pastes are editable, may have multiple files and are stored in git repositories.
182      </description>
183      <channel>phorkie.sourceforge.net</channel>
184
185      <lead user="cweiske" name="Christian Weiske" email="cweiske@cweiske.de" />
186      <license>AGPL</license>
187
188      <version   release="${version}"   api="${version}" />
189      <stability release="${stability}" api="${stability}" />
190
191      <notes>${releasenotes}</notes>
192
193      <dependencies>
194        <php minimum_version="5.3.0" />
195        <pear minimum_version="1.9.0" />
196
197        <package name="Date_HumanDiff"
198                 channel="pear.php.net"
199                 minimum_version="0.4.0"
200                 />
201        <package name="HTTP_Request2"
202                 channel="pear.php.net"
203                 minimum_version="2.1.0"
204                 />
205        <package name="OpenID"
206                 channel="pear.php.net"
207                 minimum_version="0.3.3"
208                 />
209        <package name="Pager"
210                 channel="pear.php.net"
211                 minimum_version="2.4.8"
212                 />
213        <package name="PEAR2_Services_Linkback"
214                 channel="pear2.php.net"
215                 minimum_version="0.2.1"
216                 />
217        <package name="Services_Libravatar"
218                 channel="pear.php.net"
219                 minimum_version="0.2.2"
220                 />
221        <package name="VersionControl_Git"
222                 channel="pear.php.net"
223                 minimum_version="0.4.4"
224                 />
225
226        <package name="geshi"
227                 channel="pear.geshi.org/geshi"
228                 minimum_version="1.0.0"
229                 />
230        <package name="Markdown"
231                 channel="pear.michelf.com"
232                 minimum_version="0.0.2"
233                 />
234        <package name="MIME_Type_PlainDetect"
235                 channel="zustellzentrum.cweiske.de"
236                 minimum_version="0.0.2"
237                 />
238        <package name="Twig"
239                 channel="pear.twig-project.org"
240                 minimum_version="1.6.0"
241                 />
242
243      </dependencies>
244
245      <!-- map directory (key) to role -->
246      <dirroles key="data">data</dirroles>
247      <dirroles key="scripts">data</dirroles>
248      <dirroles key="src">php</dirroles>
249      <dirroles key="www">www</dirroles>
250
251      <!-- do not add the following files to the package.
252           copied from excludes above -->
253      <ignore>**/.gitignore</ignore>
254      <ignore>build*</ignore>
255      <ignore>data/config.php</ignore>
256      <ignore>dist/**</ignore>
257      <ignore>*.properties</ignore>
258      <ignore>*.tgz</ignore>
259
260      <replacement path="www/www-header.php"
261       type="pear-config" from="@data_dir@" to="data_dir"
262       />
263
264
265    </d51pearpkg2>
266
267    <!-- time to fix the package.xml file since the task does not
268         allow everything we need:
269         - strip the base directory names like src, data and www
270         - remove that dumb baseinstalldir from files
271         - md5sums are generated automatically when packaging
272    -->
273    <!-- yes, we need to generate a 2nd file and move it back -->
274    <copy file="package.xml" tofile="package2.xml" overwrite="true">
275     <filterchain>
276      <replaceregexp>
277       <!-- remove md5sums -->
278       <regexp
279        pattern="md5sum=&quot;[a-z0-9]{32}&quot; "
280        replace=""
281        />
282       <!-- remove baseinstalldir for files -->
283       <regexp
284        pattern="&lt;file baseinstalldir=&quot;/&quot;"
285        replace="&lt;file"
286        />
287       <!-- install-as for different directories -->
288       <regexp
289        pattern="(&lt;file name=&quot;data/(.+?)&quot;)"
290        replace="\1 install-as=&quot;\2&quot;"
291        />
292       <regexp
293        pattern="(&lt;file name=&quot;doc/(.+?)&quot;)"
294        replace="\1 install-as=&quot;\2&quot;"
295        />
296       <regexp
297        pattern="(&lt;file name=&quot;tests/(.+?)&quot;)"
298        replace="\1 install-as=&quot;\2&quot;"
299        />
300       <regexp
301        pattern="(&lt;file name=&quot;www/(.+?)&quot;)"
302        replace="\1 install-as=&quot;phorkie/\2&quot;"
303        />
304       <regexp
305        pattern="(&lt;file name=&quot;src/(.+?)&quot;)"
306        replace="\1 install-as=&quot;\2&quot;"
307        />
308      </replaceregexp>
309     </filterchain>
310    </copy>
311    <move file="package2.xml" tofile="package.xml" overwrite="true" />
312
313    <!-- package up -->
314    <exec command="pear package" passthru="true" />
315    <move file="${pkgfile}" todir="dist/pear/" />
316
317    <delete file="package.xml" failonerror="true" />
318   </target>
319
320
321   <target name="build-docs" description="render documentation">
322    <rST format="html" uptodate="true">
323     <fileset refid="fs.doc"/>
324     <mapper type="regexp" from="^(.+?).rst$" to="dist/docs/\1.html"/>
325    </rST>
326   </target>
327
328   <target name="clean-docs" description="delete rendered documentation files">
329    <delete dir="dist/docs" includeemptydirs="yes"/>
330   </target>
331
332
333   <target name="release" depends="check,zip,package,deploy-sf"
334    description="Release the version on sourceforge"
335    >
336    <!-- meta-target -->
337   </target>
338
339
340   <!--
341   /home/frs/project/p/ph/phorkie/phorkie/v0.1/
342   /home/frs/project/p/ph/phorkie/phorkie/v0.1/phorkie-v0.1.0.zip
343   /home/frs/project/p/ph/phorkie/phorkie/v0.1/phorkie-v0.1.1.zip
344   https://sourceforge.net/apps/trac/sourceforge/wiki/Release%20files%20for%20download
345   -->
346   <target name="deploy-sf" depends="check,zip"
347    description="Upload release to sourceforge"
348    >
349     <delete dir="dist/deploy-sf" /><!-- make empty -->
350     <mkdir dir="dist/deploy-sf" />
351     <mkdir dir="dist/deploy-sf/v${version-m}" />
352     <copy file="${distfile}" tofile="dist/deploy-sf/v${version-m}/${zipfile}"/>
353     <!-- test
354     <exec command="rsync -av dist/deploy-sf/ /tmp/test/" escape="false" />
355     -->
356     <exec
357      command="rsync -av -e ssh dist/deploy-sf/ ${sfuser},${sfproject}@frs.sourceforge.net:/home/frs/project/${sffilepath}/${sfproject}/"
358      escape="false" checkreturn="false"
359      />
360     <!-- rsync always returns code 23 on sourceforge releases, so we
361          can't check return values -->
362   </target>
363
364
365   <target name="preparedirs">
366     <mkdir dir="dist" />
367   </target>
368
369   <target name="check" depends="preparedirs"
370    description="Check variables"
371    >
372     <fail unless="version" message="Version not defined!" />
373     <fail unless="sfuser" message="Sourceforge username not defined!" />
374     <fail unless="sfproject" message="Sourceforge project name not defined!" />
375     <fail unless="sffilepath" message="Sourceforge project file path not defined!" />
376   </target>
377
378 </project>