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