gitea: expect full instance url

This commit is contained in:
Jörg Thalheim 2024-04-30 18:03:03 +02:00
parent 993b5e822a
commit 4f78c6e7f7

View file

@ -5,7 +5,8 @@ from collections.abc import Generator
from dataclasses import dataclass from dataclasses import dataclass
from pathlib import Path from pathlib import Path
from tempfile import NamedTemporaryFile 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.config.builder import BuilderConfig
from buildbot.plugins import util from buildbot.plugins import util
@ -69,7 +70,7 @@ class GiteaProject(GitProject):
webhook_url: str, webhook_url: str,
) -> None: ) -> None:
hooks = paginated_github_request( 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(), self.config.token(),
) )
config = dict( config = dict(
@ -96,14 +97,15 @@ class GiteaProject(GitProject):
return return
http_request( 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", method="POST",
headers=headers, headers=headers,
data=data, data=data,
) )
def get_project_url(self) -> str: 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 @property
def pretty_type(self) -> str: def pretty_type(self) -> str:
@ -170,7 +172,7 @@ class GiteaBackend(GitBackend):
def create_reporter(self) -> ReporterBase: def create_reporter(self) -> ReporterBase:
return GiteaStatusPush( return GiteaStatusPush(
"https://" + self.config.instance_url, self.config.instance_url,
Interpolate(self.config.token()), Interpolate(self.config.token()),
context=Interpolate("buildbot/%(prop:status_name)s"), context=Interpolate("buildbot/%(prop:status_name)s"),
context_pr=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: def create_auth(self) -> AuthBase:
assert self.config.oauth_id is not None, "Gitea requires an OAuth ID to be set" assert self.config.oauth_id is not None, "Gitea requires an OAuth ID to be set"
return GiteaAuth( return GiteaAuth(
"https://" + self.config.instance_url, self.config.instance_url,
self.config.oauth_id, self.config.oauth_id,
self.config.oauth_secret(), self.config.oauth_secret(),
) )
@ -271,7 +273,7 @@ def refresh_projects(config: GiteaConfig, repo_cache_file: Path) -> None:
repos = [] repos = []
for repo in paginated_github_request( 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(), config.token(),
): ):
if not repo["permissions"]["admin"]: if not repo["permissions"]["admin"]:
@ -283,7 +285,7 @@ def refresh_projects(config: GiteaConfig, repo_cache_file: Path) -> None:
try: try:
# Gitea doesn't include topics in the default repo listing, unlike GitHub # Gitea doesn't include topics in the default repo listing, unlike GitHub
topics: list[str] = http_request( 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}"}, headers={"Authorization": f"token {config.token}"},
).json()["topics"] ).json()["topics"]
repo["topics"] = topics repo["topics"] = topics