diff --git a/packages/backend/src/repoCompileUtils.ts b/packages/backend/src/repoCompileUtils.ts index 70bef566..36b694be 100644 --- a/packages/backend/src/repoCompileUtils.ts +++ b/packages/backend/src/repoCompileUtils.ts @@ -40,6 +40,7 @@ export const compileGithubConfig = async ( external_codeHostType: 'github', external_codeHostUrl: hostUrl, cloneUrl: cloneUrl.toString(), + webUrl: repo.html_url, name: repoName, imageUrl: repo.owner.avatar_url, isFork: repo.fork, @@ -105,6 +106,7 @@ export const compileGitlabConfig = async ( external_codeHostType: 'gitlab', external_codeHostUrl: hostUrl, cloneUrl: cloneUrl.toString(), + webUrl: projectUrl, name: repoName, imageUrl: project.avatar_url, isFork: isFork, @@ -166,6 +168,7 @@ export const compileGiteaConfig = async ( external_codeHostType: 'gitea', external_codeHostUrl: hostUrl, cloneUrl: cloneUrl.toString(), + webUrl: repo.html_url, name: repoName, imageUrl: repo.owner?.avatar_url, isFork: repo.fork!, @@ -230,6 +233,7 @@ export const compileGerritConfig = async ( external_codeHostType: 'gerrit', external_codeHostUrl: hostUrl, cloneUrl: cloneUrl.toString(), + webUrl: webUrl, name: project.name, isFork: false, isArchived: false, diff --git a/packages/db/prisma/migrations/20250324183912_add_repo_web_url/migration.sql b/packages/db/prisma/migrations/20250324183912_add_repo_web_url/migration.sql new file mode 100644 index 00000000..0bc28c58 --- /dev/null +++ b/packages/db/prisma/migrations/20250324183912_add_repo_web_url/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Repo" ADD COLUMN "webUrl" TEXT; diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index 629fbe2f..ce6edc3c 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -45,6 +45,7 @@ model Repo { isArchived Boolean metadata Json cloneUrl String + webUrl String? connections RepoToConnection[] imageUrl String? repoIndexingStatus RepoIndexingStatus @default(NEW) diff --git a/packages/web/src/actions.ts b/packages/web/src/actions.ts index e96e1292..19a77afe 100644 --- a/packages/web/src/actions.ts +++ b/packages/web/src/actions.ts @@ -430,6 +430,7 @@ export const getRepos = async (domain: string, filter: { status?: RepoIndexingSt repoId: repo.id, repoName: repo.name, repoCloneUrl: repo.cloneUrl, + webUrl: repo.webUrl ?? undefined, linkedConnections: repo.connections.map(({ connection }) => ({ id: connection.id, name: connection.name, diff --git a/packages/web/src/app/[domain]/components/navigationMenu.tsx b/packages/web/src/app/[domain]/components/navigationMenu.tsx index 4ce65874..ab1e997d 100644 --- a/packages/web/src/app/[domain]/components/navigationMenu.tsx +++ b/packages/web/src/app/[domain]/components/navigationMenu.tsx @@ -89,8 +89,12 @@ export const NavigationMenu = async ({
- - + {env.SOURCEBOT_AUTH_ENABLED === 'true' && ( + <> + + + + )}
{ diff --git a/packages/web/src/app/[domain]/repos/repositoryTable.tsx b/packages/web/src/app/[domain]/repos/repositoryTable.tsx index 761c5148..febb5b1c 100644 --- a/packages/web/src/app/[domain]/repos/repositoryTable.tsx +++ b/packages/web/src/app/[domain]/repos/repositoryTable.tsx @@ -44,7 +44,7 @@ export const RepositoryTable = ({ isAddNewRepoButtonVisible }: RepositoryTablePr connections: repo.linkedConnections, repoIndexingStatus: repo.repoIndexingStatus as RepoIndexingStatus, lastIndexed: repo.indexedAt?.toISOString() ?? "", - url: repo.repoCloneUrl, + url: repo.webUrl ?? repo.repoCloneUrl, })).sort((a, b) => { return new Date(b.lastIndexed).getTime() - new Date(a.lastIndexed).getTime(); }); diff --git a/packages/web/src/initialize.ts b/packages/web/src/initialize.ts index 1e1dadca..fa5b51a4 100644 --- a/packages/web/src/initialize.ts +++ b/packages/web/src/initialize.ts @@ -105,14 +105,13 @@ const initSingleTenancy = async () => { name: key, orgId: SINGLE_TENANT_ORG_ID, } - }, - select: { - config: true, } }); const currentConnectionConfig = currentConnection ? currentConnection.config as unknown as ConnectionConfig : undefined; - const syncNeededOnUpdate = currentConnectionConfig && JSON.stringify(currentConnectionConfig) !== JSON.stringify(newConnectionConfig); + const syncNeededOnUpdate = + (currentConnectionConfig && JSON.stringify(currentConnectionConfig) !== JSON.stringify(newConnectionConfig)) || + (currentConnection?.syncStatus === ConnectionSyncStatus.FAILED); const connectionDb = await prisma.connection.upsert({ where: { diff --git a/packages/web/src/lib/schemas.ts b/packages/web/src/lib/schemas.ts index 93c52345..79f8ffc4 100644 --- a/packages/web/src/lib/schemas.ts +++ b/packages/web/src/lib/schemas.ts @@ -169,6 +169,7 @@ export const repositoryQuerySchema = z.object({ repoId: z.number(), repoName: z.string(), repoCloneUrl: z.string(), + webUrl: z.string().optional(), linkedConnections: z.array(z.object({ id: z.number(), name: z.string(), diff --git a/packages/web/src/lib/utils.ts b/packages/web/src/lib/utils.ts index 8f6e38c4..534ec0b3 100644 --- a/packages/web/src/lib/utils.ts +++ b/packages/web/src/lib/utils.ts @@ -63,7 +63,7 @@ export const getRepoQueryCodeHostInfo = (repo?: RepositoryQuery): CodeHostInfo | } const displayName = repo.repoName.split('/').slice(-2).join('/'); - return _getCodeHostInfoInternal(repo.codeHostType, displayName, repo.repoCloneUrl); + return _getCodeHostInfoInternal(repo.codeHostType, displayName, repo.webUrl ?? repo.repoCloneUrl); } const _getCodeHostInfoInternal = (type: string, displayName: string, cloneUrl: string): CodeHostInfo | undefined => { @@ -101,6 +101,7 @@ const _getCodeHostInfoInternal = (type: string, displayName: string, cloneUrl: s iconClassName: className, } } + case 'gerrit': case 'gitiles': { const { src, className } = getCodeHostIcon('gerrit')!; return {