用途:本技能面向 .github/workflows/ 下工作流文件的编写与审查,解决“YAML 能解析、但 GitHub Actions 加载时拒绝运行”的问题。典型症状是运行失败并提示“This run likely failed because of a workflow file issue”,且没有任何 job 启动。
主要能力:讲解 YAML 与 Actions 的语法差异,重点是 # 注释陷阱——在未加引号的普通标量中,空格加 # 之后的内容会被静默丢弃,使 ${{ }} 表达式被截断;yaml.safe_load 仍能通过,但 Actions 会拒绝。技能给出需要加引号的字符清单(空格加 #、前导 * & ! ? | > @ `、前导 { 或 [、冒号加空格、需保留的首尾空格、需保持字符串的 true/false/yes/no/on/off/数字等),并说明用双引号包裹整个标量、内层表达式用单引号即可,不要转义 ${{ }} 花括号。
使用方式:先用 git diff --name-only origin/main... -- .github/workflows/ 找出改动文件,扫描含 ${{ 且带 #、冒号加空格或前导特殊字符的行并加引号;再用 actionlint 验证,例如下载固定版本后执行 ./actionlint -shellcheck= -pyflakes= -color .github/workflows/*.yml,退出码 0 表示结构有效。截断表达式会报 got unexpected EOF while lexing end of string literal 之类错误。Windows PowerShell 使用对应 zip 资源并 Expand-Archive。
适用场景:编辑、新增或审查工作流文件;编写含 ${{ }} 的 run-name、name、if、env、with、run 值;工作流编辑合并后 CI 突然全部失败;判断标量是否需要加引号。
限制:不适用于非 Actions 的 YAML(应用配置、Kubernetes、Compose、Azure Pipelines、GitLab CI),也不处理已合法 run: 块内的纯 shell 逻辑。仅靠 yaml.safe_load、yamllint 或代码审查不足以发现该问题,必须用 actionlint 或实际推送观察 Actions 解析。本技能只保证语法与结构正确,不涉及工作流应实现的行为或智能体工作流设计。