Skip to content

Commit

Permalink
feat: set review data to github actions output
Browse files Browse the repository at this point in the history
  • Loading branch information
idubnori committed Apr 9, 2024
1 parent 26c4a98 commit 9d45e39
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 1 deletion.
10 changes: 10 additions & 0 deletions pr_agent/algo/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import difflib
import json
import os
import re
import textwrap
from datetime import datetime
Expand Down Expand Up @@ -661,3 +662,12 @@ def find_line_number_of_relevant_line_in_file(diff_files: List[FilePatchInfo],
absolute_position = start2 + delta - 1
break
return position, absolute_position

def github_output(output_data: dict, key_name: str):
if get_settings().github_action_config.enable_output is False:
return

output = os.getenv('GITHUB_OUTPUT')
key_data = output_data.get(key_name, {})
with open(output, 'w') as f:
f.write(f"{key_name}={json.dumps(key_data, indent=None, ensure_ascii=False)}")
2 changes: 2 additions & 0 deletions pr_agent/servers/github_action_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ async def run_action():
get_settings().set("OPENAI.ORG", OPENAI_ORG)
get_settings().set("GITHUB.USER_TOKEN", GITHUB_TOKEN)
get_settings().set("GITHUB.DEPLOYMENT_TYPE", "user")
enable_output = get_setting_or_env("GITHUB_ACTION_CONFIG.ENABLE_OUTPUT", False)
get_settings().set("GITHUB_ACTION_CONFIG.ENABLE_OUTPUT", enable_output)

# Load the event payload
try:
Expand Down
1 change: 1 addition & 0 deletions pr_agent/settings/configuration.toml
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ try_fix_invalid_inline_comments = true
# auto_review = true # set as env var in .github/workflows/pr-agent.yaml
# auto_describe = true # set as env var in .github/workflows/pr-agent.yaml
# auto_improve = true # set as env var in .github/workflows/pr-agent.yaml
# enable_output = true # set as env var in .github/workflows/pr-agent.yaml

[github_app]
# these toggles allows running the github app from custom deployments
Expand Down
3 changes: 2 additions & 1 deletion pr_agent/tools/pr_reviewer.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from pr_agent.algo.ai_handlers.litellm_ai_handler import LiteLLMAIHandler
from pr_agent.algo.pr_processing import get_pr_diff, retry_with_fallback_models
from pr_agent.algo.token_handler import TokenHandler
from pr_agent.algo.utils import convert_to_markdown, load_yaml, ModelType
from pr_agent.algo.utils import convert_to_markdown, github_output, load_yaml, ModelType
from pr_agent.config_loader import get_settings
from pr_agent.git_providers import get_git_provider
from pr_agent.git_providers.git_provider import IncrementalPR, get_main_pr_language
Expand Down Expand Up @@ -192,6 +192,7 @@ def _prepare_pr_review(self) -> str:
data = load_yaml(self.prediction.strip(),
keys_fix_yaml=["estimated_effort_to_review_[1-5]:", "security_concerns:", "possible_issues:",
"relevant_file:", "relevant_line:", "suggestion:"])
github_output(data, 'review')

if 'code_feedback' in data:
code_feedback = data['code_feedback']
Expand Down
31 changes: 31 additions & 0 deletions tests/unittest/test_github_output.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import os
import json
from pr_agent.algo.utils import get_settings, github_output

class TestGitHubOutput:
def test_github_output_enabled(self, monkeypatch, tmp_path):
get_settings().set('GITHUB_ACTION_CONFIG.ENABLE_OUTPUT', True)
monkeypatch.setenv('GITHUB_OUTPUT', str(tmp_path / 'output'))
output_data = {'key1': {'value1': 1, 'value2': 2}}
key_name = 'key1'

github_output(output_data, key_name)

with open(str(tmp_path / 'output.json'), 'r') as f:
env_value = f.read()

actual_key = env_value.split('=')[0]
actual_data = json.loads(env_value.split('=')[1])

assert actual_key == key_name
assert actual_data == output_data[key_name]

def test_github_output_disabled(self, monkeypatch, tmp_path):
get_settings().set('GITHUB_ACTION_CONFIG.ENABLE_OUTPUT', False)
monkeypatch.setenv('GITHUB_OUTPUT', str(tmp_path / 'output'))
output_data = {'key1': {'value1': 1, 'value2': 2}}
key_name = 'key1'

github_output(output_data, key_name)

assert not os.path.exists(str(tmp_path / 'output'))

0 comments on commit 9d45e39

Please sign in to comment.