GitHub API에서 GitHub Branch 보호 설정

10845 단어 GitGitHub

GitHub Branch Protection


GitHub의 Branch Protection 기능은 다음과 같은 기능을 실현할 수 있으며 GitHub가 운용하는 규칙을 강제로 준수할 수 있어 매우 편리하다.
  • master 직접 금지push 지점 금지
  • 병합 요청 시 코드 검토를 거쳐야 병합
  • CI가 정상적으로 끝나지 않으면 통합할 수 없음
  • 수동 설정


    GitHub 웹 사이트에서 Branch 보호를 수동으로 설정할 수 있습니다.
    [Your Repository] => [Settings] => [Branches]
    그러면 설정 화면에 도착합니다.



    각 항목의 의미는 https://dev.classmethod.jp/tool/github/protect-branch/ 등을 참조하십시오.

    GitHub API를 통한 설정


    다만, 새로운 프로젝트를 할 때마다 보치로 설정해 놓으니 촌스럽다.
    GitHub API를 사용하여 자동으로 설정합니다.
    자동 설정 스크립트protect.sh 및 Branch Protection 설정 파일protections.json을 다음과 같이 구성합니다.
    .
    └── .github
        ├── protect.sh
        └── protections.json
    
    다음 명령을 실행하면 설정할 수 있습니다.
    $ bash .github/protect.sh
    

    스크립트 자동 구성


    스크립트를 실행하려면 다음 명령이 필요합니다. 넣으십시오.

  • hub: GitHub API 클라이언트

  • jq: json을 투시하는 명령
  • mac 시 다음 명령으로 들어갑니다.
    $ brew install hub
    $ brew install jq
    
    스크립트 코드는 다음과 같습니다.
    기본적으로 이걸 직접 복사하면 움직일 거예요.
    protect.sh
    #!/bin/bash
    
    DIR=$(cd $(dirname $0); pwd)
    
    hub api user
    echo -e "\nLogged in.\n\n"
    TOKEN=`cat ~/.config/hub | grep oauth_token | sed "s/ //g" | sed "s/oauth_token://g"`
    
    REPO=`git config --get remote.origin.url | sed s/[email protected]://g | sed s/.git$//g`
    
    RES=`cat "${DIR}/protections.json" | jq -r 'to_entries[] | "\(.key)__DELIMITER__\(.value)"'`
    for line in ${RES}; do
       BRANCH=`echo ${line} | sed -e "s/__DELIMITER__.*$//g"`
       BODY=`echo ${line} | sed -e "s/^.*__DELIMITER__//g"`
       curl \
         -X PUT \
         -H "Accept: application/vnd.github.luke-cage-preview+json" \
         -H "Authorization: token ${TOKEN}" \
         "https://api.github.com/repos/${REPO}/branches/${BRANCH}/protection" \
         -d ${BODY}
    done
    
    다섯 번째 줄의
    hup api user
    
    의 곳GitHub APItoken을 얻지 못하면 id,password를 물어보고 입력하면 token를 얻어 설정 파일에 저장합니다.

    프로파일


    설정 파일protections.json은 다음과 같습니다.
    protections.json
    {
      "dev": {
        "required_status_checks": {
          "strict": true,
          "contexts": [
            "ci/circleci"
          ]
        },
        "required_pull_request_reviews": {
          "dismiss_stale_reviews": true,
          "require_code_owner_reviews": false,
          "required_approving_review_count": 1
        },
        "enforce_admins": true,
        "restrictions": null
      },
      "master": {
        "required_status_checks": {
          "strict": true,
          "contexts": [
            "ci/circleci"
          ]
        },
        "required_pull_request_reviews": {
          "dismiss_stale_reviews": true,
          "require_code_owner_reviews": false,
          "required_approving_review_count": 1
        },
        "enforce_admins": true,
        "restrictions": null
      }
    }
    
    이것은
    {
       "ブランチ名1": { /* Branch Protectionの設定 */ },
       "ブランチ名2": { /* Branch Protectionの設定 */ },...
    }
    
    의 구조, Branch Protection의 설정 부분은
    https://developer.github.com/v3/repos/branches/#update-branch-protection
    에서 기술한 장면은 다음과 같은 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 부피를 분석하도록 한다.
    이 예에서는 master 브랜치와 dev 브랜치를 통합할 때 하나 이상의 심사를 거쳐야 하며 CircleCI가 성공적으로 끝나지 않았을 때 통합할 수 없습니다.

    끝날 때


    이번 소스도 https://github.com/Arahabica/GitHubProtectionSample 위에 올린다.

    좋은 웹페이지 즐겨찾기