You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub创建仓库时自动添加.workflow/config.yml配置文件?

解决思路:GitHub Actions无法直接触发仓库创建事件,换用外部监听+API写入

GitHub Actions是依附于具体仓库运行的,新仓库刚创建时没有任何Actions配置,所以没法直接用Actions触发仓库创建后的操作。得通过监听仓库创建的webhook事件,再调用GitHub API写入目标文件。

具体实现步骤

1. 创建GitHub App并配置权限

  • 注册一个GitHub App,勾选Repository contents权限(设置为“读写”),确保拥有操作仓库文件的权限。
  • 在App的Webhook设置里,添加接收事件的URL(可以用ngrok临时测试,或者部署简单的云函数/服务器),并勾选Repository事件中的created选项。
  • 生成App的私钥并保存,用于后续API鉴权。

2. 编写webhook处理逻辑

当收到repository.created事件时,调用GitHub API向新仓库写入.workflow/config.yml文件:

  • 解析webhook请求中的仓库信息(所有者、仓库名)。
  • 用App私钥生成访问令牌,调用PUT /repos/{owner}/{repo}/contents/.workflow/config.yml接口,上传你的配置文件内容。

示例伪代码(Node.js):

const { Octokit } = require("@octokit/rest");
const jwt = require("jsonwebtoken");

// 生成GitHub App访问令牌
async function getInstallationToken(appId, privateKey, installationId) {
  const payload = {
    iss: appId,
    exp: Math.floor(Date.now() / 1000) + 60 * 10,
    iat: Math.floor(Date.now() / 1000),
  };
  const token = jwt.sign(payload, privateKey, { algorithm: "RS256" });
  
  const octokit = new Octokit({ auth: `Bearer ${token}` });
  const res = await octokit.apps.createInstallationAccessToken({ installation_id: installationId });
  return res.data.token;
}

// 写入配置文件
async function addWorkflowConfig(owner, repo, token) {
  const octokit = new Octokit({ auth: token });
  await octokit.rest.repos.createOrUpdateFileContents({
    owner,
    repo,
    path: ".workflow/config.yml",
    message: "Add default workflow config",
    content: Buffer.from("你的GitHub Actions配置内容").toString("base64"),
  });
}

// 处理webhook请求
app.post("/webhook", async (req, res) => {
  const { action, repository } = req.body;
  if (action === "created") {
    const token = await getInstallationToken(你的AppID, 你的私钥, repository.owner.id);
    await addWorkflowConfig(repository.owner.login, repository.name, token);
  }
  res.sendStatus(200);
});

3. 替代方案:用个人访问令牌(PAT)定时检查

如果不想部署服务器,也可以在现有仓库中设置定时Actions,定期检查账户下的新仓库并写入配置:

  • 创建带repo权限的个人访问令牌(PAT),存入仓库Secrets(命名为REPO_PAT)。
  • 编写Actions工作流,定时运行脚本获取新仓库列表,写入配置文件。

示例Actions配置:

name: Add Default Workflow Config
on:
  schedule:
    - cron: '0 0 * * *' # 每天凌晨运行
  workflow_dispatch: # 支持手动触发

jobs:
  add-config:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20
      - name: Install dependencies
        run: npm install @octokit/rest
      - name: Add config to new repos
        env:
          PAT: ${{ secrets.REPO_PAT }}
        run: node ./add-config.js

对应的add-config.js核心逻辑:

  • 调用API获取所有仓库,筛选出最近创建的(比如24小时内)。
  • 对每个新仓库,检查.workflow/config.yml是否存在,不存在则调用API写入。

注意事项

  • 令牌权限要最小化,且妥善保管,避免泄露。
  • 若为组织账户,需将GitHub App安装到整个组织,才能监听组织内的仓库创建事件。

内容的提问来源于stack exchange,提问作者mbt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:53:18