diff --git a/packages/server/src/utils/providers/gitlab.ts b/packages/server/src/utils/providers/gitlab.ts index 36995169..774cd818 100644 --- a/packages/server/src/utils/providers/gitlab.ts +++ b/packages/server/src/utils/providers/gitlab.ts @@ -4,8 +4,8 @@ import { paths } from "@dokploy/server/constants"; import type { apiGitlabTestConnection } from "@dokploy/server/db/schema"; import type { Compose } from "@dokploy/server/services/compose"; import { - type Gitlab, findGitlabById, + type Gitlab, updateGitlab, } from "@dokploy/server/services/gitlab"; import type { InferResultType } from "@dokploy/server/types/with"; @@ -310,22 +310,43 @@ export const getGitlabBranches = async (input: { const gitlabProvider = await findGitlabById(input.gitlabId); - const branchesResponse = await fetch( - `${gitlabProvider.gitlabUrl}/api/v4/projects/${input.id}/repository/branches`, - { - headers: { - Authorization: `Bearer ${gitlabProvider.accessToken}`, - }, - }, - ); + const allBranches = []; + let page = 1; + const perPage = 100; // GitLab's max per page is 100 - if (!branchesResponse.ok) { - throw new Error(`Failed to fetch branches: ${branchesResponse.statusText}`); + while (true) { + const branchesResponse = await fetch( + `https://gitlab.com/api/v4/projects/${input.id}/repository/branches?page=${page}&per_page=${perPage}`, + { + headers: { + Authorization: `Bearer ${gitlabProvider.accessToken}`, + }, + }, + ); + + if (!branchesResponse.ok) { + throw new Error( + `Failed to fetch branches: ${branchesResponse.statusText}`, + ); + } + + const branches = await branchesResponse.json(); + + if (branches.length === 0) { + break; + } + + allBranches.push(...branches); + page++; + + // Check if we've reached the total using headers (optional optimization) + const total = branchesResponse.headers.get("x-total"); + if (total && allBranches.length >= Number.parseInt(total)) { + break; + } } - const branches = await branchesResponse.json(); - - return branches as { + return allBranches as { id: string; name: string; commit: {