make-release.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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 = sys_get_temp_dir() . DIRECTORY_SEPARATOR . "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_dir\n";
  42. log_and_exec("git checkout-index -a -f --prefix=" . $tmp_dir);
  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. 'screenshots',
  51. 'tools',
  52. 'composer.json',
  53. 'composer.lock',
  54. ];
  55. $to_remove = array_merge($to_remove, glob(".*"));
  56. $to_remove = array_filter($to_remove, function ($t) {
  57. return $t && !in_array($t, [".", ".."]);
  58. });
  59. $to_remove = array_values($to_remove);
  60. foreach ($to_remove as $r) {
  61. remove_recursive("$tmp_dir/$r");
  62. }
  63. echo "Zip files\n";
  64. $zip = new ZipArchive();
  65. $tar = new PharData("$dir/singlesignon.tar");
  66. if (!$zip->open("$dir/singlesignon.zip", ZipArchive::CREATE)) {
  67. echo "Failed to create singlesignon.zip\n";
  68. }
  69. $zip->addEmptyDir("singlesignon");
  70. $tar->addEmptyDir("singlesignon");
  71. $current_dir = getcwd() . DIRECTORY_SEPARATOR;
  72. $files = glob_recursive("*");
  73. foreach ($files as $f) {
  74. $f = realpath($f);
  75. if (!is_file($f)) {
  76. continue;
  77. }
  78. // Relativer file only
  79. $f = str_replace($current_dir, '', $f);
  80. $zip->addFile($f, "singlesignon" . DIRECTORY_SEPARATOR . $f);
  81. $tar->addFile($f, "singlesignon" . DIRECTORY_SEPARATOR . $f);
  82. }
  83. $zip->close();
  84. $tar->compress(Phar::GZ);
  85. remove_recursive("$dir/singlesignon.tar");