Forgejo integration (#11111)

Co-authored-by: johba <admin@noreply.localhost>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: johba <johba@harb.eth>
Co-authored-by: enyst <engel.nyst@gmail.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
Co-authored-by: MrGeorgen <65063405+MrGeorgen@users.noreply.github.com>
Co-authored-by: MrGeorgen <moinl6162@gmail.com>
This commit is contained in:
johba
2025-12-27 21:57:31 +01:00
committed by GitHub
parent cb1d1f8a0d
commit f8e4b5562e
34 changed files with 2110 additions and 93 deletions

View File

@@ -1,5 +1,5 @@
from types import MappingProxyType
from typing import cast
from typing import Annotated, cast
from fastapi import APIRouter, Depends, Query, status
from fastapi.responses import JSONResponse
@@ -67,7 +67,7 @@ async def get_user_installations(
@app.get('/repositories', response_model=list[Repository])
async def get_user_repositories(
sort: str = 'pushed',
selected_provider: ProviderType | None = None,
selected_provider: Annotated[ProviderType | None, Query()] = None,
page: int | None = None,
per_page: int | None = None,
installation_id: str | None = None,
@@ -137,7 +137,7 @@ async def search_repositories(
per_page: int = 5,
sort: str = 'stars',
order: str = 'desc',
selected_provider: ProviderType | None = None,
selected_provider: Annotated[ProviderType | None, Query()] = None,
provider_tokens: PROVIDER_TOKEN_TYPE | None = Depends(get_provider_tokens),
access_token: SecretStr | None = Depends(get_access_token),
user_id: str | None = Depends(get_user_id),
@@ -171,7 +171,7 @@ async def search_branches(
repository: str,
query: str,
per_page: int = 30,
selected_provider: ProviderType | None = None,
selected_provider: Annotated[ProviderType | None, Query()] = None,
provider_tokens: PROVIDER_TOKEN_TYPE | None = Depends(get_provider_tokens),
access_token: SecretStr | None = Depends(get_access_token),
user_id: str | None = Depends(get_user_id),
@@ -243,6 +243,7 @@ async def get_repository_branches(
repository: str,
page: int = 1,
per_page: int = 30,
selected_provider: Annotated[ProviderType | None, Query()] = None,
provider_tokens: PROVIDER_TOKEN_TYPE | None = Depends(get_provider_tokens),
access_token: SecretStr | None = Depends(get_access_token),
user_id: str | None = Depends(get_user_id),
@@ -253,6 +254,7 @@ async def get_repository_branches(
repository: The repository name in the format 'owner/repo'
page: Page number for pagination (default: 1)
per_page: Number of branches per page (default: 30)
selected_provider: Optional provider hint to avoid trying other providers
Returns:
A paginated response with branches for the repository
@@ -263,7 +265,10 @@ async def get_repository_branches(
)
try:
branches_response: PaginatedBranchesResponse = await client.get_branches(
repository, page=page, per_page=per_page
repository,
specified_provider=selected_provider,
page=page,
per_page=per_page,
)
return branches_response