Compare commits

..

2 Commits

Author SHA1 Message Date
e04c624aa1 Ruff after Claude Code
All checks were successful
Run Python tests (through Pytest) / Test (push) Successful in 26s
Verify Python project can be installed, loaded and have version checked / Test (push) Successful in 23s
2025-06-09 18:17:27 +02:00
f003169a1b Initial ruff pass 2025-06-09 18:12:35 +02:00
3 changed files with 57 additions and 90 deletions

View File

@ -157,6 +157,7 @@ class RepositoryConfig:
repo: str
base_branch: str
assignee: str | None = None
reviewer: str | None = None
def repo_url(self) -> str:
return f'{self.gitea_url}:{self.owner}/{self.repo}.git'.replace(
@ -498,10 +499,12 @@ def push_changes(
cmd = ['git', 'push', 'origin', branch_name, '--force']
run_cmd(cmd, cwd)
# 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
# Prepare assignees list
assignees = []
if repository_config.assignee:
assignees.append(repository_config.assignee)
# Then create the PR with the aider label and assignees
pr_response = gitea_client.create_pull_request(
owner=repository_config.owner,
repo=repository_config.repo,
@ -510,15 +513,39 @@ def push_changes(
head=branch_name,
base=repository_config.base_branch,
labels=['aider'],
assignees=assignees,
reviewers=reviewers,
assignees=assignees if assignees else None,
)
# Extract PR number
pr_number = int(pr_response.get('number'))
# Assign reviewer if specified (must be done after PR creation)
if repository_config.reviewer:
try:
gitea_client.assign_reviewers(
owner=repository_config.owner,
repo=repository_config.repo,
pull_number=pr_number,
reviewers=[repository_config.reviewer],
)
logger.info(
'Assigned reviewer %s to PR #%s',
repository_config.reviewer,
pr_number,
)
except Exception:
logger.warning(
'Failed to assign reviewer %s to PR #%s',
repository_config.reviewer,
pr_number,
exc_info=True,
)
# Extract PR number and URL if available
return IssueResolution(
True,
pr_response.get('html_url'),
int(pr_response.get('number')),
pr_number,
)

View File

@ -57,7 +57,12 @@ def parse_args():
)
parser.add_argument(
'--assignee',
help='Username to automatically assign as assignee and reviewer for created pull requests',
help='Username to assign as the assignee for created pull requests',
default=None,
)
parser.add_argument(
'--reviewer',
help='Username to assign as the reviewer for created pull requests',
default=None,
)
return parser.parse_args()
@ -90,6 +95,7 @@ def main():
repo=repo,
base_branch=args.base_branch,
assignee=args.assignee,
reviewer=args.reviewer,
)
solve_issues_in_repository(repository_config, client, seen_issues_db)
del repo

View File

@ -140,9 +140,8 @@ class GiteaClient:
base: str,
labels: list[str] = None,
assignees: list[str] = None,
reviewers: list[str] = None,
) -> dict:
"""Create a pull request and optionally apply labels, assignees, and reviewers.
"""Create a pull request and optionally apply labels and assignees.
Args:
owner (str): Owner of the repository.
@ -153,7 +152,6 @@ class GiteaClient:
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.
@ -169,11 +167,8 @@ 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
@ -189,100 +184,39 @@ 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(
def assign_reviewers(
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,
pull_number: int,
reviewers: list[str],
) -> bool:
"""Set reviewers for a pull request.
) -> dict:
"""Assign reviewers to an existing 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.
pull_number (int): Number of the pull request.
reviewers (list[str]): List of usernames to assign as reviewers.
Returns:
bool: True if successful, False otherwise.
dict: The response data from the API.
Raises:
requests.HTTPError: If the API request fails.
"""
url = f'{self.gitea_url}/repos/{owner}/{repo}/pulls/{pr_number}/reviewers'
url = f'{self.gitea_url}/repos/{owner}/{repo}/pulls/{pull_number}/requested_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
response = self.session.post(url, json=json_data)
response.raise_for_status()
return response.json()
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."""