1 <?xml version="1.0" encoding="utf-8"?>
2 <project name="phorkie" default="zip" basedir=".">
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,
9 <property file="build.properties" />
11 <property name="version-m" value="0.6" />
12 <property name="version" value="0.6.0" />
13 <property name="stability" value="beta" />
14 <property name="releasenotes" value="
15 Version 0.6.0 - 2015-07-08
16 --------------------------
17 * Add simple cache for rendered files
18 * Add "add file" button to display page
19 * Add jumping to file after saving from single file edit mode
20 * Adjust "additional options" layout and position
21 * Fix autologin reload button; it reloads the current page now
22 * Remove OpenID provider buttons
24 <property name="libdir" value="${phing.dir}/lib"/>
26 <property name="zipfile" value="${phing.project.name}-${version}.tar.bz2" />
27 <property name="pharfile" value="${phing.project.name}-${version}.phar" />
28 <property name="pkgfile" value="${phing.project.name}-${version}.tgz" />
30 <property name="pharpath" value="${phing.dir}/dist/${pharfile}" />
31 <property name="distfile" value="dist/${zipfile}" />
32 <property name="distpkgfile" value="dist/pear/${pkgfile}" />
34 <property name="sfproject" value="phorkie" />
35 <property name="sffilepath" value="p/ph/phorkie/" />
37 <fileset id="fs.zip" dir=".">
38 <include name="data/**"/>
39 <include name="scripts/**"/>
40 <include name="src/**"/>
41 <include name="www/**"/>
43 <include name="ChangeLog"/>
44 <include name="LICENSE"/>
45 <include name="NEWS.rst"/>
46 <include name="README.rst"/>
48 <exclude name="**/.git/"/>
49 <exclude name="**/.gitignore/"/>
50 <exclude name="data/cache/**"/>
51 <exclude name="data/config.php"/>
52 <exclude name="www/**/.phar"/>
53 <exclude name="www/repos"/>
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/**"/>
63 <include name="ChangeLog"/>
64 <include name="README.rst"/>
66 <exclude name="**/.git/"/>
67 <exclude name="**/.gitignore/"/>
68 <exclude name="data/cache/**"/>
69 <exclude name="data/config.php"/>
70 <exclude name="www/**/.phar"/>
71 <exclude name="www/repos"/>
74 <fileset id="fs.doc" dir=".">
75 <include name="README.rst"/>
76 <include name="NEWS.rst"/>
79 <taskdef name="d51pearpkg2" classname="phing.tasks.ext.d51PearPkg2Task" />
82 <target name="phar" depends="preparedirs,collectdeps"
83 description="Create phar file for release"
85 <delete file="${pharpath}"/>
86 <exec command="php scripts/build-rewritemap.php" dir="${phing.dir}"/>
87 <pharpackage basedir="${phing.dir}"
88 destfile="${pharpath}"
89 stub="${phing.dir}/src/stub-phar.php"
92 <fileset refid="fs.phar"/>
95 <exec executable="bzip2" dir="${phing.dir}/dist">
97 <arg file="${pharpath}"/>
102 <target name="collectdeps" description="Copy package dependencies to lib/">
103 <delete dir="${libdir}"/>
104 <mkdir dir="${libdir}"/>
106 <!-- requires phing >= 2.8.0 -->
107 <copy todir="${libdir}">
108 <pearPackageFileset package="pear.php.net/Cache_Lite"/><!-- OpenID -->
109 <pearPackageFileset package="pear.php.net/Console_Getopt"/>
110 <pearPackageFileset package="pear.php.net/Crypt_DiffieHellman"/><!-- OpenID -->
111 <pearPackageFileset package="pear.php.net/Date_HumanDiff"/>
112 <pearPackageFileset package="pear.geshi.org/geshi">
113 <!-- remove files that are probably not needed to save space in the .phar -->
114 <exclude name="geshi/arm.php"/>
115 <exclude name="geshi/autoit.php"/>
116 <exclude name="geshi/thinbasic.php"/>
117 </pearPackageFileset>
118 <pearPackageFileset package="pear.php.net/HTTP2"/>
119 <pearPackageFileset package="pear.php.net/HTTP_Request2"/>
120 <pearPackageFileset package="pear.php.net/MIME_Type"/>
121 <pearPackageFileset package="zustellzentrum.cweiske.de/MIME_Type_PlainDetect"/>
122 <pearPackageFileset package="zustellzentrum.cweiske.de/MIME_Type_PlainDetect" role="data"/>
123 <pearPackageFileset package="pear.michelf.com/Markdown"/>
124 <pearPackageFileset package="pear.php.net/Net_URL2"/>
125 <pearPackageFileset package="pear.php.net/OpenID"/>
126 <pearPackageFileset package="pear.php.net/Pager"/>
127 <pearPackageFileset package="pear.php.net/PEAR">
128 <include name="PEAR/Exception.php"/>
129 <include name="PEAR.php"/>
130 <include name="PEAR5.php"/>
131 <include name="OS/Guess.php"/>
132 <include name="System.php"/>
133 </pearPackageFileset>
134 <pearPackageFileset package="pear.php.net/Services_Libravatar"/>
135 <pearPackageFileset package="pear2.php.net/PEAR2_Services_Linkback"/>
136 <pearPackageFileset package="pear.php.net/Services_Yadis"/>
137 <pearPackageFileset package="pear.php.net/System_Command"/>
138 <pearPackageFileset package="pear.twig-project.org/Twig"/>
139 <pearPackageFileset package="pear.php.net/Validate"/>
140 <pearPackageFileset package="pear.php.net/VersionControl_Git"/>
145 <target name="zip" depends="preparedirs"
146 description="Create zip file for release"
149 The release file is for end users, so it is safe to
150 remove anything developer-related.
152 Test your zip with: unzip -l phorkie-0.1.0.zip
154 <echo msg="Creating distribution zip for phorkie ${version}"/>
155 <delete file="${distfile}" failonerror="false"/>
156 <tar compression="bzip2" destfile="${distfile}"
157 prefix="${phing.project.name}-${version}/"
159 <fileset refid="fs.zip"/>
165 <target name="pear" depends="check"
166 description="Creates the pear package"
168 <d51pearpkg2 dir="." baseinstalldir="/">
170 <summary>Self-hosted pastebin software</summary>
172 Self-hosted pastebin software written in PHP.
173 Pastes are editable, may have multiple files and are stored in git repositories.
175 <channel>phorkie.sourceforge.net</channel>
177 <lead user="cweiske" name="Christian Weiske" email="cweiske@cweiske.de" />
178 <license>AGPL</license>
180 <version release="${version}" api="${version}" />
181 <stability release="${stability}" api="${stability}" />
183 <notes>${releasenotes}</notes>
186 <php minimum_version="5.3.0" />
187 <pear minimum_version="1.9.0" />
189 <package name="Date_HumanDiff"
190 channel="pear.php.net"
191 minimum_version="0.4.0"
193 <package name="HTTP_Request2"
194 channel="pear.php.net"
195 minimum_version="2.1.0"
197 <package name="OpenID"
198 channel="pear.php.net"
199 minimum_version="0.3.3"
201 <package name="Pager"
202 channel="pear.php.net"
203 minimum_version="2.4.8"
205 <package name="PEAR2_Services_Linkback"
206 channel="pear2.php.net"
207 minimum_version="0.2.1"
209 <package name="Services_Libravatar"
210 channel="pear.php.net"
211 minimum_version="0.2.2"
213 <package name="VersionControl_Git"
214 channel="pear.php.net"
215 minimum_version="0.4.4"
218 <package name="geshi"
219 channel="pear.geshi.org/geshi"
220 minimum_version="1.0.0"
222 <package name="Markdown"
223 channel="pear.michelf.com"
224 minimum_version="0.0.2"
226 <package name="MIME_Type_PlainDetect"
227 channel="zustellzentrum.cweiske.de"
228 minimum_version="0.0.2"
231 channel="pear.twig-project.org"
232 minimum_version="1.6.0"
237 <!-- map directory (key) to role -->
238 <dirroles key="data">data</dirroles>
239 <dirroles key="scripts">data</dirroles>
240 <dirroles key="src">php</dirroles>
241 <dirroles key="www">www</dirroles>
243 <!-- do not add the following files to the package.
244 copied from excludes above -->
245 <ignore>**/.gitignore</ignore>
246 <ignore>build*</ignore>
247 <ignore>data/config.php</ignore>
248 <ignore>dist/**</ignore>
249 <ignore>*.properties</ignore>
250 <ignore>*.tgz</ignore>
252 <replacement path="www/www-header.php"
253 type="pear-config" from="@data_dir@" to="data_dir"
259 <!-- time to fix the package.xml file since the task does not
260 allow everything we need:
261 - strip the base directory names like src, data and www
262 - remove that dumb baseinstalldir from files
263 - md5sums are generated automatically when packaging
265 <!-- yes, we need to generate a 2nd file and move it back -->
266 <copy file="package.xml" tofile="package2.xml" overwrite="true">
269 <!-- remove md5sums -->
271 pattern="md5sum="[a-z0-9]{32}" "
274 <!-- remove baseinstalldir for files -->
276 pattern="<file baseinstalldir="/""
279 <!-- install-as for different directories -->
281 pattern="(<file name="data/(.+?)")"
282 replace="\1 install-as="\2""
285 pattern="(<file name="doc/(.+?)")"
286 replace="\1 install-as="\2""
289 pattern="(<file name="tests/(.+?)")"
290 replace="\1 install-as="\2""
293 pattern="(<file name="www/(.+?)")"
294 replace="\1 install-as="phorkie/\2""
297 pattern="(<file name="src/(.+?)")"
298 replace="\1 install-as="\2""
303 <move file="package2.xml" tofile="package.xml" overwrite="true" />
306 <exec command="pear package" passthru="true" />
307 <move file="${pkgfile}" todir="dist/pear/" />
309 <delete file="package.xml" failonerror="true" />
313 <target name="build-docs" description="render documentation">
314 <rST format="html" uptodate="true">
315 <fileset refid="fs.doc"/>
316 <mapper type="regexp" from="^(.+?).rst$" to="dist/docs/\1.html"/>
320 <target name="clean-docs" description="delete rendered documentation files">
321 <delete dir="dist/docs" includeemptydirs="yes"/>
325 <target name="release" depends="check,zip,pear,deploy-sf"
326 description="Release the version on sourceforge"
333 /home/frs/project/p/ph/phorkie/phorkie/v0.1/
334 /home/frs/project/p/ph/phorkie/phorkie/v0.1/phorkie-v0.1.0.zip
335 /home/frs/project/p/ph/phorkie/phorkie/v0.1/phorkie-v0.1.1.zip
336 https://sourceforge.net/apps/trac/sourceforge/wiki/Release%20files%20for%20download
338 <target name="deploy-sf" depends="check,zip,phar"
339 description="Upload release to sourceforge"
341 <delete dir="dist/deploy-sf" /><!-- make empty -->
342 <mkdir dir="dist/deploy-sf" />
343 <mkdir dir="dist/deploy-sf/v${version-m}" />
344 <copy file="${distfile}" tofile="dist/deploy-sf/v${version-m}/${zipfile}"/>
345 <copy file="${pharpath}" tofile="dist/deploy-sf/v${version-m}/${pharfile}"/>
347 <exec command="rsync -av dist/deploy-sf/ /tmp/test/" escape="false" />
350 command="rsync -av -e ssh dist/deploy-sf/ ${sfuser},${sfproject}@frs.sourceforge.net:/home/frs/project/${sffilepath}/${sfproject}/"
351 escape="false" checkreturn="false"
353 <!-- rsync always returns code 23 on sourceforge releases, so we
354 can't check return values -->
358 <target name="preparedirs">
362 <target name="check" depends="preparedirs"
363 description="Check variables"
365 <fail unless="version" message="Version not defined!" />
366 <fail unless="sfuser" message="Sourceforge username not defined!" />
367 <fail unless="sfproject" message="Sourceforge project name not defined!" />
368 <fail unless="sffilepath" message="Sourceforge project file path not defined!" />