GitHub-Aktion zum Erstellen eines Zugriffstokens für die GitHub-App-Installation.
Um diese Aktion nutzen zu können, müssen Sie Folgendes tun:
APP_ID
).PRIVATE_KEY
) Wichtig
Ein Installationszugriffstoken läuft nach einer Stunde ab. In diesem Kommentar finden Sie alternative Ansätze für Prozesse mit langer Laufzeit.
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
verwenden 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
Tipp
Die <BOT USER ID>
ist die numerische Benutzer-ID des Bot-Benutzers der App, die unter https://api.github.com/users/<app-slug>%5Bbot%5D
zu finden ist.
Beispielsweise können wir unter https://api.github.com/users/dependabot[bot]
nachsehen, dass die Benutzer-ID von Dependabot 49699333 lautet.
Alternativ können Sie die Aktion octokit/request-action verwenden, um die ID abzurufen.
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! "
Sie können eine Matrixstrategie verwenden, um Token für mehrere Benutzer- oder Organisationskonten zu erstellen.
Notiz
Informationen zur Verwendung mehrzeiliger Zeichenfolgen in Workflows finden Sie in dieser Dokumentation.
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
Erforderlich: GitHub-App-ID.
private-key
Erforderlich: Privater Schlüssel der GitHub-App. Mit Escapezeichen versehene Zeilenumbrüche ( \n
) werden automatisch durch tatsächliche Zeilenumbrüche ersetzt.
Für einige andere Aktionen kann es erforderlich sein, dass der private Schlüssel Base64-codiert ist. Um zu vermeiden, dass ein neues Geheimnis neu erstellt wird, kann es im laufenden Betrieb entschlüsselt werden, muss jedoch sicher verwaltet werden. Hier ist ein Beispiel, wie dies erreicht werden kann:
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
Optional: Der Besitzer der GitHub-App-Installation. Wenn leer, wird standardmäßig der aktuelle Repository-Eigentümer verwendet.
repositories
Optional: Durch Kommas oder Zeilenumbrüche getrennte Liste der Repositorys, auf die Zugriff gewährt werden soll.
Notiz
Wenn owner
festgelegt ist und repositories
leer sind, ist der Zugriff auf alle Repositorys in der Installation des bereitgestellten Repository-Eigentümers beschränkt. Wenn owner
und repositories
leer sind, ist der Zugriff nur auf das aktuelle Repository beschränkt.
skip-token-revoke
Optional: Wenn der Wert wahr ist, wird das Token nicht widerrufen, wenn der aktuelle Auftrag abgeschlossen ist.
github-api-url
Optional: Die URL der GitHub REST API. Standardmäßig ist die URL der GitHub-Rest-API, von der aus der Workflow ausgeführt wird.
token
Zugriffstoken für die GitHub-App-Installation.
installation-id
Installations-ID der GitHub-App.
app-slug
GitHub-App-Slug.
Die Aktion erstellt ein Installationszugriffstoken mithilfe des POST /app/installations/{installation_id}/access_tokens
. Standardmäßig ist
repositories
beschränkt, sofern es festgelegt ist.token
festgelegt, der in den folgenden Schritten verwendet werden kann.skip-token-revoke
nicht auf einen wahren Wert gesetzt ist, wird das Token im post
Schritt der Aktion widerrufen, was bedeutet, dass es nicht an einen anderen Job übergeben werden kann.Notiz
Installationsberechtigungen können von den Berechtigungen der App, zu der sie gehören, abweichen. Installationsberechtigungen werden festgelegt, wenn eine App auf einem Konto installiert wird. Wenn die App nach der Installation weitere Berechtigungen hinzufügt, muss ein Kontoadministrator die neuen Berechtigungen genehmigen, bevor sie bei der Installation festgelegt werden.
MIT