make-release.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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 (is_file($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. sleep(1);
  41. echo "Copy to /tmp directory\n";
  42. log_and_exec("git checkout-index -a -f --prefix=/tmp/singlesignon/");
  43. chdir($tmp_dir);
  44. echo "Retrieve PHP vendor\n";
  45. log_and_exec("composer install --no-dev --optimize-autoloader --prefer-dist");
  46. echo "Compile locale files\n";
  47. log_and_exec("php tools/build-locales-mo.php");
  48. echo "Remove unused files\n";
  49. $to_remove = [
  50. 'tools',
  51. 'composer.json',
  52. 'composer.lock',
  53. ];
  54. $to_remove = array_merge($to_remove, glob(".*"));
  55. $to_remove = array_filter($to_remove, function ($t) {
  56. return $t && !in_array($t, [".", ".."]);
  57. });
  58. $to_remove = array_values($to_remove);
  59. foreach ($to_remove as $r) {
  60. remove_recursive("$tmp_dir/$r");
  61. }
  62. echo "Zip files\n";
  63. $zip = new ZipArchive();
  64. $tar = new PharData("$dir/singlesignon.tar");
  65. if (!$zip->open("$dir/singlesignon.zip", ZipArchive::CREATE)) {
  66. echo "Failed to create singlesignon.zip\n";
  67. }
  68. $zip->addEmptyDir("singlesignon");
  69. $tar->addEmptyDir("singlesignon");
  70. $current_dir = getcwd() . DIRECTORY_SEPARATOR;
  71. $files = glob_recursive("*");
  72. foreach ($files as $f) {
  73. $f = realpath($f);
  74. if (!is_file($f)) {
  75. continue;
  76. }
  77. // Relativer file only
  78. $f = str_replace($current_dir, '', $f);
  79. $zip->addFile($f, "singlesignon" . DIRECTORY_SEPARATOR . $f);
  80. $tar->addFile($f, "singlesignon" . DIRECTORY_SEPARATOR . $f);
  81. }
  82. $zip->close();
  83. $tar->compress(Phar::GZ);