diff --git a/buildbot_nix/gitea_projects.py b/buildbot_nix/gitea_projects.py index a951f95..995f30f 100644 --- a/buildbot_nix/gitea_projects.py +++ b/buildbot_nix/gitea_projects.py @@ -5,7 +5,8 @@ from collections.abc import Generator from dataclasses import dataclass from pathlib import Path from tempfile import NamedTemporaryFile -from typing import Any, TYPE_CHECKING +from typing import TYPE_CHECKING, Any +from urllib.parse import urlparse from buildbot.config.builder import BuilderConfig from buildbot.plugins import util @@ -69,7 +70,7 @@ class GiteaProject(GitProject): webhook_url: str, ) -> None: hooks = paginated_github_request( - f"https://{self.config.instance_url}/api/v1/repos/{owner}/{repo}/hooks?limit=100", + f"{self.config.instance_url}/api/v1/repos/{owner}/{repo}/hooks?limit=100", self.config.token(), ) config = dict( @@ -96,14 +97,15 @@ class GiteaProject(GitProject): return http_request( - f"https://{self.config.instance_url}/api/v1/repos/{owner}/{repo}/hooks", + f"{self.config.instance_url}/api/v1/repos/{owner}/{repo}/hooks", method="POST", headers=headers, data=data, ) def get_project_url(self) -> str: - return f"https://git:%(secret:{self.config.token_secret_name})s@{self.config.instance_url}/{self.name}" + url = urlparse(self.config.instance_url) + return f"{url.scheme}://git:%(secret:{self.config.token_secret_name})s@{url.hostname}/{self.name}" @property def pretty_type(self) -> str: @@ -170,7 +172,7 @@ class GiteaBackend(GitBackend): def create_reporter(self) -> ReporterBase: return GiteaStatusPush( - "https://" + self.config.instance_url, + self.config.instance_url, Interpolate(self.config.token()), context=Interpolate("buildbot/%(prop:status_name)s"), context_pr=Interpolate("buildbot/%(prop:status_name)s"), @@ -187,7 +189,7 @@ class GiteaBackend(GitBackend): def create_auth(self) -> AuthBase: assert self.config.oauth_id is not None, "Gitea requires an OAuth ID to be set" return GiteaAuth( - "https://" + self.config.instance_url, + self.config.instance_url, self.config.oauth_id, self.config.oauth_secret(), ) @@ -271,7 +273,7 @@ def refresh_projects(config: GiteaConfig, repo_cache_file: Path) -> None: repos = [] for repo in paginated_github_request( - f"https://{config.instance_url}/api/v1/user/repos?limit=100", + f"{config.instance_url}/api/v1/user/repos?limit=100", config.token(), ): if not repo["permissions"]["admin"]: @@ -283,7 +285,7 @@ def refresh_projects(config: GiteaConfig, repo_cache_file: Path) -> None: try: # Gitea doesn't include topics in the default repo listing, unlike GitHub topics: list[str] = http_request( - f"https://{config.instance_url}/api/v1/repos/{repo['owner']['login']}/{repo['name']}/topics", + f"{config.instance_url}/api/v1/repos/{repo['owner']['login']}/{repo['name']}/topics", headers={"Authorization": f"token {config.token}"}, ).json()["topics"] repo["topics"] = topics