如何正确设置 Github 应用程序提交者以显示应用程序创建了提交?

问题描述 投票:0回答:4

使用 GitHub Api 时,您可以提供作者和提交者信息,例如当您

PUT
content
文件时。

我希望能够使用 GitHub 应用程序作为

committer
,以便人们了解提交是使用第三方工具完成的,并且作者信息保留为经过身份验证的用户。

目前我使用应用程序名称作为

name
committer
以及应用程序域的电子邮件。但这根本不会将提交与应用程序绑定在一起(例如:我必须使用该电子邮件创建一个机器人帐户才能使其显示任何类型的个人资料等,但这不会真正与我的 Github 应用程序绑定)。

正确的做法是什么?或者我不应该尝试使用该应用程序作为

committer
而只使用经过身份验证的用户作为
committer

github github-api github-app
4个回答
16
投票

虽然如果您想通过 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 是其中的一部分。


4
投票
您可以使用您提到的相同的

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
    

0
投票
如果您像我一样对如何从 Marcel 的示例中获取

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
这个简洁的脚本


0
投票
我在 GH-Action 工作流程中使用它:

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"
    
© www.soinside.com 2019 - 2024. All rights reserved.