GitHub Action สำหรับสร้างโทเค็นการเข้าถึงการติดตั้งแอป 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]
เพื่อดู User ID ของ Dependabot คือ 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
private-key
จำเป็น: รหัสส่วนตัวของแอป GitHub การขึ้นบรรทัดใหม่ที่ใช้ Escape ( \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
ทางเลือก: URL ของ GitHub REST API ค่าเริ่มต้นเป็น URL ของ GitHub Rest API ที่เวิร์กโฟลว์ทำงาน
token
โทเค็นการเข้าถึงการติดตั้งแอป GitHub
installation-id
รหัสการติดตั้งแอป GitHub
app-slug
ทากแอป GitHub
การดำเนินการสร้างโทเค็นการเข้าถึงการติดตั้งโดยใช้ตำแหน่งข้อมูล POST /app/installations/{installation_id}/access_tokens
โดยค่าเริ่มต้น
repositories
หากตั้งค่าไว้token
เอาต์พุตซึ่งสามารถใช้ในขั้นตอนต่อๆ ไปskip-token-revoke
ถูกตั้งค่าเป็นค่าความจริง โทเค็นจะถูกเพิกถอนในขั้น post
การดำเนินการ ซึ่งหมายความว่าไม่สามารถส่งต่อไปยังงานอื่นได้บันทึก
สิทธิ์ในการติดตั้งอาจแตกต่างจากสิทธิ์ของแอปที่มีอยู่ สิทธิ์ในการติดตั้งจะถูกตั้งค่าเมื่อมีการติดตั้งแอปในบัญชี เมื่อแอปเพิ่มการอนุญาตเพิ่มเติมหลังการติดตั้ง ผู้ดูแลบัญชีจะต้องอนุมัติการอนุญาตใหม่ก่อนที่จะตั้งค่าในการติดตั้ง
เอ็มไอที