Ruff after Claude Code
All checks were successful
Run Python tests (through Pytest) / Test (push) Successful in 25s
Verify Python project can be installed, loaded and have version checked / Test (push) Successful in 23s

This commit is contained in:
Jon Michael Aanes 2025-06-09 18:04:24 +02:00
parent a2a465f5c7
commit a1d1f01606
4 changed files with 122 additions and 9 deletions

View File

@ -156,6 +156,7 @@ class RepositoryConfig:
owner: str
repo: str
base_branch: str
assignee: str | None = None
def repo_url(self) -> str:
return f'{self.gitea_url}:{self.owner}/{self.repo}.git'.replace(
@ -497,7 +498,10 @@ def push_changes(
cmd = ['git', 'push', 'origin', branch_name, '--force']
run_cmd(cmd, cwd)
# Then create the PR with the aider label
# Then create the PR with the aider label and optional assignee/reviewer
assignees = [repository_config.assignee] if repository_config.assignee else None
reviewers = [repository_config.assignee] if repository_config.assignee else None
pr_response = gitea_client.create_pull_request(
owner=repository_config.owner,
repo=repository_config.repo,
@ -506,6 +510,8 @@ def push_changes(
head=branch_name,
base=repository_config.base_branch,
labels=['aider'],
assignees=assignees,
reviewers=reviewers,
)
# Extract PR number and URL if available

View File

@ -55,6 +55,11 @@ def parse_args():
help='Model to use for evaluating code (overrides default)',
default=None,
)
parser.add_argument(
'--assignee',
help='Username to automatically assign as assignee and reviewer for created pull requests',
default=None,
)
return parser.parse_args()
@ -84,6 +89,7 @@ def main():
owner=args.owner,
repo=repo,
base_branch=args.base_branch,
assignee=args.assignee,
)
solve_issues_in_repository(repository_config, client, seen_issues_db)
del repo

View File

@ -139,8 +139,10 @@ class GiteaClient:
head: str,
base: str,
labels: list[str] = None,
assignees: list[str] = None,
reviewers: list[str] = None,
) -> dict:
"""Create a pull request and optionally apply labels.
"""Create a pull request and optionally apply labels, assignees, and reviewers.
Args:
owner (str): Owner of the repository.
@ -150,6 +152,8 @@ class GiteaClient:
head (str): The name of the branch where changes are implemented.
base (str): The name of the branch you want the changes pulled into.
labels (list[str], optional): List of label names to apply to the pull request.
assignees (list[str], optional): List of usernames to assign to the pull request.
reviewers (list[str], optional): List of usernames to request reviews from.
Returns:
dict: The created pull request data.
@ -165,6 +169,12 @@ class GiteaClient:
'base': base,
}
# Add assignees and reviewers if provided
if assignees:
json_data['assignees'] = assignees
if reviewers:
json_data['reviewers'] = reviewers
response = self.session.post(url, json=json_data)
# If a pull request for this head/base already exists, return it instead of crashing
if response.status_code == 409:
@ -179,11 +189,100 @@ class GiteaClient:
pr.get('head', {}).get('ref') == head
and pr.get('base', {}).get('ref') == base
):
# Try to set assignees and reviewers on existing PR
pr_number = pr.get('number')
if assignees and pr_number:
self.set_pull_request_assignees(
owner,
repo,
pr_number,
assignees,
)
if reviewers and pr_number:
self.set_pull_request_reviewers(
owner,
repo,
pr_number,
reviewers,
)
return pr
# fallback to raise if we cant find it
response.raise_for_status()
response.raise_for_status()
return response.json()
pr_data = response.json()
# If initial creation didn't set assignees/reviewers, try setting them separately
pr_number = pr_data.get('number')
if pr_number:
if assignees:
self.set_pull_request_assignees(owner, repo, pr_number, assignees)
if reviewers:
self.set_pull_request_reviewers(owner, repo, pr_number, reviewers)
return pr_data
def set_pull_request_assignees(
self,
owner: str,
repo: str,
pr_number: int,
assignees: list[str],
) -> bool:
"""Set assignees for a pull request.
Args:
owner (str): Owner of the repository.
repo (str): Name of the repository.
pr_number (int): Pull request number.
assignees (list[str]): List of usernames to assign.
Returns:
bool: True if successful, False otherwise.
"""
url = f'{self.gitea_url}/repos/{owner}/{repo}/pulls/{pr_number}/assignees'
json_data = {'assignees': assignees}
try:
response = self.session.put(url, json=json_data)
response.raise_for_status()
logger.info('Assigned users %s to PR #%s', assignees, pr_number)
return True
except Exception:
logger.warning('Failed to assign users %s to PR #%s', assignees, pr_number)
return False
def set_pull_request_reviewers(
self,
owner: str,
repo: str,
pr_number: int,
reviewers: list[str],
) -> bool:
"""Set reviewers for a pull request.
Args:
owner (str): Owner of the repository.
repo (str): Name of the repository.
pr_number (int): Pull request number.
reviewers (list[str]): List of usernames to request reviews from.
Returns:
bool: True if successful, False otherwise.
"""
url = f'{self.gitea_url}/repos/{owner}/{repo}/pulls/{pr_number}/reviewers'
json_data = {'reviewers': reviewers}
try:
response = self.session.post(url, json=json_data)
response.raise_for_status()
logger.info('Requested reviews from %s for PR #%s', reviewers, pr_number)
return True
except Exception:
logger.warning(
'Failed to request reviews from %s for PR #%s',
reviewers,
pr_number,
)
return False
def get_failed_pipelines(self, owner: str, repo: str, pr_number: str) -> list[int]:
"""Fetch pipeline runs for a PR and return IDs of failed runs."""

View File

@ -69,9 +69,10 @@ class TestClaudeCodeIntegration:
'claude',
'-p',
'--output-format',
'json',
'--max-turns',
'10',
'stream-json',
'--debug',
'--verbose',
'--dangerously-skip-permissions',
issue,
]
assert cmd == expected
@ -84,9 +85,10 @@ class TestClaudeCodeIntegration:
'claude',
'-p',
'--output-format',
'json',
'--max-turns',
'10',
'stream-json',
'--debug',
'--verbose',
'--dangerously-skip-permissions',
'--model',
'claude-3-sonnet',
issue,