tubearchivist-server/tubearchivist/web/src/webhook_docker.py

60 lines
1.8 KiB
Python

"""parse and forward docker webhooks"""
from os import environ
import requests
class DockerHook:
"""parse docker webhook and forward to discord"""
HOOK_URL = environ.get("DOCKER_UNSTABLE_HOOK_URL")
COMMITS_URL = "https://api.github.com/repos/bbilly1/tubearchivist/commits"
def __init__(self, docker_hook):
self.docker_hook = docker_hook
self.docker_hook_details = self.docker_hook_parser()
self.commit_url = False
self.first_line_message = False
def docker_hook_parser(self):
"""parse data from docker"""
docker_hook_details = {
"release_tag": self.docker_hook["push_data"]["tag"],
"repo_url": self.docker_hook["repository"]["repo_url"],
"repo_name": self.docker_hook["repository"]["repo_name"]
}
return docker_hook_details
def get_latest_commit(self):
"""get latest commit url from master"""
response = requests.get(f"{self.COMMITS_URL}/master").json()
self.commit_url = response["html_url"]
self.first_line_message = response["commit"]["message"].split("\n")[0]
def forward_message(self):
"""forward message to discrod"""
data = self.build_message()
response = requests.post(self.HOOK_URL, json=data)
if not response.ok:
print(response.json())
return {"success": False}
return {"success": True}
def build_message(self):
"""build message for discord hook"""
release_tag = self.docker_hook_details["release_tag"]
repo_url = self.docker_hook_details["repo_url"]
message = (
f"There is a new **{release_tag}** build " +
f"published to [docker]({repo_url}). Built from:\n" +
self.commit_url)
data = {
"content": message
}
return data