Dependabot 및 GitHub Actions 정보
Dependabot은 종속성을 최신 상태로 유지하기 위해 끌어오기 요청을 만들고, 해당 끌어오기 요청이 생성될 때 GitHub Actions를 사용하여 자동화된 작업을 수행할 수 있습니다. 예를 들어 추가 아티팩트 가져오기, 레이블 추가, 테스트 실행 또는 끌어오기 요청 수정 등이 있습니다.
Note
이 문서에서는 GitHub Actions을(를) 사용하여 Dependabot 관련 작업을 자동화하는 방법을 설명합니다. GitHub Actions에서 Dependabot version updates를 사용하는 방법에 대한 자세한 내용은 GitHub Actions 실행기의 Dependabot 정보을(를) 참조하세요.
이벤트에 응답
Dependabot은 끌어오기 요청 및 댓글에서 GitHub Actions 워크플로를 트리거할 수 있지만 다른 방식으로 처리되는 이벤트도 있습니다.
Dependabot(github.actor == 'dependabot[bot]'
)에서 pull_request
, pull_request_review``pull_request_review_comment``push``create
, deployment
, deployment_status
이벤트를 사용하여 시작한 워크플로에는 다음 제한 사항이 적용됩니다.
GITHUB_TOKEN
에는 기본적으로 읽기 권한만이 부여되어 있습니다.- 비밀은 Dependabot의 비밀에서 채워집니다. GitHub Actions 비밀을 사용할 수 없습니다.
Dependabot(github.actor == 'dependabot[bot]'
)에서 pull_request_target
이벤트를 사용하여 시작한 워크플로의 경우 끌어오기 요청의 기본 참조가 Dependabot(github.event.pull_request.user.login == 'dependabot[bot]'
)에 의해 만들어졌다면 GITHUB_TOKEN
은 읽기 전용이며 비밀을 사용할 수 없습니다.
이러한 제한은 다른 행위자가 워크플로를 다시 실행하는 경우에도 적용됩니다.
자세한 내용은 GitHub Actions 및 워크플로 보안 유지: pwn 요청 방지를 참조하세요.
GITHUB_TOKEN
권한 변경
기본적으로 Dependabot로 트리거된 GitHub Actions 워크플로에는 GITHUB_TOKEN
과 읽기 전용 권한이 제공됩니다. 워크플로의 permissions
키를 사용하여 토큰에 대한 액세스를 늘릴 수 있습니다.
name: CI
on: pull_request
# Set the access for individual scopes, or use permissions: write-all
permissions:
pull-requests: write
issues: write
repository-projects: write
...
jobs:
...
자세한 내용은 자동 토큰 인증을(를) 참조하세요.
비밀에 액세스
Dependabot 이벤트가 워크플로를 트리거하는 경우 워크플로에서 사용할 수 있는 유일한 비밀은 Dependabot 비밀뿐입니다. GitHub Actions 비밀을 사용할 수 없습니다. 따라서 Dependabot 이벤트에 의해 트리거되는 워크플로에서 사용되는 비밀을 Dependabot 비밀로 저장해야 합니다. 자세한 내용은 Dependabot에 대한 개인 레지스트리 액세스 구성을(를) 참조하세요.
Dependabot 비밀은 secrets
컨텍스트에 추가되고 GitHub Actions에 대한 비밀과 정확히 동일한 구문을 사용하여 참조됩니다. 자세한 내용은 GitHub Actions에서 비밀 사용을(를) 참조하세요.
Dependabot 및 다른 행위자가 트리거하는 워크플로가 있는 경우 가장 간단한 해결 방법은 작업에 필요한 권한과 이름이 동일한 Dependabot 비밀에 토큰을 저장하는 것입니다. 그러면 워크플로는 해당 비밀에 대한 단일 호출을 포함할 수 있습니다. Dependabot의 비밀 이름이 다른 경우 조건을 사용하여 여러 작업자가 사용할 올바른 비밀을 지정합니다. 조건을 사용하는 예시는 아래의 일반적인 자동화를 참조하세요.
사용자 이름 및 암호를 사용하여 AWS의 프라이빗 컨테이너 레지스트리에 액세스하려면 워크플로에 username
및 password
에 대한 비밀이 포함되어 있어야 합니다. 아래 예시에서 Dependabot이 워크플로를 트리거하면 이름이 READONLY_AWS_ACCESS_KEY_ID``READONLY_AWS_ACCESS_KEY
인 Dependabot 비밀이 사용됩니다. 다른 작업자가 워크플로를 트리거하는 경우 해당 이름의 작업 비밀이 사용됩니다.
name: CI
on:
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Login to private container registry for dependencies
uses: docker/login-action@3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c
with:
registry: https://1234567890.dkr.ecr.us-east-1.amazonaws.com
username: ${{ secrets.READONLY_AWS_ACCESS_KEY_ID }}
password: ${{ secrets.READONLY_AWS_ACCESS_KEY }}
- name: Build the Docker image
run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)
수동으로 워크플로 다시 실행
Dependabot 워크플로를 수동으로 다시 실행하면 다시 실행을 시작한 사용자에게 다른 권한이 있더라도 이전과 동일한 권한으로 실행됩니다. 자세한 내용은 워크플로 및 작업 다시 실행을(를) 참조하세요.
일반적인 Dependabot 자동화
다음은 GitHub Actions를 사용하여 자동화할 수 있는 일반적인 시나리오입니다.
끌어오기 요청에 대한 메타데이터 가져오기
대량의 자동화를 사용하려면 끌어오기 요청의 내용에 대한 정보, 즉 종속성 이름이 무엇인지, 프로덕션 종속성인지, 주요 업데이트인지, 사소한 업데이트인지 또는 패치 업데이트인지를 알고 있어야 합니다.
dependabot/fetch-metadata
작업은 사용자에게 모든 정보를 제공합니다.
name: Dependabot fetch metadata
on: pull_request
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
# The following properties are now available:
# - steps.metadata.outputs.dependency-names
# - steps.metadata.outputs.dependency-type
# - steps.metadata.outputs.update-type
자세한 내용은 dependabot/fetch-metadata
리포지토리를 참조하세요.
끌어오기 요청에 레이블 지정
GitHub 레이블을 기반으로 하는 다른 자동화 또는 심사 워크플로가 있는 경우 제공된 메타데이터에 따라 레이블을 할당하도록 작업을 구성할 수 있습니다.
예를 들어 레이블을 사용하여 모든 프로덕션 종속성 업데이트에 플래그를 지정하려는 경우:
name: Dependabot auto-label
on: pull_request
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Add a label for all production dependencies
if: steps.metadata.outputs.dependency-type == 'direct:production'
run: gh pr edit "$PR_URL" --add-label "production"
env:
PR_URL: ${{github.event.pull_request.html_url}}
끌어오기 요청 승인
Dependabot 끌어오기 요청을 자동으로 승인하려면 워크플로에서 GitHub CLI를 사용할 수 있습니다.
name: Dependabot auto-approve
on: pull_request
permissions:
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Approve a PR
run: gh pr review --approve "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
끌어오기 요청에서 자동 병합 사용
유지 관리자가 자동 병합에 대한 특정 끌어오기 요청을 표시하도록 허용하려면 GitHub의 자동 병합 기능을 사용할 수 있습니다. 이를 통해 분기 보호 규칙에서 요구하는 테스트 및 승인이 성공적으로 충족될 때 끌어오기 요청을 병합할 수 있습니다. 자세한 내용은 끌어오기 요청 자동 병합 및 분기 보호 규칙 관리을(를) 참조하세요.
분기 보호 규칙 대신 규칙 집합을 만들 수 있습니다. 자세한 내용은 규칙 세트 정보을(를) 참조하세요.
Note
상태 확인을 사용하여 끌어오기 요청을 테스트하는 경우 Dependabot 끌어오기 요청에 대해 대상 분기에 대해 병합하기 전에 상태 검사 필요를 사용하도록 설정해야 합니다. 이 분기 보호 규칙을 사용하면 필요한 모든 상태 검사를 통과하지 않을 경우 끌어오기 요청이 병합되지 않습니다. 자세한 내용은 분기 보호 규칙 관리을(를) 참조하세요.
대신 GitHub Actions 및 GitHub CLI를 사용할 수 있습니다. 다음은 my-dependency
에 대한 모든 패치 업데이트를 자동으로 병합하는 예제입니다.
name: Dependabot auto-merge
on: pull_request
permissions:
contents: write
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Enable auto-merge for Dependabot PRs
if: contains(steps.metadata.outputs.dependency-names, 'my-dependency') && steps.metadata.outputs.update-type == 'version-update:semver-patch'
run: gh pr merge --auto --merge "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
실패한 워크플로 실행 문제 해결
워크플로 실행이 실패하면 다음을 확인합니다.
- 올바른 작업자가 워크플로를 트리거하는 경우에만 워크플로를 실행합니다.
pull_request
에 대해 올바른ref
를 체크 아웃합니다.- 비밀은 GitHub Actions 비밀이 아닌 Dependabot 비밀에서 제공됩니다.
- 올바른 권한이 있는
GITHUB_TOKEN
이 있습니다.
GitHub Actions 쓰기 및 디버깅에 대한 자세한 내용은 워크플로 작성을(를) 참조하세요.