使用 GitHub Api 时,您可以提供作者和提交者信息,例如当您
PUT
content
文件时。
我希望能够使用 GitHub 应用程序作为
committer
,以便人们了解提交是使用第三方工具完成的,并且作者信息保留为经过身份验证的用户。
目前我使用应用程序名称作为
name
的 committer
以及应用程序域的电子邮件。但这根本不会将提交与应用程序绑定在一起(例如:我必须使用该电子邮件创建一个机器人帐户才能使其显示任何类型的个人资料等,但这不会真正与我的 Github 应用程序绑定)。
正确的做法是什么?或者我不应该尝试使用该应用程序作为
committer
而只使用经过身份验证的用户作为 committer
?
虽然如果您想通过 GitHub 的 API 提交,则需要使用令牌,但当您只需要...的 ID 时,您实际上不需要经历处理应用程序私钥和创建 JWT 的麻烦。
git config --global user.name "myciapp[bot]"
git config --global user.email 123456789+myciapp[bot]@users.noreply.github.com
要获取该 ID(上面的123456789
),只需致电:
https://api.github.com/users/myciapp[bot]
myciapp
替换为您的应用程序名称,但保留
[bot]
后缀。您甚至不需要使用身份验证令牌运行此请求 - 它返回公共信息,并且您的应用程序的“用户”ID 是其中的一部分。
content api 来确定您需要什么。通过创建文件获得的响应是一个 json,它会告诉您分配给 github 应用程序的用户 ID。注意 author
下面的
commit
对象,您应该看到类似这样的内容:
curl \
-X PUT \
-H "Authorization: token ${TOKEN}" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/msgongora/fubectl/contents/test-file \
-d '{"message":"message","content":"Y29udGVudA==","branch":"mrsg"}'
{
"content": {
...
"commit": {
...
"author": {
"name": "myciapp[bot]",
"email": "1234545665+myciapp[bot]@users.noreply.github.com",
"date": "2021-04-07T06:28:18Z"
},
...
}
一旦获得,您就可以为应用程序设置名称和电子邮件,就像为普通用户设置一样:
git config --global user.name "myciapp[bot]"
git config --global user.email 1234545665+myciapp[bot]@users.noreply.github.com
TOKEN
感到困惑,这里有一个您可以从 shell 运行的命令。您将需要您的应用程序 ID(数字)、应用程序私钥和您的存储库名称。
export APP_ID=123456
export APP_SECRET="$(cat app.private-key.pem)"
export GH_REPO=owner/repo
export TOKEN=$(bash get_github_app_token.sh)
curl -X PUT \
-H "Authorization: token ${TOKEN}" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/$GH_REPO/contents/test-file \
-d '{"message":"message","content":"Y29udGVudA==","branch":"test"}'
这将在分支test
上创建一个提交。分支必须存在。 该命令将返回包含所需凭据的 JSON。 这需要
open-ssl
、
jq
、
curl
和这个简洁的脚本。
APP="myciapp"
APP_USER_ID="$(curl -SsL 'https://api.github.com/users/${APP}%5Bbot%5D' | jq '.id' -r)"
git config --global user.name "${APP}[bot]"
git config --global user.email "${APP_USER_ID}+${APP}[bot]@users.noreply.github.com"