Skip to content

Commit 0d7a1c1

Browse files
authored
Merge pull request #4 from Vacant2333/main
feat: add kubernetes deployment and get owners by OWNERS file
2 parents 12b23cb + 4202022 commit 0d7a1c1

File tree

5 files changed

+124
-18
lines changed

5 files changed

+124
-18
lines changed

bots/pr_review_request/bot.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,20 @@
77

88
class PRReviewRequestBot(bot.GitAutomatorBot):
99
def handle_action(self, _: str):
10-
maintainers = helper.get_owners(self.repo_client)
11-
pr_creator = self.webhook_body['sender']['login']
12-
if pr_creator in maintainers:
13-
maintainers.remove(pr_creator)
10+
try:
11+
maintainers = helper.get_owners(self.repo_client)
12+
pr_creator = self.webhook_body['sender']['login']
13+
if pr_creator in maintainers:
14+
maintainers.remove(pr_creator)
1415

15-
if len(maintainers) == 0:
16-
return
17-
if len(maintainers) > 2:
18-
maintainers = random.sample(maintainers, 2)
19-
pull_request = self.repo_client.get_pull(self.webhook_body['pull_request']['number'])
20-
pull_request.create_review_request(reviewers=maintainers)
16+
if len(maintainers) == 0:
17+
return
18+
if len(maintainers) > 2:
19+
maintainers = random.sample(maintainers, 2)
20+
pull_request = self.repo_client.get_pull(self.webhook_body['pull_request']['number'])
21+
pull_request.create_review_request(reviewers=maintainers)
22+
except Exception as e:
23+
print("error:", e)
2124

2225
@property
2326
def name(self) -> str:

bots/utils/ai_robot.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def get_label(self, context: str, label_list: list) -> dict:
2121
[{labe_name, label color, label description}, more...]"},
2222
{"role": "user", "content": f"context is: \n{context}\n label's list ls:\n{json.dumps(label_list)}"}
2323
],
24-
model="gpt-4",
24+
model="qwen-plus",
2525
)
2626
resp = chat_completion.choices[0].message.content
2727
return json.loads(resp)
@@ -37,7 +37,7 @@ def check_release_note(self, context: str) -> str:
3737
either empty or incomplete, please consider: `{content}`', {content} shouldn't contain the markdown things, and it should be wrapped in ``, not ''"},
3838
{"role": "user", "content": f"context is: \n{context}"}
3939
],
40-
model="gpt-4",
40+
model="qwen-plus",
4141
)
4242
resp = chat_completion.choices[0].message.content
4343
return resp

bots/utils/helper.py

Lines changed: 58 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,71 @@
11
import yaml
2-
32
from github import Repository
43

5-
def get_owners(repo_client : Repository.Repository) -> list:
4+
def get_enable_plugin(repo_client: Repository.Repository) -> list:
65
try:
76
file = repo_client.get_contents(".github/gitautomator.yaml")
87
config = yaml.safe_load(file.decoded_content.decode())
9-
return config['owners']
8+
return config['plugins']
109
except Exception as _:
1110
return []
1211

13-
def get_enable_plugin(repo_client: Repository.Repository) -> list:
12+
def expand_aliases(owners_list, aliases_map):
13+
"""
14+
Expands any aliases found in the owners_list using the provided aliases_map.
15+
If the item exists in aliases_map and is a list, its users are added;
16+
otherwise, the item is added as is.
17+
"""
18+
expanded = set()
19+
for item in owners_list:
20+
if item in aliases_map and isinstance(aliases_map[item], list):
21+
expanded.update(aliases_map[item])
22+
else:
23+
expanded.add(item)
24+
return expanded
25+
26+
def get_owners(repo_client: Repository.Repository) -> list:
27+
"""
28+
Combines owners from three sources:
29+
1. .github/gitautomator.yaml (expects an 'owners' key with a list of usernames)
30+
2. OWNERS_ALIASES (mapping from an alias to a list of real user names)
31+
3. OWNERS (expected to contain 'approvers' and/or 'reviewers' as lists)
32+
33+
Returns a merged list of owner usernames.
34+
"""
35+
owners_set = set()
36+
aliases_map = {}
37+
38+
# 1. Read .github/gitautomator.yaml for "owners"
1439
try:
1540
file = repo_client.get_contents(".github/gitautomator.yaml")
1641
config = yaml.safe_load(file.decoded_content.decode())
17-
return config['plugins']
42+
if config and 'owners' in config and isinstance(config['owners'], list):
43+
owners_set.update(config['owners'])
1844
except Exception as _:
19-
return []
45+
pass
46+
47+
# 2. Read OWNERS_ALIASES for alias mapping
48+
try:
49+
file = repo_client.get_contents("OWNERS_ALIASES")
50+
alias_data = yaml.safe_load(file.decoded_content.decode())
51+
if isinstance(alias_data, dict):
52+
if "aliases" in alias_data and isinstance(alias_data["aliases"], dict):
53+
aliases_map = alias_data["aliases"]
54+
else:
55+
aliases_map = alias_data
56+
except Exception as _:
57+
pass
58+
59+
# 3. Read OWNERS and expand the "approvers" and "reviewers" fields using aliases_map
60+
try:
61+
file = repo_client.get_contents("OWNERS")
62+
owners_data = yaml.safe_load(file.decoded_content.decode())
63+
if isinstance(owners_data, dict):
64+
approvers = owners_data.get("approvers", [])
65+
reviewers = owners_data.get("reviewers", [])
66+
owners_set.update(expand_aliases(approvers, aliases_map))
67+
owners_set.update(expand_aliases(reviewers, aliases_map))
68+
except Exception as _:
69+
pass
70+
71+
return list(owners_set)

deployment.yaml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: gitautomator
5+
spec:
6+
replicas: 1
7+
selector:
8+
matchLabels:
9+
app: gitautomator
10+
template:
11+
metadata:
12+
labels:
13+
app: gitautomator
14+
spec:
15+
containers:
16+
- name: gitautomator
17+
image: cesign/gitautomator:v0.0.13
18+
env:
19+
- name: APP_ID
20+
value: "${APP_ID}"
21+
- name: CHATGPT_URL
22+
value: "${CHATGPT_URL}"
23+
- name: OPENAI_KEY
24+
value: "${OPENAI_KEY}"
25+
volumeMounts:
26+
- name: gitautomator-pem
27+
mountPath: /etc/gitautomator/app.pem
28+
subPath: app.pem
29+
- name: seemio
30+
image: cesign/seemio:v0.0.1
31+
env:
32+
- name: SEEMIO_URL
33+
value: "${SEEMIO_URL}"
34+
command:
35+
- sh
36+
- -c
37+
- "smee -u $SEEMIO_URL --port 5000"
38+
volumes:
39+
- name: gitautomator-pem
40+
secret:
41+
secretName: gitautomator-pem
42+
---
43+
apiVersion: v1
44+
kind: Secret
45+
metadata:
46+
name: gitautomator-pem
47+
type: Opaque
48+
data:
49+
# Replace the value below with your base64-encoded app.pem file content.
50+
app.pem: <base64-encoded-app.pem-content>

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ gitpython==3.1.32
44
PyGithub==2.2.0
55
PyYAML==6.0.1
66
Requests==2.31.0
7+
httpx==0.27.2

0 commit comments

Comments
 (0)