|
| 1 | +--- |
| 2 | +name: gem5-manual-perf-trigger |
| 3 | +description: 用于在本地通过 `gh` 远程触发 OpenXiangShan/GEM5 的 `manual-perf.yml`,并在触发后检查 run 是否正常创建。适用于用户明确要求触发 `manual-perf`、组装 `gh workflow run` 命令、校验 workflow 输入项、或确认触发后的 Actions run 状态。 |
| 4 | +--- |
| 5 | + |
| 6 | +# GEM5 Manual Perf Trigger |
| 7 | + |
| 8 | +## 概述 |
| 9 | + |
| 10 | +这个 skill 用于安全、可追溯地触发远端 GitHub Actions `manual-perf.yml`。核心目标不是只把命令发出去,而是先确认本地触发条件,再确认输入参数,再在触发后检查 run 是否真的正常创建。 |
| 11 | + |
| 12 | +当前约束: |
| 13 | + |
| 14 | +- 已确认 `manual-perf.yml` 在本仓库上可通过 `gh workflow run` 触发。 |
| 15 | +- 已实际走通的配置只有 `kmhv3.py`。 |
| 16 | +- 其他配置虽然在 workflow 的 `inputs` 中存在,但当前没有实际跑通记录,触发前必须明确提醒用户这一点。 |
| 17 | + |
| 18 | +## 工作流 |
| 19 | + |
| 20 | +### 第 1 步:检查本地触发能力 |
| 21 | + |
| 22 | +优先检查 `gh` 是否可用: |
| 23 | + |
| 24 | +```bash |
| 25 | +gh --version |
| 26 | +``` |
| 27 | + |
| 28 | +如果 `gh` 不可用: |
| 29 | + |
| 30 | +- 明确提示用户先安装 `gh`。 |
| 31 | +- 或者提供 GitHub REST API `workflow_dispatch` 的 `curl` 方案。 |
| 32 | +- 但必须同时说明:`curl` 触发流程在当前仓库协作里未实际走通过,只能作为备选方案,可靠性不如 `gh` 已验证路径。 |
| 33 | + |
| 34 | +不要在 `gh` 缺失时直接假设 `curl` 方案可用并继续执行。 |
| 35 | + |
| 36 | +### 第 2 步:检查认证状态 |
| 37 | + |
| 38 | +检查 `gh` 是否已登录: |
| 39 | + |
| 40 | +```bash |
| 41 | +gh auth status |
| 42 | +``` |
| 43 | + |
| 44 | +如果未登录,或者 token 无效: |
| 45 | + |
| 46 | +- 提示用户先执行 `gh auth login` |
| 47 | +- 或者提示用户配置具备 `repo`、`workflow` 权限的 token |
| 48 | + |
| 49 | +说明要点: |
| 50 | + |
| 51 | +- 使用 `gh workflow run` 时,推荐优先走 `gh auth login` |
| 52 | +- 如果未来改走 REST API,则需要用户自行准备 token |
| 53 | + |
| 54 | +### 第 3 步:读取 workflow 输入项 |
| 55 | + |
| 56 | +在触发前,读取并核对 `.github/workflows/manual-perf.yml` 的 `workflow_dispatch.inputs`。 |
| 57 | + |
| 58 | +当前已知关键输入项: |
| 59 | + |
| 60 | +- `configuration` |
| 61 | +- `benchmark_type` |
| 62 | +- `specific_benchmarks` |
| 63 | +- `vector_type` |
| 64 | +- `branch` |
| 65 | + |
| 66 | +当前已验证存在的配置选项: |
| 67 | + |
| 68 | +- `kmhv2.py` |
| 69 | +- `kmhv3.py` |
| 70 | +- `idealkmhv3.py` |
| 71 | + |
| 72 | +但必须提醒用户: |
| 73 | + |
| 74 | +- `manual-perf` 已实际走通的是 `kmhv3.py` |
| 75 | +- 其他配置目前只是 workflow 中支持,暂未在本技能流程里实际验证 |
| 76 | + |
| 77 | +### 第 4 步:向用户确认触发参数 |
| 78 | + |
| 79 | +在真正触发前,必须向用户确认以下信息: |
| 80 | + |
| 81 | +- 配置文件:如 `kmhv3.py` |
| 82 | +- benchmark 类型:如 `gcc12-spec06-1.0c` |
| 83 | +- 是否只跑指定 benchmark:如 `mcf,omnetpp` |
| 84 | +- 目标分支、tag 或 SHA:通常是当前分支 |
| 85 | +- `vector_type`:默认 `base` |
| 86 | + |
| 87 | +如果用户没有给全: |
| 88 | + |
| 89 | +- 主动补问缺失项 |
| 90 | +- 不要私自猜测 benchmark 集合 |
| 91 | + |
| 92 | +如果用户要触发非 `kmhv3.py` 配置: |
| 93 | + |
| 94 | +- 必须先提示“当前只有 `kmhv3.py` 经过实际触发验证,其他配置暂未在此流程中验证” |
| 95 | + |
| 96 | +### 第 5 步:先展示命令,再执行 |
| 97 | + |
| 98 | +触发前先把准备执行的命令原样展示给用户,得到确认后再执行。 |
| 99 | + |
| 100 | +标准命令模板: |
| 101 | + |
| 102 | +```bash |
| 103 | +gh workflow run manual-perf.yml \ |
| 104 | + --repo OpenXiangShan/GEM5 \ |
| 105 | + --ref <branch> \ |
| 106 | + -f configuration=<configuration> \ |
| 107 | + -f benchmark_type=<benchmark_type> \ |
| 108 | + -f specific_benchmarks=<specific_benchmarks> \ |
| 109 | + -f vector_type=<vector_type> \ |
| 110 | + -f branch=<branch> |
| 111 | +``` |
| 112 | + |
| 113 | +说明: |
| 114 | + |
| 115 | +- `--ref` 使用要触发的远端分支 |
| 116 | +- `branch` input 也通常填写同一个分支 |
| 117 | +- `specific_benchmarks` 可为空;为空表示按 workflow 跑该集合全部 benchmark |
| 118 | + |
| 119 | +### 第 6 步:触发后回查 run |
| 120 | + |
| 121 | +只拿到 “Created workflow_dispatch event” 不够。触发成功后必须继续检查: |
| 122 | + |
| 123 | +1. 返回的 run 链接是否存在 |
| 124 | +2. `gh run view <run-id>` 是否能正常读取 |
| 125 | +3. run 是否进入了正常状态,例如 `queued`、`in_progress`,而不是立刻 `failure` 或不存在 |
| 126 | + |
| 127 | +建议的检查方式: |
| 128 | + |
| 129 | +```bash |
| 130 | +gh run view <run-id> --repo OpenXiangShan/GEM5 |
| 131 | +``` |
| 132 | + |
| 133 | +必要时可继续查看: |
| 134 | + |
| 135 | +```bash |
| 136 | +gh run view <run-id> --repo OpenXiangShan/GEM5 --json status,conclusion,url,name,headBranch,headSha |
| 137 | +``` |
| 138 | + |
| 139 | +如果 run 创建失败、找不到、或立刻异常终止: |
| 140 | + |
| 141 | +- 不要简单说“已触发” |
| 142 | +- 要明确说明触发异常,并给出当前检查到的状态 |
| 143 | + |
| 144 | +## 输出要求 |
| 145 | + |
| 146 | +执行本 skill 时,回复应遵守以下格式约束: |
| 147 | + |
| 148 | +- 先说明当前准备做什么 |
| 149 | +- 如果缺少 `gh` 或认证,先阻断并提示用户处理 |
| 150 | +- 触发前先展示完整命令 |
| 151 | +- 明确提醒:`manual-perf` 当前实际走通过的是 `kmhv3.py`,其他配置暂未实际验证 |
| 152 | +- 触发后提供 run 链接 |
| 153 | +- 触发后追加 run 状态检查结果,而不是只给链接 |
| 154 | + |
| 155 | +## 失败处理 |
| 156 | + |
| 157 | +### `gh` 未安装 |
| 158 | + |
| 159 | +给出两条路径: |
| 160 | + |
| 161 | +1. 安装 `gh` 后再触发 |
| 162 | +2. 使用 REST API `workflow_dispatch` |
| 163 | + |
| 164 | +但必须注明: |
| 165 | + |
| 166 | +- REST API `curl` 路径当前未在本流程中实际走通过 |
| 167 | +- 它是备选,不是首选 |
| 168 | + |
| 169 | +### `gh` 已安装但未登录 |
| 170 | + |
| 171 | +提示: |
| 172 | + |
| 173 | +```bash |
| 174 | +gh auth login |
| 175 | +gh auth status |
| 176 | +``` |
| 177 | + |
| 178 | +### workflow 输入不完整 |
| 179 | + |
| 180 | +阻断执行,向用户补问: |
| 181 | + |
| 182 | +- 配置文件 |
| 183 | +- benchmark 类型 |
| 184 | +- benchmark 子集 |
| 185 | +- 分支 |
| 186 | + |
| 187 | +### 触发后找不到 run |
| 188 | + |
| 189 | +优先检查: |
| 190 | + |
| 191 | +- 仓库名是否正确 |
| 192 | +- 分支是否已 push 到远端 |
| 193 | +- workflow 文件名是否正确 |
| 194 | +- token 是否具备 `workflow` 权限 |
| 195 | + |
| 196 | +## 示例 |
| 197 | + |
| 198 | +### 示例 1:只跑 `mcf,omnetpp` |
| 199 | + |
| 200 | +用户意图: |
| 201 | + |
| 202 | +- 配置:`kmhv3.py` |
| 203 | +- benchmark:`gcc12-spec06-1.0c` |
| 204 | +- 仅跑:`mcf,omnetpp` |
| 205 | +- 分支:`turbo-pfalign-dualPort-l2Bank-nopf` |
| 206 | + |
| 207 | +先展示命令: |
| 208 | + |
| 209 | +```bash |
| 210 | +gh workflow run manual-perf.yml \ |
| 211 | + --repo OpenXiangShan/GEM5 \ |
| 212 | + --ref turbo-pfalign-dualPort-l2Bank-nopf \ |
| 213 | + -f configuration=kmhv3.py \ |
| 214 | + -f benchmark_type=gcc12-spec06-1.0c \ |
| 215 | + -f specific_benchmarks=mcf,omnetpp \ |
| 216 | + -f vector_type=base \ |
| 217 | + -f branch=turbo-pfalign-dualPort-l2Bank-nopf |
| 218 | +``` |
| 219 | + |
| 220 | +触发后再检查 run 状态,并返回链接与状态。 |
| 221 | + |
| 222 | +## 资源 |
| 223 | + |
| 224 | +当前 skill 不依赖额外 `scripts/`、`references/`、`assets/`。 |
0 commit comments