From 251baeb1aa3eec7c8d7fc9bba46801efd20d7f64 Mon Sep 17 00:00:00 2001 From: Arunavo Ray Date: Thu, 17 Jul 2025 23:46:01 +0530 Subject: [PATCH] Fixed Private Repo Issues --- .../organizations/OrganizationsList.tsx | 9 +++++ src/lib/github.ts | 4 +- src/pages/api/github/organizations.ts | 18 ++++----- src/pages/api/sync/organization.ts | 38 +++++++++---------- 4 files changed, 35 insertions(+), 34 deletions(-) diff --git a/src/components/organizations/OrganizationsList.tsx b/src/components/organizations/OrganizationsList.tsx index 99eca6b..2c3fd7c 100644 --- a/src/components/organizations/OrganizationsList.tsx +++ b/src/components/organizations/OrganizationsList.tsx @@ -281,6 +281,7 @@ export function OrganizationList({
+
) : (
@@ -300,6 +301,14 @@ export function OrganizationList({
)} + {org.forkRepositoryCount !== undefined && org.forkRepositoryCount > 0 && ( +
+
+ + {org.forkRepositoryCount} {org.forkRepositoryCount === 1 ? "fork" : "forks"} + +
+ )}
)} diff --git a/src/lib/github.ts b/src/lib/github.ts index 975aa48..a1de890 100644 --- a/src/lib/github.ts +++ b/src/lib/github.ts @@ -52,13 +52,11 @@ export async function getGithubRepositories({ { per_page: 100 } ); - const includePrivate = config.githubConfig?.privateRepositories ?? false; const skipForks = config.githubConfig?.skipForks ?? false; const filteredRepos = repos.filter((repo) => { - const isPrivateAllowed = includePrivate || !repo.private; const isForkAllowed = !skipForks || !repo.fork; - return isPrivateAllowed && isForkAllowed; + return isForkAllowed; }); return filteredRepos.map((repo) => ({ diff --git a/src/pages/api/github/organizations.ts b/src/pages/api/github/organizations.ts index 2f1cd4f..15b458d 100644 --- a/src/pages/api/github/organizations.ts +++ b/src/pages/api/github/organizations.ts @@ -91,29 +91,27 @@ export const GET: APIRoute = async ({ request }) => { .from(repositories) .where(and(...publicConditions)); - // Get private count (only if private repos are enabled in config) - const [privateCount] = githubConfig.privateRepositories ? await db + // Get private count (always show actual count regardless of config) + const [privateCount] = await db .select({ count: count() }) .from(repositories) .where( and( ...baseConditions, - eq(repositories.isPrivate, true), - ...(githubConfig.skipForks ? [eq(repositories.isForked, false)] : []) + eq(repositories.isPrivate, true) ) - ) : [{ count: 0 }]; + ); - // Get fork count (only if forks are enabled in config) - const [forkCount] = !githubConfig.skipForks ? await db + // Get fork count (always show actual count regardless of config) + const [forkCount] = await db .select({ count: count() }) .from(repositories) .where( and( ...baseConditions, - eq(repositories.isForked, true), - ...(!githubConfig.privateRepositories ? [eq(repositories.isPrivate, false)] : []) + eq(repositories.isForked, true) ) - ) : [{ count: 0 }]; + ); return { ...org, diff --git a/src/pages/api/sync/organization.ts b/src/pages/api/sync/organization.ts index 6d97965..1509ca4 100644 --- a/src/pages/api/sync/organization.ts +++ b/src/pages/api/sync/organization.ts @@ -78,7 +78,7 @@ export const POST: APIRoute = async ({ request }) => { // Fetch repos based on config settings const allRepos = []; - // Always fetch public repos + // Fetch all repos (public, private, and member) to show in UI const publicRepos = await octokit.paginate(octokit.repos.listForOrg, { org, type: "public", @@ -86,28 +86,24 @@ export const POST: APIRoute = async ({ request }) => { }); allRepos.push(...publicRepos); - // Fetch private repos if enabled in config - if (decryptedConfig.githubConfig?.includePrivate) { - const privateRepos = await octokit.paginate(octokit.repos.listForOrg, { - org, - type: "private", - per_page: 100, - }); - allRepos.push(...privateRepos); - } + // Always fetch private repos to show them in the UI + const privateRepos = await octokit.paginate(octokit.repos.listForOrg, { + org, + type: "private", + per_page: 100, + }); + allRepos.push(...privateRepos); // Also fetch member repos (includes private repos the user has access to) - if (decryptedConfig.githubConfig?.includePrivate) { - const memberRepos = await octokit.paginate(octokit.repos.listForOrg, { - org, - type: "member", - per_page: 100, - }); - // Filter out duplicates - const existingIds = new Set(allRepos.map(r => r.id)); - const uniqueMemberRepos = memberRepos.filter(r => !existingIds.has(r.id)); - allRepos.push(...uniqueMemberRepos); - } + const memberRepos = await octokit.paginate(octokit.repos.listForOrg, { + org, + type: "member", + per_page: 100, + }); + // Filter out duplicates + const existingIds = new Set(allRepos.map(r => r.id)); + const uniqueMemberRepos = memberRepos.filter(r => !existingIds.has(r.id)); + allRepos.push(...uniqueMemberRepos); // Insert repositories const repoRecords = allRepos.map((repo) => ({