From 5c4d032ccbb460d6ca6b9b23d786c45eb57db7bf Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Mon, 9 Sep 2024 16:34:16 +0200 Subject: [PATCH] Add list repos for GitHub App --- composer.lock | 14 +++++++------- src/VCS/Adapter.php | 9 +++++++++ src/VCS/Adapter/Git/GitHub.php | 23 +++++++++++++++++++++++ tests/VCS/Adapter/GitHubTest.php | 7 +++++++ 4 files changed, 46 insertions(+), 7 deletions(-) diff --git a/composer.lock b/composer.lock index 3d7c288..2500754 100644 --- a/composer.lock +++ b/composer.lock @@ -213,16 +213,16 @@ }, { "name": "utopia-php/servers", - "version": "0.1.0", + "version": "0.1.1", "source": { "type": "git", "url": "https://github.com/utopia-php/servers.git", - "reference": "7d9e4f364fb1ab1889fb89ca96eb9946467cb09c" + "reference": "fd5c8d32778f265256c1936372a071b944f5ba8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/servers/zipball/7d9e4f364fb1ab1889fb89ca96eb9946467cb09c", - "reference": "7d9e4f364fb1ab1889fb89ca96eb9946467cb09c", + "url": "https://api.github.com/repos/utopia-php/servers/zipball/fd5c8d32778f265256c1936372a071b944f5ba8a", + "reference": "fd5c8d32778f265256c1936372a071b944f5ba8a", "shasum": "" }, "require": { @@ -260,9 +260,9 @@ ], "support": { "issues": "https://github.com/utopia-php/servers/issues", - "source": "https://github.com/utopia-php/servers/tree/0.1.0" + "source": "https://github.com/utopia-php/servers/tree/0.1.1" }, - "time": "2024-08-08T14:31:39+00:00" + "time": "2024-09-06T02:25:56+00:00" }, { "name": "utopia-php/system", @@ -2198,5 +2198,5 @@ "php": ">=8.0" }, "platform-dev": [], - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" } diff --git a/src/VCS/Adapter.php b/src/VCS/Adapter.php index 594e154..3628fb7 100644 --- a/src/VCS/Adapter.php +++ b/src/VCS/Adapter.php @@ -212,6 +212,15 @@ abstract public function updateCommitStatus(string $repositoryName, string $SHA, */ abstract public function getRepositoryTree(string $owner, string $repositoryName, string $branch, bool $recursive = false): array; + /** + * List repositories accessible to the GitHub app + * + * @param int $page page number + * @param int $per_page number of results per page + * @return array List of repositories + */ + abstract public function listRepositoriesForGitHubApp(int $page, int $per_page): array; + /** * Get repository languages * diff --git a/src/VCS/Adapter/Git/GitHub.php b/src/VCS/Adapter/Git/GitHub.php index 15ef158..9294ad2 100644 --- a/src/VCS/Adapter/Git/GitHub.php +++ b/src/VCS/Adapter/Git/GitHub.php @@ -176,6 +176,29 @@ public function getRepositoryTree(string $owner, string $repositoryName, string return array_column($response['body']['tree'], 'path'); } + /** + * List repositories accessible to the GitHub app + * + * @param int $page page number + * @param int $per_page number of results per page + * @return array List of repositories + */ + public function listRepositoriesForGitHubApp(int $page, int $per_page): array + { + $url = '/installation/repositories'; + + $response = $this->call(self::METHOD_GET, $url, ['Authorization' => "Bearer $this->accessToken"], [ + 'per_page' => $per_page, + 'page' => $page, + ]); + + if (!isset($response['body']['repositories'])) { + throw new Exception("Repositories list missing in the response."); + } + + return $response['body']['repositories']; + } + /** * Get repository languages * diff --git a/tests/VCS/Adapter/GitHubTest.php b/tests/VCS/Adapter/GitHubTest.php index b738145..70b6cc2 100644 --- a/tests/VCS/Adapter/GitHubTest.php +++ b/tests/VCS/Adapter/GitHubTest.php @@ -175,6 +175,13 @@ public function testGetRepositoryTree(): void $this->assertEquals(1, count($tree)); } + public function testListRepositoriesForGitHubApp(): void + { + $repositories = $this->vcsAdapter->listRepositoriesForGitHubApp(1, 10); + $this->assertIsArray($repositories); + $this->assertCount(4, $repositories); + } + public function testListRepositoryContents(): void { $owner = 'test-kh';