/** * @param Project */ protected function doInspect(Project $project) { try { $response = $this->client->get('2.0/repositories/' . $project->getProviderData('full_slug'))->send(); } catch (\Guzzle\Http\Exception\ClientErrorResponseException $e) { $this->logger->error($e->getMessage()); return false; } $infos = $response->json(); # @todo @slug $project->setSlug(preg_replace('/[^a-z0-9\\-]/', '-', strtolower($infos['full_name']))); $providerData = ['id' => $infos['full_name'], 'owner_login' => $infos['owner']['username'], 'full_name' => sprintf('%s/%s', $infos['owner']['username'], $infos['name']), 'full_slug' => $infos['full_name'], 'private' => $infos['is_private'], 'url' => $infos['links']['self']['href']]; foreach ($infos['links']['clone'] as $link) { switch ($link['name']) { case 'https': $providerData['clone_url'] = $link['href']; break; case 'ssh': $providerData['ssh_url'] = $link['href']; break; } } $project->setProviderName($this->provider->getName()); $project->setProviderData($providerData); $project->setFullName($providerData['full_name']); $project->setName($infos['name']); $project->setIsPrivate($providerData['private']); $project->setGitUrl($providerData['private'] ? $providerData['ssh_url'] : $providerData['clone_url']); $project->setDockerBaseImage('stage1/symfony2'); if (strpos($infos['owner']['links']['self']['href'], '.0/teams')) { $orgName = $infos['owner']['username']; $this->logger->info('attaching project\'s organization', ['organization' => $orgName]); $rp = $this->doctrine->getRepository('Model:Organization'); $org = $rp->findOneBy(['name' => $orgName, 'providerName' => $this->provider->getName()]); if (null === $org) { $this->logger->info('organization not found, creating', ['organization' => $orgName]); $orgKeys = $this->sshKeysGenerator->generate(); $org = new Organization(); $org->setName($orgName); $org->setPublicKey($orgKeys['public']); $org->setPrivateKey($orgKeys['private']); $org->setProviderName($this->provider->getName()); } $project->setOrganization($org); } else { $this->logger->info('project has no organization, skipping'); } }
/** * @param Project $project * * @return string */ private function getProjectSlug(Project $project) { return $project->getProviderData('full_slug'); }
/** * @param Project $project */ public function triggerWebHook(Project $project) { $fullName = $project->getFullName(); $hookId = $project->getProviderData('hook_id'); $url = sprintf('/repos/%s/hooks/%s/tests', $fullName, $hookId); $client = $this->configureClientForProject($project); $client->post($url)->send(); }