使用 GitHub API 创建仓库并设置 Actions Secrets
问题背景
你希望通过 GitHub API 自动创建一个新的仓库,并为该仓库设置 GitHub Actions Secrets,以便于自动化工作流。
解决步骤
第一步:准备个人访问令牌(PAT)
- 登录到 GitHub 账户。
- 前往“设置” -> “开发者设置” -> “个人访问令牌”。
- 创建一个新的个人访问令牌,并确保选择了
repo
和workflow
权限。
第二步:使用 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."