用于创建 GitHub 应用程序安装访问令牌的 GitHub 操作。
为了使用此操作,您需要:
APP_ID
)PRIVATE_KEY
) 重要的
安装访问令牌将在 1 小时后过期。如果您有长时间运行的流程,请参阅此评论以获取替代方法。
name : Run tests on staging
on :
push :
branches :
- main
jobs :
hello-world :
runs-on : ubuntu-latest
steps :
- uses : actions/create-github-app-token@v1
id : app-token
with :
app-id : ${{ vars.APP_ID }}
private-key : ${{ secrets.PRIVATE_KEY }}
- uses : ./actions/staging-tests
with :
token : ${{ steps.app-token.outputs.token }}
actions/checkout
结合使用 on : [pull_request]
jobs :
auto-format :
runs-on : ubuntu-latest
steps :
- uses : actions/create-github-app-token@v1
id : app-token
with :
# required
app-id : ${{ vars.APP_ID }}
private-key : ${{ secrets.PRIVATE_KEY }}
- uses : actions/checkout@v4
with :
token : ${{ steps.app-token.outputs.token }}
ref : ${{ github.head_ref }}
# Make sure the value of GITHUB_TOKEN will not be persisted in repo's config
persist-credentials : false
- uses : creyD/[email protected]
with :
github_token : ${{ steps.app-token.outputs.token }}
on : [pull_request]
jobs :
auto-format :
runs-on : ubuntu-latest
steps :
- uses : actions/create-github-app-token@v1
id : app-token
with :
# required
app-id : ${{ vars.APP_ID }}
private-key : ${{ secrets.PRIVATE_KEY }}
- name : Get GitHub App User ID
id : get-user-id
run : echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT"
env :
GH_TOKEN : ${{ steps.app-token.outputs.token }}
- id : committer
run : echo "string=${{ steps.app-token.outputs.app-slug }}[bot] <${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com>" >> "$GITHUB_OUTPUT"
- run : echo "committer string is ${ {steps.committer.outputs.string }}"
on : [pull_request]
jobs :
auto-format :
runs-on : ubuntu-latest
steps :
- uses : actions/create-github-app-token@v1
id : app-token
with :
# required
app-id : ${{ vars.APP_ID }}
private-key : ${{ secrets.PRIVATE_KEY }}
- name : Get GitHub App User ID
id : get-user-id
run : echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT"
env :
GH_TOKEN : ${{ steps.app-token.outputs.token }}
- run : |
git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]'
git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com>'
# git commands like commit work using the bot user
- run : |
git add .
git commit -m "Auto-generated changes"
git push
提示
<BOT USER ID>
是应用程序机器人用户的数字用户 ID,可以在https://api.github.com/users/<app-slug>%5Bbot%5D
下找到。
例如,我们可以在https://api.github.com/users/dependabot[bot]
上查看,Dependabot的用户ID是49699333。
或者,您可以使用 octokit/request-action 来获取 ID。
on : [workflow_dispatch]
jobs :
hello-world :
runs-on : ubuntu-latest
steps :
- uses : actions/create-github-app-token@v1
id : app-token
with :
app-id : ${{ vars.APP_ID }}
private-key : ${{ secrets.PRIVATE_KEY }}
owner : ${{ github.repository_owner }}
- uses : peter-evans/create-or-update-comment@v3
with :
token : ${{ steps.app-token.outputs.token }}
issue-number : ${{ github.event.issue.number }}
body : " Hello, World! "
on : [issues]
jobs :
hello-world :
runs-on : ubuntu-latest
steps :
- uses : actions/create-github-app-token@v1
id : app-token
with :
app-id : ${{ vars.APP_ID }}
private-key : ${{ secrets.PRIVATE_KEY }}
owner : ${{ github.repository_owner }}
repositories : |
repo1
repo2
- uses : peter-evans/create-or-update-comment@v3
with :
token : ${{ steps.app-token.outputs.token }}
issue-number : ${{ github.event.issue.number }}
body : " Hello, World! "
on : [issues]
jobs :
hello-world :
runs-on : ubuntu-latest
steps :
- uses : actions/create-github-app-token@v1
id : app-token
with :
app-id : ${{ vars.APP_ID }}
private-key : ${{ secrets.PRIVATE_KEY }}
owner : another-owner
- uses : peter-evans/create-or-update-comment@v3
with :
token : ${{ steps.app-token.outputs.token }}
issue-number : ${{ github.event.issue.number }}
body : " Hello, World! "
您可以使用矩阵策略为多个用户或组织帐户创建令牌。
笔记
有关在工作流程中使用多行字符串的信息,请参阅此文档。
on : [workflow_dispatch]
jobs :
set-matrix :
runs-on : ubuntu-latest
outputs :
matrix : ${{ steps.set.outputs.matrix }}
steps :
- id : set
run : echo 'matrix=[{"owner":"owner1"},{"owner":"owner2","repos":["repo1"]}]' >>"$GITHUB_OUTPUT"
use-matrix :
name : " @${{ matrix.owners-and-repos.owner }} installation "
needs : [set-matrix]
runs-on : ubuntu-latest
strategy :
matrix :
owners-and-repos : ${{ fromJson(needs.set-matrix.outputs.matrix) }}
steps :
- uses : actions/create-github-app-token@v1
id : app-token
with :
app-id : ${{ vars.APP_ID }}
private-key : ${{ secrets.PRIVATE_KEY }}
owner : ${{ matrix.owners-and-repos.owner }}
repositories : ${{ join(matrix.owners-and-repos.repos) }}
- uses : octokit/[email protected]
id : get-installation-repositories
with :
route : GET /installation/repositories
env :
GITHUB_TOKEN : ${{ steps.app-token.outputs.token }}
- run : echo "$MULTILINE_JSON_STRING"
env :
MULTILINE_JSON_STRING : ${{ steps.get-installation-repositories.outputs.data }}
on : [push]
jobs :
create_issue :
runs-on : self-hosted
steps :
- name : Create GitHub App token
id : create_token
uses : actions/create-github-app-token@v1
with :
app-id : ${{ vars.GHES_APP_ID }}
private-key : ${{ secrets.GHES_APP_PRIVATE_KEY }}
owner : ${{ vars.GHES_INSTALLATION_ORG }}
github-api-url : ${{ vars.GITHUB_API_URL }}
- name : Create issue
uses : octokit/[email protected]
with :
route : POST /repos/${{ github.repository }}/issues
title : " New issue from workflow "
body : " This is a new issue created from a GitHub Action workflow. "
env :
GITHUB_TOKEN : ${{ steps.create_token.outputs.token }}
app-id
必需: GitHub 应用程序 ID。
private-key
必需: GitHub 应用程序私钥。转义换行符 ( \n
) 将自动替换为实际换行符。
其他一些操作可能需要对私钥进行 Base64 编码。为了避免重新创建新的秘密,可以即时对其进行解码,但需要对其进行安全管理。以下是如何实现这一目标的示例:
steps :
- name : Decode the GitHub App Private Key
id : decode
run : |
private_key=$(echo "${{ secrets.PRIVATE_KEY }}" | base64 -d | awk 'BEGIN {ORS="\n"} {print}' | head -c -2) &> /dev/null
echo "::add-mask::$private_key"
echo "private-key=$private_key" >> "$GITHUB_OUTPUT"
- name : Generate GitHub App Token
id : app-token
uses : actions/create-github-app-token@v1
with :
app-id : ${{ vars.APP_ID }}
private-key : ${{ steps.decode.outputs.private-key }}
owner
可选: GitHub 应用程序安装的所有者。如果为空,则默认为当前存储库所有者。
repositories
可选:要授予访问权限的逗号或换行符分隔的存储库列表。
笔记
如果设置了owner
并且repositories
为空,则访问范围将仅限于所提供的存储库所有者安装中的所有存储库。如果owner
和repositories
为空,则访问范围将仅限于当前存储库。
skip-token-revoke
可选:如果为 true,则当前作业完成时不会撤销令牌。
github-api-url
可选: GitHub REST API 的 URL。默认为运行工作流的 GitHub Rest API 的 URL。
token
GitHub 应用程序安装访问令牌。
installation-id
GitHub 应用程序安装 ID。
app-slug
GitHub 应用程序 slug。
该操作使用POST /app/installations/{installation_id}/access_tokens
端点创建安装访问令牌。默认情况下,
repositories
如果已设置)。token
。skip-token-revoke
输入设置为真值,否则令牌将在操作的post
步骤中被撤销,这意味着它不能传递给另一个作业。笔记
安装权限可能不同于它们所属的应用程序的权限。安装权限是在帐户上安装应用程序时设置的。当应用程序在安装后添加更多权限时,帐户管理员必须先批准新权限,然后再在安装上进行设置。
麻省理工学院