mirror of https://github.com/progval/irctest.git
100 lines
2.5 KiB
Python
100 lines
2.5 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import json
|
||
|
import os
|
||
|
import re
|
||
|
import subprocess
|
||
|
import urllib.request
|
||
|
|
||
|
with open(os.environ["GITHUB_EVENT_PATH"]) as fd:
|
||
|
github_event = json.load(fd)
|
||
|
|
||
|
context_suffix = ""
|
||
|
|
||
|
command = ["netlify", "deploy", "--dir=dashboard/"]
|
||
|
if "pull_request" in github_event and "number" in github_event:
|
||
|
pr_number = github_event["number"]
|
||
|
sha = github_event["after"]
|
||
|
# Aliases can't exceed 37 chars
|
||
|
command.extend(["--alias", f"pr-{pr_number}-{sha[0:10]}"])
|
||
|
context_suffix = " (pull_request)"
|
||
|
else:
|
||
|
ref = github_event["ref"]
|
||
|
m = re.match("refs/heads/(.*)", ref)
|
||
|
if m:
|
||
|
branch = m.group(1)
|
||
|
sha = github_event["head_commit"]["id"]
|
||
|
|
||
|
command.extend(["--alias", f"br-{branch[0:23]}-{sha[0:10]}"])
|
||
|
|
||
|
if branch in ("main", "master"):
|
||
|
command.extend(["--prod"])
|
||
|
else:
|
||
|
context_suffix = " (push)"
|
||
|
else:
|
||
|
# TODO
|
||
|
pass
|
||
|
|
||
|
|
||
|
proc = subprocess.run(command, capture_output=True)
|
||
|
|
||
|
output = proc.stdout.decode()
|
||
|
assert proc.returncode == 0, (output, proc.stderr.decode())
|
||
|
|
||
|
m = re.search("https://[^ ]*--[^ ]*netlify.app", output)
|
||
|
assert m
|
||
|
netlify_site_url = m.group(0)
|
||
|
target_url = f"{netlify_site_url}/index.xhtml"
|
||
|
|
||
|
|
||
|
def send_status() -> None:
|
||
|
statuses_url = github_event["repository"]["statuses_url"].format(sha=sha)
|
||
|
|
||
|
payload = {
|
||
|
"state": "success",
|
||
|
"context": f"Dashboard{context_suffix}",
|
||
|
"description": "Table of all test results",
|
||
|
"target_url": target_url,
|
||
|
}
|
||
|
request = urllib.request.Request(
|
||
|
statuses_url,
|
||
|
data=json.dumps(payload).encode(),
|
||
|
headers={
|
||
|
"Authorization": f'token {os.environ["GITHUB_TOKEN"]}',
|
||
|
"Content-Type": "text/json",
|
||
|
"Accept": "application/vnd.github+json",
|
||
|
},
|
||
|
)
|
||
|
|
||
|
response = urllib.request.urlopen(request)
|
||
|
|
||
|
assert response.status == 201, response.read()
|
||
|
|
||
|
|
||
|
send_status()
|
||
|
|
||
|
|
||
|
def send_pr_comment() -> None:
|
||
|
comments_url = github_event["pull_request"]["_links"]["comments"]["href"]
|
||
|
|
||
|
payload = {
|
||
|
"body": f"[Test results]({target_url})",
|
||
|
}
|
||
|
request = urllib.request.Request(
|
||
|
comments_url,
|
||
|
data=json.dumps(payload).encode(),
|
||
|
headers={
|
||
|
"Authorization": f'token {os.environ["GITHUB_TOKEN"]}',
|
||
|
"Content-Type": "text/json",
|
||
|
"Accept": "application/vnd.github+json",
|
||
|
},
|
||
|
)
|
||
|
|
||
|
response = urllib.request.urlopen(request)
|
||
|
|
||
|
assert response.status == 201, response.read()
|
||
|
|
||
|
|
||
|
if "pull_request" in github_event:
|
||
|
send_pr_comment()
|