add possibility to retrieve private repos

This commit is contained in:
Dennis Wielepsky
2025-03-30 10:50:26 +02:00
parent 647a42f5cd
commit 16f2516f9f
2 changed files with 108 additions and 6 deletions

View File

@@ -1,13 +1,33 @@
async function getRepositories(octokit, mirrorOptions) {
const repos = await octokit
.paginate("GET /users/:username/repos", { username: "jaedle" })
const publicRepositories = await fetchPublicRepositories(
octokit,
mirrorOptions.username,
);
const privateRepos = mirrorOptions.privateRepositories
? await fetchPrivateRepositories(octokit)
: [];
const repos = [...publicRepositories, ...privateRepos];
return mirrorOptions.skipForks ? withoutForks(repos) : repos;
}
async function fetchPublicRepositories(octokit, username) {
return octokit
.paginate("GET /users/:username/repos", { username })
.then(toRepositoryList);
}
if (mirrorOptions.skipForks) {
return repos.filter((repo) => !repo.fork);
}
async function fetchPrivateRepositories(octokit) {
return octokit
.paginate("GET /user/repos", {
affiliation: "owner",
visibility: "private",
})
.then(toRepositoryList);
}
return repos;
function withoutForks(repositories) {
return repositories.filter((repo) => !repo.fork);
}
function toRepositoryList(repositories) {

View File

@@ -79,4 +79,86 @@ describe("get-github-repositories", () => {
{ name: "repo3", url: "clone-url-of-repo3", private: false, fork: false },
]);
});
it("includes private repositories for user", async () => {
const moctokit = new Moctokit();
moctokit.rest.repos.listForUser({ username: "jaedle" }).reply({
status: 200,
data: [
{
name: "public-repo-1",
clone_url: "clone-url-of-public-repo-1",
private: false,
fork: false,
},
{
name: "public-repo-2",
clone_url: "clone-url-of-public-repo-2",
private: false,
fork: false,
},
],
});
moctokit.rest.repos
.listForAuthenticatedUser({
affiliation: "owner",
visibility: "private",
})
.reply({
status: 200,
data: [
{
name: "private-repo-1",
clone_url: "clone-url-of-private-repo-1",
private: true,
fork: false,
},
{
name: "private-repo-2",
clone_url: "clone-url-of-private-repo-2",
private: true,
fork: false,
},
],
});
const result = await get(
new Octokit({
auth: "a-github-token",
}),
{
username: "jaedle",
privateRepositories: true,
skipForks: false,
},
);
expect(result).toEqual([
{
name: "public-repo-1",
url: "clone-url-of-public-repo-1",
private: false,
fork: false,
},
{
name: "public-repo-2",
url: "clone-url-of-public-repo-2",
private: false,
fork: false,
},
{
name: "private-repo-1",
url: "clone-url-of-private-repo-1",
private: true,
fork: false,
},
{
name: "private-repo-2",
url: "clone-url-of-private-repo-2",
private: true,
fork: false,
},
]);
});
});