ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Github] Code Owner로 Auto Assign 하기
    개발 블로깅/팀 문화 및 시스템 2022. 3. 29. 01:47

     

    Code Owner란

    Github에는 Code Owner라는 기능이 있는데, Repository 내에 특정 파일이나 특정 디렉토리, 원하면 특정 확장자 별로도 Owner를 지정하여 파일 및 코드를 관리할 수 있는 방식이다.

    이를 활용하면 코드리뷰를 위해 PR 생성 시, 작업한 파일에 관련된 Owner들을 자동으로 PR(Pull Request) Reviewer로 지정할 수 있다.

     

    Code Owner 사용법

    사용법은 아주 간단하다.
    프로젝트의 Root 경로에 '.github/CODEOWNERS' 파일을 생성 후, 패턴에 맞게 오너를 설정해주면 된다.

     

    # .github/CODEOWNERS

    아래 패턴을 참고하여 작성하면 된다.

    # 이것은 주석입니다.
    # 담당자를 지정할 때는 github ID 혹은 github email을 넣습니다.
    # 아래부터는 예시입니다.
    
    # 프로젝트 내 모든 디렉토리 및 파일 대상으로 오너를 inyong-e로 지정할 경우.
    * @inyong-e
    
    # JS 파일에 관련된 오너로 inyong-e와 other-js-owner 두명으로 지정 할 경우.
    *.js @inyong-e @other-js-owner
    
    # 어느 경로 상관 없이 src/atoms/button.tsx 경로의 패턴을 가진 파일의 오너를 harase로 지정할 경우.
    src/atoms/button.tsx @harase
    
    # 레포 내 root의 '/docks/'의 하위 디렉토리 전체를 yeoul로 지정할 경우.
    /docs/ @yeoul
    
    # 어느 경로 상관 없이 docs/ 바로 하위의 파일들에만 nunu로 할 경우.(ex: docs/readme.md)
    # 단, docs/build-app/readme.md 처럼 중첩 경로는 안됨.
    docs/* @nunu
    
    # 어느 경로 상관 없이 docs/build-app/ 패턴을 가진 경로 하위로 모두 inyong-e와 nunu로 지정할 경우.
    docs/build-app/ @inyong-e @nunu
    
    # 레포 내 root의 '/apps/' 하위 전체를 nunu로 지정하되, '/apps/github' 제외할 경우.
    /apps/ @nunu
    /apps/github

     

     

    Code Owner 지정은 개인뿐 아니라 Organization에 등록되어 있는 Team 단위로도 지정이 가능하다.

     

    Organization - Team에 들어가면 해당 팀의 태그 할 수 있는 Team 닉네임(?)을 확인할 수 있다.
    만약 위에 첨부한 팀의 멤버들을 전체로 Code Owner를 지정한다면 아래처럼 할 수 있다.

     

    # .github/CODEOWNERS

    # 프로젝트 내 모든 디렉토리 및 파일을 대상으로 frontend Team 전부 지정할 경우
    * @where-is-my-cup/test-team

    (아 팀명 창피해라...)

     

    Code Owner 파일에 각 오너를 지정했으면, 해당 레포에 PR이 생길 때마다 Code Owner를 통해 자동으로 PR Reviewer 요청이 되도록 Auto Assign을 설정할 수 있다.

     

    Code Owner를 통해 Auto Assign 하기

    우선 레포 내 Code Owner 지정이 정상적으로 동작하려면, 두 가지 유의 사항이 필요하다.

     

    1. Repository Settings

    레포 내 Settings - Collaborators and teams에 들어가서 Manage access에 계정 혹은 Team이 등록되어야 Code Owner에 지정된 계정들이 정상적으로 동작하게 된다.

     

    2. Code Owner를 적용하려는 PR을 우선 Merge

    두 번째는, Code Owner File을 적용하는 PR에서는 동작하지 않고, 우선 Code Owner File 적용하는 PR을 merge 하고 나서, 이후에 하위 브랜치부터 Code Owner가 적용되는 것임을 유의해야 한다.

     

    정상적으로 동작하는지 테스트

    Merge 했으면, 테스트로 하위 브랜치를 따서 CODEOWNERS 파일에 설정한 특정 파일을 테스트로 수정 후 PR을 생성해보자.

    정상적으로 CODEOWNERS 파일에 지정된 멤버들이 자동으로 리뷰어로 지정된 것을 확인할 수 있다.

     

     

    Organization Team을 통해 Auto Assign 걸기

    Organization - Team - Settings에 들어가면 좌측에 Code review 메뉴가 있다. 해당 메뉴에 들어가면, 'Enable auto assignment' 옵션이 있는데, 이를 체크하면 된다.

    그 밑으로는 Auto Assign 관련 여러 설정을 할 수 있다.
    각 설정 내용은 아래에서 자세히 알아보자.

     

    How many team members ~~

    말 그대로, 팀 멤버 중 몇 명을 Auto assign 시킬 건지에 대한 설정이다.
    팀 멤버 수가 지정한 멤버 수보다 많을 경우 특정 알고리즘을 이용해 랜덤으로 멤버를 지정하게 된다.

     

    Routing algorithm

    랜덤으로 Reviewer를 자동 할당시키기 위해 특정 알고리즘을 이용하게 되는데, 이는 두 가지 중에 하나를 선택할 수 있다.

    [Round robin]

    Round robin은 가장 최근에 Review 요청을 받은 사람을 기준으로 Reviewer를 선택한다. 이때 별도의 Review하지 못한 수를 따로 고려하지 않는다.

    [Load balance]

    Load balance는 각 멤버들의 최근 총 Review 요청 수를 기반으로 Reviewer를 선택한다. 이때 각 멤버들의 Review 하지 못한 수를 고려한다. Load balance는 각 팀 멤버들이 30일 동안 동일한 수의 PR Review를 하도록 한다.
     
     
     

    Never assign certain emebers 체크박스를 통해 알고리즘 대상에서 제외할 멤버를 선택할 수 있다.

     

     

     

    Child team members

    team 설정 시, team의 하위 team을 형태로 구성할 수 있는데, 이때 하위 팀 모드 상관없이 리뷰어 지정을 할 것인지 여부를 설정한다.

     

    Count existing requests

    알고리즘과 무관하게 이미 기존에 지정된 팀 멤버가 있으면, 해당 멤버를 포함해서 위에서 설정한 멤버 수를 Auto Assign 시킬 것인지 여부를 설정한다.

     

    Team review request

    Reviewer 지정 시, team 형식으로 Reviewer가 지정되지 않고, 각 개인으로 지정되도록 할 것인지 여부를 설정한다.

     

     

    Team Random Auto Assign 시 유의할 점

    Github 내 Status를 'Busy'로 설정한 팀 멤버는 알고리즘 대상에서 제외된다. 만약 모든 팀 멤버가 Busy일 경우에는 팀 전체로 할당되게 된다.

     

    이번에 우리 팀에서 적용한 PR Auto Assign 방식

    현재 우리 팀은 모노레포를 이용 중인 만큼, 하나의 단일 레포에서 여러 서비스를 관리한다.
    그래서 각 프로젝트가 디렉토리 별로 나뉘어져 있는데, 프로젝트 별로 Owner를 지정할 필요가 있었다.

    그리고 현재 Frontend Team 내에서 코드리뷰 문화를 더욱 활성화시키기 위해, 프로젝트 오너를 포함하여 팀 내 2명을 랜덤으로 Auto Assign 추가 할당되도록 하기로 했다.

     

    # .github/CODEOWNERS

    # project1의 기존 오너인 inyong-e와, 이외 팀 내 랜덤으로 2명을 추가로 owner 할당.
    services/project1/ @inyong-e @mathpresso/frontend
    
    # project2의 기존 오너 harase, yeoul과, 이외 팀 내 랜덤으로 2명을 추가로 owner 할당.
    services/project2/ @harase @yeoul @mathpresso/frontend

    위처럼 설정하면, 각 프로젝트와 관련된 작업의 PR이 생성 시, 기존의 프로젝트 Owner와, 랜덤으로 팀 내 2명을 뽑아 Auto Assign을 할 수 있다.

     

    Reference

     

    About code owners - GitHub Docs

    People with admin or owner permissions can set up a CODEOWNERS file in a repository. The people you choose as code owners must have read permissions for the repository. When the code owner is a team, that team must be visible and it must have write permiss

    docs.github.com

     

     

    Managing code review settings for your team - GitHub Docs

    About code review settings To reduce noise for your team and clarify individual responsibility for pull request reviews, you can configure code review settings. Team notifications Auto assignment About team notifications When you choose to only notify requ

    docs.github.com

    반응형

    댓글

Designed by Tistory.