跳到内容
🛠️ToolsShed

GitHub Actions Generator

为CI/CD管道生成GitHub Actions工作流YAML,支持自定义触发器、作业和步骤。

name: CI
on:
  push:
    branches: [main, master]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test

      - name: Build
        run: npm run build

关于此工具

GitHub Actions Generator 是一款基于浏览器的工具,帮助开发者创建 CI/CD 工作流文件,无需手动编写 YAML 语法。通过直观的界面选择触发器、作业和构建步骤,该工具会自动生成生产就绪的工作流 YAML,可直接复制到存储库的 .github/workflows 目录中。

要使用此工具,首先定义工作流触发器(推送事件、拉取请求、定时运行或手动触发),然后配置每个作业应执行的步骤。您可以添加多个按顺序或并行运行的作业,指定环境变量,并包含常见操作,如安装依赖、运行测试、构建代码和部署到生产环境。这种方法非常适合第一次设置持续集成的团队、希望避免 YAML 语法错误的开发者,或者更喜欢可视化工作流构建器而不是手写配置文件的任何人。

生成的 YAML 完全兼容 GitHub Actions,无需额外格式化,直接粘贴到工作流文件中,然后根据需要自定义密钥或凭证即可。虽然该工具简化了工作流创建过程,但复杂的多环境部署或高级缓存策略可能仍需对生成的输出进行手动微调。

常见问题

代码实现

import yaml

def generate_github_actions_workflow(
    name: str,
    trigger: str,
    jobs: list[dict]
) -> str:
    workflow = {
        "name": name,
        "on": {},
        "jobs": {}
    }

    if trigger == "push":
        workflow["on"] = {"push": {"branches": ["main"]}}
    elif trigger == "pull_request":
        workflow["on"] = {"pull_request": {"branches": ["main"]}}
    elif trigger == "schedule":
        workflow["on"] = {"schedule": [{"cron": "0 0 * * *"}]}
    else:
        workflow["on"] = {trigger: {}}

    for job in jobs:
        job_id = job["id"]
        workflow["jobs"][job_id] = {
            "runs-on": job.get("runs_on", "ubuntu-latest"),
            "steps": job.get("steps", [])
        }

    return yaml.dump(workflow, default_flow_style=False, sort_keys=False)

# Example: Node.js CI workflow
jobs = [
    {
        "id": "build",
        "runs_on": "ubuntu-latest",
        "steps": [
            {"uses": "actions/checkout@v4"},
            {"name": "Setup Node", "uses": "actions/setup-node@v4",
             "with": {"node-version": "20"}},
            {"name": "Install dependencies", "run": "npm ci"},
            {"name": "Run tests", "run": "npm test"},
        ]
    }
]

yaml_output = generate_github_actions_workflow("CI", "push", jobs)
print(yaml_output)

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.