Skip to content

Commit dd5146a

Browse files
committed
Added corresponding files from N4E
1 parent 0e1ae7e commit dd5146a

File tree

2 files changed

+120
-0
lines changed

2 files changed

+120
-0
lines changed

.yamato/netcode-quality.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
netcode-quality:
2+
name: "Netcode - Quality verification"
3+
agent: { type: Unity::VM, flavor: b1.small, image: package-ci/ubuntu-22.04:v4 }
4+
commands:
5+
- python Tools/CI/quality.py
6+
triggers:
7+
expression: pull_request.changes.any match "com.unity.netcode.gameobjects/**"

Tools/CI/quality.py

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
"""Validating PR quality for Netcode PRs"""
2+
#!/usr/bin/env python3
3+
import sys
4+
import json
5+
6+
import lib
7+
8+
def diff_check(diff):
9+
r"""
10+
>>> diff_check('com.unity.netcode.gameobjects/Tests')
11+
True
12+
>>> diff_check('com.unity.netcode.gameobjects/Tests/MyPath')
13+
True
14+
>>> diff_check('com.unity.netcode.gameobjects/Documentation~')
15+
True
16+
>>> diff_check('Packages/com.unity.netcode/Documentation~\nPackages/com.unity.netcode/change')
17+
False
18+
>>> diff_check('Projects/NetcodeSamples/Assets/Tests/PlayMode/SceneLoadingTests.cs')
19+
True
20+
"""
21+
22+
splitlines = diff.splitlines()
23+
has_netcode_changes = False
24+
has_doc_changes = False
25+
for line in splitlines:
26+
if 'com.unity.netcode.gameobjects/Tests' in line:
27+
return True
28+
if 'com.unity.netcode.gameobjects/Documentation~' in line:
29+
has_doc_changes = True
30+
continue
31+
if 'com.unity.netcode.gameobjects/' in line:
32+
has_netcode_changes = True
33+
continue
34+
35+
return (not has_netcode_changes or (not has_netcode_changes and has_doc_changes))
36+
37+
38+
def check_for_tests():
39+
"""Invoke git diff against main then validate against criteria."""
40+
diff = lib.git_diff_main()
41+
42+
if diff_check(diff):
43+
print('Success')
44+
sys.exit(0)
45+
46+
47+
def qa_added(draft, reviews, reviewers):
48+
"""
49+
>>> qa_added(True, [], [])
50+
True
51+
>>> qa_added(False, [], [])
52+
False
53+
>>> qa_added(False, [{'author' : {'login' : 'michalChrobot'}}], [])
54+
True
55+
>>> qa_added(False, [{'author' : {'login' : 'michalChrobota'}}], [])
56+
False
57+
>>> qa_added(False, [], [{'node' : {'requestedReviewer' : 'michalChrobot'}}])
58+
True
59+
>>> qa_added(False, [], [{'node' : {'requestedReviewer' : 'michalChrobota'}}])
60+
False
61+
>>> qa_added(False, [{'author' : {'login' : 'Unity-Technologies/netcode-qa'}}], [])
62+
True
63+
>>> qa_added(False, [{'author' : {'login' : 'Unity-Technologies/netcode-qaa'}}], [])
64+
False
65+
>>> qa_added(False, [], [{'node' : {'requestedReviewer' : 'Unity-Technologies/netcode-qa'}}])
66+
True
67+
>>> qa_added(False, [], [{'node' : {'requestedReviewer' : 'Unity-Technologies/netcode-qaa'}}])
68+
False
69+
"""
70+
if draft:
71+
return True
72+
73+
for review in reviews:
74+
if review['author']['login'] == 'michalChrobot':
75+
return True
76+
if review['author']['login'] == 'Unity-Technologies/netcode-qa':
77+
return True
78+
79+
for review in reviewers:
80+
reviewRequests = json.dumps(review['node']['requestedReviewer'])
81+
if 'michalChrobot' in reviewRequests:
82+
return True
83+
if 'Unity-Technologies/netcode-qa' in reviewRequests:
84+
return True
85+
86+
return False
87+
88+
def check_for_qa():
89+
"""Check PR for having QA assigned."""
90+
repo_owner = 'Unity-Technologies'
91+
repo_name = 'com.unity.netcode.gameobjects'
92+
pr_number = lib.get_env('YAMATO_PR_ID')
93+
94+
github = lib.GitHubGraphql()
95+
96+
pr_reviewers = github.list_pr_reviewers(repo_owner, repo_name, pr_number)
97+
98+
draft = pr_reviewers['isDraft']
99+
reviews = list(pr_reviewers['reviews']['nodes'])
100+
review_requests = list(pr_reviewers['reviewRequests']['edges'])
101+
102+
if qa_added(draft, reviews, review_requests):
103+
print('Success')
104+
sys.exit(0)
105+
106+
if __name__ == '__main__':
107+
check_for_tests()
108+
check_for_qa()
109+
110+
print('##yamato[result [title=Missing tests; summary=No tests or QA was detected. \
111+
Please add test coverage for the changes or @netcode-qa as a reviewer; \
112+
conclusion=failure]]')
113+
sys.exit(-1)

0 commit comments

Comments
 (0)