60 lines
1.8 KiB
Python
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
|