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]
에서 확인할 수 있으며, Sendabot의 사용자 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
선택사항: 진실인 경우 현재 작업이 완료될 때 토큰이 취소되지 않습니다.
github-api-url
선택사항: GitHub REST API의 URL입니다. 워크플로가 실행되는 GitHub Rest API의 URL이 기본값입니다.
token
GitHub 앱 설치 액세스 토큰.
installation-id
GitHub 앱 설치 ID입니다.
app-slug
GitHub 앱 슬러그.
이 작업은 POST /app/installations/{installation_id}/access_tokens
엔드포인트를 사용하여 설치 액세스 토큰을 생성합니다. 기본적으로
repositories
로 지정됩니다.token
으로 설정됩니다.skip-token-revoke
입력이 실제 값으로 설정되지 않으면 작업의 post
단계에서 토큰이 취소됩니다. 즉, 다른 작업으로 전달할 수 없습니다.메모
설치 권한은 자신이 속한 앱의 권한과 다를 수 있습니다. 설치 권한은 계정에 앱을 설치할 때 설정됩니다. 설치 후 앱이 더 많은 권한을 추가하는 경우 설치 시 설정되기 전에 계정 관리자가 새 권한을 승인해야 합니다.
MIT