From a8964db1516341f113ea829d1a5a92855ca4410e Mon Sep 17 00:00:00 2001 From: Peter Zhang <18501667167@qq.com> Date: Fri, 5 Jun 2026 17:05:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B0=86=20Gitea=20=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E5=88=B0=20~/.gitea/config.yaml=20=E5=A4=9A?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E9=85=8D=E7=BD=AE=E4=BD=93=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 _get_gitea_config.py 从 YAML 读取 URL/repo/token - _common.sh 改为通过 eval python 脚本加载配置 - GITEA_CICD_SETUP.md / DEV_AGENT.md / QE_AGENT.md 更新文档 - CI 工作流改用 ${{ gitea.server_url }} / ${{ gitea.repository }} Co-Authored-By: Claude Opus 4.7 --- .gitea/workflows/acceptance.yml | 4 +- .gitea/workflows/auto-issue.yml | 5 +- .gitea/workflows/ci.yml | 4 +- GITEA_CICD_SETUP.md | 35 +++++++------- agents/DEV_AGENT.md | 18 +++++--- agents/QE_AGENT.md | 8 ++-- docs/PROJECT_CHARTER.md | 2 +- scripts/_common.sh | 18 ++++---- scripts/_get_gitea_config.py | 81 +++++++++++++++++++++++++++++++++ scripts/agent_poller.py | 38 +++++++++++----- scripts/create_failure_issue.py | 20 ++++---- scripts/start_dev_agent.bat | 28 ++++++------ scripts/start_dev_agent.sh | 14 ++++-- scripts/start_qe_agent.sh | 14 ++++-- 14 files changed, 202 insertions(+), 87 deletions(-) create mode 100644 scripts/_get_gitea_config.py diff --git a/.gitea/workflows/acceptance.yml b/.gitea/workflows/acceptance.yml index 858ca2e..0de29ad 100644 --- a/.gitea/workflows/acceptance.yml +++ b/.gitea/workflows/acceptance.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Checkout main branch run: | - git clone --depth 1 https://git.zywl.me/zeekrAI/document_analyzer.git . + git clone --depth 1 ${{ gitea.server_url }}/${{ gitea.repository }}.git . git checkout main - name: Install dependencies @@ -57,6 +57,8 @@ jobs: python scripts/create_failure_issue.py \ --sha "${{ github.sha }}" --branch "main" \ --run "${{ github.run_number }}" \ + --gitea-url "${{ gitea.server_url }}" \ + --repo "${{ gitea.repository }}" \ --message "QE Acceptance: ${SUMMARY:-pipeline failed}" \ --workflow "QE Acceptance" \ --labels "acceptance-failure,agent-task" diff --git a/.gitea/workflows/auto-issue.yml b/.gitea/workflows/auto-issue.yml index fc40bfb..9a39c1c 100644 --- a/.gitea/workflows/auto-issue.yml +++ b/.gitea/workflows/auto-issue.yml @@ -18,10 +18,7 @@ jobs: RUN_URL="${{ github.event.workflow_run.html_url }}" COMMIT_MSG="${{ github.event.workflow_run.head_commit.message }}" - curl -s -X POST "${{ env.GITEA_URL }}/api/v1/repos/${{ env.GITEA_REPO }}/issues" \ + curl -s -X POST "${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/issues" \ -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ -H "Content-Type: application/json" \ -d "{\"title\":\"CI Failure: ${COMMIT_MSG}\",\"body\":\"## CI 测试失败\n\n- **Commit:** ${SHA_SHORT}\n- **Branch:** ${BRANCH}\n- **工作流:** ${RUN_URL}\n\n请检查上述链接查看失败详情。\n\n### 下一步\n- [ ] 分析失败原因\n- [ ] 修复代码\n- [ ] 提交 PR 触发 CI 重测\",\"labels\":[\"ci-failure\",\"agent-task\"]}" - env: - GITEA_URL: https://git.zywl.me - GITEA_REPO: zeekrAI/document_analyzer diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index b58f06e..e3d3cc3 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Checkout code from Gitea run: | - git clone --depth 1 https://git.zywl.me/zeekrAI/document_analyzer.git . + git clone --depth 1 ${{ gitea.server_url }}/${{ gitea.repository }}.git . git fetch origin ${{ github.sha }} git checkout ${{ github.sha }} @@ -31,4 +31,6 @@ jobs: --sha "${{ github.sha }}" --branch "${{ github.ref_name }}" --run "${{ github.run_number }}" + --gitea-url "${{ gitea.server_url }}" + --repo "${{ gitea.repository }}" --message "${{ github.event.head_commit.message }}" diff --git a/GITEA_CICD_SETUP.md b/GITEA_CICD_SETUP.md index dd870e0..fbeec20 100644 --- a/GITEA_CICD_SETUP.md +++ b/GITEA_CICD_SETUP.md @@ -15,10 +15,9 @@ Gitea (localhost:3000) Dev Agent | 组件 | 位置 | 说明 | |------|------|------| -| Gitea 服务 | `https://git.zywl.me` | SQLite 数据库,Actions 已启用 | -| Actions Runner | `C:\Users\peterz\tools\act_runner\` | Shell 模式,v0.2.11 | -| 仓库 | `zeekrAI/document_analyzer` | 22+ 文件,CI/CD 已配置 | -| API Token | 用户自行生成 | Settings → Applications → Generate Token | +| Gitea 服务 | `${GITEA_URL}`(见 `~/.gitea/config.yaml`) | SQLite 数据库,Actions 已启用 | +| 仓库 | `${GITEA_REPO}`(见 `~/.gitea/config.yaml`) | CI/CD 已配置 | +| API Token | 用户自行生成 | 配置在 `~/.gitea/config.yaml` | ## 环境搭建 @@ -36,28 +35,29 @@ nohup ./gitea.exe web --config /c/Users/peterz/tools/gitea/data/app.ini > data/g nohup /c/Users/peterz/tools/act_runner/act_runner.exe daemon > /c/Users/peterz/tools/act_runner/runner.log 2>&1 & ``` -访问 `https://git.zywl.me` 即可使用。 +访问 `$GITEA_URL`(在 `~/.gitea/config.yaml` 中配置)即可使用。 ### 2. 创建 Gitea API Token 1. 登录 Gitea → 右上角头像 → Settings → Applications -2. 或在浏览器直接打开: `https://git.zywl.me/user/settings/applications` +2. 或在浏览器直接打开: `$GITEA_URL/user/settings/applications` 3. Manage Access Tokens → Generate Token 4. 权限勾选: `write:issue` `write:repository` `write:user` -5. 复制 token 备用 +5. 复制 token,配置到 `~/.gitea/config.yaml` 对应 profile ### 3. 配置 Actions Secrets 在仓库 Secrets 页面添加: - Name: `GITEA_TOKEN` -- Value: 上一步生成的 API token +- Value: token -### 4. 配置 Dev Agent 环境变量 +### 4. 配置本地 Gitea 连接 + +编辑 `~/.gitea/config.yaml`,配置你的 Gitea profile: ```bash -export GITEA_API_TOKEN="你的token" -export GITEA_URL="https://git.zywl.me" -export GITEA_REPO="zeekrAI/document_analyzer" +# 设置要使用的账号 +export GITEA_USER=pzhangzywl ``` ## CI/CD 工作流 @@ -100,9 +100,8 @@ git clone → pip install → pytest → **Bash/WSL/Git Bash:** ```bash -export GITEA_API_TOKEN="59117246ec418d5d87042de073b0d4197d8054bf" -export GITEA_URL="https://git.zywl.me" -export GITEA_REPO="zeekrAI/document_analyzer" +# 设置要使用的 Gitea 账号(从 ~/.gitea/config.yaml 读取配置) +export GITEA_USER=pzhangzywl ``` ### 方式 A: 单次任务模式 @@ -142,7 +141,7 @@ claude --agent agents/DEV_AGENT.md 在 Claude Code 对话中直接说: -> 用 DEV_AGENT.md 检查 https://git.zywl.me/zeekrAI/document_analyzer/issues 有没有待处理工单 +> 用 DEV_AGENT.md 检查 `$GITEA_URL/$GITEA_REPO/issues` 有没有待处理工单 ### 方式 D: 任何其他 Agent @@ -182,7 +181,7 @@ python scripts/agent_poller.py --action create-pr --issue N --branch fix/issue-N 1. 在 `tests/test_sample.py` 中添加故意失败的测试 2. Push → CI 变红 → 自动在 Gitea 创建 Issue(含失败详情) -3. 查看: `https://git.zywl.me/zeekrAI/document_analyzer/issues` +3. 查看: `$GITEA_URL/$GITEA_REPO/issues` ### 测试修复 → CI 通过 → Issue 关闭 @@ -203,5 +202,5 @@ python scripts/agent_poller.py --action create-pr --issue N --branch fix/issue-N **Q: Agent 连不上 Gitea API?** - 确认 `GITEA_API_TOKEN` 环境变量已设置 -- 确认 Gitea 服务正在运行: `curl https://git.zywl.me/api/v1/version` +- 确认 Gitea 服务正在运行: `curl $GITEA_URL/api/v1/version` - 确认 Token 权限包含 `write:issue` 和 `write:repository` diff --git a/agents/DEV_AGENT.md b/agents/DEV_AGENT.md index 6af7248..57339ab 100644 --- a/agents/DEV_AGENT.md +++ b/agents/DEV_AGENT.md @@ -42,14 +42,18 @@ description: AI 开发专家,负责 document_analyzer 项目的功能开发、 ## 环境配置 -代理需要以下环境变量与 Gitea 交互: +代理通过 `~/.gitea/config.yaml` 获取 Gitea 连接信息(URL、仓库、Token), +按 `GITEA_USER` 环境变量选择对应 profile。 -- `GITEA_URL` — `https://git.zywl.me` -- `GITEA_REPO` — `zeekrAI/document_analyzer` -- `GITEA_API_TOKEN` — Gitea 个人访问令牌 -- `DEV_AGENT_ID` — 代理标识(默认 `da-01`,启动脚本自动设为 `da-MMDD-HHmm`) +```bash +# 设置要使用的 Gitea 账号 +export GITEA_USER=pzhangzywl # 人类用户 +export GITEA_USER=pzhang_dev_agent_01 # Dev-Agent 账号 +``` -**代理签名:** 所有 Issue 评论和 PR 正文末尾自动附加 `[da-MMDD-HHmm]` 签名,用于区分 Dev-Agent 和 QE-Agent 的活动。未来多个 Dev-Agent 同时运行时,通过不同的 `DEV_AGENT_ID` 区分。 +配置文件位置:`~/.gitea/config.yaml`(每个用户/Agent 各自维护)。 + +**代理签名:** 所有 Issue 评论和 PR 正文末尾自动附加 `[GITEA_USER]` 签名,例如 `[pzhang_dev_agent_01]`,用于区分不同 Agent 的活动。 首次启动前,请阅读 `GITEA_CICD_SETUP.md` 了解 CI/CD 系统。 @@ -58,7 +62,7 @@ description: AI 开发专家,负责 document_analyzer 项目的功能开发、 **每次新 session 启动时,立即执行:** 1. 读取项目章程和全局状态:`docs/PROJECT_CHARTER.md` 和 `docs/GLOBAL_STATE.md` -2. 确认环境变量已设置(GITEA_URL, GITEA_REPO, GITEA_API_TOKEN) +2. 确认环境变量已设置(GITEA_USER + ~/.gitea/config.yaml) 3. 用 `/loop 10m` 开启 10 分钟间隔的自动轮询 4. 轮询内容(多轮递进): a. `--action list --labels product-code` — 先捡带 `product-code` 标签的 Issue diff --git a/agents/QE_AGENT.md b/agents/QE_AGENT.md index f0c348c..8babe87 100644 --- a/agents/QE_AGENT.md +++ b/agents/QE_AGENT.md @@ -34,12 +34,12 @@ description: QE Agent — 自动化验收测试开发与质量门禁。轮询 Gi 开始工作前,确认以下环境变量已设置: ```bash -export GITEA_URL="https://git.zywl.me" -export GITEA_REPO="zeekrAI/document_analyzer" -export GITEA_API_TOKEN="" +# 设置使用的 Gitea 账号(从 ~/.gitea/config.yaml 读取配置) +export GITEA_USER=pzhangzywl +export GITEA_USER=pzhang_qe_agent_01 ``` -GITEA_API_TOKEN 需要 `write:issue`、`write:repository`、`write:user` 权限。如果没有设置,从 `config/secrets.yaml` 中读取。 +GITEA_API_TOKEN 需要 `write:issue`、`write:repository`、`write:user` 权限。Token 和其他 Gitea 连接信息配置在 `~/.gitea/config.yaml` 中。 验收测试需要 LLM API(Layer C QE Audit): - 文本模型:`deepseek-v4-flash`,配置在 `~/.openclaw/config/secrets.yaml` 的 `deepseek` 段 diff --git a/docs/PROJECT_CHARTER.md b/docs/PROJECT_CHARTER.md index 847b8ee..98f2201 100644 --- a/docs/PROJECT_CHARTER.md +++ b/docs/PROJECT_CHARTER.md @@ -33,7 +33,7 @@ ## 项目环境 - 项目目录:`C:\Users\peterz\projects\document_analyzer` -- Gitea 仓库:`https://git.zywl.me/zeekrAI/document_analyzer` +- Gitea 仓库:`$GITEA_URL/$GITEA_REPO`(配置在 `~/.gitea/config.yaml`) - CI/CD:Gitea Actions,配置文件 `ci.yml` - LLM 配置:`~/.openclaw/config/secrets.yaml` - Agent 定义:`agents/DEV_AGENT.md`、`agents/QE_AGENT.md` diff --git a/scripts/_common.sh b/scripts/_common.sh index 56a4735..ce8a7f6 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -8,21 +8,21 @@ set -eu _COMMON_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="${PROJECT_DIR:-$(cd "$_COMMON_DIR/.." && pwd)}" -# ── Load local secrets (not tracked by git) ──────────────────────────────────── -if [ -f "$_COMMON_DIR/.env" ]; then - source "$_COMMON_DIR/.env" +# ── Load Gitea configuration ──────────────────────────────────────────────────── +# Primary: ~/.gitea/config.yaml (requires GITEA_USER) +# Fallback: scripts/.env (backwards compat) +if ! eval "$(python "$_COMMON_DIR/_get_gitea_config.py" 2>/dev/null)"; then + # Fallback: source .env directly + if [ -f "$_COMMON_DIR/.env" ]; then + source "$_COMMON_DIR/.env" + fi fi -# ── Default environment variables ────────────────────────────────────────────── -export GITEA_URL="${GITEA_URL:-https://git.zywl.me}" -export GITEA_REPO="${GITEA_REPO:-zeekrAI/document_analyzer}" - # ── Validate required environment ────────────────────────────────────────────── require_token() { if [ -z "${GITEA_API_TOKEN:-}" ]; then echo "ERROR: GITEA_API_TOKEN is not set." >&2 - echo "Set it in scripts/.env or export it:" >&2 - echo " export GITEA_API_TOKEN=your-token" >&2 + echo "Set it in ~/.gitea/config.yaml (with GITEA_USER) or scripts/.env." >&2 exit 1 fi } diff --git a/scripts/_get_gitea_config.py b/scripts/_get_gitea_config.py new file mode 100644 index 0000000..cba6c93 --- /dev/null +++ b/scripts/_get_gitea_config.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +"""Print Gitea config for current user as shell-exportable variables. + +Usage (bash): + eval "$(python scripts/_get_gitea_config.py)" + +Usage (batch): + for /f "usebackq tokens=1,* delims= " %%a in ( + `python scripts/_get_gitea_config.py --batch 2^>nul` + ) do set "%%b" + +Config: ~/.gitea/config.yaml — multi-profile YAML. +Env: GITEA_USER selects the profile (required). +Fallback: scripts/.env (backwards compat, no GITEA_USER needed). +""" +import os +import sys + +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +CONFIG_PATH = os.path.expanduser("~/.gitea/config.yaml") +ENV_PATH = os.path.join(SCRIPT_DIR, ".env") + + +def _read_yaml_config(path): + import yaml + with open(path) as f: + return yaml.safe_load(f) or {} + + +def main(): + use_batch = "--batch" in sys.argv + prefix = "set" if use_batch else "export" + + # 1) Primary: ~/.gitea/config.yaml + if os.path.exists(CONFIG_PATH): + user = os.environ.get("GITEA_USER") + if not user: + print( + "Error: GITEA_USER is not set. " + "Choose from: " + ", ".join(_read_yaml_config(CONFIG_PATH).keys()), + file=sys.stderr, + ) + sys.exit(1) + + config = _read_yaml_config(CONFIG_PATH) + profile = config.get(user) + if not profile: + print(f"Error: user '{user}' not found in {CONFIG_PATH}", file=sys.stderr) + sys.exit(1) + + print(f'{prefix} GITEA_URL={profile.get("url", "")}') + print(f'{prefix} GITEA_REPO={profile.get("repo", "")}') + print(f'{prefix} GITEA_API_TOKEN={profile.get("token", "")}') + print(f'{prefix} GITEA_USER={user}') + return + + # 2) Fallback: scripts/.env + if os.path.exists(ENV_PATH): + print(f"Warning: {CONFIG_PATH} not found, falling back to {ENV_PATH}", + file=sys.stderr) + with open(ENV_PATH) as f: + for line in f: + line = line.strip() + if line.startswith("export "): + var = line[7:] + if use_batch: + var = var.replace("export ", "set ", 1) + print(var) + if use_batch: + print(f"set GITEA_USER={os.environ.get('GITEA_USER', '')}") + else: + print(f"export GITEA_USER={os.environ.get('GITEA_USER', '')}") + return + + print(f"Error: {CONFIG_PATH} not found. Create it or set up scripts/.env.", + file=sys.stderr) + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/scripts/agent_poller.py b/scripts/agent_poller.py index 0711b5d..232f69b 100644 --- a/scripts/agent_poller.py +++ b/scripts/agent_poller.py @@ -21,19 +21,35 @@ import sys import urllib.request import urllib.error -GITEA_URL = os.environ.get("GITEA_URL", "https://git.zywl.me") -GITEA_REPO = os.environ.get("GITEA_REPO", "zeekrAI/document_analyzer") -GITEA_TOKEN = os.environ.get("GITEA_API_TOKEN", "") -DEV_AGENT_ID = os.environ.get("DEV_AGENT_ID", "da-01") -QE_AGENT_ID = os.environ.get("QE_AGENT_ID", "") +def _load_gitea_config(): + """Load Gitea URL, repo, and token from ~/.gitea/config.yaml or env vars.""" + config_path = os.path.expanduser("~/.gitea/config.yaml") + if os.path.exists(config_path): + import yaml # requires pyyaml + with open(config_path) as f: + config = yaml.safe_load(f) or {} + user = os.environ.get("GITEA_USER") + if not user: + print("Error: GITEA_USER is not set (required for ~/.gitea/config.yaml).", + file=sys.stderr) + sys.exit(1) + profile = config.get(user) + if not profile: + print(f"Error: user '{user}' not found in {config_path}", file=sys.stderr) + sys.exit(1) + return (profile.get("url", ""), profile.get("repo", ""), + profile.get("token", "")) + # Fallback: plain env vars (for CI / backwards compat) + return (os.environ.get("GITEA_URL", ""), + os.environ.get("GITEA_REPO", ""), + os.environ.get("GITEA_API_TOKEN", "")) + + +GITEA_URL, GITEA_REPO, GITEA_TOKEN = _load_gitea_config() +GITEA_USER = os.environ.get("GITEA_USER", "") # Signature appended to all comments / PR bodies -if QE_AGENT_ID: - AGENT_ID = QE_AGENT_ID - AGENT_SIG = f"\n\n---\n[qe-agent: {QE_AGENT_ID}]" -else: - AGENT_ID = DEV_AGENT_ID - AGENT_SIG = f"\n\n---\n[{DEV_AGENT_ID}]" +AGENT_SIG = f"\n\n---\n[{GITEA_USER}]" if GITEA_USER else "" BASE = f"{GITEA_URL}/api/v1/repos/{GITEA_REPO}" diff --git a/scripts/create_failure_issue.py b/scripts/create_failure_issue.py index 4f67cb7..c805500 100644 --- a/scripts/create_failure_issue.py +++ b/scripts/create_failure_issue.py @@ -1,4 +1,4 @@ -"""Create a Gitea issue when CI fails. Called from ci.yml on failure.""" +"""Create a Gitea issue when CI fails. Called from CI workflows.""" import argparse import json @@ -6,9 +6,6 @@ import os import urllib.request import urllib.error -GITEA_URL = "https://git.zywl.me" -REPO = "zeekrAI/document_analyzer" - def main(): parser = argparse.ArgumentParser() @@ -16,14 +13,21 @@ def main(): parser.add_argument("--branch", required=True) parser.add_argument("--run", required=True) parser.add_argument("--message", required=True) + parser.add_argument("--gitea-url", default=os.environ.get("GITEA_URL", ""), + help="Gitea instance URL (default: $GITEA_URL)") + parser.add_argument("--repo", default=os.environ.get("GITEA_REPO", ""), + help="Repo path e.g. org/repo (default: $GITEA_REPO)") parser.add_argument("--api-token", default=os.environ.get("GITEA_API_TOKEN", "")) - parser.add_argument("--workflow", default="CI", help="Workflow name that triggered this (default: CI)") + parser.add_argument("--workflow", default="CI", help="Workflow name (default: CI)") parser.add_argument("--labels", default="ci-failure", - help="Comma-separated labels for the issue (default: ci-failure)") + help="Comma-separated labels (default: ci-failure)") args = parser.parse_args() + if not args.gitea_url or not args.repo: + parser.error("--gitea-url and --repo are required (or set GITEA_URL and GITEA_REPO)") + sha_short = args.sha[:7] - run_url = f"{GITEA_URL}/{REPO}/actions/runs/{args.run}" + run_url = f"{args.gitea_url}/{args.repo}/actions/runs/{args.run}" labels = [l.strip() for l in args.labels.split(",") if l.strip()] title = f"[{args.workflow}] Failure: {args.message[:80]}" @@ -45,7 +49,7 @@ def main(): "labels": labels, }).encode("utf-8") - url = f"{GITEA_URL}/api/v1/repos/{REPO}/issues" + url = f"{args.gitea_url}/api/v1/repos/{args.repo}/issues" req = urllib.request.Request(url, data=payload, method="POST") req.add_header("Authorization", f"token {args.api_token}") req.add_header("Content-Type", "application/json") diff --git a/scripts/start_dev_agent.bat b/scripts/start_dev_agent.bat index 64b5eea..837265e 100644 --- a/scripts/start_dev_agent.bat +++ b/scripts/start_dev_agent.bat @@ -2,23 +2,25 @@ chcp 65001 >nul title Dev-Agent - Gitea Issue Worker +:: ── Parse GITEA_USER from command line ──────────────────────────────────────── +if "%1"=="" ( + echo Usage: start_dev_agent.bat ^ + echo Example: start_dev_agent.bat pzhang_dev_agent_01 + pause + exit /b 1 +) +set GITEA_USER=%1 + :: ── Change to project root ──────────────────────────────────────────────────── cd /d "%~dp0.." -:: ── Load .env (batch-compatible parser: "export KEY=VALUE" → set KEY=VALUE) ── -if exist "scripts\.env" ( - for /f "usebackq tokens=2,3 delims== " %%a in ("scripts\.env") do set %%a=%%b -) +:: ── Load Gitea configuration from ~/.gitea/config.yaml ──────────────────────── +for /f "usebackq tokens=1,* delims= " %%a in (`python scripts\_get_gitea_config.py --batch 2^>nul`) do set "%%b" -:: ── Defaults ────────────────────────────────────────────────────────────────── -if "%GITEA_URL%"=="" set GITEA_URL=https://git.zywl.me -if "%GITEA_REPO%"=="" set GITEA_REPO=zeekrAI/document_analyzer -if "%DEV_AGENT_ID%"=="" set DEV_AGENT_ID=da-01 - -:: ── Validate token ──────────────────────────────────────────────────────────── -if "%GITEA_API_TOKEN%"=="" ( - echo ERROR: GITEA_API_TOKEN is not set. - echo Set it in scripts\.env or in your environment. +:: ── Validate required vars ──────────────────────────────────────────────────── +if "%GITEA_URL%"=="" ( + echo ERROR: Gitea configuration not loaded. + echo Make sure "%USERPROFILE%\.gitea\config.yaml" contains a profile for "%GITEA_USER%". pause exit /b 1 ) diff --git a/scripts/start_dev_agent.sh b/scripts/start_dev_agent.sh index 403fc11..2811677 100644 --- a/scripts/start_dev_agent.sh +++ b/scripts/start_dev_agent.sh @@ -1,16 +1,20 @@ #!/usr/bin/env bash # Dev-Agent 启动脚本 — 单次任务 + 互动轮询 两种模式 -# 用法: bash scripts/start_dev_agent.sh -# 前置: 在 scripts/.env 中设置 GITEA_API_TOKEN +# 用法: bash scripts/start_dev_agent.sh +# 示例: bash scripts/start_dev_agent.sh pzhang_dev_agent_01 set -eu +if [ $# -lt 1 ]; then + echo "Usage: $0 " + echo "Example: $0 pzhang_dev_agent_01" + exit 1 +fi + +export GITEA_USER="$1" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" source "$SCRIPT_DIR/_common.sh" -# Agent 标识: da-MMDD-HHmm,可通过环境变量覆盖 -export DEV_AGENT_ID="${DEV_AGENT_ID:-da-$(date +%m%d-%H%M)}" - banner "Dev" require_token diff --git a/scripts/start_qe_agent.sh b/scripts/start_qe_agent.sh index 78d70b2..b194cbf 100644 --- a/scripts/start_qe_agent.sh +++ b/scripts/start_qe_agent.sh @@ -1,16 +1,20 @@ #!/usr/bin/env bash # QE-Agent 启动脚本 — 单次任务 + 互动轮询 两种模式 -# 用法: bash scripts/start_qe_agent.sh -# 前置: 在 scripts/.env 中设置 GITEA_API_TOKEN +# 用法: bash scripts/start_qe_agent.sh +# 示例: bash scripts/start_qe_agent.sh pzhang_qe_agent_01 set -eu +if [ $# -lt 1 ]; then + echo "Usage: $0 " + echo "Example: $0 pzhang_qe_agent_01" + exit 1 +fi + +export GITEA_USER="$1" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" source "$SCRIPT_DIR/_common.sh" -# Agent 标识: qa-MMDD-HHmm,可通过环境变量覆盖 -export QE_AGENT_ID="${QE_AGENT_ID:-qa-$(date +%m%d-%H%M)}" - banner "QE" require_token -- 2.52.0