test: 统一 Agent Issue 轮询 label 体系与创建规则 - Closes #40
CI / test (pull_request) Successful in 8s
CI / test (pull_request) Successful in 8s
- test-dev → test-code:QE-Agent 一致化 label - Dev-Agent 新增 product-code label + [product] 前缀规则 - agent_poller.py 新增 create-issue action - QE/Dev Agent 轮询改为多轮递进:label → title 前缀 → 无标识分析 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+31
-3
@@ -2,9 +2,10 @@
|
||||
|
||||
Usage:
|
||||
python scripts/agent_poller.py --action list
|
||||
python scripts/agent_poller.py --action list --labels test-dev
|
||||
python scripts/agent_poller.py --action list --labels test-code
|
||||
python scripts/agent_poller.py --action get --issue 1
|
||||
python scripts/agent_poller.py --action comment --issue 1 --body "Working on this"
|
||||
python scripts/agent_poller.py --action create-issue --title "My issue" --labels test-code --body "..."
|
||||
python scripts/agent_poller.py --action create-pr --issue 1 --branch test/issue-1
|
||||
python scripts/agent_poller.py --action pr-status --pr 4
|
||||
python scripts/agent_poller.py --action merge-pr --pr 4
|
||||
@@ -98,6 +99,27 @@ def close_issue(num, body=None):
|
||||
return i
|
||||
|
||||
|
||||
def create_issue(title, body=None, labels=None):
|
||||
"""Create a new Gitea issue.
|
||||
|
||||
Labels convention (per project rules):
|
||||
- Product/feature issues → product-code
|
||||
- Test code issues → test-code
|
||||
"""
|
||||
payload = {"title": title}
|
||||
if body:
|
||||
payload["body"] = body + AGENT_SIG
|
||||
if labels:
|
||||
payload["labels"] = [l.strip() for l in labels.split(",") if l.strip()]
|
||||
i = _req("POST", "/issues", payload)
|
||||
issue_labels = [l["name"] for l in i.get("labels", [])]
|
||||
print(f"Issue #{i['number']} created: {i['title']}")
|
||||
if issue_labels:
|
||||
print(f"Labels: {', '.join(issue_labels)}")
|
||||
print(f"URL: {i.get('html_url', i.get('url', ''))}")
|
||||
return i
|
||||
|
||||
|
||||
# ── PR operations ────────────────────────────────────────────────────────────
|
||||
|
||||
def create_pr(issue_num, branch, body=None):
|
||||
@@ -212,12 +234,13 @@ def main():
|
||||
parser = argparse.ArgumentParser(description="Dev agent Gitea helper")
|
||||
parser.add_argument("--action", required=True,
|
||||
choices=["list", "get", "comment", "close-issue",
|
||||
"create-pr", "pr-status", "merge-pr", "lifecycle"])
|
||||
"create-issue", "create-pr", "pr-status", "merge-pr", "lifecycle"])
|
||||
parser.add_argument("--issue", type=int)
|
||||
parser.add_argument("--pr", type=int)
|
||||
parser.add_argument("--title", help="Issue title (for 'create-issue' action)")
|
||||
parser.add_argument("--branch")
|
||||
parser.add_argument("--body")
|
||||
parser.add_argument("--labels", help="Comma-separated labels to filter issues (for 'list' action)")
|
||||
parser.add_argument("--labels", help="Comma-separated labels (filter for 'list', assign for 'create-issue')")
|
||||
args = parser.parse_args()
|
||||
|
||||
if not GITEA_TOKEN:
|
||||
@@ -243,6 +266,11 @@ def main():
|
||||
print("--issue is required for 'close-issue' action", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
close_issue(args.issue, args.body)
|
||||
elif args.action == "create-issue":
|
||||
if not args.title:
|
||||
print("--title is required for 'create-issue' action", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
create_issue(args.title, args.body, args.labels)
|
||||
elif args.action == "create-pr":
|
||||
if not args.issue or not args.branch:
|
||||
print("--issue and --branch are required for 'create-pr' action", file=sys.stderr)
|
||||
|
||||
@@ -18,9 +18,9 @@ launch_agent \
|
||||
"agents/QE_AGENT.md" \
|
||||
"QE-Agent" \
|
||||
"执行一次 Issue 巡检(单次任务,不要用 /loop):
|
||||
1. python scripts/agent_poller.py --action list --labels test-dev 检查 test-dev Issue
|
||||
1. python scripts/agent_poller.py --action list --labels test-code 检查 test-code Issue
|
||||
2. python scripts/agent_poller.py --action list --labels acceptance-failure 检查 acceptance-failure Issue
|
||||
3. test-dev Issue:分析 → 开发验收测试到 tests/acceptance/ → pytest 本地验证 → commit('test:' 前缀, Closes #N) → push → create-pr → 等 CI → merge-pr
|
||||
4. acceptance-failure Issue:分析失败原因 → 测试问题则修复测试 → 管道问题则开 test-dev issue 跟踪
|
||||
3. test-code Issue:分析 → 开发验收测试到 tests/acceptance/ → pytest 本地验证 → commit('test:' 前缀, Closes #N) → push → create-pr → 等 CI → merge-pr
|
||||
4. acceptance-failure Issue:分析失败原因 → 测试问题则修复测试 → 管道问题则开 test-code issue 跟踪
|
||||
5. 所有 Issue 处理完毕后报告汇总并退出。" \
|
||||
"现在开始工作。使用 /loop 10m 开启轮询:每 10 分钟检查 test-dev 和 acceptance-failure 标签 Issue,有则走完整闭环(分析→开发测试→pytest→push→PR→CI→merge),无则报告 main healthy。保持对话开放。"
|
||||
"现在开始工作。使用 /loop 10m 开启轮询:每 10 分钟检查 test-code 和 acceptance-failure 标签 Issue,有则走完整闭环(分析→开发测试→pytest→push→PR→CI→merge),无则报告 main healthy。保持对话开放。"
|
||||
|
||||
Reference in New Issue
Block a user