Skip to content

Commit 5657f7f

Browse files
[CI] Add Skeleton for Premerge Advisor Server
This patch adds a skeleton for the premerge advisor server. Currently we just add some endpoints with mostly dummy implementations. Having a skeleton enables setting up the infrastructure to run the server and also adding infrastructure in the monorepo to connect. Reviewers: cmtice Reviewed By: cmtice Pull Request: #605
1 parent 779f7f7 commit 5657f7f

File tree

5 files changed

+87
-0
lines changed

5 files changed

+87
-0
lines changed

premerge/advisor/advisor_lib.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from typing import TypedDict
2+
3+
4+
class TestFailure(TypedDict):
5+
name: str
6+
message: str
7+
8+
9+
class FailureExplanation(TypedDict):
10+
name: str
11+
explained: bool
12+
reason: str | None
13+
14+
15+
def upload_failures(test_failures: list[TestFailure]):
16+
pass
17+
18+
19+
def explain_failures(test_failures: list[TestFailure]) -> list[FailureExplanation]:
20+
explanations = []
21+
for test_failure in test_failures:
22+
explanations.append(
23+
{"name": test_failure["name"], "explained": False, "reason": None}
24+
)
25+
return explanations
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import unittest
2+
3+
import advisor_lib
4+
5+
6+
class AdvisorLibTest(unittest.TestCase):
7+
def test_upload_failures(self):
8+
failures = [{"name": "a.ll", "message": "failed"}]
9+
advisor_lib.upload_failures(failures)
10+
11+
def test_explain_failures(self):
12+
failures = [{"name": "a.ll", "message": "failed"}]
13+
self.assertListEqual(
14+
advisor_lib.explain_failures(failures),
15+
[{"name": "a.ll", "explained": False, "reason": None}],
16+
)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#
2+
# This file is autogenerated by pip-compile with Python 3.13
3+
# by the following command:
4+
#
5+
# pip-compile --output-file=requirements.lock.txt ./requirements.txt
6+
#
7+
blinker==1.9.0
8+
# via flask
9+
click==8.3.0
10+
# via flask
11+
flask==3.1.2
12+
# via -r requirements.txt
13+
itsdangerous==2.2.0
14+
# via flask
15+
jinja2==3.1.6
16+
# via flask
17+
markupsafe==3.0.3
18+
# via
19+
# flask
20+
# jinja2
21+
# werkzeug
22+
werkzeug==3.1.3
23+
# via flask

premerge/advisor/requirements.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
flask==3.1.2
2+

premerge/advisor/server.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import flask
2+
from flask import Flask
3+
4+
import advisor_lib
5+
6+
app = Flask(__name__)
7+
8+
9+
@app.route("/upload", methods=["POST"])
10+
def upload():
11+
advisor_lib.upload_failures(flask.request.json)
12+
return flask.Response(status=204)
13+
14+
15+
@app.route("/explain")
16+
def explain():
17+
return advisor_lib.explain_failures(flask.request.json)
18+
19+
20+
if __name__ == "__main__":
21+
app.run(host="0.0.0.0", port=5000)

0 commit comments

Comments
 (0)