diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx
index 98d8cfd7..531ace12 100644
--- a/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx
+++ b/apps/dokploy/components/dashboard/application/general/generic/save-gitea-provider.tsx
@@ -381,6 +381,9 @@ export const SaveGiteaProvider = ({ applicationId }: Props) => {
No branch found.
+ {branches && branches.length === 0 && (
+ No branches found.
+ )}
{branches?.map((branch: GiteaBranch) => (
{
}
const baseUrl = provider.giteaUrl.replace(/\/+$/, "");
- const url = `${baseUrl}/api/v1/user/repos`;
+ const limit = 30;
+ let allRepos = 0;
+ let nextUrl = `${baseUrl}/api/v1/repos/search?limit=${limit}`;
- const response = await fetch(url, {
- headers: {
- Accept: "application/json",
- Authorization: `token ${provider.accessToken}`,
- },
- });
+ while (nextUrl) {
+ const response = await fetch(nextUrl, {
+ headers: {
+ Accept: "application/json",
+ Authorization: `token ${provider.accessToken}`,
+ },
+ });
- if (!response.ok) {
- throw new Error(
- `Failed to connect to Gitea API: ${response.status} ${response.statusText}`,
- );
+ if (!response.ok) {
+ throw new Error(
+ `Failed to connect to Gitea API: ${response.status} ${response.statusText}`,
+ );
+ }
+
+ const repos = await response.json();
+ allRepos += repos.data.length;
+
+ const linkHeader = response.headers.get("link");
+ nextUrl = "";
+
+ if (linkHeader) {
+ const nextLink = linkHeader
+ .split(",")
+ .find((link) => link.includes('rel="next"'));
+ if (nextLink) {
+ const matches = nextLink.match(/<([^>]+)>/);
+ if (matches?.[1]) {
+ nextUrl = matches[1];
+ }
+ }
+ }
}
- const repos = await response.json();
await updateGitea(giteaId, {
lastAuthenticatedAt: Math.floor(Date.now() / 1000),
});
- return repos.length;
+ return allRepos;
} catch (error) {
throw error;
}
@@ -394,38 +415,57 @@ export const getGiteaRepositories = async (giteaId?: string) => {
}
await refreshGiteaToken(giteaId);
-
const giteaProvider = await findGiteaById(giteaId);
const baseUrl = giteaProvider.giteaUrl.replace(/\/+$/, "");
- const url = `${baseUrl}/api/v1/user/repos`;
+ const limit = 30;
+ let allRepositories: any[] = [];
+ let nextUrl = `${baseUrl}/api/v1/repos/search?limit=${limit}`;
- const response = await fetch(url, {
- headers: {
- Accept: "application/json",
- Authorization: `token ${giteaProvider.accessToken}`,
- },
- });
-
- if (!response.ok) {
- throw new TRPCError({
- code: "BAD_REQUEST",
- message: `Failed to fetch repositories: ${response.statusText}`,
+ while (nextUrl) {
+ const response = await fetch(nextUrl, {
+ headers: {
+ Accept: "application/json",
+ Authorization: `token ${giteaProvider.accessToken}`,
+ },
});
+
+ if (!response.ok) {
+ throw new TRPCError({
+ code: "BAD_REQUEST",
+ message: `Failed to fetch repositories: ${response.statusText}`,
+ });
+ }
+
+ const result = await response.json();
+ allRepositories = [...allRepositories, ...result.data];
+
+ const linkHeader = response.headers.get("link");
+ nextUrl = "";
+
+ if (linkHeader) {
+ const nextLink = linkHeader
+ .split(",")
+ .find((link) => link.includes('rel="next"'));
+ if (nextLink) {
+ const matches = nextLink.match(/<([^>]+)>/);
+ if (matches?.[1]) {
+ nextUrl = matches[1];
+ }
+ }
+ }
}
- const repositories = await response.json();
-
- const mappedRepositories = repositories.map((repo: any) => ({
- id: repo.id,
- name: repo.name,
- url: repo.full_name,
- owner: {
- username: repo.owner.login,
- },
- }));
-
- return mappedRepositories;
+ return (
+ allRepositories?.map((repo: any) => ({
+ id: repo.id,
+ name: repo.name,
+ url: repo.full_name,
+ owner: {
+ username: repo.owner.login,
+ },
+ })) || []
+ );
};
export const getGiteaBranches = async (input: {
@@ -457,7 +497,10 @@ export const getGiteaBranches = async (input: {
const branches = await response.json();
- return branches.map((branch: any) => ({
+ if (!branches) {
+ return [];
+ }
+ return branches?.map((branch: any) => ({
id: branch.name,
name: branch.name,
commit: {