/bin/process_queue.php

https://github.com/zendframework/ZF2Package · PHP · 115 lines · 98 code · 12 blank · 5 comment · 10 complexity · 37d9fc0bb3dd62d57ae36fc06b810c22 MD5 · raw file

  1. #!/usr/local/bin/php
  2. <?php
  3. ini_set('memory_limit', -1);
  4. date_default_timezone_set('UTC');
  5. require_once '/var/www/website/vendor/autoload.php';
  6. $git = '/usr/local/bin/git';
  7. $worker = new GearmanWorker();
  8. $worker->addServer();
  9. $worker->addFunction('process_composer', function (GearmanJob $job) use ($git) {
  10. $logfile = tempnam('/tmp', 'composer-worker');
  11. $log = fopen($logfile, 'a');
  12. fwrite($log, "Received job\n");
  13. $workload = $job->workload();
  14. fwrite($log, "Received workload: $workload\n");
  15. $workload = json_decode($workload);
  16. $ref = $workload->ref;
  17. $sha = $workload->sha;
  18. $repository = $workload->repository;
  19. fwrite($log, json_encode(array(
  20. 'ref' => $ref,
  21. 'sha' => $sha,
  22. 'repository' => $repository,
  23. )) . "\n");
  24. // Make sure we recognize the repository
  25. if (!preg_match('#^https?://github.com/zendframework/(zf2|ZendSkeletonApplication)$#i', $repository, $matches)) {
  26. fwrite($log, "Unrecognized repository\n");
  27. fclose($log);
  28. $job->sendComplete('Unrecognized repository; finished');
  29. return;
  30. }
  31. switch (strtolower($matches[1])) {
  32. case 'zf2':
  33. $package = 'zendframework/zendframework';
  34. break;
  35. case 'zendskeletonapplication':
  36. $package = 'zendframework/skeleton-application';
  37. break;
  38. }
  39. // Make sure we recognize the branch
  40. $branch = false;
  41. if (preg_match('#/(master|develop)$#', $ref, $matches)) {
  42. $branch = $matches[1];
  43. }
  44. if (!$branch) {
  45. fwrite($log, "Unrecognized branch\n");
  46. fclose($log);
  47. $job->sendComplete('Unrecognized branch; finished');
  48. return;
  49. }
  50. // Update packages.json
  51. fwrite($log, "Preparing to update packages.json\n");
  52. $date = new DateTime();
  53. $packages = file_get_contents('/var/www/packages.zendframework.com/public/packages.json');
  54. $packages = json_decode($packages, true);
  55. $branchName = 'dev-' . $branch;
  56. $packages['packages'][$package][$branchName]['source']['reference'] = $sha;
  57. $packages['packages'][$package][$branchName]['source']['time'] = $date->format('Y-m-d H:i:s');
  58. $packages = Zend\Json\Json::encode($packages);
  59. $packages = Zend\Json\Json::prettyPrint($packages, array('indent' => ' '));
  60. file_put_contents('/var/www/packages.zendframework.com/public/packages.json', $packages);
  61. // Commit packages.json
  62. fwrite($log, "Adding changes\n");
  63. $output = '';
  64. $return = null;
  65. chdir('/var/www/packages.zendframework.com');
  66. exec($git . ' add public/packages.json', $output, $return);
  67. if (0 !== $return) {
  68. fwrite($log, "Failed to add changes\n");
  69. fclose($log);
  70. $job->sendFail();
  71. return;
  72. }
  73. fwrite($log, "Committing changes\n");
  74. $output = '';
  75. $return = null;
  76. $command = sprintf('%s commit -m "Updated packages.json to %s at %s"', $git, $ref, $sha);
  77. exec($command, $output, $return);
  78. if (0 !== $return) {
  79. fwrite($log, "Failed to commit changes\n");
  80. fclose($log);
  81. $job->sendFail();
  82. return;
  83. }
  84. fwrite($log, "Pushing changes\n");
  85. $output = '';
  86. $return = null;
  87. exec($git . ' push origin production:production', $output, $return);
  88. if (0 !== $return) {
  89. fwrite($log, "Failed to push changes\n");
  90. fclose($log);
  91. $job->sendFail();
  92. return;
  93. }
  94. fwrite($log, "Job complete\n");
  95. fclose($log);
  96. $job->sendComplete('Finished updating packages.json on production');
  97. });
  98. while ($worker->work()) {
  99. if (GEARMAN_SUCCESS != $worker->returnCode()) {
  100. $log->err("Worker failed: " . $worker->error());
  101. echo "Worker failed: " . $worker->error() . "\n";
  102. }
  103. }