Fixed Private Repo Issues

This commit is contained in:
Arunavo Ray
2025-07-17 23:46:01 +05:30
parent e6a31512ac
commit 251baeb1aa
4 changed files with 35 additions and 34 deletions

View File

@@ -281,6 +281,7 @@ export function OrganizationList({
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<Skeleton className="h-4 w-20" /> <Skeleton className="h-4 w-20" />
<Skeleton className="h-4 w-20" /> <Skeleton className="h-4 w-20" />
<Skeleton className="h-4 w-20" />
</div> </div>
) : ( ) : (
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
@@ -300,6 +301,14 @@ export function OrganizationList({
</span> </span>
</div> </div>
)} )}
{org.forkRepositoryCount !== undefined && org.forkRepositoryCount > 0 && (
<div className="flex items-center gap-1.5">
<div className="h-2.5 w-2.5 rounded-full bg-blue-500" />
<span className="text-muted-foreground">
{org.forkRepositoryCount} {org.forkRepositoryCount === 1 ? "fork" : "forks"}
</span>
</div>
)}
</div> </div>
)} )}
</div> </div>

View File

@@ -52,13 +52,11 @@ export async function getGithubRepositories({
{ per_page: 100 } { per_page: 100 }
); );
const includePrivate = config.githubConfig?.privateRepositories ?? false;
const skipForks = config.githubConfig?.skipForks ?? false; const skipForks = config.githubConfig?.skipForks ?? false;
const filteredRepos = repos.filter((repo) => { const filteredRepos = repos.filter((repo) => {
const isPrivateAllowed = includePrivate || !repo.private;
const isForkAllowed = !skipForks || !repo.fork; const isForkAllowed = !skipForks || !repo.fork;
return isPrivateAllowed && isForkAllowed; return isForkAllowed;
}); });
return filteredRepos.map((repo) => ({ return filteredRepos.map((repo) => ({

View File

@@ -91,29 +91,27 @@ export const GET: APIRoute = async ({ request }) => {
.from(repositories) .from(repositories)
.where(and(...publicConditions)); .where(and(...publicConditions));
// Get private count (only if private repos are enabled in config) // Get private count (always show actual count regardless of config)
const [privateCount] = githubConfig.privateRepositories ? await db const [privateCount] = await db
.select({ count: count() }) .select({ count: count() })
.from(repositories) .from(repositories)
.where( .where(
and( and(
...baseConditions, ...baseConditions,
eq(repositories.isPrivate, true), eq(repositories.isPrivate, true)
...(githubConfig.skipForks ? [eq(repositories.isForked, false)] : [])
) )
) : [{ count: 0 }]; );
// Get fork count (only if forks are enabled in config) // Get fork count (always show actual count regardless of config)
const [forkCount] = !githubConfig.skipForks ? await db const [forkCount] = await db
.select({ count: count() }) .select({ count: count() })
.from(repositories) .from(repositories)
.where( .where(
and( and(
...baseConditions, ...baseConditions,
eq(repositories.isForked, true), eq(repositories.isForked, true)
...(!githubConfig.privateRepositories ? [eq(repositories.isPrivate, false)] : [])
) )
) : [{ count: 0 }]; );
return { return {
...org, ...org,

View File

@@ -78,7 +78,7 @@ export const POST: APIRoute = async ({ request }) => {
// Fetch repos based on config settings // Fetch repos based on config settings
const allRepos = []; 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, { const publicRepos = await octokit.paginate(octokit.repos.listForOrg, {
org, org,
type: "public", type: "public",
@@ -86,28 +86,24 @@ export const POST: APIRoute = async ({ request }) => {
}); });
allRepos.push(...publicRepos); allRepos.push(...publicRepos);
// Fetch private repos if enabled in config // Always fetch private repos to show them in the UI
if (decryptedConfig.githubConfig?.includePrivate) { const privateRepos = await octokit.paginate(octokit.repos.listForOrg, {
const privateRepos = await octokit.paginate(octokit.repos.listForOrg, { org,
org, type: "private",
type: "private", per_page: 100,
per_page: 100, });
}); allRepos.push(...privateRepos);
allRepos.push(...privateRepos);
}
// Also fetch member repos (includes private repos the user has access to) // Also fetch member repos (includes private repos the user has access to)
if (decryptedConfig.githubConfig?.includePrivate) { const memberRepos = await octokit.paginate(octokit.repos.listForOrg, {
const memberRepos = await octokit.paginate(octokit.repos.listForOrg, { org,
org, type: "member",
type: "member", per_page: 100,
per_page: 100, });
}); // Filter out duplicates
// Filter out duplicates const existingIds = new Set(allRepos.map(r => r.id));
const existingIds = new Set(allRepos.map(r => r.id)); const uniqueMemberRepos = memberRepos.filter(r => !existingIds.has(r.id));
const uniqueMemberRepos = memberRepos.filter(r => !existingIds.has(r.id)); allRepos.push(...uniqueMemberRepos);
allRepos.push(...uniqueMemberRepos);
}
// Insert repositories // Insert repositories
const repoRecords = allRepos.map((repo) => ({ const repoRecords = allRepos.map((repo) => ({