Skip to content

Commit 21f5b17

Browse files
committed
github actions: Use python PR check script
jira LE-2214 Obsoletes the old ruby PR check script
1 parent c053ab5 commit 21f5b17

File tree

3 files changed

+148
-153
lines changed

3 files changed

+148
-153
lines changed
+142
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
4+
import sys
5+
import subprocess
6+
import os
7+
import re
8+
9+
def file_prepend(file, str):
10+
with open(file, 'r') as fd:
11+
contents = fd.read()
12+
new_contents = str + contents
13+
14+
# Overwrite file but now with prepended string on it
15+
with open(file, 'w') as fd:
16+
fd.write(new_contents)
17+
18+
def process_git_request(fname, target_branch, source_branch, prj_dir):
19+
retcode = 0 # presume success
20+
# print(f"Opening file {fname}")
21+
file = open(fname, "w")
22+
working_dir = prj_dir
23+
# print(f"Working Dir : {working_dir}")
24+
os.chdir(working_dir)
25+
# print(f"pwd : {os.getcwd()}")
26+
git_cmd = f"git log --oneline --no-abbrev-commit origin/{target_branch}..origin/{source_branch}"
27+
# print(git_cmd)
28+
loglines_to_check = 13
29+
try:
30+
out, err = subprocess.Popen(git_cmd, shell=True, stdout=subprocess.PIPE,
31+
stderr=subprocess.PIPE, text=True).communicate()
32+
if err:
33+
print(f"Command error output is {err}")
34+
file.write(f"Command error output is {err}")
35+
file.close()
36+
return 1
37+
38+
output_lines = out.splitlines()
39+
commit_sha = ""
40+
# we just want the commit sha IDs
41+
for x in output_lines:
42+
# print(f"This is output_lines {x}")
43+
if not bool(re.search(r'[^\x30-\x39a-fA-F]', x)): # equivalent to Ruby's !x[/\H/]
44+
continue
45+
else:
46+
y = x.split()
47+
# print(f"This is y {y}")
48+
commit_sha = str(y[0])
49+
# print("Found a commit in line ", commit_sha)
50+
51+
git_cmd = "git show " + commit_sha
52+
gitlog_out, gitlog_err = subprocess.Popen(git_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True).communicate()
53+
54+
loglines = gitlog_out.splitlines()
55+
lines_counted = 0
56+
local_diffdiff_sha = commit_sha
57+
upstream_diffdiff_sha = ""
58+
upstream_diff = False
59+
60+
for logline in loglines:
61+
# print(f"Processing logline {logline}")
62+
lines_counted += 1
63+
if lines_counted == 1:
64+
file.write("Merge Request sha: " + local_diffdiff_sha)
65+
file.write("\n")
66+
if lines_counted == 2: # email address
67+
if "ciq.com" not in logline.lower():
68+
# Bad Author
69+
s = f"error:\nBad {logline}\n"
70+
print(s)
71+
file.write(s)
72+
file.close()
73+
return retcode
74+
if lines_counted > 1:
75+
if "jira" in logline.lower():
76+
file.write("\t" + logline + "\n")
77+
78+
if "upstream-diff" in logline.lower():
79+
upstream_diff = True
80+
81+
if "commit" in logline.lower():
82+
commit_sha = re.search(r'[0-9a-f]{40}', logline)
83+
upstream_diffdiff_sha = str(commit_sha.group(0)) if commit_sha else ""
84+
# print("Upstream : " + upstream_diffdiff_sha)
85+
if upstream_diffdiff_sha:
86+
file.write("\tUpstream sha: " + upstream_diffdiff_sha)
87+
file.write("\n")
88+
89+
if lines_counted > loglines_to_check: # Everything we need should be in the first loglines_to_check lines
90+
# print(f"Breaking after {loglines_to_check} lines of commit checking")
91+
break
92+
93+
if local_diffdiff_sha and upstream_diffdiff_sha:
94+
diff_cmd = os.path.join(os.getcwd(), ".github/workflows/diffdiff.py") + " --colour --commit " + local_diffdiff_sha
95+
# print("diffdiff: " + diff_cmd)
96+
process = subprocess.run(diff_cmd, shell=True, capture_output=True, text=True)
97+
diff_out = process.stdout
98+
diff_err = process.stderr
99+
diff_status = process.returncode
100+
101+
if diff_status != 0 and not upstream_diff:
102+
print("diffdiff out: " + diff_out)
103+
print("diffdiff err: " + diff_err)
104+
retcode = 1
105+
file.write("error:\nCommit: " + local_diffdiff_sha + " differs with no upstream tag in commit message\n")
106+
107+
finally:
108+
file.close()
109+
110+
return retcode
111+
112+
first_arg, *argv_in = sys.argv[1:] # Skip script name in sys.argv
113+
114+
if len(argv_in) < 5:
115+
print("Not enough arguments: fname, target_branch, source_branch, prj_dir, pull_request, requestor")
116+
sys.exit()
117+
118+
fname = str(first_arg)
119+
fname = "tmp-" + fname
120+
# print("filename is " + fname)
121+
target_branch = str(argv_in[0])
122+
# print("target branch is " + target_branch)
123+
source_branch = str(argv_in[1])
124+
# print("source branch is " + source_branch)
125+
prj_dir = str(argv_in[2])
126+
# print("project dir is " + prj_dir)
127+
pullreq = str(argv_in[3])
128+
# print("pull request is " + pullreq)
129+
requestor = str(argv_in[4])
130+
131+
retcode = process_git_request(fname, target_branch, source_branch, prj_dir)
132+
133+
if retcode != 0:
134+
with open(fname, 'r') as fd:
135+
contents = fd.read()
136+
print(contents)
137+
sys.exit(1)
138+
else:
139+
print("Done")
140+
141+
sys.exit(0)
142+

