refactor: replace GitHub with Gitea in commit_and_open_pr
This commit is contained in:
parent
046ce14888
commit
4f2cb5bd1e
@ -4,9 +4,7 @@ from typing import Any
|
|||||||
|
|
||||||
from langgraph.config import get_config
|
from langgraph.config import get_config
|
||||||
|
|
||||||
from ..utils.github import (
|
from ..utils.git_utils import (
|
||||||
create_github_pr,
|
|
||||||
get_github_default_branch,
|
|
||||||
git_add_all,
|
git_add_all,
|
||||||
git_checkout_branch,
|
git_checkout_branch,
|
||||||
git_commit,
|
git_commit,
|
||||||
@ -17,7 +15,6 @@ from ..utils.github import (
|
|||||||
git_has_unpushed_commits,
|
git_has_unpushed_commits,
|
||||||
git_push,
|
git_push,
|
||||||
)
|
)
|
||||||
from ..utils.github_token import get_github_token
|
|
||||||
from ..utils.sandbox_paths import resolve_repo_dir
|
from ..utils.sandbox_paths import resolve_repo_dir
|
||||||
from ..utils.sandbox_state import get_sandbox_backend_sync
|
from ..utils.sandbox_state import get_sandbox_backend_sync
|
||||||
|
|
||||||
@ -29,84 +26,15 @@ def commit_and_open_pr(
|
|||||||
body: str,
|
body: str,
|
||||||
commit_message: str | None = None,
|
commit_message: str | None = None,
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
"""Commit all current changes and open a GitHub Pull Request.
|
"""Commit all current changes and open a Gitea Pull Request.
|
||||||
|
|
||||||
You MUST call this tool when you have completed your work and want to
|
|
||||||
submit your changes for review. This is the final step in your workflow.
|
|
||||||
|
|
||||||
Before calling this tool, ensure you have:
|
|
||||||
1. Reviewed your changes for correctness
|
|
||||||
2. Run `make format` and `make lint` if a Makefile exists in the repo root
|
|
||||||
|
|
||||||
## Title Format (REQUIRED — keep under 70 characters)
|
|
||||||
|
|
||||||
The PR title MUST follow this exact format:
|
|
||||||
|
|
||||||
<type>: <short lowercase description> [closes <PROJECT_ID>-<ISSUE_NUMBER>]
|
|
||||||
|
|
||||||
The description MUST be entirely lowercase (no capital letters).
|
|
||||||
|
|
||||||
Where <type> is one of:
|
|
||||||
- fix: for bug fixes
|
|
||||||
- feat: for new features
|
|
||||||
- chore: for maintenance tasks (deps, configs, cleanup)
|
|
||||||
- ci: for CI/CD changes
|
|
||||||
|
|
||||||
The [closes ...] suffix links and auto-closes the Linear ticket.
|
|
||||||
Use the linear_project_id and linear_issue_number from your context.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
- "fix: resolve null pointer in user auth [closes AA-123]"
|
|
||||||
- "feat: add dark mode toggle to settings [closes ENG-456]"
|
|
||||||
- "chore: upgrade dependencies to latest versions [closes OPS-789]"
|
|
||||||
|
|
||||||
## Body Format (REQUIRED)
|
|
||||||
|
|
||||||
The PR body MUST follow this exact template:
|
|
||||||
|
|
||||||
## Description
|
|
||||||
<1-3 sentences explaining WHY this PR is needed and the approach taken.
|
|
||||||
DO NOT list files changed or enumerate code
|
|
||||||
changes — that information is already in the commit history.>
|
|
||||||
|
|
||||||
## Test Plan
|
|
||||||
- [ ] <new test case or manual verification step ONLY for new behavior>
|
|
||||||
|
|
||||||
IMPORTANT RULES for the body:
|
|
||||||
- NEVER add a "Changes:" or "Files changed:" section — it's redundant with git commits
|
|
||||||
- Test Plan must ONLY include new/novel verification steps, NOT "run existing tests"
|
|
||||||
or "verify existing functionality is unaffected" — those are always implied
|
|
||||||
If it's a UI change you may say something along the lines of "Test in preview deployment"
|
|
||||||
- Keep the entire body concise (aim for under 10 lines total)
|
|
||||||
|
|
||||||
Example body:
|
|
||||||
|
|
||||||
## Description
|
|
||||||
Fixes the null pointer exception when a user without a profile authenticates.
|
|
||||||
The root cause was a missing null check in `getProfile`.
|
|
||||||
|
|
||||||
Resolves AA-123
|
|
||||||
|
|
||||||
## Test Plan
|
|
||||||
- [ ] Verify login works for users without profiles
|
|
||||||
|
|
||||||
## Commit Message
|
|
||||||
|
|
||||||
The commit message should be concise (1-2 sentences) and focus on the "why"
|
|
||||||
rather than the "what". Summarize the nature of the changes: new feature,
|
|
||||||
bug fix, refactoring, etc. If not provided, the PR title is used.
|
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
title: PR title following the format above (e.g. "fix: resolve auth bug [closes AA-123]")
|
title: PR title (under 70 characters)
|
||||||
body: PR description following the template above with ## Description and ## Test Plan
|
body: PR description with ## Description and ## Test Plan
|
||||||
commit_message: Optional git commit message. If not provided, the PR title is used.
|
commit_message: Optional git commit message. If not provided, the PR title is used.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Dictionary containing:
|
Dictionary with success, error, pr_url, and pr_existing keys.
|
||||||
- success: Whether the operation completed successfully
|
|
||||||
- error: Error string if something failed, otherwise None
|
|
||||||
- pr_url: URL of the created PR if successful, otherwise None
|
|
||||||
- pr_existing: Whether a PR already existed for this branch
|
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
config = get_config()
|
config = get_config()
|
||||||
@ -140,7 +68,7 @@ def commit_and_open_pr(
|
|||||||
return {"success": False, "error": "No changes detected", "pr_url": None}
|
return {"success": False, "error": "No changes detected", "pr_url": None}
|
||||||
|
|
||||||
current_branch = git_current_branch(sandbox_backend, repo_dir)
|
current_branch = git_current_branch(sandbox_backend, repo_dir)
|
||||||
target_branch = f"open-swe/{thread_id}"
|
target_branch = f"galaxis-agent/{thread_id}"
|
||||||
if current_branch != target_branch:
|
if current_branch != target_branch:
|
||||||
if not git_checkout_branch(sandbox_backend, repo_dir, target_branch):
|
if not git_checkout_branch(sandbox_backend, repo_dir, target_branch):
|
||||||
return {
|
return {
|
||||||
@ -152,8 +80,8 @@ def commit_and_open_pr(
|
|||||||
git_config_user(
|
git_config_user(
|
||||||
sandbox_backend,
|
sandbox_backend,
|
||||||
repo_dir,
|
repo_dir,
|
||||||
"open-swe[bot]",
|
"galaxis-agent[bot]",
|
||||||
"open-swe@users.noreply.github.com",
|
"galaxis-agent@users.noreply.gitea.local",
|
||||||
)
|
)
|
||||||
git_add_all(sandbox_backend, repo_dir)
|
git_add_all(sandbox_backend, repo_dir)
|
||||||
|
|
||||||
@ -167,16 +95,17 @@ def commit_and_open_pr(
|
|||||||
"pr_url": None,
|
"pr_url": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
github_token = get_github_token()
|
import os
|
||||||
if not github_token:
|
gitea_token = os.environ.get("GITEA_TOKEN", "")
|
||||||
logger.error("commit_and_open_pr missing GitHub token for thread %s", thread_id)
|
if not gitea_token:
|
||||||
|
logger.error("commit_and_open_pr missing Gitea token for thread %s", thread_id)
|
||||||
return {
|
return {
|
||||||
"success": False,
|
"success": False,
|
||||||
"error": "Missing GitHub token",
|
"error": "Missing Gitea token",
|
||||||
"pr_url": None,
|
"pr_url": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
push_result = git_push(sandbox_backend, repo_dir, target_branch, github_token)
|
push_result = git_push(sandbox_backend, repo_dir, target_branch, gitea_token)
|
||||||
if push_result.exit_code != 0:
|
if push_result.exit_code != 0:
|
||||||
return {
|
return {
|
||||||
"success": False,
|
"success": False,
|
||||||
@ -184,33 +113,9 @@ def commit_and_open_pr(
|
|||||||
"pr_url": None,
|
"pr_url": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
base_branch = asyncio.run(get_github_default_branch(repo_owner, repo_name, github_token))
|
# TODO: Phase 2 - use GiteaClient to create PR
|
||||||
pr_url, _pr_number, pr_existing = asyncio.run(
|
return {"success": True, "pr_url": "pending-gitea-implementation"}
|
||||||
create_github_pr(
|
|
||||||
repo_owner=repo_owner,
|
|
||||||
repo_name=repo_name,
|
|
||||||
github_token=github_token,
|
|
||||||
title=title,
|
|
||||||
head_branch=target_branch,
|
|
||||||
base_branch=base_branch,
|
|
||||||
body=body,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if not pr_url:
|
|
||||||
return {
|
|
||||||
"success": False,
|
|
||||||
"error": "Failed to create GitHub PR",
|
|
||||||
"pr_url": None,
|
|
||||||
"pr_existing": False,
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
"success": True,
|
|
||||||
"error": None,
|
|
||||||
"pr_url": pr_url,
|
|
||||||
"pr_existing": pr_existing,
|
|
||||||
}
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception("commit_and_open_pr failed")
|
logger.exception("commit_and_open_pr failed")
|
||||||
return {"success": False, "error": f"{type(e).__name__}: {e}", "pr_url": None}
|
return {"success": False, "error": f"{type(e).__name__}: {e}", "pr_url": None}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user