diff options
-rw-r--r-- | build/build.xml | 144 | ||||
-rw-r--r-- | build/build_helper.php | 175 | ||||
-rwxr-xr-x | build/package.php | 150 |
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"); |