-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
github actions: Use python PR check script
jira LE-2214 Obsoletes the old ruby PR check script
- Loading branch information
1 parent
494e5e2
commit c928767
Showing
3 changed files
with
162 additions
and
140 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
#!/usr/bin/env python3 | ||
|
||
import argparse | ||
import sys | ||
import subprocess | ||
import os | ||
import re | ||
import git | ||
|
||
def file_prepend(file, str): | ||
with open(file, 'r') as fd: | ||
contents = fd.read() | ||
new_contents = str + contents | ||
|
||
# Overwrite file but now with prepended string on it | ||
with open(file, 'w') as fd: | ||
fd.write(new_contents) | ||
|
||
def process_git_request(fname, target_branch, source_branch, prj_dir): | ||
retcode = 0 # presume success | ||
file = open(fname, "w") | ||
working_dir = prj_dir | ||
os.chdir(working_dir) | ||
|
||
repo = git.Repo(".") | ||
commits = repo.iter_commits(f"{target_branch}..{source_branch}") | ||
loglines_to_check = 13 | ||
for commit in commits: | ||
print(f"{commit.hexsha} {commit.message.splitlines()[0]}") | ||
|
||
commit_sha = commit.hexsha | ||
|
||
git_cmd = "git show " + commit_sha | ||
gitlog_out, gitlog_err = subprocess.Popen(git_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True).communicate() | ||
|
||
loglines = gitlog_out.splitlines() | ||
lines_counted = 0 | ||
local_diffdiff_sha = commit_sha | ||
upstream_diffdiff_sha = "" | ||
upstream_diff = False | ||
|
||
for logline in loglines: | ||
# print(f"Processing logline {commit_sha}") | ||
lines_counted += 1 | ||
if lines_counted == 1: | ||
file.write("Merge Request sha: " + local_diffdiff_sha) | ||
file.write("\n") | ||
if lines_counted == 2: # email address | ||
if "ciq.com" not in logline.lower(): | ||
# Bad Author | ||
s = f"error:\nBad {logline}\n" | ||
print(s) | ||
file.write(s) | ||
file.close() | ||
return retcode | ||
if lines_counted > 1: | ||
if "jira" in logline.lower(): | ||
file.write("\t" + logline + "\n") | ||
|
||
if "upstream-diff" in logline.lower(): | ||
upstream_diff = True | ||
|
||
if "commit" in logline.lower(): | ||
local_commit_sha = re.search(r'[0-9a-f]{40}', logline) | ||
upstream_diffdiff_sha = str(local_commit_sha.group(0)) if local_commit_sha else "" | ||
if upstream_diffdiff_sha: | ||
print(f"Upstream : " + upstream_diffdiff_sha) | ||
file.write("\tUpstream sha: " + upstream_diffdiff_sha) | ||
file.write("\n") | ||
|
||
if lines_counted > loglines_to_check: # Everything we need should be in the first loglines_to_check lines | ||
# print(f"Breaking after {loglines_to_check} lines of commit checking") | ||
break | ||
|
||
if local_diffdiff_sha and upstream_diffdiff_sha: | ||
diff_cmd = os.path.join(os.getcwd(), ".github/workflows/diffdiff.py") + " --colour --commit " + local_diffdiff_sha | ||
# print("diffdiff: " + diff_cmd) | ||
process = subprocess.run(diff_cmd, shell=True, capture_output=True, text=True) | ||
diff_out = process.stdout | ||
diff_err = process.stderr | ||
diff_status = process.returncode | ||
|
||
if diff_status != 0 and not upstream_diff: | ||
print(f"diffdiff out: " + diff_out) | ||
print(f"diffdiff err: " + diff_err) | ||
retcode = 1 | ||
file.write("error:\nCommit: " + local_diffdiff_sha + " differs with no upstream tag in commit message\n") | ||
|
||
return retcode | ||
|
||
parser = argparse.ArgumentParser() | ||
parser.add_argument('--fname', help='File for report output') | ||
parser.add_argument('--target-branch', help='Target branch for PR') | ||
parser.add_argument('--source-branch', help='Source branch for PR with changes for the target branch') | ||
parser.add_argument('--prj-dir', help='Base working directory') | ||
args = parser.parse_args() | ||
|
||
fname = args.fname | ||
target_branch = args.target_branch | ||
source_branch = args.source_branch | ||
prj_dir = args.prj_dir | ||
|
||
retcode = process_git_request(fname, target_branch, source_branch, prj_dir) | ||
|
||
if retcode != 0: | ||
with open(fname, 'r') as fd: | ||
contents = fd.read() | ||
print(contents) | ||
sys.exit(1) | ||
else: | ||
print("Done") | ||
|
||
sys.exit(0) | ||
|
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
# This workflow uses actions that are not certified by GitHub. | ||
# They are provided by a third-party and are governed by | ||
# separate terms of service, privacy policy, and support | ||
# documentation. | ||
|
||
name: Pull Request Checker | ||
|
||
on: | ||
pull_request: | ||
branches: | ||
- '**' | ||
- '!mainline' | ||
|
||
permissions: | ||
contents: read | ||
|
||
jobs: | ||
test: | ||
|
||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Set up Python | ||
uses: actions/setup-python@v5 | ||
- name: Run tests | ||
run: | | ||
/usr/bin/pip3 install gitPython | ||
python -c "import sys; import git; print(sys.version)" | ||
rm -rf /home/runner/work/kernel-src-tree/kernel-src-tree | ||
cd /home/runner/work/kernel-src-tree | ||
git clone https://github.com/ctrliq/kernel-src-tree | ||
cd kernel-src-tree | ||
git fetch --all | ||
git checkout -b ${{ github.head_ref }} origin/${{ github.head_ref }} | ||
git checkout ${{ github.base_ref }} | ||
git remote add linux https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git | ||
git fetch --shallow-since="2 years ago" linux | ||
echo "Will run process-git-request.py with:" | ||
echo "fname = ${{ github.run_id }}" | ||
echo "target_branch = ${{ github.base_ref }}" | ||
echo "source_branch = ${{ github.head_ref }}" | ||
echo "prj_dir = ${{ github.workspace }}" | ||
echo "pull_request = ${{ github.ref }}" | ||
echo "requestor = ${{ github.actor }}" | ||
cd ${{ github.workspace }} | ||
/usr/bin/python3 .github/workflows/process-git-request.py --fname ${{ github.run_id }} \ | ||
--target-branch ${{ github.base_ref }} --source-branch ${{ github.head_ref }} --prj-dir ${{ github.workspace }} |