WoodpeckerRunner & some VCS changes
This commit is contained in:
parent
34ee5f8754
commit
312631f0b5
2 changed files with 54 additions and 35 deletions
|
|
@ -12,23 +12,50 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
|
||||
class WoodpeckerRunner(Process):
|
||||
def __init__(self, event: WoodpeckerEvent):
|
||||
super().__init__()
|
||||
def __init__(self, git: GitService, docker: DockerService, success_callback=None, error_callback=None):
|
||||
super().__init__(daemon=True)
|
||||
self._git = git
|
||||
self._docker = docker
|
||||
self._success_callback = success_callback
|
||||
self._error_callback = error_callback
|
||||
self._event: WoodpeckerEvent | None = None
|
||||
|
||||
def process_event(self, event: WoodpeckerEvent):
|
||||
self._event = event
|
||||
self.start()
|
||||
|
||||
def run(self):
|
||||
super().run()
|
||||
"""
|
||||
event: WebhookEvent = task.payload
|
||||
# TODO: persist event data
|
||||
commit_hash = self._git.get_new_commit_hash()
|
||||
if commit_hash != event.commit:
|
||||
logger.warning(f"Commit hash mismatch: {commit_hash} != {event.commit}")
|
||||
return Result(task.id, False, "Commit hash mismatch")
|
||||
# TODO: persist commit data
|
||||
service = self._get_service(event.files)
|
||||
try:
|
||||
service = self.get_service(self._event.files)
|
||||
if service is None:
|
||||
logger.info("No service found.")
|
||||
return self._success_callback()
|
||||
|
||||
"""
|
||||
self._git.checkout(self._event.commit)
|
||||
"""
|
||||
TODO:
|
||||
check for *.mo.* files
|
||||
subs mo from pass
|
||||
docker compose up -d -f service/docker-compose.yml
|
||||
"""
|
||||
|
||||
return self._success_callback()
|
||||
except Exception as e:
|
||||
return self._error_callback(e)
|
||||
|
||||
def get_service(self, files: list[str]) -> str | None:
|
||||
supported_files = []
|
||||
for f in files:
|
||||
f_parts = f.split("/")
|
||||
if f_parts[0] in ["compose", "files"]:
|
||||
supported_files.append(f[1])
|
||||
match len(set(supported_files)):
|
||||
case 0:
|
||||
return None
|
||||
case 1:
|
||||
return supported_files[0]
|
||||
case _:
|
||||
raise Exception("Multiple services are not supported.")
|
||||
|
||||
|
||||
@injectable(singleton=True)
|
||||
|
|
@ -52,7 +79,9 @@ class Woodpecker:
|
|||
self._start_runner(event)
|
||||
|
||||
def _start_runner(self, event: WoodpeckerEvent):
|
||||
pass
|
||||
with self._lock:
|
||||
self._runner = WoodpeckerRunner(self._git, self._docker, self._on_runner_completed)
|
||||
self._runner.process_event(event)
|
||||
|
||||
def _on_runner_completed(self):
|
||||
logger.info("Runner completed.")
|
||||
|
|
@ -62,3 +91,12 @@ class Woodpecker:
|
|||
if len(self._pending) > 0:
|
||||
event = self._pending.popleft()
|
||||
self._start_runner(event)
|
||||
|
||||
def _on_runner_error(self, t: Exception):
|
||||
logger.error(f"Runner error: {t}", exc_info=True)
|
||||
self._runner.join()
|
||||
with self._lock:
|
||||
self._runner = None
|
||||
if len(self._pending) > 0:
|
||||
event = self._pending.popleft()
|
||||
self._start_runner(event)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue