Acción de GitHub para crear un token de acceso a la instalación de la aplicación GitHub.
Para utilizar esta acción, necesita:
APP_ID
)PRIVATE_KEY
) Importante
Un token de acceso a la instalación caduca después de 1 hora. Consulte este comentario para conocer enfoques alternativos si tiene procesos de larga duración.
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
Consejo
El <BOT USER ID>
es el ID de usuario numérico del usuario del bot de la aplicación, que se puede encontrar en https://api.github.com/users/<app-slug>%5Bbot%5D
%5Bbot%5D.
Por ejemplo, podemos consultar en https://api.github.com/users/dependabot[bot]
para ver que el ID de usuario de Dependabot es 49699333.
Alternativamente, puede usar octokit/request-action para obtener la identificación.
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! "
Puede utilizar una estrategia matricial para crear tokens para múltiples cuentas de usuarios u organizaciones.
Nota
Consulte esta documentación para obtener información sobre el uso de cadenas multilínea en flujos de trabajo.
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
Requerido: ID de la aplicación GitHub.
private-key
Requerido: clave privada de la aplicación GitHub. Las nuevas líneas escapadas ( \n
) se reemplazarán automáticamente con nuevas líneas reales.
Algunas otras acciones pueden requerir que la clave privada esté codificada en Base64. Para evitar recrear un nuevo secreto, se puede decodificar sobre la marcha, pero es necesario gestionarlo de forma segura. A continuación se muestra un ejemplo de cómo se puede lograr esto:
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
Opcional: el propietario de la instalación de la aplicación GitHub. Si está vacío, el valor predeterminado es el propietario del repositorio actual.
repositories
Opcional: lista de repositorios separados por comas o nuevas líneas a los que otorgar acceso.
Nota
Si se establece owner
y repositories
están vacíos, el acceso se limitará a todos los repositorios en la instalación del propietario del repositorio proporcionado. Si owner
y repositories
están vacíos, el acceso se limitará únicamente al repositorio actual.
skip-token-revoke
Opcional: si es verdadero, el token no se revocará cuando se complete el trabajo actual.
github-api-url
Opcional: la URL de la API REST de GitHub. El valor predeterminado es la URL de la API Rest de GitHub desde donde se ejecuta el flujo de trabajo.
token
Token de acceso a la instalación de la aplicación GitHub.
installation-id
ID de instalación de la aplicación GitHub.
app-slug
Babosa de la aplicación GitHub.
La acción crea un token de acceso a la instalación mediante el punto final POST /app/installations/{installation_id}/access_tokens
. Por defecto,
repositories
actuales, si está configurado.token
de salida que se puede utilizar en pasos posteriores.skip-token-revoke
se establezca en un valor verdadero, el token se revoca en el paso post
de la acción, lo que significa que no se puede pasar a otro trabajo.Nota
Los permisos de instalación pueden diferir de los permisos de la aplicación a la que pertenecen. Los permisos de instalación se establecen cuando se instala una aplicación en una cuenta. Cuando la aplicación agrega más permisos después de la instalación, un administrador de la cuenta deberá aprobar los nuevos permisos antes de que se establezcan en la instalación.
MIT