# PR #25926 完整报告

- 仓库：`sgl-project/sglang`
- 标题：[CI] Fix bot-cherry-pick auth: GITHUB_TOKEN for push, dedicated PAT for PR
- 合并时间：2026-05-21 10:28
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/25926

---

# 执行摘要

- 一句话：修复 cherry-pick 工作流 git push 权限问题
- 推荐动作：PR 修复清晰且必要，建议尽快合并。同时建议仓库管理员按照 PR 描述中的指引创建 `GH_PAT_FOR_CHERRY_PICK` 密钥。

# 功能与动机

`bot-cherry-pick.yml` 自 2026 年 2 月以来每次运行时 `git push` 均返回 403 错误。原因是 checkout 使用了 `GH_PAT_FOR_PULL_REQUEST`（由 `sglang-bot` 持有），而该 PAT 只具有 `Pull requests: Write` 权限，缺少 `Contents: Write`，导致后续 `git push` 被拒。

# 实现拆解

1. **修改 checkout token**：在 `.github/workflows/bot-cherry-pick.yml` 中将 `actions/checkout` 步骤的 `token` 从 `${{ secrets.GH_PAT_FOR_PULL_REQUEST }}` 改为 `${{ secrets.GITHUB_TOKEN }}`。`GITHUB_TOKEN` 由工作流自动生成，且工作流已声明 `permissions: contents: write`，因此能够正常 push 分支。
2. **引入新的 PAT 用于创建 PR**：将 `gh pr create` 步骤的环境变量 `GH_TOKEN` 从 `${{ secrets.GH_PAT_FOR_PULL_REQUEST }}` 改为 `${{ secrets.GH_PAT_FOR_CHERRY_PICK }}`。新 PAT 只需 `Pull requests: Write` 和 `Contents: Read` 权限，用于打开 PR 以触发下游 CI。
3. **修复 `warn!` 宏格式**：在 `sgl-model-gateway/src/service_discovery.rs` 中将过长的 `warn!()` 字符串拆分为多行，以满足 rustfmt 格式要求。这是 #25294 引入的格式漂移，导致 lint 检查失败。

关键文件：
- `.github/workflows/bot-cherry-pick.yml`（模块 CI 工作流；类别 infra；类型 infrastructure）: 核心变更文件，修复了 CI 工作流的认证配置，包含 token 切换和新 PAT 引入。
- `sgl-model-gateway/src/service_discovery.rs`（模块 服务发现；类别 source；类型 infrastructure）: 顺手修复的格式化问题，影响 lint 检查，与本 PR 主要目的无关但被包含在同一提交中。

关键符号：未识别

## 关键源码片段

### `sgl-model-gateway/src/service_discovery.rs`

顺手修复的格式化问题，影响 lint 检查，与本 PR 主要目的无关但被包含在同一提交中。

```rust
// sgl-model-gateway/src/service_discovery.rs
// 改动：将过长的 warn! 调用拆分为多行，满足 rustfmt 格式要求
// 功能不变，仅格式整理
impl PodInfo {
    pub fn should_include(pod: &Pod, config: &ServiceDiscoveryConfig) -> bool {
        if config.pd_mode {
            if config.prefill_selector.is_empty() && config.decode_selector.is_empty() {
                if !(config.igw_mode && !config.selector.is_empty()) {
                    warn!(
                        "PD mode enabled but both prefill_selector and decode_selector are empty"
                    );
                    // 之前是单行：warn!("PD mode enabled but both prefill_selector and decode_selector are empty");
                    return false;
                }
            }
            // ... 后续逻辑不变
        }
    }
}

```

# 评论区精华

无 review 评论或讨论。PR 描述中已详细说明了修复方案和原理。

- 暂无高价值评论线程

# 风险与影响

- 风险：本次改动仅涉及 CI 工作流配置和一行格式调整，风险较低。主要风险在于：如果 `GH_PAT_FOR_CHERRY_PICK` 未正确配置（权限不足或未创建），`gh pr create` 步骤可能失败，但不会影响其他流程。同时，`GITHUB_TOKEN` 的使用符合 GitHub Actions 最佳实践，不会引入安全性问题。
- 影响：直接影响 `bot-cherry-pick.yml` 工作流，修复了长期存在的 `git push` 403 错误，确保 cherry-pick 自动化流程恢复正常。不影响其他工作流或产品代码。对开发者无直接影响，但有助于维护流程的自动化。
- 风险标记：需要管理员创建密钥

# 关联脉络

- PR #25294 [SMG] Support regular worker discovery alongside PD workers in IGW mode: 本 PR 中的 rustfmt 修复是针对 #25294 引入的格式漂移。