关于 github-actions-creator
指导开发者创建 GitHub Actions 工作流文件的技能。它先检查项目文件和现有 CI/CD,再根据常见工作流场景应用模式与安全实践。
主要功能
- 01检查项目与开发工具
- 02为模糊需求提出澄清问题
- 03CI、部署和发布模式
- 04测试矩阵与缓存指导
- 05工作流安全建议
适用场景
- 01配置 CI 测试和代码检查
- 02创建部署或发布工作流
- 03添加定时任务或安全扫描
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ davila7/ claude-code-templates --skill github-actions-creator安装后在 Claude Code 中输入/github-actions-creator确认已加载。
附带文件references/workflow-templates.md
详细介绍
GitHub Actions 创建者
你擅长创建 GitHub Actions 工作流。当用户要求你创建 GitHub Action 时,请遵循以下结构化流程,交付可用于生产环境的工作流文件。
工作流创建流程
第 1 步:分析项目
编写任何 YAML 之前,先扫描项目以了解其技术栈:
-
检查语言/框架指示文件:
package.json→ Node.js(检查是否使用 React、Next.js、Vue、Angular、Svelte 等)requirements.txt/pyproject.toml/setup.py→ Pythongo.mod→ GoCargo.toml→ Rustpom.xml/build.gradle→ Java/KotlinGemfile→ Rubycomposer.json→ PHPpubspec.yaml→ Dart/FlutterPackage.swift→ Swift*.csproj/*.sln→ .NET
-
检查现有 CI/CD:
.github/workflows/→ 现有工作流(避免冲突)Dockerfile→ 可用的容器构建docker-compose.yml→ 多服务配置vercel.json/netlify.toml→ 部署目标terraform//pulumi/→ 基础设施即代码
-
检查工具配置:
.eslintrc*/eslint.config.*→ 已配置 ESLintprettier*→ 已配置 Prettierjest.config*/vitest.config*/pytest.ini→ 测试框架.env.example→ 所需的环境变量Makefile→ 可用的构建命令
第 2 步:提出澄清问题(如有需要)
如果用户的请求含糊不清,请提出一个有针对性的问题。常见的澄清问题:
- “创建 CI 流水线” → “应该只运行测试,还是也运行 lint 和类型检查?”
- “添加部署” → “要部署到哪里?(Vercel、AWS、GCP、Docker Hub 等)”
- “设置测试” → “测试应仅在 PR 时运行,还是也在推送到 main 时运行?”
如果意图明确,则跳过此步骤并继续。
第 3 步:生成工作流
按照以下规则创建 .github/workflows/{name}.yml 文件:
文件命名
- 使用描述性 kebab-case 名称:
ci.yml、deploy-production.yml、release.yml - 对于简单的 CI:
ci.yml - 对于部署:
deploy.yml或deploy-{target}.yml - 对于计划任务:
scheduled-{task}.yml
YAML 结构规则
name: Human-readable name # Always include
on: # Use the most specific triggers
push:
branches: [main] # Specify branches explicitly
paths-ignore: # Skip docs-only changes when appropriate
- '**.md'
- 'docs/**'
pull_request:
branches: [main]
permissions: # Always set minimal permissions
contents: read
concurrency: # Prevent duplicate runs on PRs
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
job-name:
runs-on: ubuntu-latest # Default to ubuntu-latest
timeout-minutes: 15 # Always set a timeout
steps:
- uses: actions/checkout@v4 # Always pin to major version
按用途划分的核心模式
CI(测试 + Lint)
触发条件: 对 main 发起 pull_request + push
作业: lint、test(尽可能并行)
关键功能: 依赖缓存、针对多个版本进行矩阵测试
部署
触发条件: 对 main 执行 push(或推送发布标签)
作业: test → build → deploy(通过 needs 按顺序执行)
关键功能: 环境保护、用于凭据的密钥、状态检查
发布/发布包
触发条件: 推送匹配 v* 的 push 标签,或 workflow_dispatch
作业: test → build → publish → 创建 GitHub Release
关键功能: 生成更新日志、上传构件、发布到 npm/PyPI/Docker
计划任务
触发条件: 使用 cron 表达式的 schedule
作业: 执行该任务的单个作业
关键功能: 同时支持通过 workflow_dispatch 手动触发、失败通知
安全扫描
触发条件: pull_request + schedule(每周)
作业: 依赖项审计、SAST、密钥扫描
关键功能: 将 SARIF 上传到 GitHub Security 选项卡、严重问题时失败
Docker 构建与推送
触发条件: 对 main 执行 push + 标签
作业: build → 推送到注册表
关键功能: 多平台构建、层缓存、镜像标记策略
必备 Action 参考
设置类 Action(始终固定到主版本)
| Action | 用途 |
|---|---|
actions/checkout@v4 | 克隆代码库 |
actions/setup-node@v4 | 配置 Node.js 并启用缓存 |
actions/setup-python@v5 | 配置 Python 并启用缓存 |
actions/setup-go@v5 | 配置 Go 并启用缓存 |
actions/setup-java@v4 | 配置 Java/Kotlin |
dtolnay/rust-toolchain@stable | Rust 工具链 |
ruby/setup-ruby@v1 | 配置 Ruby 并启用 bundler 缓存 |
actions/setup-dotnet@v4 | .NET SDK |
构建与部署操作
| 操作 | 用途 |
|---|---|
docker/build-push-action@v6 | Docker 多平台构建 |
docker/login-action@v3 | Docker 注册表身份验证 |
aws-actions/configure-aws-credentials@v4 | AWS 身份验证 |
google-github-actions/auth@v2 | GCP 身份验证 |
azure/login@v2 | Azure 身份验证 |
cloudflare/wrangler-action@v3 | 部署 Cloudflare Workers |
amondnet/vercel-action@v25 | Vercel 部署 |
质量与安全操作
| 操作 | 用途 |
|---|---|
github/codeql-action/analyze@v3 | CodeQL SAST 扫描 |
aquasecurity/trivy-action@master | 容器漏洞扫描 |
codecov/codecov-action@v4 | 上传覆盖率数据 |
actions/dependency-review-action@v4 | 审核 PR 中的依赖项 |
实用操作
| 操作 | 用途 |
|---|---|
actions/cache@v4 | 通用缓存 |
actions/upload-artifact@v4 | 存储构建工件 |
actions/download-artifact@v4 | 在作业之间获取工件 |
softprops/action-gh-release@v2 | 创建 GitHub Releases |
slackapi/slack-github-action@v2 | Slack 通知 |
peter-evans/create-pull-request@v7 | 自动创建 PR |
安全最佳实践(务必遵循)
- 最小权限: 始终在工作流或作业级别声明
permissions - 将操作固定到主版本: 使用
@v4,而不是@main或完整 SHA,以便于阅读 - 切勿回显机密: 机密会被屏蔽,但仍应避免使用
echo ${{ secrets.X }} - 使用环境: 部署到生产环境时,使用带有保护规则的 GitHub Environments
- 验证输入: 对于
workflow_dispatch,请验证输入值 - 避免脚本注入: 切勿在
run:中直接使用${{ github.event.*.body }}—— 应通过环境变量传递 - 使用 GITHUB_TOKEN: 尽可能优先使用
${{ secrets.GITHUB_TOKEN }},而不是 PAT - 并发控制: 使用
concurrency防止并行部署
# WRONG - script injection vulnerability
- run: echo "${{ github.event.issue.title }}"
# CORRECT - pass through environment variable
- run: echo "$ISSUE_TITLE"
env:
ISSUE_TITLE: ${{ github.event.issue.title }}
缓存策略
Node.js
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm' # or 'yarn' or 'pnpm'
Python
- uses: actions/setup-python@v5
with:
python-version: '3.12'
cache: 'pip' # or 'poetry' or 'pipenv'
Go
- uses: actions/setup-go@v5
with:
go-version: '1.22'
cache: true
Rust
- uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
Docker
- uses: docker/build-push-action@v6
with:
cache-from: type=gha
cache-to: type=gha,mode=max
矩阵测试模式
多个 Node.js 版本
strategy:
matrix:
node-version: [18, 20, 22]
fail-fast: false
多个操作系统
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
包含排除项的复杂矩阵
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [18, 20]
exclude:
- os: windows-latest
node-version: 18
Cron 语法速查
| 计划 | Cron |
|---|---|
| 每小时 | 0 * * * * |
| 每天 UTC 午夜 | 0 0 * * * |
| 工作日 UTC 上午 9 点 | 0 9 * * 1-5 |
| 每周日 | 0 0 * * 0 |
| 每月 1 日 | 0 0 1 * * |
输出格式
创建工作流文件后,请提供:
- 工作流的作用 — 用一段话概述
- 所需机密 — 列出用户需要在 Settings > Secrets 中配置的机密
- 所需权限 — 如果工作流需要非默认的仓库权限,请说明
- 如何测试 — 说明如何触发工作流(推送、创建 PR、手动调度)
可组合的常见模式
当用户提出“设置 CI/CD”之类的通用需求时,创建一个包含多个作业的工作流:
jobs:
lint: # Fast feedback
test: # Core validation
build: # Ensure it compiles/bundles
needs: [lint, test]
deploy: # Only after everything passes
needs: build
if: github.ref == 'refs/heads/main'
保持工作流聚焦。优先为每个关注点创建一个工作流,而不是创建一个庞大的工作流;除非各作业紧密耦合。