.github/workflows/process-git-request.rb

-140
This file was deleted.

.github/workflows/process-pull-request.yml

+6-13
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,15 @@ jobs:
1818
test:
1919

2020
runs-on: ubuntu-latest
21-
strategy:
22-
matrix:
23-
ruby-version: ['3.0']
2421

2522
steps:
2623
- uses: actions/checkout@v4
27-
- name: Set up Ruby
28-
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
29-
# change this to (see https://github.com/ruby/setup-ruby#versioning):
30-
uses: ruby/setup-ruby@v1
31-
# uses: ruby/setup-ruby@55283cc23133118229fd3f97f9336ee23a179fcf # v1.146.0
32-
with:
33-
ruby-version: ${{ matrix.ruby-version }}
34-
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
3524
- name: Set up Python
3625
uses: actions/setup-python@v5
26+
- name: Set Locale
27+
run: |
28+
sudo locale-gen en_US.UTF-8
29+
sudo update-locale LANG=en_US.UTF-8
3730
- name: Run tests
3831
run: |
3932
/usr/bin/pip3 install gitPython
@@ -44,13 +37,13 @@ jobs:
4437
fi
4538
git remote add linux https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
4639
git fetch --shallow-since="3 years ago" linux
47-
echo "Will run process-git-request.rb with:"
40+
echo "Will run process-git-request.py with:"
4841
echo "fname = ${{ github.run_id }}"
4942
echo "target_branch = ${{ github.base_ref }}"
5043
echo "source_branch = ${{ github.head_ref }}"
5144
echo "prj_dir = ${{ github.workspace }}"
5245
echo "pull_request = ${{ github.ref }}"
5346
echo "requestor = ${{ github.actor }}"
5447
cd ${{ github.workspace }}
55-
/usr/bin/ruby .github/workflows/process-git-request.rb ${{ github.run_id }} ${{ github.base_ref }} \
48+
/usr/bin/python3 -X utf-8 .github/workflows/process-git-request.py ${{ github.run_id }} ${{ github.base_ref }} \
5649
${{ github.head_ref }} ${{ github.workspace }} ${{ github.ref }} ${{ github.actor }}

0 commit comments

Comments
 (0)