Skip to content

PR language labeling 워크플로 수행시 403 Forbidden 오류 발생  #368

Closed
@bbFactory

Description

@bbFactory

배경

  • 이전 PR을 통해 작업자의 Pull Request 에 사용된 언어를 감지하고, 감지된 언어의 label 을 PR 에 추가하는 워크플로를 등록하였습니다.
  • 워크플로에 요구되는 permissions 이 있었고 이들을 모두 작성해주었으나, 지속적으로 403 Forbidden 오류가 발생하였습니다.
    • PR 에 label 을 추가하기 위해서는 issues 또는 pull-requests 의 쓰기(write) 권한이 필요합니다.
    • X-Accepted-GitHub-Permissions: GitHub API 특정 엔드포인트 접근시 필요한 권한을 알려주는 헤더 (관련 문서).
    • 워크플로 실패 Response
      image
  • data.message 에서 알 수 있듯, Response 에서는 Resource not accessible by integration 이라며 리소스 접근이 불가하다고 합니다.
  • 결국 GitHub 서버에서 요청한 permissions 를 정상적으로 전달하였음에도(기존 워크플로에서는 pull-requests: write 적용), 오류가 지속적으로 발생하였으므로 그 이유를 찾아야 했습니다.

문제 원인

  • 최초 테스트 시에는 base repo 와 working repo 를 동일하게 사용했습니다. 즉, fork 하지 않은 상태에서 PR을 작성하여 테스트를 진행하였습니다.
    • repo 가 동일하므로, 작업 repo 로부터 시작된 PR 워크플로에서 base repo 의 컨텍스트를 사용하는 데 문제가 없었습니다.
    • 이후 테스트가 정상적으로 수행되는 걸 확인한 후 leetcode-study Repo 에 PR 을 열었습니다.
  • 그러나 실제로는 작업자가 fork 를 수행한 후에, 작업을 PR 로 만든다는 것을 깨닫고 테스트를 다시 수행하였습니다.
    • fork 할 경우, PR 의 base repo 와 작업 repo 가 달라지는데, 작업자의 워크플로에서는 보안상의 이유로 base repo 의 민감 정보를 얻지 못하도록 GitHub 이 막아두고 있었습니다 (관련 문서).
    • 결과적으로 label 을 추가하는 API 는 GitHub Token, PR Context 등 민감 정보를 사용하므로, fork 기반 워크플로가 항상 실패했습니다.

해결 방법 및 한계

  • 위 문제의 해결 방법으로 GitHub 에서는 pull_request_target 이벤트를 소개하고 있습니다 (관련 문서 Note 참고) (기존 워크플로의 pull_request 이벤트를 대체하면 됨).
  • 개인 repo의 PR에서 위 이벤트를 테스트해보았는데, 작업 repo 에서 base repo 컨텍스트를 사용할 수 있다는 것을 확인할 수 있었습니다.
    • 아래 이미지에서 PR 에 java label 이 추가된 걸 확인할 수 있습니다.
      image
  • 그러나 label 을 추가하기 위해 base repo의 민감 정보를 굳이 얻어야 할까 싶어, leetcode-study repo 에서는 pull_request_target 이벤트를 사용하지 않고자 합니다.

대안

  • 그럼에도 자동 labeling 에 대한 니즈가 있을 경우, base repo 내에서 워크플로를 만드는 방법이 있을 듯합니다.
    • 예) 워크플로로 스케줄 잡을 만들어, 하루에 한 번 Opened PR 목록에 언어 label 을 붙이는 방식 등
  • 하지만 이렇게까지 해야 하나 싶기도 해서.. 다른 분들의 의견을 들어봐야할 것 같습니다.. ㅎㅎ

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions