Support combined builds for Gitea
Signed-off-by: magic_rb <richard@brezak.sk>
This commit is contained in:
parent
e53acc6660
commit
437ebc49b9
|
@ -172,3 +172,12 @@ def model_validate_project_cache(cls: type[_T], project_cache_file: Path) -> lis
|
||||||
|
|
||||||
def model_dump_project_cache(repos: list[_T]) -> str:
|
def model_dump_project_cache(repos: list[_T]) -> str:
|
||||||
return json.dumps([repo.model_dump() for repo in repos])
|
return json.dumps([repo.model_dump() for repo in repos])
|
||||||
|
|
||||||
|
|
||||||
|
def filter_for_combined_builds(reports: Any) -> Any | None:
|
||||||
|
properties = reports[0]["builds"][0]["properties"]
|
||||||
|
|
||||||
|
if "report_status" in properties and not properties["report_status"][0]:
|
||||||
|
return None
|
||||||
|
return reports
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any, Callable
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
from buildbot.config.builder import BuilderConfig
|
from buildbot.config.builder import BuilderConfig
|
||||||
|
@ -15,10 +15,12 @@ from buildbot_gitea.reporter import GiteaStatusPush # type: ignore[import]
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from twisted.logger import Logger
|
from twisted.logger import Logger
|
||||||
from twisted.python import log
|
from twisted.python import log
|
||||||
|
from twisted.internet import defer
|
||||||
|
|
||||||
from .common import (
|
from .common import (
|
||||||
ThreadDeferredBuildStep,
|
ThreadDeferredBuildStep,
|
||||||
atomic_write_file,
|
atomic_write_file,
|
||||||
|
filter_for_combined_builds,
|
||||||
filter_repos_by_topic,
|
filter_repos_by_topic,
|
||||||
http_request,
|
http_request,
|
||||||
model_dump_project_cache,
|
model_dump_project_cache,
|
||||||
|
@ -104,6 +106,26 @@ class GiteaProject(GitProject):
|
||||||
# TODO Gitea doesn't include this information
|
# TODO Gitea doesn't include this information
|
||||||
return False # self.data["owner"]["type"] == "Organization"
|
return False # self.data["owner"]["type"] == "Organization"
|
||||||
|
|
||||||
|
class ModifyingGiteaStatusPush(GiteaStatusPush):
|
||||||
|
def checkConfig(self, modifyingFilter: Callable[[Any], Any | None] = lambda x: x, **kwargs: Any) -> Any:
|
||||||
|
self.modifyingFilter = modifyingFilter
|
||||||
|
|
||||||
|
return super().checkConfig(**kwargs)
|
||||||
|
|
||||||
|
def reconfigService(self, modifyingFilter: Callable[[Any], Any | None] = lambda x: x, **kwargs: Any) -> Any:
|
||||||
|
self.modifyingFilter = modifyingFilter
|
||||||
|
|
||||||
|
return super().reconfigService(**kwargs)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def sendMessage(self, reports: Any) -> Any:
|
||||||
|
reports = self.modifyingFilter(reports)
|
||||||
|
if reports is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
result = yield super().sendMessage(reports)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
class GiteaBackend(GitBackend):
|
class GiteaBackend(GitBackend):
|
||||||
config: GiteaConfig
|
config: GiteaConfig
|
||||||
|
@ -127,11 +149,12 @@ class GiteaBackend(GitBackend):
|
||||||
)
|
)
|
||||||
|
|
||||||
def create_reporter(self) -> ReporterBase:
|
def create_reporter(self) -> ReporterBase:
|
||||||
return GiteaStatusPush(
|
return ModifyingGiteaStatusPush(
|
||||||
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"),
|
||||||
|
modifyingFilter=filter_for_combined_builds,
|
||||||
)
|
)
|
||||||
|
|
||||||
def create_change_hook(self) -> dict[str, Any]:
|
def create_change_hook(self) -> dict[str, Any]:
|
||||||
|
|
|
@ -25,6 +25,7 @@ from twisted.internet import defer
|
||||||
from .common import (
|
from .common import (
|
||||||
ThreadDeferredBuildStep,
|
ThreadDeferredBuildStep,
|
||||||
atomic_write_file,
|
atomic_write_file,
|
||||||
|
filter_for_combined_builds,
|
||||||
filter_repos_by_topic,
|
filter_repos_by_topic,
|
||||||
http_request,
|
http_request,
|
||||||
model_dump_project_cache,
|
model_dump_project_cache,
|
||||||
|
@ -330,13 +331,6 @@ class ModifyingGitHubStatusPush(GitHubStatusPush):
|
||||||
result = yield super().sendMessage(reports)
|
result = yield super().sendMessage(reports)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def filter_for_combined_builds(reports: Any) -> Any | None:
|
|
||||||
properties = reports[0]["builds"][0]["properties"]
|
|
||||||
|
|
||||||
if "report_status" in properties and not properties["report_status"][0]:
|
|
||||||
return None
|
|
||||||
return reports
|
|
||||||
|
|
||||||
class GithubLegacyAuthBackend(GithubAuthBackend):
|
class GithubLegacyAuthBackend(GithubAuthBackend):
|
||||||
auth_type: GitHubLegacyConfig
|
auth_type: GitHubLegacyConfig
|
||||||
|
|
||||||
|
@ -444,6 +438,7 @@ class GithubAppAuthBackend(GithubAuthBackend):
|
||||||
self.project_id_map[props["projectname"]]
|
self.project_id_map[props["projectname"]]
|
||||||
].get()
|
].get()
|
||||||
|
|
||||||
|
|
||||||
return ModifyingGitHubStatusPush(
|
return ModifyingGitHubStatusPush(
|
||||||
token=WithProperties("%(github_token)s", github_token=get_github_token),
|
token=WithProperties("%(github_token)s", github_token=get_github_token),
|
||||||
# Since we dynamically create build steps,
|
# Since we dynamically create build steps,
|
||||||
|
|
Loading…
Reference in a new issue