Newer
Older
#!/usr/bin/env php
<?php
if (php_sapi_name() != 'cli')
die("Only command-line packaging is supported");
$stage_folder = "stage";
$stage_path = dirname(__file__) . '/' . $stage_folder;
function get_osticket_root_path() {
# Hop up to the root folder
$start = dirname(__file__);
for (;;) {
if (file_exists($start . '/main.inc.php')) break;
$start .= '/..';
}
return realpath($start);
}
function run_tests($root) {
return (require "$root/setup/test/run-tests.php");
}
# Check PHP syntax across all php files
function glob_recursive($pattern, $flags = 0) {
$files = glob($pattern, $flags);
foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
$files = array_merge($files,
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
glob_recursive($dir.'/'.basename($pattern), $flags));
}
return $files;
}
$root = get_osticket_root_path();
function exclude($pattern, $match) {
if (is_array($pattern)) {
foreach ($pattern as $p)
if (fnmatch($p, $match))
return true;
}
else
return fnmatch($pattern, $match);
return false;
}
function package($pattern, $destination, $recurse=false, $exclude=false) {
global $root, $stage_path;
$search = $root . '/' . $pattern;
echo "Packaging " . $search . "\n";
foreach (glob($search, GLOB_BRACE|GLOB_NOSORT) as $file) {
if (is_file($file)) {
if ($exclude && exclude($exclude, $file))
continue;
if (!is_dir("$stage_path/$destination"))
mkdir("$stage_path/$destination", 0777, true);
copy($file, $stage_path . '/' . $destination . '/' . basename($file));
}
}
if ($recurse) {
foreach (glob(dirname($search).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
if ($exclude && exclude($exclude, $dir))
continue;
package(dirname($pattern).'/'.basename($dir).'/'.basename($pattern),
$destination.'/'.basename($dir),
$recurse-1, $exclude);
}
}
}
# Run tests before continuing
if (run_tests($root) > 0)
die("Regression tests failed. Cowardly refusing to package\n");
# Create the stage folder for the install files
if (!is_dir($stage_path))
mkdir($stage_path);
else {
$dirs = array();
foreach (glob_recursive($stage_path . '/*') as $file)
if (is_dir($file))
$dirs[] = $file;
else
unlink($file);
sort($dirs);
foreach (array_reverse($dirs) as $dir)
rmdir($dir);
}
# Source code goes into 'upload'
mkdir($stage_path . '/upload');
# Load the root directory files
package("*.php", 'upload/');
package("web.config", 'upload/');
# Load the client interface
foreach (array('assets','css','images','js') as $dir)
package("$dir/*", "upload/$dir", -1, "*less");
package('api/{,.}*', 'upload/api');
package('pages/{,.}*', 'upload/pages');
# Load the knowledgebase
package("kb/*.php", "upload/kb");
# Load the staff interface
package("scp/*.php", "upload/scp/", -1);
foreach (array('css','images','js') as $dir)
package("scp/$dir/*", "upload/scp/$dir", -1);
# Load in the scripts
mkdir("$stage_path/scripts/");
package("setup/scripts/*", "scripts/", -1, "*stage");
# Load the heart of the system
package("include/{,.}*", "upload/include", -1, array('*ost-config.php', '*.sw[a-z]'));
# Include the installer
package("setup/*.{php,txt,html}", "upload/setup", -1, array("*scripts","*test","*stage"));
foreach (array('css','images','js') as $dir)
package("setup/$dir/*", "upload/setup/$dir", -1);
package("setup/inc/streams/*.sql", "upload/setup/inc/streams", -1);
# Load the license and documentation
package("*.{txt,md}", "");
#Rename markdown as text TODO: Do html version before rename.
if(($mds = glob("$stage_path/*.md"))) {
foreach($mds as $md)
rename($md, preg_replace('/\.md$/', '.txt', $md));
}
# Make an archive of the stage folder
$version = exec('git describe');
$pwd = getcwd();
chdir($stage_path);
// Replace THIS_VERSION in the stage/ folder
s/( *)define\('THIS_VERSION'.*/\\1define('THIS_VERSION', '$version');/
\" upload/bootstrap.php");
shell_exec("find . -name '*.inc.php' -print0 | xargs -0 sed -ri -e \"
s/( *)ini_set\( *'display_errors'[^)]+\);/\\1ini_set('display_errors', 0);/
s/( *)ini_set\( *'display_startup_errors'[^)]+\);/\\1ini_set('display_startup_errors', 0);/
shell_exec("tar cjf '$pwd/osTicket-$version.tar.bz2' *");
shell_exec("zip -r '$pwd/osTicket-$version.zip' *");
chdir($pwd);
?>