GitHub 작업: GitHub 검사 외에 GitHub 상태를 푸시하는 방법

4792 단어 gitgithub
GitHub actions은 특히 기본 병렬 처리 시스템으로 인해 프로젝트에 CI를 신속하게 배포하는 데 매우 효율적입니다.

하지만 그 과정에서 몇 가지 단점을 발견했습니다. 한 가지 단점은 GitHub 작업의 결과가 Check 이 아니라 Status 이라는 것입니다.
UI에는 동일하지만 API에는 없습니다. 아래 이미지에서 마지막 줄은 API의 상태이지만 위의 모든 줄은 API 수준에서 확인합니다.



그게 뭐가 잘못됐어? Doctolib에는 검사가 아닌 상태에 의존하는 많은 자동화가 있습니다. Github 작업에 대한 일부 프로젝트를 온보딩하기 위해 우리는 우아한 솔루션을 찾고 있었습니다.

첫 번째 아이디어는 여기에서 상태를 푸시하는 단계를 워크플로 끝에 추가하는 것입니다.
다음과 같은 것:

      - name: Create status
        run: |
          curl --request POST \
          --url https://api.github.com/repos/${{ github.repository }}/statuses/${{ github.event.workflow_run.head_commit.id }} \
          --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \
          --header 'content-type: application/json' \
          --data '{
            "state": "${{ github.event.workflow_run.conclusion }}",
            "context": "unit test (kube)",
            "target_url": "${{ github.event.workflow_run.html_url }}"
            }' \
          --fail


이 솔루션은 작동하지만 그린 빌드(성공적인 빌드)에만 해당됩니다. 빨간색 빌드(실패한 빌드)의 경우 failure condition 을 사용할 수 있습니다. 여러 작업이 포함된 워크플로가 있는 경우 모든 작업에 이 실패 조건을 적용해야 합니다. 이는 고통스러울 수 있으며 코드 중복을 추가합니다.

그래서 더 간단한 솔루션을 찾았습니다. CI 워크플로(성공 및 실패)에 대해listen 독립적인 GitHub 워크플로를 갖고 그에 따라 상태를 설정하는 것입니다.

name: Set test status

on:
  workflow_run:
    workflows: ["Run tests"]
    types:
      - completed

jobs:
  set_status:
    runs-on: ubuntu-latest
    permissions:
      statuses: write 
    steps:
      - name: Create status
        run: |
          curl --request POST \
          --url https://api.github.com/repos/${{ github.repository }}/statuses/${{ github.event.workflow_run.head_commit.id }} \
          --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \
          --header 'content-type: application/json' \
          --data '{
            "state": "${{ github.event.workflow_run.conclusion }}",
            "context": "unit test (kube)",
            "target_url": "${{ github.event.workflow_run.html_url }}"
            }' \
          --fail


자유롭게 재사용하세요. 다음과 같이 변경하기만 하면 됩니다.
  • on 절에 있는 CI 워크플로의 이름입니다.
  • context 매개변수에서 GitHub에 푸시하려는 상태의 이름입니다.
  • 좋은 웹페이지 즐겨찾기