Skip to main content

GitHub Actions를 통한 Dependabot 자동화

GitHub Actions를 사용하여 일반적인 Dependabot 관련 작업을 자동화하는 방법의 예입니다.

누가 이 기능을 사용할 수 있나요?

쓰기 권한이 있는 사용자

Dependabot가 종속성을 업데이트하기 위해 풀 리퀘스트를 생성할 때 GitHub Actions를 사용하여 자동화된 작업을 수행할 수 있습니다. 다음을 수행하려는 경우 이 유용한 정보를 찾을 수 있습니다.

  • Dependabot 끌어오기 요청(버전 업데이트 및 보안 업데이트)이 레이블 및 이름을 비롯한 작업 프로세스에 적합한 데이터로 생성되었는지 확인합니다.

  • 검토 프로세스에 Dependabot 끌어오기 요청(버전 업데이트 및 보안 업데이트)을 보내거나 자동으로 병합하도록 워크플로를 트리거합니다.

엔터프라이즈에서 Dependabot 활성화하기

Dependabot 및 GitHub Actions 정보

중요

Dependabot이(가) 리포지토리에 활성화된 경우, 항상 GitHub Actions에서 실행되어 리포지토리 또는 조직 수준에서 작업 정책 검사 및 비활성화를 모두 우회합니다. 이렇게 하면 보안 및 버전 업데이트 워크플로가 Dependabot을 사용할 때도 항상 실행됩니다.

Dependabot는 종속성을 최신 상태로 유지하기 위해 풀 리퀘스트를 생성합니다. 이러한 풀 리퀘스트가 생성될 때 GitHub Actions를 사용하여 자동화된 작업을 수행할 수 있습니다. 예를 들어, 추가 아티팩트를 가져오거나, 레이블을 추가하거나, 테스트를 실행하거나, 그 외에 풀 리퀘스트를 수정할 수 있습니다.

Dependabot은 끌어오기 요청 및 댓글에서 GitHub Actions 워크플로를 트리거할 수 있지만 다른 방식으로 처리되는 이벤트도 있습니다. 자세한 내용은 GitHub Actions에서 Dependabot 문제 해결을 참조하세요.

다음은 GitHub Actions를 사용하여 자동화할 수 있는 풀 리퀘스트의 일반적인 몇 가지 시나리오입니다.

풀 리퀘스트에 대한 메타데이터 가져오기

대부분의 자동화는 풀 리퀘스트 내용에 대한 정보를 알아야 합니다. 예를 들어, 종속성 이름, 프로덕션 종속성 여부, 그리고 주요, 부, 패치 업데이트인지 여부가 필요합니다. Dependabot가 생성한 풀 리퀘스트에서 업데이트되는 종속성에 대한 정보를 가져오기 위해 액션을 사용할 수 있습니다.

예제:

YAML
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.
# 작업은 타사에서 제공하며
# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.
# 참조하세요.
name: Dependabot fetch metadata
on: pull_request

permissions:
  pull-requests: write
  issues: 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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
        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 레이블을 기반으로 하는 다른 자동화 또는 분류 워크플로가 있는 경우, 제공된 메타데이터를 기반으로 레이블을 할당하도록 액션을 구성할 수 있습니다.

모든 프로덕션 종속성 업데이트에 레이블을 지정하는 예시:

YAML
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.
# 작업은 타사에서 제공하며
# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.
# 참조하세요.
name: Dependabot auto-label
on: pull_request

permissions:
  pull-requests: write
  issues: 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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
        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}}

풀 리퀘스트 자동 승인

워크플로에서 GitHub CLI를 사용하여 Dependabot 풀 리퀘스트를 자동으로 승인할 수 있습니다.

예제:

YAML
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.
# 작업은 타사에서 제공하며
# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.
# 참조하세요.
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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
        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의 자동 병합 기능을 사용할 수 있습니다. 브랜치 보호 규칙에서 요구하는 모든 테스트와 승인 요건이 성공적으로 충족되면, 이로써 해당 풀 리퀘스트를 병합할 수 있게 됩니다.

자세한 내용은 끌어오기 요청 자동 병합브랜치 보호 규칙 관리을(를) 참조하세요.

대신 GitHub Actions 및 GitHub CLI를 사용할 수 있습니다. 다음은 my-dependency에 대한 모든 패치 업데이트를 자동으로 병합하는 예제입니다.

YAML
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.
# 작업은 타사에서 제공하며
# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.
# 참조하세요.
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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
        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}}

참고

상태 확인을 사용하여 끌어오기 요청을 테스트하는 경우 Dependabot 끌어오기 요청에 대해 대상 분기에 대해 병합하기 전에 상태 검사 필요를 사용하도록 설정해야 합니다. 이 분기 보호 규칙은 모든 필수 상태 검사를 통과하지 않는 한 끌어오기 요청이 병합되지 않도록 보장합니다. 자세한 내용은 브랜치 보호 규칙 관리을(를) 참조하세요.

Dependabot 및 GitHub Actions 정책

일반적으로 워크플로가 리포지토리에서 실행될 수 있는지 여부는 GitHub Actions 정책 확인과 GitHub Actions가 조직 또는 리포지토리 수준에서 활성화되었는지 여부에 따라 달라집니다. 이러한 제어는 워크플로 실행을 제한할 수 있으며, 특히 외부 액션이 차단되었거나 GitHub Actions가 완전히 비활성화된 경우에 그렇습니다.

그러나 Dependabot이 리포지토리에 활성화된 경우, 워크플로는 항상 GitHub Actions에서 실행되어 작업 정책 확인 및 비활성화를 모두 우회합니다.

  • Dependabot 워크플로는 Actions 비활성화나 엔터프라이즈 정책 제한에 의해 차단되지 않습니다.
  • 이러한 워크플로 내에서 참조되는 액션 역시 외부 액션이 허용되지 않는 경우에도 실행이 허용됩니다.

실패한 워크플로 실행 조사

워크플로 실행이 실패하면 다음을 확인합니다.

  • 올바른 작업자가 워크플로를 트리거하는 경우에만 워크플로를 실행합니다.
  •         `ref`에 대해 올바른 `pull_request`를 체크 아웃합니다.
    
  • 비밀은 GitHub Actions 비밀이 아닌 Dependabot 비밀에서 제공됩니다.
  • 올바른 권한이 있는 GITHUB_TOKEN이 있습니다.

GitHub Actions 쓰기 및 디버깅에 대한 자세한 내용은 워크플로 작성을 참조하세요.

워크플로 문제를 해결하는 데 도움이 되는 자세한 팁은 GitHub Actions에서 Dependabot 문제 해결을 참조하세요.