Skip to content

Commit de4de9a

Browse files
Fix forgejo base url (#143)
* fix forgejo base_url * smoke tests for forgejo
1 parent 0c344e1 commit de4de9a

File tree

5 files changed

+129
-37
lines changed

5 files changed

+129
-37
lines changed

.flake8

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[flake8]
22
max-line-length = 120
3-
exclude = .git,__pycache__,docs
3+
exclude = .git,__pycache__,docs,venv
44
statistics = True
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
name: '[Forgejo] Smoke Tests'
2+
3+
on:
4+
push:
5+
branches: [ "master" ]
6+
pull_request:
7+
branches: [ "master" ]
8+
9+
jobs:
10+
smoke-test:
11+
strategy:
12+
fail-fast: false
13+
matrix:
14+
args:
15+
- "--invites"
16+
- "--commits"
17+
- "--pull_requests"
18+
- "--issues"
19+
- "--wikis"
20+
- "--contributors"
21+
- "--workflow_runs"
22+
23+
runs-on: ubuntu-latest
24+
25+
steps:
26+
- uses: actions/checkout@v4
27+
28+
- name: Cache pip
29+
uses: actions/cache@v3
30+
with:
31+
path: ~/.cache/pip
32+
key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
33+
restore-keys: |
34+
${{ runner.os }}-pip-
35+
36+
- name: Install dependencies
37+
run: pip install -r requirements.txt
38+
39+
- name: Create list.txt
40+
run: echo "harabat/pyforgejo" > list.txt
41+
42+
- name: Run test
43+
run: |
44+
python3 main.py ${{ matrix.args }} --token ${{ secrets.TEST_TOKEN_FORGEJO }} --base_url https://codeberg.org/api/v1 --list list.txt --out out.csv --branch master
45+
46+
- name: Check if out.csv exists
47+
run: ls out.csv
48+
49+
- name: Fail if out.csv does not exist
50+
if: failure()
51+
run: exit 1
52+
53+
- name: Show out.csv
54+
run: cat out.csv
55+
56+
- name: Check header in first line
57+
run: |
58+
case "${{ matrix.args }}" in
59+
--invites)
60+
HEADER="repository name,invited login,invite creation date,invitation url"
61+
;;
62+
--commits)
63+
HEADER="repository name,author name,author login,author email,date and time,changed files,commit id,branch"
64+
;;
65+
--pull_requests)
66+
HEADER="repository name,title,id,state,commit into,commit from,created at,creator name,creator login,creator email,changed files,comment body,comment created at,comment author name,comment author login,comment author email,merger name,merger login,merger email,source branch,target branch,assignee story,related issues,labels,milestone"
67+
;;
68+
--issues)
69+
HEADER="repository name,number,title,state,task,created at,creator name,creator login,creator email,closer name,closer login,closer email,closed at,comment body,comment created at,comment author name,comment author login,comment author email,assignee story,connected pull requests,labels,milestone"
70+
;;
71+
--wikis)
72+
HEADER="repository name,author name,author login,datetime,page,action,revision id,added lines,deleted lines"
73+
;;
74+
--contributors)
75+
HEADER="repository name,login,name,email,url,permissions,total commits,node id,type,bio,site admin"
76+
;;
77+
--workflow_runs)
78+
HEADER="repository name,display title,event,head branch,head sha,name,path,started at,total duration,conclusion,status,url"
79+
;;
80+
*)
81+
echo "Unknown ARG: '${{ matrix.args }}'"
82+
exit 1
83+
;;
84+
esac
85+
86+
FIRST_LINE=$(head -n 1 out.csv)
87+
88+
if [[ "$FIRST_LINE" == "$HEADER"* ]]; then
89+
echo "Header is valid for ${{ matrix.args }}"
90+
else
91+
echo "::error::Header is invalid for ${{ matrix.args }}"
92+
echo "Expected: $HEADER"
93+
echo "Actual: $FIRST_LINE"
94+
exit 1
95+
fi

.github/workflows/smoke-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Smoke Tests
1+
name: '[Github] Smoke Tests'
22

33
on:
44
push:

src/ForgejoRepoAPI.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ def get_workflow_runs(self, repo) -> list[WorkflowRun]:
275275
return []
276276

277277
def get_base_url(self) -> str:
278-
return self.client.base_url
278+
return self.client._client_wrapper.get_base_url()
279279

280280

281281
# Точка входа для тестирования

src/git_logger.py

Lines changed: 31 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -88,39 +88,36 @@ def get_next_binded_repo(clients: Clients, repositories: list[str]):
8888
def get_assignee_story(git_object, client, token, repository):
8989
assignee_result = ""
9090

91-
try:
92-
repo_owner = repository.owner.login
93-
repo_name = repository.name
94-
issue_index = git_object._id # Для pull request и issue одинаково
95-
96-
base_url = client.get_base_url().rstrip('/')
97-
98-
url = f"{base_url}/repos/{repo_owner}/{repo_name}/issues/{issue_index}/timeline"
99-
headers = {
100-
"Authorization": f"Bearer {token}" if client is GitHubRepoAPI else f"token {token}",
101-
"Accept": "application/json"
102-
}
103-
104-
response = requests.get(url, headers=headers)
105-
if response.status_code != 200:
106-
raise Exception(f"Failed to fetch issue timeline: {response.status_code}, {response.text}")
107-
108-
events = response.json()
109-
110-
for event in events:
111-
if event.get('event') in ["assigned", "unassigned"]:
112-
date = event.get('created_at')
113-
assigner = event.get('actor', {}).get('login', 'unknown')
114-
assignee = event.get('assignee', {}).get('login', 'unknown')
115-
116-
assignee_result += f"{date}: {assigner} -"
117-
if event['event'] == "unassigned":
118-
assignee_result += "/"
119-
assignee_result += f"> {assignee}; "
120-
121-
sleep(TIMEDELTA)
122-
123-
except Exception as e:
124-
print(f"get_assignee_story(): error {e}")
91+
repo_owner = repository.owner.login
92+
repo_name = repository.name
93+
# Для pull request и issue одинаково
94+
issue_index = (
95+
getattr(git_object, "number", None)
96+
or getattr(git_object, "index", None)
97+
or getattr(git_object, "_id", None)
98+
)
99+
100+
base_url = client.get_base_url().rstrip('/')
101+
102+
url = f"{base_url}/repos/{repo_owner}/{repo_name}/issues/{issue_index}/timeline"
103+
headers = {
104+
"Authorization": f"Bearer {token}" if client is GitHubRepoAPI else f"token {token}",
105+
"Accept": "application/json"
106+
}
107+
108+
response = requests.get(url, headers=headers)
109+
if response.status_code != 200:
110+
raise Exception(f"Failed to fetch issue timeline: {response.status_code}, {response.text}")
111+
112+
events = response.json()
113+
114+
results = [
115+
f"{event.get('created_at')}: {event.get('actor', {}).get('login', 'unknown')} -"
116+
+ ("/" if event.get('event') == "unassigned" else "")
117+
+ f"> {event.get('assignee', {}).get('login', 'unknown')}; "
118+
for event in events
119+
if event.get('event') in ["assigned", "unassigned"]
120+
]
121+
assignee_result = ''.join(results)
125122

126123
return assignee_result

0 commit comments

Comments
 (0)