Update README.md
This commit is contained in:
89
app/routers/repositories.py
Normal file
89
app/routers/repositories.py
Normal file
@ -0,0 +1,89 @@
|
||||
from fastapi import APIRouter, HTTPException, Query
|
||||
from typing import List, Dict, Any, Optional
|
||||
|
||||
from app.services.gitea_client import GiteaClient
|
||||
from app.services.config_service import ConfigService
|
||||
|
||||
router = APIRouter()
|
||||
gitea_client = GiteaClient()
|
||||
config_service = ConfigService()
|
||||
|
||||
@router.get("/")
|
||||
async def list_repositories(limit: int = Query(100, description="Maximum number of repositories to return")):
|
||||
"""
|
||||
List all available repositories from Gitea.
|
||||
|
||||
If Gitea integration is not configured, returns an empty list.
|
||||
"""
|
||||
repositories = gitea_client.list_repositories(limit)
|
||||
|
||||
# Enhance with linked job information
|
||||
for repo in repositories:
|
||||
# Create a URL from clone_url
|
||||
repo_url = repo.get("clone_url")
|
||||
if repo_url:
|
||||
# Check if repository is linked to a job
|
||||
configs = config_service.list_configs()
|
||||
for config in configs:
|
||||
if config.get("repository") == repo_url:
|
||||
repo["linked_job"] = config.get("job_id")
|
||||
repo["config_name"] = config.get("name")
|
||||
break
|
||||
|
||||
return repositories
|
||||
|
||||
@router.get("/{repository}")
|
||||
async def get_repository_info(repository: str):
|
||||
"""
|
||||
Get information about a specific repository.
|
||||
|
||||
The repository parameter can be a repository URL or a repository alias.
|
||||
If it's a repository URL, we'll get the info directly from Gitea.
|
||||
If it's a repository alias, we'll get the info from the configuration and then from Gitea.
|
||||
"""
|
||||
# First check if it's a repository URL
|
||||
repo_info = gitea_client.get_repository_info(repository)
|
||||
|
||||
if repo_info:
|
||||
# Check if repository is linked to a job
|
||||
configs = config_service.list_configs()
|
||||
for config in configs:
|
||||
if config.get("repository") == repository:
|
||||
repo_info["linked_job"] = config.get("job_id")
|
||||
repo_info["config_name"] = config.get("name")
|
||||
repo_info["config"] = config
|
||||
break
|
||||
|
||||
return repo_info
|
||||
else:
|
||||
# Check if it's a repository alias in our configs
|
||||
config = config_service.get_config_by_repository(repository)
|
||||
if config:
|
||||
repo_url = config.get("repository")
|
||||
repo_info = gitea_client.get_repository_info(repo_url)
|
||||
|
||||
if repo_info:
|
||||
repo_info["linked_job"] = config.get("job_id")
|
||||
repo_info["config_name"] = config.get("name")
|
||||
repo_info["config"] = config
|
||||
return repo_info
|
||||
|
||||
raise HTTPException(status_code=404, detail=f"Repository not found: {repository}")
|
||||
|
||||
@router.get("/{repository}/branches")
|
||||
async def get_repository_branches(repository: str):
|
||||
"""
|
||||
Get branches for a specific repository.
|
||||
|
||||
The repository parameter can be a repository URL or a repository alias.
|
||||
"""
|
||||
# If it's a repository alias, get the actual URL
|
||||
config = config_service.get_config_by_repository(repository)
|
||||
if config:
|
||||
repository = config.get("repository")
|
||||
|
||||
branches = gitea_client.get_repository_branches(repository)
|
||||
if not branches:
|
||||
raise HTTPException(status_code=404, detail=f"No branches found for repository: {repository}")
|
||||
|
||||
return branches
|
Reference in New Issue
Block a user