Github CLI

Github를 CLI 환경에서 사용할 수 있도록 해주는 Github CLI에 대해서 알아보도록 하겠습니다.

github-cli01

GitHub와의 상호작용을 커맨드라인에서 사용할 수 있게 해주는 도구.

Github CLI 특징

  • github cli는 hub 라는 command line tool로 시작해서, 2019년에 github cli 공식화 되었음.
  • github cli는 내부적으로 github API를 사용하도록 구현되어 있음.
  • github cli는 go 언어로 작성 됨.

Github CLI 명령어 예제

gh repo create      # 레포지토리 생성
gh pr create        # PR 생성

Github CLI Manual > 명령어 전체 확인 가능

Github CLI 사용해보기

1. 설치

brew install gh

github-cli02

github-cli03

or

GitHub CLI

2. 로그인

  1. 로그인 명령어
$ gh auth login
  1. github 서버 선택

? What account do you want to log into? [Use arrows to move, type to filter]

GitHub.com GitHub Enterprise Server

github-cli04

 2-1) github hostname 입력 (Enterprise Only)

? What account do you want to log into? GitHub Enterprise Server
? GHE hostname: github.nhnent.com
  1. 사용할 프로토콜 선택
? What is your preferred protocol for Git operations?  [Use arrows to move, type to filter]
  HTTPS
> SSH

github-cli05

  1. 인증 방법 선택
? How would you like to authenticate GitHub CLI?  [Use arrows to move, type to filter]
  Login with a web browser
> Paste an authentication token

github-cli06

github-cli07

github-cli08

github-cli09

  1. github cli 인증 정보 확인
$ gh auth status

github.com
✓ Logged in to github.com as (keyring)
✓ Git operations for github.com configured to use ssh protocol.
✓ Token: ghp_************************************
✓ Token scopes: admin:enterprise, admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, admin:ssh_signing_key, audit_log, codespace, delete:packages, delete_repo, gist, notifications, project, repo, user, workflow, write:discussion, write:packages

github-cli10

3. 명령어 사용하기

Repository 관련 명령어

$ gh repo [create|fork|clone]
레포지토리 생성 예제
$ gh repo create github-cli-tutorial # 레포지토리 생성
$ gh repo clone s~/github-cli-tutorial # 클론 (git clone 동일)

github-cli11

  • 빈 프로젝트에 README.md 생성 (main 브랜치)
# This is a Gihub CLI Tutorial

github-cli12

2. Issue 관련 명령어

$ gh issue [create|close|reopen|status|list]
$ gh issue list --[assignee|author|label|state|web]
$ gh issue view [number|url]
이슈 생성 예제
$ cd github-cli-tutorial
$ gh issue create

github-cli13

github-cli14

$ gh issue list

github-cli15

$ gh issue view 1

github-cli16

3. Pull Request 관련 명령어

$ gh pr [create|list|close|status|edit|checkout|...]
PR 생성 예제
  1. 새로운 브랜치 생성
$ git checkout -b feature#1
  1. README .md 를 아래와 같이 수정

# This is a Gihub CLI Tutorial

- 안녕하세요.
  1. PR 생성하기
$ git add .
$ git commit -m "add text to README.md"

$ gh pr create

github-cli17

github-cli18

PR 리뷰 예제

github-cli19

  1. PR 리스트 조회
$ gh pr list

Showing 1 of 1 open pull request in s~/github-cli-tutorial

# 5  README.md 내용 추가  feature#1  about 12 days ago
  1. pr 브랜치로 바로 checkout 하기
$ gh pr checkout feature#1

github-cli20

  1. pr 리뷰 완료하기
$ gh pr review --comment --body "2번째 라인 수정이 필요합니다."
$ gh pr review --approve

그래서 어디에 쓰지?

위에서 한 작업들은 그냥 웹이나 IDE에서 하면 더 직관적이고 편할 것 같은데… 굳이 CLI로?

장점을 뽑아보자면

  1. 브라우저, 깃 GUI 툴, IDE 간의 전환 필요 없이 개발이 가능하다.
  2. issue나 pr등 github API에서 제공하는 기능들을 간단한 명령어로 사용 가능하도록 해준다. => 기존 github API 라이브러리 or 모듈을 사용하여 개발하는 것보다 심플하게 개발 가능.

유용할 것 같은 케이스

간단한 자동화 예제

  1. PR 생성 시, 자동으로 라벨을 붙여주는 기능
  2. 오래된 PR들을 조회하여 주기적으로 알림 전송

준비물

  • Github CLI
  • Github Action (github에서 공식적으로 제공하는 CI/CD 툴, jenkins 등으로 대체 가능)

1. PR 생성 시, 자동으로 라벨을 붙여주는 기능

$ cd ~/github-cli-tutorial
$ vi .github/workflows/auto_pr_labeling.yml
 name: 자동 PR 라벨 추가

 on:
   pull_request:
     branches: [main]
     types:
       - opened

 jobs:
   auto_pr_labeling_job:
     runs-on: ubuntu-latest

     steps:
       - name: 레포지토리 체크아웃
         uses: actions/checkout@v2
 
       - name: PR 조회 및 라벨 추가하기
         run: |
           label="work-in-process"
           # 1. 라벨 생성
           gh label list -S $label 2>/dev/null || gh label create $label --color FFA500 --description "This PR is a work in process"
           # 2. PR 조회 후, 라벨 달아주기
           pr_numbers=$(gh pr list --json number --search "is:pr is:open -label:work-in-process" | jq -r '.[].number')
           for pr_number in $pr_numbers; do
             gh pr edit $pr_number --add-label $label
           done
         env:
           GH_TOKEN: $

github-cli21



2. 오래된 PR들을 조회하여 주기적으로 알림 전송

 name: 오래된 PR 알림

 on:
   schedule:
     - cron: '0 0 ** *'  # 매일 자정마다 실행

# 수동 실행

# on: [workflow_dispatch]

 jobs:
   stale_pr_notification_job:
     runs-on: ubuntu-latest

     steps:
       - name: 레포지토리 체크아웃
         uses: actions/checkout@v2
 
       - name: 오래된_PR_가져오기
         id: get_stale_prs
         run: |
           stale_prs=$(gh pr list --state open --json number --jq ".[] | select(.updated_at < (now - 30*24*60*60)) | .number")
           echo "::set-output name=stale_prs::$stale_prs"
         env:
           GH_TOKEN: $
 
       - name: Slack 알림 전송
         uses: rtCamp/action-slack-notify@v2
         env:
           SLACK_CHANNEL: github-workflows
           SLACK_WEBHOOK: $
           SLACK_TITLE: 'Stale PR'
           SLACK_MESSAGE: '생성된지 오래된 PR이 있습니다: $'
           SLACK_USERNAME: 'GITHUB'

github-cli22

그외

  • 특정 시간에 PR 자동 승인, 머지, 클로즈 하도록 하는 기능
  • 소나큐브 연동

등등 아이디어만 있으면 여러가지를 적용해 볼 수 있다.

Extensions

$ gh extension browse

github-cli23

예제: gh-ls

$ gh extension install wuwe1/gh-ls
$ gh ls -R ~/github-cli-tutorial

github-cli24

결론

Github CLI라는 도구가 있고, 이를 이용하여 Github와 Github API 등과 관련된 작업을 쉽게 할 수 있다.

참고

Buy me a coffee
글이 도움이 되셨다면, 커피 한 잔만 사주세요!
Comments
Copied to clipboard