X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=app%2FController%2FGithub%2FHook%2FReceive.php;h=4af889993cb58d8a45ce66131519b437573cd7e1;hb=8218e7f0e7eed6bba889dee119e4db7a9b236a86;hp=62722edf99a75ce3c73fc08812864d1c747a606f;hpb=917c0fd609f9d91fa6b407c4a1c853f2319eb23b;p=pharext%2Fpharext.org diff --git a/app/Controller/Github/Hook/Receive.php b/app/Controller/Github/Hook/Receive.php index 62722ed..4af8899 100644 --- a/app/Controller/Github/Hook/Receive.php +++ b/app/Controller/Github/Hook/Receive.php @@ -8,9 +8,8 @@ use app\Model\Accounts; use app\Web; use http\Params; use pharext\Task; -use pharext\SourceDir\Git; - -require_once __DIR__."/../../../../vendor/m6w6/pharext/src/pharext/Version.php"; +use pharext\Metadata; +use pharext\SourceDir; class Receive implements Controller { @@ -68,41 +67,64 @@ class Receive implements Controller function release($release) { if ($release->action !== "published") { $response = $this->app->getResponse(); - $response->setResponseCode(202); $response->getBody()->append("Not published"); return; } + if (!empty($release->release->assets)) { + foreach ($release->release->assets as $asset) { + if ($asset->content_type === "application/phar") { + /* we've already uploaded the asset when we created the release */ + $response = $this->app->getResponse(); + $response->setResponseCode(202); + $response->getBody()->append("Already published"); + return; + } + } + } - $this->uploadAssetForRelease($release->release, $release->repository); + $this->uploadAssetForRelease($release->release, $release->repository)->send(); } private function uploadAssetForRelease($release, $repo) { $this->setTokenForUser($repo->owner->login); - $asset = $this->createReleaseAsset($release, $repo); - $name = sprintf("%s-%s.ext.phar", $repo->name, $release->tag_name); - $url = uri_template($release->upload_url, compact("name")); - $this->github->createReleaseAsset($url, $asset, "application/phar", function($json) { - $response = $this->app->getResponse(); - $response->setResponseCode(201); - $response->setHeader("Location", $json->url); - })->send(); + return $this->github->listHooks($repo->full_name, function($hooks) use($release, $repo) { + $repo->hooks = $hooks; + $asset = $this->createReleaseAsset($release, $repo); + $name = sprintf("%s-%s.ext.phar", $repo->name, $release->tag_name); + $url = uri_template($release->upload_url, compact("name")); + $this->github->createReleaseAsset($url, $asset, "application/phar", function($json) use($release, $repo) { + if ($release->draft) { + $this->github->publishRelease($repo->full_name, $release->id, $release->tag_name, function($json) { + $response = $this->app->getResponse(); + $response->setResponseCode(201); + $response->setHeader("Location", $json->url); + }); + } else { + $response = $this->app->getResponse(); + $response->setResponseCode(201); + $response->setHeader("Location", $json->url); + } + }); + }); } private function createReleaseAsset($release, $repo) { - $source = (new Task\GitClone($repo->clone_url, $release->tag_name))->run(); - $iterator = new Git($source); - $meta = [ - "header" => sprintf("pharext v%s (c) Michael Wallner ", \pharext\VERSION), - "version" => \pharext\VERSION, - "date" => date("Y-m-d"), + $hook = $this->github->checkRepoHook($repo); + $dir = (new Task\GitClone($repo->clone_url, $release->tag_name))->run(); + if (!empty($hook->config->pecl)) { + $src = new SoureDir\Pecl($dir); + } else { + $src = new SourceDir\Git($dir); + } + $meta = Metadata::all() + [ "name" => $repo->name, "release" => $release->tag_name, - "license" => @file_get_contents(current(glob($iterator->getBaseDir()."/LICENSE*"))), + "license" => $src->getLicense(), "stub" => "pharext_installer.php", - "type" => false ? "zend_extension" : "extension", + "type" => !empty($hook->config->zend) ? "zend_extension" : "extension", ]; - $file = (new Task\PharBuild($iterator, $meta))->run(); + $file = (new Task\PharBuild($src, $meta))->run(); return $file; } @@ -115,7 +137,7 @@ class Receive implements Controller return; } - $this->createReleaseFromTag($create->ref, $create->repository); + $this->createReleaseFromTag($create->ref, $create->repository)->send(); } private function setTokenForUser($login) { @@ -135,10 +157,8 @@ class Receive implements Controller private function createReleaseFromTag($tag, $repo) { $this->setTokenForUser($repo->owner->login); - $this->github->createRelease($repo->full_name, $tag, function($json) { - $response = $this->app->getResponse(); - $response->setResponseCode(201); - $response->setHeader("Location", $json->url); - })->send(); + return $this->github->createRelease($repo->full_name, $tag, function($json) use($repo) { + $this->uploadAssetForRelease($json, $repo); + }); } }