make-release.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. function log_and_exec($cmd) {
  3. echo "CMD: $cmd\n";
  4. return shell_exec($cmd);
  5. }
  6. function remove_recursive($dir) {
  7. if (is_dir($dir)) {
  8. $objects = scandir($dir);
  9. foreach ($objects as $object) {
  10. if ($object != "." && $object != "..") {
  11. remove_recursive($dir . "/" . $object);
  12. }
  13. }
  14. rmdir($dir);
  15. } else if ($dir != "." && $dir != ".." && file_exists($dir)) {
  16. unlink($dir);
  17. }
  18. }
  19. if (!function_exists('glob_recursive')) {
  20. // Does not support flag GLOB_BRACE
  21. function glob_recursive($pattern, $flags = 0) {
  22. $files = glob($pattern, $flags);
  23. foreach (glob(dirname($pattern) . '/*', GLOB_ONLYDIR | GLOB_NOSORT) as $dir) {
  24. $files = array_merge($files, glob_recursive($dir . '/' . basename($pattern), $flags));
  25. }
  26. return $files;
  27. }
  28. }
  29. $dir = dirname(dirname(__FILE__));
  30. $tmp_dir = "/tmp/singlesignon";
  31. echo "Delete old release\n";
  32. remove_recursive("$dir/singlesignon.zip");
  33. remove_recursive("$dir/singlesignon.tar");
  34. remove_recursive("$dir/singlesignon.tar.gz");
  35. chdir($dir);
  36. if (file_exists($tmp_dir)) {
  37. echo "Delete existing temp directory\n";
  38. remove_recursive($tmp_dir);
  39. }
  40. echo "Copy to /tmp directory\n";
  41. log_and_exec("git checkout-index -a -f --prefix=/tmp/singlesignon/");
  42. chdir($tmp_dir);
  43. echo "Retrieve PHP vendor\n";
  44. log_and_exec("composer install --no-dev --optimize-autoloader --prefer-dist");
  45. echo "Compile locale files\n";
  46. log_and_exec("php tools/build-locales-mo.php");
  47. echo "Remove unused files\n";
  48. $to_remove = [
  49. 'tools',
  50. 'composer.json',
  51. 'composer.lock',
  52. ];
  53. $to_remove = array_merge($to_remove, glob(".*"));
  54. $to_remove = array_filter($to_remove, function ($t) {
  55. return $t && !in_array($t, [".", ".."]);
  56. });
  57. $to_remove = array_values($to_remove);
  58. foreach ($to_remove as $r) {
  59. remove_recursive($r);
  60. }
  61. echo "Zip files\n";
  62. $zip = new ZipArchive();
  63. $tar = new PharData("$dir/singlesignon.tar");
  64. if (!$zip->open("$dir/singlesignon.zip", ZipArchive::CREATE)) {
  65. echo "Failed to create singlesignon.zip\n";
  66. }
  67. $current_dir = getcwd() . DIRECTORY_SEPARATOR;
  68. $files = glob_recursive("*");
  69. foreach ($files as $f) {
  70. $f = realpath($f);
  71. if (!is_file($f)) {
  72. continue;
  73. }
  74. // Relativer file only
  75. $f = str_replace($current_dir, '', $f);
  76. $zip->addFile($f);
  77. $tar->addFile($f);
  78. }
  79. $zip->close();
  80. $tar->compress(Phar::GZ);