mcpField
G
github-actions-creator

github-actions-creator

github.com/davila7云与 DevOps33.0k203 次安装1 天前更新
代码仓库

关于 github-actions-creator

指导开发者创建 GitHub Actions 工作流文件的技能。它先检查项目文件和现有 CI/CD,再根据常见工作流场景应用模式与安全实践。

主要功能

  1. 01检查项目与开发工具
  2. 02为模糊需求提出澄清问题
  3. 03CI、部署和发布模式
  4. 04测试矩阵与缓存指导
  5. 05工作流安全建议

适用场景

  1. 01配置 CI 测试和代码检查
  2. 02创建部署或发布工作流
  3. 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 之前,先扫描项目以了解其技术栈:

  1. 检查语言/框架指示文件:

    • package.json → Node.js(检查是否使用 React、Next.js、Vue、Angular、Svelte 等)
    • requirements.txt / pyproject.toml / setup.py → Python
    • go.mod → Go
    • Cargo.toml → Rust
    • pom.xml / build.gradle → Java/Kotlin
    • Gemfile → Ruby
    • composer.json → PHP
    • pubspec.yaml → Dart/Flutter
    • Package.swift → Swift
    • *.csproj / *.sln → .NET
  2. 检查现有 CI/CD:

    • .github/workflows/ → 现有工作流(避免冲突)
    • Dockerfile → 可用的容器构建
    • docker-compose.yml → 多服务配置
    • vercel.json / netlify.toml → 部署目标
    • terraform/ / pulumi/ → 基础设施即代码
  3. 检查工具配置:

    • .eslintrc* / eslint.config.* → 已配置 ESLint
    • prettier* → 已配置 Prettier
    • jest.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@stableRust 工具链
ruby/setup-ruby@v1配置 Ruby 并启用 bundler 缓存
actions/setup-dotnet@v4.NET SDK
构建与部署操作
操作用途
docker/build-push-action@v6Docker 多平台构建
docker/login-action@v3Docker 注册表身份验证
aws-actions/configure-aws-credentials@v4AWS 身份验证
google-github-actions/auth@v2GCP 身份验证
azure/login@v2Azure 身份验证
cloudflare/wrangler-action@v3部署 Cloudflare Workers
amondnet/vercel-action@v25Vercel 部署
质量与安全操作
操作用途
github/codeql-action/analyze@v3CodeQL 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@v2Slack 通知
peter-evans/create-pull-request@v7自动创建 PR

安全最佳实践(务必遵循)

  1. 最小权限: 始终在工作流或作业级别声明 permissions
  2. 将操作固定到主版本: 使用 @v4,而不是 @main 或完整 SHA,以便于阅读
  3. 切勿回显机密: 机密会被屏蔽,但仍应避免使用 echo ${{ secrets.X }}
  4. 使用环境: 部署到生产环境时,使用带有保护规则的 GitHub Environments
  5. 验证输入: 对于 workflow_dispatch,请验证输入值
  6. 避免脚本注入: 切勿在 run: 中直接使用 ${{ github.event.*.body }} —— 应通过环境变量传递
  7. 使用 GITHUB_TOKEN: 尽可能优先使用 ${{ secrets.GITHUB_TOKEN }},而不是 PAT
  8. 并发控制: 使用 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 * *

输出格式

创建工作流文件后,请提供:

  1. 工作流的作用 — 用一段话概述
  2. 所需机密 — 列出用户需要在 Settings > Secrets 中配置的机密
  3. 所需权限 — 如果工作流需要非默认的仓库权限,请说明
  4. 如何测试 — 说明如何触发工作流(推送、创建 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'

保持工作流聚焦。优先为每个关注点创建一个工作流,而不是创建一个庞大的工作流;除非各作业紧密耦合。

评论

支持 Markdown