1 #!/usr/bin/php -dphar.readonly=0
4 ini_set("display_errors", 0);
5 ini_set("log_errors", 1);
7 /* needed for the packager, so the pharstub task can find includes */
8 set_include_path(__DIR__
."/../vendor/m6w6/pharext/src:".get_include_path());
10 $what = !empty($argv[1]) ?
$argv[1] : "latest";
15 if (is_dir($dir) ||
mkdir(dirname($skp), 0755, true)) {
20 function fail($pkg, $ver, $skp, $fmt) {
21 $msg = call_user_func_array("sprintf", array_slice(func_get_args(), 3));
22 fprintf(STDERR
, "FAILURE: %s-%s, %s; skipping next time\n", $pkg, $ver, $msg);
26 function sign($pkg, $ext) {
27 $fmt = "%s/%s-%s %s %s%s";
28 foreach (["rsa", "gpg"] as $sig) {
29 foreach (["", ".gz", ".bz2"] as $typ) {
30 passthru(sprintf($fmt, __DIR__
, $sig, "sign", $pkg, $ext, $typ));
31 passthru(sprintf($fmt, __DIR__
, $sig, "vrfy", $pkg, $ext, $typ));
36 function info($pkg, $dir) {
37 $pkg = strtolower($pkg);
38 $inf = file_get_contents("https://pecl.php.net/rest/p/$pkg/info.xml");
40 file_put_contents("$dir/info.xml", $inf);
44 function wait(&$pids) {
46 switch ($pid = pcntl_wait($status)) {
53 if (pcntl_wifexited($status) && ($rc = pcntl_wexitstatus($status))) {
54 fail($pkg, $ver, $skp, "exit code: %d", $rc);
55 } elseif (pcntl_wifsignaled($status) && ($rc = pcntl_wtermsig($status))) {
56 fail($pkg, $ver, $skp, "signal: %d", $rc);
58 printf("SUCCESS: %s-%s\n", $pkg, $ver);
59 /* create skipfile, ensuring we do not build a package with
60 * different name in registry/package.xml again
63 /* create signatures */
71 function work($url, $dir) {
72 is_dir($dir) ||
mkdir($dir, 0777, true);
73 require_once __DIR__
."/../vendor/autoload.php";
74 $packager = new pharext\Packager
;
84 if (($sxe = simplexml_load_file("https://pecl.php.net/feeds/$what.rss"))) {
85 foreach ($sxe->item
as $item) {
86 list($pkg, $ver) = explode(" ", (string) $item->title
);
87 $url = sprintf("https://pecl.php.net/get/%s/%s", $pkg, $ver);
88 $skp = sprintf("%s/../skip/%s/%s", __DIR__
, $pkg, $ver);
89 $ext = sprintf("%s/../public/phars/%s/%s-%s.ext.phar", __DIR__
, $pkg, $pkg, $ver);
92 if (!is_file($skp) && !is_file($ext)) {
93 switch ($pid = pcntl_fork()) {
101 $pids[$pid] = compact("url", "pkg", "ver", "skp", "ext", "dir");
106 if (count($pids) > 5) {