关闭

使用 GitHub API 创建仓库并设置 Actions Secrets

问题背景

你希望通过 GitHub API 自动创建一个新的仓库,并为该仓库设置 GitHub Actions Secrets,以便于自动化工作流。

解决步骤

第一步:准备个人访问令牌(PAT)

  1. 登录到 GitHub 账户。
  2. 前往“设置” -> “开发者设置” -> “个人访问令牌”。
  3. 创建一个新的个人访问令牌,并确保选择了 repoworkflow 权限。

第二步:使用 API 创建仓库

使用以下 curl 命令或相应的编程语言库来创建一个新的仓库:

curl -X POST -H "Authorization: token YOUR_PERSONAL_ACCESS_TOKEN" \
  -d '{"name": "new-repo", "private": false}' \
  https://api.github.com/user/repos

第三步:获取仓库的 ID

在创建仓库后,从返回的 JSON 数据中获取仓库的 ID。这个 ID 将用于设置 Actions Secrets。

第四步:设置 Actions Secrets

使用以下 curl 命令或相应的编程语言库来设置一个新的 Actions Secret:

curl -X PUT -H "Authorization: token YOUR_PERSONAL_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"encrypted_value": "ENCRYPTED_VALUE", "key_id": "KEY_ID"}' \
  https://api.github.com/repos/:owner/:repo/actions/secrets/SECRET_NAME
  • ENCRYPTED_VALUE 是你要设置的 Secret 值的 Base64 编码。
  • KEY_ID 是用于加密的公钥 ID,可以从仓库的 Actions Secrets 页面获取。

第五步:测试

运行一个使用新设置的 Actions Secret 的 GitHub Actions 工作流,以确保一切正常。

注意事项

  • 请确保妥善保管个人访问令牌。
  • 在设置 Actions Secrets 时,需要先获取用于加密的公钥。

这样的待办事项是否满足你的需求?需要进一步的信息或解释吗?

结果

#!/bin/bash

# 你的个人访问令牌(PAT),请替换为实际的令牌
TOKEN="YOUR_PERSONAL_ACCESS_TOKEN"

# 新仓库的名称和所有者(通常是你的 GitHub 用户名)
REPO_NAME="new-repo"
OWNER="your-github-username"

# 要设置的 Actions Secret 的名称和值
SECRET_NAME="MY_SECRET"
SECRET_VALUE="my-secret-value"

# 创建新的 GitHub 仓库
create_repo_response=$(curl -s -X POST -H "Authorization: token $TOKEN" \
  -d "{\"name\": \"$REPO_NAME\", \"private\": false}" \
  https://api.github.com/user/repos)

# 从响应中获取新仓库的 ID
REPO_ID=$(echo $create_repo_response | jq '.id')

# 获取用于加密的公钥
public_key_response=$(curl -s -X GET -H "Authorization: token $TOKEN" \
  https://api.github.com/repos/$OWNER/$REPO_NAME/actions/secrets/public-key)

KEY_ID=$(echo $public_key_response | jq -r '.key_id')
PUBLIC_KEY=$(echo $public_key_response | jq -r '.key')

# 使用公钥加密 Secret 值(这里使用了 Python)
ENCRYPTED_VALUE=$(echo -n $SECRET_VALUE | openssl rsautl -encrypt -oaep -pubin -inkey <(echo -e "-----BEGIN PUBLIC KEY-----\n$PUBLIC_KEY\n-----END PUBLIC KEY-----") | base64)

# 设置新的 Actions Secret
curl -s -X PUT -H "Authorization: token $TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"encrypted_value\": \"$ENCRYPTED_VALUE\", \"key_id\": \"$KEY_ID\"}" \
  https://api.github.com/repos/$OWNER/$REPO_NAME/actions/secrets/$SECRET_NAME

echo "Repository and secret have been created."
邀请标记你的阅读体验😉 | →