GitHub Action pour créer un jeton d'accès à l'installation de l'application GitHub.
Pour utiliser cette action, vous devez :
APP_ID
)PRIVATE_KEY
) Important
Un jeton d'accès à l'installation expire après 1 heure. Veuillez consulter ce commentaire pour connaître des approches alternatives si vous avez des processus de longue durée.
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
Conseil
Le <BOT USER ID>
est l'ID utilisateur numérique de l'utilisateur du bot de l'application, qui peut être trouvé sous https://api.github.com/users/<app-slug>%5Bbot%5D
.
Par exemple, nous pouvons vérifier sur https://api.github.com/users/dependabot[bot]
pour voir que l'ID utilisateur de Dependabot est 49699333.
Alternativement, vous pouvez utiliser octokit/request-action pour obtenir l'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! "
Vous pouvez utiliser une stratégie matricielle pour créer des jetons pour plusieurs comptes d'utilisateurs ou d'organisation.
Note
Consultez cette documentation pour plus d'informations sur l'utilisation de chaînes multilignes dans les workflows.
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
Obligatoire : ID de l’application GitHub.
private-key
Obligatoire : clé privée de l’application GitHub. Les nouvelles lignes échappées ( \n
) seront automatiquement remplacées par les nouvelles lignes réelles.
Certaines autres actions peuvent nécessiter que la clé privée soit codée en Base64. Pour éviter de recréer un nouveau secret, celui-ci peut être décodé à la volée, mais il doit être géré de manière sécurisée. Voici un exemple de la façon dont cela peut être réalisé :
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
Facultatif : le propriétaire de l'installation de l'application GitHub. S'il est vide, la valeur par défaut est le propriétaire actuel du référentiel.
repositories
Facultatif : liste de référentiels séparés par des virgules ou des sauts de ligne auxquels accorder l'accès.
Note
Si owner
est défini et repositories
sont vides, l'accès sera limité à tous les référentiels de l'installation du propriétaire du référentiel fourni. Si owner
et repositories
sont vides, l'accès sera limité au référentiel actuel.
skip-token-revoke
Facultatif : s'il est vrai, le jeton ne sera pas révoqué une fois la tâche en cours terminée.
github-api-url
Facultatif : L'URL de l'API REST GitHub. La valeur par défaut est l'URL de l'API GitHub Rest à partir de laquelle le workflow est exécuté.
token
Jeton d’accès à l’installation de l’application GitHub.
installation-id
ID d’installation de l’application GitHub.
app-slug
Limace de l’application GitHub.
L'action crée un jeton d'accès à l'installation à l'aide du point de terminaison POST /app/installations/{installation_id}/access_tokens
. Par défaut,
repositories
actuels s'il est défini.token
de sortie qui peut être utilisé dans les étapes suivantes.skip-token-revoke
soit définie sur une valeur véridique, le jeton est révoqué lors de l'étape post
à l'action, ce qui signifie qu'il ne peut pas être transmis à une autre tâche.Note
Les autorisations d'installation peuvent différer des autorisations de l'application à laquelle elles appartiennent. Les autorisations d'installation sont définies lorsqu'une application est installée sur un compte. Lorsque l'application ajoute des autorisations supplémentaires après l'installation, un administrateur de compte devra approuver les nouvelles autorisations avant qu'elles ne soient définies lors de l'installation.
MIT