Skip to content

first draft

first draft #3

Workflow file for this run

name: Code Review
on:
pull_request:
types: [ labeled ]
jobs:
code-review:
runs-on: ubuntu-latest
#if: contains(github.event.pull_request.labels.*.name, 'review')
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v44
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install requests PyGithub
- name: Run Code Review
env:
REVIEW_API_URL: some_url #${{ secrets.REVIEW_API_URL }}
REVIEW_API_KEY: some_api_ket #${{ secrets.REVIEW_API_KEY }}
PR_NUMBER: ${{ github.event.number }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
import os
import requests
import subprocess
from github import Github
def get_file_content(file_path, ref):
try:
return subprocess.check_output(['git', 'show', f'{ref}:{file_path}'], text=True)
except subprocess.CalledProcessError:
return "" # Return empty string if file doesn't exist in that ref
changed_files = '${{ steps.changed-files.outputs.all_changed_files }}'.split()
file_data = []
for file in changed_files:
original_content = get_file_content(file, 'HEAD^')
changed_content = get_file_content(file, 'HEAD')
file_data.append({
"filename": file,
"originalContent": original_content,
"changedContent": changed_content
})
print(file_data)
try:
review_comments = { file:[(1,'cool')] for file in changed_files }
g = Github(os.environ['GITHUB_TOKEN'])
repo = g.get_repo(os.environ['GITHUB_REPOSITORY'])
pr = repo.get_pull(int(os.environ['PR_NUMBER']))
for filename, comments in review_comments.items():
for line, comment in comments:
pr.create_review_comment(body=comment, commit=pr.head.sha, path=filename, line=int(line))
print('Code review completed and comments posted.')
except Exception as e:
print(f'Error during code review: {str(e)}')
exit(1)
shell: python
# response = requests.post(
# os.environ['REVIEW_API_URL'],
# json={"files": file_data},
# headers={
# 'Authorization': f"Bearer {os.environ['REVIEW_API_KEY']}",
# 'Content-Type': 'application/json'
# }
# )
# response.raise_for_status()
# review_comments = response.json()