feat(signals.py): add gitea repo to team

This commit is contained in:
2026-05-05 12:44:01 +02:00
parent fa942809d9
commit a9d7aef6dd

View File

@@ -117,55 +117,98 @@ def create_gitea_repo_on_lesson_creation(
logger.debug("GITEA_URL is not set, skipping Gitea repository creation") logger.debug("GITEA_URL is not set, skipping Gitea repository creation")
return return
# check if repository already exists def create_repository() -> None:
try: # check if repository already exists
response = requests.get( try:
f"{api_url}/orgs/{GITEA_ORG_NAME}/repos", response = requests.get(
timeout=5, f"{api_url}/orgs/{GITEA_ORG_NAME}/repos",
headers={"Authorization": f"token {os.getenv('GITEA_API_TOKEN')}"}, timeout=5,
) headers={"Authorization": f"token {os.getenv('GITEA_API_TOKEN')}"},
response.raise_for_status() )
repos = response.json() response.raise_for_status()
if any(repo["name"] == repo_name for repo in repos): repos = response.json()
logger.info( if any(repo["name"] == repo_name for repo in repos):
f"Gitea repository {repo_name} already exists, skipping creation" logger.info(
f"Gitea repository {repo_name} already exists, skipping creation"
)
return
except Exception as e:
logger.exception(
f"Failed to check existing Gitea repositories: {e}\n{response.text}",
e,
) )
return return
except Exception as e:
logger.exception(
f"Failed to check existing Gitea repositories: {e}\n{response.text}",
e,
)
return
# create lesson repository # create lesson repository
url = f"{api_url}/orgs/{GITEA_ORG_NAME}/repos" url = f"{api_url}/orgs/{GITEA_ORG_NAME}/repos"
payload = { payload = {
"auto_init": True, "auto_init": True,
"default_branch": "main", "default_branch": "main",
"description": f"{instance.module.course} {instance.module}: {instance.title}", "description": f"{instance.module.course} {instance.module}: {instance.title}",
"name": repo_name, "name": repo_name,
"private": True, "private": True,
} }
try: try:
response = requests.post( response = requests.post(
url, url,
json=payload, json=payload,
timeout=5, timeout=5,
headers={"Authorization": f"token {os.getenv('GITEA_API_TOKEN')}"}, headers={"Authorization": f"token {os.getenv('GITEA_API_TOKEN')}"},
) )
response.raise_for_status() response.raise_for_status()
repo_url = response.json().get("html_url") repo_url = response.json().get("html_url")
instance.gitea_repo_url = repo_url instance.gitea_repo_url = repo_url
instance.save(update_fields=["gitea_repo_url"]) instance.save(update_fields=["gitea_repo_url"])
logger.info( logger.info(
f"Successfully created Gitea repository for lesson {instance.title}: {repo_url}" f"Successfully created Gitea repository for lesson {instance.title}: {repo_url}"
) )
except Exception as e: except Exception as e:
logger.exception( logger.exception(
f"Failed to create Gitea repository for lesson {instance.title}: {e}\n{response.text}", f"Failed to create Gitea repository for lesson {instance.title}: {e}\n{response.text}",
e, e,
) )
def add_repository_to_team() -> None:
# add repository to course team
team_name = f"course-{course.id}"
try:
response = requests.get(
f"{api_url}/orgs/{GITEA_ORG_NAME}/teams",
timeout=5,
headers={"Authorization": f"token {os.getenv('GITEA_API_TOKEN')}"},
)
response.raise_for_status()
teams = response.json()
team = next((team for team in teams if team["name"] == team_name), None)
if not team:
logger.error(
f"Gitea team {team_name} not found when trying to add repository {repo_name}"
)
return
team_id = team["id"]
add_repo_url = (
f"{api_url}/teams/{team_id}/repos/{GITEA_ORG_NAME}/{repo_name}"
)
add_response = requests.put(
add_repo_url,
timeout=5,
headers={"Authorization": f"token {os.getenv('GITEA_API_TOKEN')}"},
)
add_response.raise_for_status()
logger.info(
f"Successfully added repository {repo_name} to Gitea team {team_name}"
)
except Exception as e:
logger.exception(
f"Failed to add repository {repo_name} to Gitea team {team_name}: {e}\n{response.text}",
e,
)
create_repository()
add_repository_to_team()