/** * undocumented function * * @return void * @author **/ public function takeCare() { $req = Request::instance(); $token = $this->client->getAccessToken('authorizationCode', ['code' => $req->get('code')]); $github = new \Github\Client(); $github->authenticate($token->accessToken, 'http_token'); $response = $github->getHttpClient()->get('user'); $user = \Github\HttpClient\Message\ResponseMediator::getContent($response); $verifiedEmails = $this->getVerifiedEmails($token->accessToken); $email = $this->getPrimaryEmail($verifiedEmails); $result['uid'] = $user['id']; $result['email'] = $email; $result['username'] = $user['login']; $result['url'] = $user['html_url']; $result['location'] = isset($user['location']) ? $user['location'] : null; $fresult = $this->findUser($result['email']); if ($fresult['found']) { $fuser = $fresult['user']; $result['first_name'] = $fuser->first_name; $result['last_name'] = $fuser->last_name; } else { if (isset($user['name'])) { $name = explode(' ', $user['name']); $result['first_name'] = $name[0]; $result['last_name'] = isset($name[1]) ? $name[1] : $name[0]; } else { $result['first_name'] = $result['last_name'] = $result['username']; } } $result['access_token'] = $token->accessToken; return $result; }
/** * Closes any open pull requests on mirrored repositories. * * Since these are mirrored repos, any pull requests submitted are not * monitored or handled. Since GitHub does not support turning off pull * requests, it is inevitable that users will submit them anyway. * * Note: GitHub supports turning off issues, but not pull requests. * * This utility will simply auto-close any opened pull requests while * directing author to a (hopefully) more appropriate location to submit * changes to. * * @return int Shell return code. */ function main() { $this->out(__('Fetching list of open issues...')); try { $client = new Github\Client(); $client->getHttpClient()->setOption('user_agent', Configure::read('GitHub.user_agent')); $client->authenticate(GITHUB_USERNAME, GITHUB_PASSWORD, Github\Client::AUTH_HTTP_PASSWORD); } catch (Exception $exception) { $this->out(__('<error>Failed to authenticate with GitHub: %s</error>', $exception->getMessage())); $this->_unlock(); return 1; } try { $response = $client->getHttpClient()->get('search/issues', array('q' => sprintf('user:%s state:open', Configure::read('GitHub.org_name')))); $issues = $response->getContent(); } catch (Exception $exception) { $this->out(__('<error>Failed to fetch list of open issues: %s</error>', $exception->getMessage())); $this->_unlock(); return 1; } if ($issues['total_count'] == 0) { $this->out(__('<info>No open pull requests were found.</info>')); $this->_unlock(); return 0; } foreach ($issues['items'] as $pull_request) { $parts = explode('/', $pull_request['html_url']); $user = $parts[3]; $plugin = $parts[4]; $issue_number = $parts[6]; $plugin_page = sprintf(Configure::read('App.plugin_http_url'), $plugin); $support_page = sprintf(Configure::read('App.plugin_support_url'), $plugin); $pull_request_url = sprintf('repos/%s/%s/pulls/%d', $user, $plugin, $issue_number); try { $client->getHttpClient()->post($pull_request['comments_url'], array('body' => sprintf($this->close_reply, $plugin_page, $support_page))); $client->getHttpClient()->patch($pull_request_url, array('state' => 'closed')); } catch (Exception $exception) { $this->out(__('<error>Failed to close pull request <%s>: %s</error>', $pull_request['html_url'], $exception->getMessage())); continue; } $this->out(__('Closed pull request: %s', $pull_request['html_url'])); } $this->out(__('<info>Finished closing open issues on GitHub.</info>')); $this->_unlock(); return 0; }
/** * Creates a GitHub repository with the given name. * * @param string $repo Name of the repository (slug) * * @return bool True if GitHub repository was created, false otherwise. */ protected function _createGithubRepo($repo) { try { $client = new Github\Client(); $client->getHttpClient()->setOption('user_agent', Configure::read('GitHub.user_agent')); $client->authenticate(GITHUB_USERNAME, GITHUB_PASSWORD, Github\Client::AUTH_HTTP_PASSWORD); $client->getHttpClient()->post('orgs/' . Configure::read('GitHub.org_name') . '/repos', array('name' => $repo, 'description' => Configure::read('GitHub.repo_description'), 'homepage' => sprintf(Configure::read('App.plugin_app_url'), $repo), 'has_issues' => false, 'has_wiki' => false, 'has_downloads' => false)); } catch (Exception $exception) { $this->out(__('<warning>Failed to create GitHub repository for "%s": %s</warning>', $repo, $exception->getMessage())); return false; } return true; }
$issues = $client->api('issue')->all($config->org, $repo, ['labels' => $label['name']]); $openCount = count($issues); if ($SHOW_LABEL) { if ($openCount === 0) { print $COLOR_GRAY; } else { print $COLOR_RED; } print " " . $label['name'] . ' ' . $openCount . $NO_COLOR . PHP_EOL; } $repositories[$repo]['labels'][$label['name']] = ['color' => $label['color'], 'open' => $openCount]; } } } } $response = $client->getHttpClient()->get("rate_limit"); print "Remaining requests to GitHub this hour: " . \Github\HttpClient\Message\ResponseMediator::getContent($response)['rate']['remaining'] . PHP_EOL; foreach ($repositories as $name => $repository) { foreach ($repository['milestones'] as $milestone => $info) { if (array_key_exists($milestone, $config->renameMilestones)) { $data = ["title" => $config->renameMilestones->{$milestone}, "state" => $info['state'], "description" => $info['description'], "due_on" => $info['due_on']]; if (strpos($config->renameMilestones->{$milestone}, '-') === false && $info['open_issues'] === 0) { $data['state'] = 'closed'; } $textStyle = $data['state'] === 'open' ? $BOLD : ''; print $COLOR_RED . $config->org . '/' . $name . ': rename milestone ' . $milestone . ' -> ' . $config->renameMilestones->{$milestone} . ' - state: ' . $textStyle . $data['state'] . $NO_COLOR . PHP_EOL; if (array_key_exists($config->renameMilestones->{$milestone}, $config->dueDates)) { $newName = $config->renameMilestones->{$milestone}; $data['due_on'] = $config->dueDates->{$newName} . 'T04:00:00Z'; } continue;
/** * Adds a new merger on its corresponding Github team * @param $codeReviewer_id * @return number */ public function addCodeReviewer($codeReviewer_id) { try { $team_id = $this->codeReviewersGitHubTeamId(); if (!$team_id) { if (!($team_id = $this->createCodeReviewersGitHubteam())) { return false; } } $user = User::find(Session::uid()); $token = $user->authTokenForGitHubId(GITHUB_OAUTH2_CLIENT_ID); $client = new Github\Client(new Github\HttpClient\CachedHttpClient(array('cache_dir' => TEMP_DIR . DIRECTORY_SEPARATOR . 'github'))); $client->authenticate($token, '', Github\Client::AUTH_URL_TOKEN); $user = User::find($codeReviewer_id); $gh_user = $user->getGitHubUserDetails($this); $nickname = $gh_user['data']['login']; $ret = $client->getHttpClient()->put('teams/' . $team_id . '/memberships/' . $nickname); return true; } catch (Exception $e) { return false; } }
$paginator = new Github\ResultPager($client); // get .env file and load the token from it Dotenv::load(__DIR__ . '/../'); $token = getenv('GITHUB_TOKEN'); // authenticate with github $client->authenticate($token, Github\Client::AUTH_HTTP_TOKEN); // get the user and the user repositories $user = $client->api('organization')->show('purplapp'); $repositories = $client->api('repo')->show('purplapp', 'purplapp'); $repo_contributors = $client->api('repo')->contributors('purplapp', 'purplapp', false); // get the languages used in the repository $repo_language = $client->api('repo')->languages('purplapp', 'purplapp'); // $repo_language = new LanguageCollection($repo_language); // get the pull requests for the repository $repo_pull = $client->api('pull_request')->all('purplapp', 'purplapp', array('state' => 'all')); $repo_pull_comments_response = $client->getHttpClient()->get('/repos/purplapp/purplapp/comments'); $repo_pull_comments = Github\HttpClient\Message\ResponseMediator::getContent($repo_pull_comments_response); // get the releases from the repository $repo_releases = $client->api('repo')->releases()->all('purplapp', 'purplapp'); $repo_statistics = $client->api('repo')->statistics('purplapp', 'purplapp'); // get total number of commits $commitsApi = $client->repo()->commits(); $parameters = array('purplapp', 'purplapp', array('sha' => 'master')); $repo_commits = $paginator->fetchAll($commitsApi, 'all', $parameters); // get total number of issues $issuesApi = $client->issues(); $parameters = array('purplapp', 'purplapp', array('state' => 'all')); $repo_issues = $paginator->fetchAll($issuesApi, 'all', $parameters); // get total number of comments on issues $issuesCommentsApi = $client->issues()->comments(); $parameters = array('purplapp', 'purplapp', '');