aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNils Adermann <naderman@naderman.de>2010-10-16 23:01:03 +0200
committerNils Adermann <naderman@naderman.de>2010-10-17 01:19:23 +0200
commit5d9aef47949ff3539db40fc2316293888c91d77c (patch)
treee66190479c4f8328f71cb283e7df25410702f569
parent41245f9f7ac1f588351ddaa8128b499503416f54 (diff)
downloadforums-5d9aef47949ff3539db40fc2316293888c91d77c.tar
forums-5d9aef47949ff3539db40fc2316293888c91d77c.tar.gz
forums-5d9aef47949ff3539db40fc2316293888c91d77c.tar.bz2
forums-5d9aef47949ff3539db40fc2316293888c91d77c.tar.xz
forums-5d9aef47949ff3539db40fc2316293888c91d77c.zip
[task/phing-build] Added a build.xml configuration for phing.
The current state of the phing build script allowed the removal of some code from the old packaging process written entirely in PHP. Further simplifcations of the PHP code and additions to the phing build file will follow. PHPBB3-9849
-rw-r--r--build/build.xml144
-rw-r--r--build/build_helper.php175
-rwxr-xr-xbuild/package.php150
3 files changed, 158 insertions, 311 deletions
diff --git a/build/build.xml b/build/build.xml
new file mode 100644
index 0000000000..9517c33a8e
--- /dev/null
+++ b/build/build.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project name="phpBB" description="The phpBB forum software" default="all" basedir="../">
+ <!-- a few settings for the build -->
+ <property name="newversion" value="3.0.8" />
+ <property name="oldversions" value="3.0.2, 3.0.3, 3.0.4, 3.0.5, 3.0.6, 3.0.7-PL1" />
+ <!-- no configuration should be needed beyond this point -->
+
+ <property name="versions" value="${oldversions}, ${newversion}" />
+
+ <!-- These are the main targets which you will probably want to use -->
+ <target name="package" depends="clean,prepare,create-package" />
+ <target name="all" depends="clean,prepare,test,create-package" />
+
+ <target name="prepare">
+ <mkdir dir="build/logs" />
+ <mkdir dir="build/api" />
+ <mkdir dir="build/codebrowser" />
+ <mkdir dir="build/coverage" />
+ <mkdir dir="build/cpd" />
+ <mkdir dir="build/dependencies" />
+ <mkdir dir="build/new_version" />
+ <mkdir dir="build/new_version/files" />
+ <mkdir dir="build/new_version/patches" />
+ <mkdir dir="build/new_version/release_files" />
+ <mkdir dir="build/new_version/update" />
+ <mkdir dir="build/old_versions" />
+ </target>
+
+ <target name="clean">
+ <delete dir="build/logs" />
+ <delete dir="build/api" />
+ <delete dir="build/codebrowser" />
+ <delete dir="build/coverage" />
+ <delete dir="build/cpd" />
+ <delete dir="build/dependencies" />
+ <delete dir="build/new_version" />
+ <delete dir="build/old_versions" />
+ </target>
+
+ <target name="test">
+ <exec dir="tests"
+ command="phpunit --log-junit ../build/logs/phpunit.xml
+ --coverage-clover ../build/logs/clover.xml
+ --coverage-html ../build/coverage
+ phpbb_all_tests all_tests.php"
+ passthru="true" />
+
+
+ <!-- Does not allow changing the working directory to tests/
+ so this approach does not work for us unfortunately
+ <phpunit codecoverage="true" haltonfailure="true">
+ <formatter todir="build/logs" type="xml"/>
+ <batchtest>
+ <fileset dir="tests">
+ <include name="all_tests.php"/>
+ </fileset>
+ </batchtest>
+ </phpunit>
+ -->
+ </target>
+
+ <target name="old-version-diffs">
+ <foreach list="${oldversions}" param="version" target="old-version-diff" />
+ </target>
+
+ <!-- This target retrieves an old version from the git tag release-${version}
+ and creates a diff between that release and the new one -->
+ <target name="old-version-diff">
+ <echo msg="Retrieving version ${version}" />
+ <mkdir dir="build/old_versions/release-${version}" />
+
+ <phingcall target="export">
+ <property name="revision" value="release-${version}" />
+ <property name="dir" value="build/old_versions/release-${version}" />
+ </phingcall>
+
+ <phingcall target="clean-diff-dir">
+ <property name="dir" value="build/old_versions/release-${version}" />
+ </phingcall>
+
+ <exec dir="build/old_versions" command="diff -crNEBwd release-${version} release-${newversion} >
+ ../new_version/patches/phpBB-${version}_to_${newversion}.patch" escape="false" />
+ </target>
+
+ <target name="prepare-new-version">
+ <!-- select the currently checked out commit (HEAD) for packaging -->
+ <mkdir dir="build/new_version/phpBB3" />
+ <phingcall target="export">
+ <property name="revision" value="HEAD" />
+ <property name="dir" value="build/new_version/phpBB3" />
+ </phingcall>
+
+ <!-- copy into directory for diffs -->
+ <exec dir="build" command="cp -rp new_version/phpBB3 old_versions/release-${newversion}" />
+ <!-- and clean up -->
+ <phingcall target="clean-diff-dir">
+ <property name="dir" value="build/old_versions/release-${newversion}" />
+ </phingcall>
+
+ <!-- create an empty config.php file (not for diffs) -->
+ <touch file="build/new_version/phpBB3/config.php" />
+
+ </target>
+
+ <target name="create-package" depends="prepare-new-version,old-version-diffs">
+ <exec dir="build" command="php -f package.php '${versions}' > logs/package.log" escape="false"/>
+ </target>
+
+ <!--
+ This target can be called using phingcall to retrieve a clean
+ checkout of a commit from git. It will only export the phpBB directory.
+ The properties revision and dir are required.
+ This target will remove directories that are not needed in distribution
+ and set correct permissions.
+ -->
+ <target name="export">
+ <exec dir="phpBB"
+ command="git archive ${revision} | tar -x -C ../${dir}"
+ checkreturn="true" />
+ <delete file="${dir}/config.php" />
+ <delete dir="${dir}/develop" />
+ <delete dir="${dir}/install/data" />
+
+ <echo msg="Setting permissions for checkout of ${revision} in ${dir}" />
+ <!-- set permissions of all files to 644, directories to 755 -->
+ <exec dir="${dir}" command="find -type f|xargs chmod 644" escape="false" />
+ <exec dir="${dir}" command="find -type d|xargs chmod 755" escape="false" />
+ <!-- set permissions of some directories to 777 -->
+ <chmod mode="0777" file="${dir}/cache" />
+ <chmod mode="0777" file="${dir}/store" />
+ <chmod mode="0777" file="${dir}/files" />
+ <chmod mode="0777" file="${dir}/images/avatars/upload" />
+ </target>
+
+ <target name="clean-diff-dir">
+ <delete dir="${dir}/cache" />
+ <delete dir="${dir}/docs" />
+ <delete dir="${dir}/files" />
+ <delete dir="${dir}/install" />
+ <delete dir="${dir}/store" />
+ </target>
+
+</project>
diff --git a/build/build_helper.php b/build/build_helper.php
index 2bae32218b..94fc0ff3b5 100644
--- a/build/build_helper.php
+++ b/build/build_helper.php
@@ -14,10 +14,6 @@ class build_package
var $old_packages;
var $versions;
var $locations;
- var $clean_directory_structure;
- var $files_to_copy;
- var $files_to_remove;
- var $remove_from_diff_structure;
// -c - context diff
// -r - compare recursive
@@ -53,11 +49,11 @@ class build_package
$this->package_infos = array(
'package_name' => 'phpBB3',
'name_prefix' => 'phpbb',
- 'simple_name' => 'phpbb' . str_replace('.', '', $_latest),
+ 'simple_name' => 'release-' . $_latest,
'new_version_number' => $_latest,
'short_version_number' => str_replace('.', '', $_latest),
'release_filename' => 'phpBB-' . $_latest,
- 'last_version' => 'phpbb' . str_replace('.', '', $_before),
+ 'last_version' => 'release-' . $_before,
'last_version_number' => $_before,
);
@@ -78,112 +74,7 @@ class build_package
continue;
}
- $this->old_packages['phpbb' . str_replace('.', '', $package_version)] = $package_version . '_to_';
- }
-
- // We need to make sure this is up to date with the latest version
- $this->clean_directory_structure = array(
- 'adm' => array(
- 'images' => '',
- 'style' => '',
- ),
- 'cache' => '',
- 'docs' => '',
- 'download' => '',
- 'files' => '',
- 'images' => array(
- 'avatars' => array(
- 'gallery' => '',
- 'upload' => '',
- ),
- 'icons' => array(
- 'misc' => '',
- 'smile' => '',
- ),
- 'ranks' => '',
- 'smilies' => '',
- 'upload_icons' => '',
- ),
- 'includes' => array(
- 'acm' => '',
- 'acp' => array(
- 'info' => '',
- ),
- 'auth' => '',
- 'captcha' => array(
- 'plugins' => '',
- ),
- 'diff' => '',
- 'db' => '',
- 'hooks' => '',
- 'mcp' => array(
- 'info' => '',
- ),
- 'questionnaire' => '',
- 'search' => '',
- 'ucp' => array(
- 'info' => '',
- ),
- 'utf' => array(
- 'data' => '',
- ),
- ),
- 'install' => array(
- 'convertors'=> '',
- 'schemas' => '',
-// 'data' => '',
- ),
- 'language' => array(
- 'en' => array(
- 'acp' => '',
- 'email' => '',
- 'mods' => '',
- ),
- ),
- 'store' => '',
- 'styles' => array(
- 'subsilver2' => array(
- 'imageset' => array(
- 'en' => '',
- ),
- 'template' => '',
- 'theme' => array(
- 'images' => '',
- ),
- ),
- 'prosilver' => array(
- 'imageset' => array(
- 'en' => '',
- ),
- 'template' => '',
- 'theme' => array(
- 'images' => '',
- ),
- ),
- ),
- );
-
- // Files to remove (not include within package)
- $this->files_to_remove = array(); //array('includes/utf/data/recode_cjk.php');
-
- // Files within the main directory to copy - do not include config.php
- $this->files_to_copy = array(
- '.htaccess', 'common.php', 'cron.php', 'faq.php', 'feed.php', 'index.php', 'mcp.php', 'memberlist.php', 'posting.php', 'report.php',
- 'search.php', 'style.php', 'ucp.php', 'viewforum.php', 'viewonline.php', 'viewtopic.php'
- );
-
- // These files/directories will be removed and not used for creating the patch files
- $this->remove_from_diff_structure = array(
- 'config.php', 'cache', 'docs', 'files', 'install', 'store', 'develop'
- );
-
- // Writeable directories
- $this->writeable = array('cache', 'store', 'images/avatars/upload', 'files');
-
- // Fill the rest of the files_to_copy array
- foreach ($this->clean_directory_structure as $cur_dir => $dir_struct)
- {
- $this->_fill_files_to_copy($this->locations['new_version'] . $cur_dir, $cur_dir, $dir_struct);
+ $this->old_packages['release-' . $package_version] = $package_version . '_to_';
}
}
@@ -192,66 +83,6 @@ class build_package
return $this->package_infos[$var];
}
- function _fill_files_to_copy($directory, $cur_dir, $dir_struct)
- {
- $dh = opendir($directory);
-
- while ($file = readdir($dh))
- {
- if (is_file($directory . '/' . $file) && $file != '.' && $file != '..')
- {
- $_loc = str_replace($this->locations['new_version'], '', $directory . '/' . $file);
-
- if (in_array($_loc, $this->files_to_remove))
- {
- continue;
- }
-
- $this->files_to_copy[] = $cur_dir . '/' . $file;
- }
- }
- closedir($dh);
-
- if (is_array($dir_struct))
- {
- foreach ($dir_struct as $_cur_dir => $_dir_struct)
- {
- $this->_fill_files_to_copy($directory . '/' . $_cur_dir, $cur_dir . '/' . $_cur_dir, $_dir_struct);
- }
- }
- }
-
- function adjust_permissions($directory)
- {
- $dh = opendir($directory);
-
- while ($file = readdir($dh))
- {
- if ($file == '.' || $file == '..' || $file == '.svn')
- {
- continue;
- }
-
- // If file, then 644
- if (is_file($directory . '/' . $file))
- {
- chmod($directory . '/' . $file, 0644);
- }
- else if (is_dir($directory . '/' . $file))
- {
- $_loc = str_replace($this->package_infos['dest_dir'] . '/', '', $directory . '/' . $file);
-
- // If directory is within the writeable chmod to 777, else 755
- $mode = (in_array($_loc, $this->writeable)) ? 0777 : 0755;
- chmod($directory . '/' . $file, $mode);
-
- // Now traverse to the directory
- $this->adjust_permissions($directory . '/' . $file);
- }
- }
- closedir($dh);
- }
-
function begin_status($headline)
{
if ($this->status_begun)
diff --git a/build/package.php b/build/package.php
index a0da6404c6..2615d983b2 100755
--- a/build/package.php
+++ b/build/package.php
@@ -9,145 +9,24 @@
*
*/
-// The only thing i need to adjust. ;)
-// Please always add the latest version number to the end
-// Only have 5 releases here...
-// If RC8 drops remove the install/data directory
-//$versions = array('3.0.2', '3.0.3-RC1', '3.0.3', '3.0.4-RC1', '3.0.4', '3.0.5-RC1', '3.0.5', '3.0.6-RC1', '3.0.6-RC2', '3.0.6-RC3');
-//$versions = array('3.0.2', '3.0.3', '3.0.4', '3.0.5', '3.0.6', '3.0.7-RC1', '3.0.7');
-$versions = array('3.0.2', '3.0.3', '3.0.4', '3.0.5', '3.0.6', '3.0.7-RC1', '3.0.7-RC2', '3.0.7', '3.0.7-PL1');
-$verbose = false;
+//$versions = array('3.0.2', '3.0.3', '3.0.4', '3.0.5', '3.0.6', '3.0.7-RC1', '3.0.7-RC2', '3.0.7', '3.0.7-PL1');
-require('build_helper.php');
-
-$package = new build_package($versions, $verbose);
-
-echo "Building Release Packages\n";
-echo "Now all three package types (patch, files, release) are built as well as the update package (update).\n";
-
-$package->begin_status('Remove temporary files');
-
-// Cleanup...
-$package->run_command('rm -Rv ' . $package->get('dest_dir'));
-$package->run_command('rm -Rv ' . $package->get('diff_dir'));
-$package->run_command('rm -Rv ' . $package->get('patch_directory'));
-$package->run_command('rm -Rv ' . $package->get('files_directory'));
-$package->run_command('rm -Rv ' . $package->get('update_directory'));
-$package->run_command('rm -Rv ' . $package->get('release_directory'));
-
-$package->begin_status('Create new directories');
-
-// Make sure the directories got removed
-while (file_exists($package->get('update_directory')))
-{
- sleep(1);
-}
-
-if (!file_exists($package->get('dest_dir')))
-{
- $package->run_command('mkdir ' . $package->get('dest_dir'));
-}
-
-if (!file_exists($package->get('diff_dir')))
-{
- $package->run_command('mkdir ' . $package->get('diff_dir'));
-}
-
-if (!file_exists($package->get('patch_directory')))
-{
- $package->run_command('mkdir ' . $package->get('patch_directory'));
-}
-
-if (!file_exists($package->get('files_directory')))
-{
- $package->run_command('mkdir ' . $package->get('files_directory'));
-}
-
-if (!file_exists($package->get('update_directory')))
-{
- $package->run_command('mkdir ' . $package->get('update_directory'));
-}
-
-if (!file_exists($package->get('release_directory')))
-{
- $package->run_command('mkdir ' . $package->get('release_directory'));
-}
-
-$package->begin_status('Copy release files to clean release directory');
-
-// Create config.php file
-$package->run_command('touch ' . $package->get('dest_dir') . '/config.php');
-//$package->run_command('sudo chown www-data:www-data ' . $package->get('dest_dir') . '/config.php');
-
-// Create new directory structure
-foreach ($package->clean_directory_structure as $dir => $dir_struct)
-{
- $package->create_directory($package->get('dest_dir') . '/' . $dir, $dir_struct);
-}
-
-// First step is to copy the new version over (clean structure)
-foreach ($package->files_to_copy as $file)
-{
- $source_file = $package->locations['new_version'] . $file;
- $dest_file = $package->get('dest_dir') . '/' . $file;
-
- $package->run_command("cp -p $source_file $dest_file");
-}
-
-// fix line endings
-chdir($package->get('dest_dir'));
-$package->run_command($package->locations['new_version'] . 'develop/fix_files.sh');
-
-// Now clean up the permissions
-$package->begin_status('Adjust permissions');
-
-$package->adjust_permissions($package->get('dest_dir'));
-
-// Now create a version for diffing the version - copy the tree over to old_versions...
-$package->begin_status('Create diff directory for obtaining file differences');
-
-$package->run_command('cp -Rp ' . $package->get('dest_dir') . '/* ' . $package->get('diff_dir'));
-$package->run_command('cp -Rp ' . $package->get('dest_dir') . '/.htaccess ' . $package->get('diff_dir'));
-
-// Cleanup diff directory (only contents to diff)
-foreach ($package->remove_from_diff_structure as $remove_dir)
+if ($_SERVER['argc'] < 2)
{
- $package->run_command('rm -Rv ' . $package->get('diff_dir') . '/' . $remove_dir);
+ die("Please specify a list of versions as the first argument (e.g. package.php '1.0.0, 1.0.1, 1.0.2').");
}
-// Now, first of all we need to rebuild all old packages we want to support
-foreach ($package->old_packages as $package_name => $tag_name)
-{
- $package->begin_status('Create old packages directory for diffing to ' . $package_name);
-
- chdir($package->locations['old_versions']);
-
- if (is_dir($package->locations['old_versions'] . $package_name))
- {
- $package->run_command('rm -Rv ' . $package->locations['old_versions'] . $package_name);
- }
-
- // Now, create a new one...
- $tag_name = 'release_' . str_replace(array('.', '_to_'), array('_', ''), $tag_name);
+$versions = explode(',', $_SERVER['argv'][1]);
+$versions = array_map('trim', $versions);
- $package->run_command('svn export --non-interactive http://code.phpbb.com/svn/phpbb/tags/' . $tag_name . '/phpBB/ ' . $package_name);
+$verbose = true;
- $location = $package->locations['old_versions'] . $package_name;
- chdir($location . '/');
-
- $package->run_command($package->locations['new_version'] . 'develop/fix_files.sh');
-
- // Now clean up the permissions
- $package->begin_status('Adjust permissions for package ' . $package_name);
+require('build_helper.php');
- $package->adjust_permissions($location);
+$package = new build_package($versions, $verbose);
- // Cleanup diff directory (only contents to diff)
- foreach ($package->remove_from_diff_structure as $remove_dir)
- {
- $package->run_command('rm -Rv ' . $location . '/' . $remove_dir);
- }
-}
+echo "Building Release Packages\n";
+echo "Now all three package types (patch, files, release) are built as well as the update package (update).\n";
// Go trough all versions making a diff if we even have old versions
// For phpBB 3.0.x we might choose a different update method, rendering the things below useless...
@@ -160,10 +39,7 @@ if (sizeof($package->old_packages))
foreach ($package->old_packages as $_package_name => $dest_package_filename)
{
- $package->begin_status('Creating patch/diff files for phpBB-' . $dest_package_filename . $package->get('new_version_number'));
-
- $dest_package_filename = $package->get('patch_directory') . '/phpBB-' . $dest_package_filename . $package->get('new_version_number') . '.patch';
- $package->run_command('diff ' . $package->diff_options . ' ' . $_package_name . ' ' . $package->get('simple_name') . ' > ' . $dest_package_filename);
+ $package->begin_status('Parsing patch/diff files for phpBB-' . $dest_package_filename . $package->get('new_version_number'));
// Parse this diff to determine file changes from the checked versions and save them
$diff_file_changes[$_package_name] = $package->collect_diff_files($dest_package_filename, $_package_name);
@@ -404,7 +280,6 @@ if (sizeof($package->old_packages))
foreach ($compress_programs as $extension => $compress_command)
{
$package->begin_status('Packaging phpBB Patch Files for ' . $extension);
- $package->run_command('rm -v ../release_files/' . $package->get('release_filename') . '-patch.' . $extension);
// Build Package
$package->run_command($compress_command . ' ../release_files/' . $package->get('release_filename') . '-patch.' . $extension . ' *');
@@ -420,7 +295,6 @@ if (sizeof($package->old_packages))
{
$package->begin_status('Packaging phpBB Files for ' . $extension);
- $package->run_command('rm -v ../release_files/' . $package->get('release_filename') . '-files.' . $extension);
$package->run_command('mkdir ' . $package->get('files_directory') . '/release');
$package->run_command('cp -Rp ' . $package->get('dest_dir') . '/docs ' . $package->get('files_directory') . '/release');
$package->run_command('cp -Rp ' . $package->get('dest_dir') . '/install ' . $package->get('files_directory') . '/release');
@@ -457,7 +331,6 @@ if (sizeof($package->old_packages))
$package->begin_status('Packaging phpBB Update for ' . $extension);
- $package->run_command('rm -v ../release_files/' . $package->get('release_filename') . '-update.' . $extension);
$package->run_command('mkdir ' . $package->get('update_directory') . '/release');
// Pack update files
@@ -521,7 +394,6 @@ foreach ($compress_programs as $extension => $compress_command)
// Microsoft Web PI packaging
$package->begin_status('Packaging phpBB for Microsoft WebPI');
$file = './release_files/' . $package->get('release_filename') . '.webpi.zip';
-$package->run_command("rm -v $file");
$package->run_command('cp -p ./release_files/' . $package->get('release_filename') . ".zip $file");
$package->run_command('cd ./../webpi && ' . $compress_programs['zip'] . " ./../new_version/$file *");
$package->run_command("md5sum $file > $file.md5");