From 02ecacbdbd98bdcd1fe591f16bda91364082801c Mon Sep 17 00:00:00 2001 From: driazati Date: Wed, 26 Jan 2022 12:04:35 -0800 Subject: [PATCH] Fix parsing previous commits --- .github/workflows/monitor_failures.yml | 2 +- git_utils.py | 10 +++++- ping_on_failure.py | 44 ++++++++++++++++---------- statuses.json | 2 +- test.py | 22 +++++++++++++ 5 files changed, 60 insertions(+), 20 deletions(-) mode change 100644 => 100755 ping_on_failure.py create mode 100644 test.py diff --git a/.github/workflows/monitor_failures.yml b/.github/workflows/monitor_failures.yml index 038fff32f..3cca8392b 100644 --- a/.github/workflows/monitor_failures.yml +++ b/.github/workflows/monitor_failures.yml @@ -39,4 +39,4 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | set -eux - python ping_on_failure.py + python ping_on_failure.py --push diff --git a/git_utils.py b/git_utils.py index 530abe802..fcc03654d 100644 --- a/git_utils.py +++ b/git_utils.py @@ -36,7 +36,9 @@ def headers(self): } def graphql(self, query: str) -> Dict[str, Any]: - return self._post("https://api.github.com/graphql", {"query": query}) + return self._post( + "https://api.github.com/graphql", {"query": compress_query(query)} + ) def _post(self, full_url: str, body: Dict[str, Any]) -> Dict[str, Any]: print("Requesting POST to", full_url, "with", body) @@ -70,6 +72,12 @@ def delete(self, url: str) -> Dict[str, Any]: return response +def compress_query(query: str) -> str: + query = query.replace("\n", "") + query = re.sub("\s+", " ", query) + return query + + def parse_remote(remote: str) -> Tuple[str, str]: """ Get a GitHub (user, repo) pair out of a git remote diff --git a/ping_on_failure.py b/ping_on_failure.py old mode 100644 new mode 100755 index 86fe97492..380126040 --- a/ping_on_failure.py +++ b/ping_on_failure.py @@ -19,13 +19,11 @@ import os import json import argparse -import tempfile import requests from pathlib import Path -from urllib import request from typing import Any, Dict -from git_utils import git, GitHubRepo, parse_remote +from git_utils import git, GitHubRepo REPO_ROOT = Path(__file__).resolve().parent @@ -130,7 +128,7 @@ def check_commit(commit: Dict[str, Any]) -> bool: def message_diff(old, new): def find_old(oid): for c in old: - if c == old["oid"]: + if c["oid"] == oid: return c return None @@ -168,14 +166,20 @@ def find_old(oid): def discord(body: Dict[str, Any]) -> Dict[str, Any]: url = os.environ["DISCORD_WEBHOOK"] r = requests.post(url, json=body) - print(r.content) + + if r.status_code >= 300 or r.status_code < 200: + raise RuntimeError("Failed to send webhook: ", body, r, r.content) + else: + print(f"Send message for {body}: {r} ({r.content})") if __name__ == "__main__": help = "Ping discord on CI failures" parser = argparse.ArgumentParser(description=help) - parser.add_argument("--user", default="apache", help="ssh remote to parse") - parser.add_argument("--repo", default="tvm", help="ssh remote to parse") + parser.add_argument("--user", default="apache", help="github repo owner") + parser.add_argument("--repo", default="tvm", help="github repo") + parser.add_argument("--push", action="store_true", help="push changes to github") + parser.add_argument("--statuses", help="status json for testing") args = parser.parse_args() user = args.user @@ -193,11 +197,18 @@ def discord(body: Dict[str, Any]) -> Dict[str, Any]: all_data = [] - with open(REPO_ROOT / "statuses.json") as f: - old_all_data = json.load(f) + if args.statuses: + old_all_data = json.loads(args.statuses) + else: + with open(REPO_ROOT / "statuses.json") as f: + old_all_data = json.load(f) while i < MAX_COMMITS_TO_CHECK: + # Backstop to prevent looking through all the past commits + i += len(commits) + # Check each commit + print(f"Checking {len(commits)} commits") for commit in commits: all_data.append(check_commit(commit)) @@ -207,15 +218,13 @@ def discord(body: Dict[str, Any]) -> Dict[str, Any]: ] if len(edges) == 0: break - else: + elif i < MAX_COMMITS_TO_CHECK: q = commits_query(user, repo, cursor=edges[-1]["cursor"]) r = github.graphql(q) commits = r["data"]["repository"]["defaultBranchRef"]["target"]["history"][ "nodes" ] - # Backstop to prevent looking through all the past commits - i += len(commits) if old_all_data != all_data: message_diff(old_all_data, all_data) @@ -223,8 +232,9 @@ def discord(body: Dict[str, Any]) -> Dict[str, Any]: with open(REPO_ROOT / "statuses.json", "w") as f: json.dump(all_data, f) - git(["add", "statuses.json"]) - git(["config", "user.email", "email@example.com"]) - git(["config", "user.name", "Your Name"]) - git(["commit", "-mupdate status"]) - git(["push"]) + if args.push: + git(["add", "statuses.json"]) + git(["config", "user.email", "95660001+tvm-bot@users.noreply.github.com"]) + git(["config", "user.name", "tvm-bot"]) + git(["commit", "-mUpdate `status.json`"]) + git(["push"]) diff --git a/statuses.json b/statuses.json index 3ef0f3f9e..0967ef424 100644 --- a/statuses.json +++ b/statuses.json @@ -1 +1 @@ -[{"oid": "2830c9690ae7a2406cd618d6aa03df3f40277dc7", "statuses": [{"name": "tvm-ci/branch", "status": "PENDING", "url": "https://ci.tlcpack.ai/job/tvm/job/main/2367/display/redirect"}], "messageHeadline": "[skip ci][Docker, CI] Update DGL installation, temp disable DGL tutor\u2026"}, {"oid": "6720d3593d4dac6015418d4b7e9ad875bbf0b0a2", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4930416476?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4930416330?check_suite_focus=true"}, {"name": "tvm-ci/branch", "status": "ERROR", "url": "https://ci.tlcpack.ai/job/tvm/job/main/2366/display/redirect"}], "messageHeadline": "[Runtime][PipelineExecutor] Add Pipeline Executor Interface (#10010)"}, {"oid": "73bbfbb47819bb9f2f5015193533b4e01900fa4b", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4926915491?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4926915378?check_suite_focus=true"}], "messageHeadline": "[Hexagon] Do not auto-build apps when building TVM (#9970)"}, {"oid": "6f2b35feb59826b010b131722c5b7d47079df8a9", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4926801457?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4926801556?check_suite_focus=true"}], "messageHeadline": "[QNN] Add qnn.rsqrt op (#9982)"}, {"oid": "65b4b09381c52745e7bdfb2d05c91e962a4eb3ff", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4926611846?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4926611938?check_suite_focus=true"}], "messageHeadline": "[CMSIS-NN] Update microNPU demo to include offloading to CMSIS-NN (#9\u2026"}, {"oid": "d06644178da46f7c7a0dc4bc2c63e8a9ebfaae7f", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4924578866?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4924578525?check_suite_focus=true"}, {"name": "tvm-ci/branch", "status": "ERROR", "url": "https://ci.tlcpack.ai/job/tvm/job/main/2475/display/redirect"}], "messageHeadline": "[PTX-MMA] Add full PTX MMA code generation support (#9909)"}, {"oid": "74a2fa80464f91987506e3f95d877ad1a2959ba6", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4915658149?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4915658210?check_suite_focus=true"}, {"name": "tvm-ci/branch", "status": "SUCCESS", "url": "https://ci.tlcpack.ai/job/tvm/job/main/2472/display/redirect"}], "messageHeadline": "[microNPU] Add support for requantize (#9910)"}, {"oid": "de01c3e2a732613f920264c2ae73874ade3e16f6", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4913560000?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4913559964?check_suite_focus=true"}, {"name": "tvm-ci/branch", "status": "SUCCESS", "url": "https://ci.tlcpack.ai/job/tvm/job/main/2473/display/redirect"}], "messageHeadline": "[MetaSchedule] Schedule Rule: Parallelize-Vectorize-Unroll (#10033)"}, {"oid": "cc67040e62b74457fa971f26f57f02de5108ce00", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4912217655?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4912217680?check_suite_focus=true"}, {"name": "tvm-ci/branch", "status": "SUCCESS", "url": "https://ci.tlcpack.ai/job/tvm/job/main/2467/display/redirect"}], "messageHeadline": "[MetaSchedule] Post Processor: Rewrite Unbound Block (#10027)"}, {"oid": "fc1814e675e1e8f1dff31d5e7ce8d75cb8bc4a3e", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4912215196?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4912215221?check_suite_focus=true"}, {"name": "tvm-ci/branch", "status": "SUCCESS", "url": "https://ci.tlcpack.ai/job/tvm/job/main/2466/display/redirect"}], "messageHeadline": "[MetaSchedule] Mutator: Mutate compute location (#10028)"}, {"oid": "7bfb11bbc9bf376473d70fc0a331481db8b0a5d9", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4910178721?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4910178743?check_suite_focus=true"}, {"name": "tvm-ci/branch", "status": "SUCCESS", "url": "https://ci.tlcpack.ai/job/tvm/job/main/2462/display/redirect"}], "messageHeadline": "[Flaky] Skip test_qlinear_average_pool (#10030)"}, {"oid": "d35b858ceb5c7157c3faa78c88eb8f8971ba5e96", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4909277450?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4909277441?check_suite_focus=true"}, {"name": "tvm-ci/branch", "status": "SUCCESS", "url": "https://ci.tlcpack.ai/job/tvm/job/main/2461/display/redirect"}], "messageHeadline": "[CUDNN] Support gradient kernels (#9986)"}, {"oid": "64f2939290615eeec467894658e13b4375082361", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4909148695?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4909148712?check_suite_focus=true"}, {"name": "tvm-ci/branch", "status": "SUCCESS", "url": "https://ci.tlcpack.ai/job/tvm/job/main/2471/display/redirect"}], "messageHeadline": "[MetaSchedule] disallow_dynamic_loop (#9997)"}, {"oid": "9a6423cd42fb03d8e09ec389b9ecb95935d1fa80", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4909035352?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4909035379?check_suite_focus=true"}, {"name": "tvm-ci/branch", "status": "SUCCESS", "url": "https://ci.tlcpack.ai/job/tvm/job/main/2459/display/redirect"}], "messageHeadline": "Add user-configurable backtrace limit (#10025)"}, {"oid": "89fa2419e218ce979768774ae16b8dbf3c7d06d4", "statuses": [{"name": "CI / MacOS", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4908240146?check_suite_focus=true"}, {"name": "CI / Windows", "status": "SUCCESS", "url": "https://github.com/apache/tvm/runs/4908240084?check_suite_focus=true"}, {"name": "tvm-ci/branch", "status": "SUCCESS", "url": "https://ci.tlcpack.ai/job/tvm/job/main/2458/display/redirect"}], "messageHeadline": "[BugFix][TIR] Fix cross-thread reduction when single reduction loop w\u2026"}] \ No newline at end of file +{} diff --git a/test.py b/test.py new file mode 100644 index 000000000..a169884ae --- /dev/null +++ b/test.py @@ -0,0 +1,22 @@ +import subprocess +import json +import pathlib + +REPO_ROOT = pathlib.Path(__file__).resolve().parent + + +def test_ping_failures(): + reviewers_script = REPO_ROOT / "ping_on_failure.py" + + def run(): + data = {} + proc = subprocess.run( + [str(reviewers_script), "--statuses", json.dumps(data)], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + encoding="utf-8", + ) + if proc.returncode != 0: + raise RuntimeError(f"Process failed:\nstdout:\n{proc.stdout}\n\nstderr:\n{proc.stderr}") + + run()