Table of Contents
Github를 CLI 환경에서 사용할 수 있도록 해주는 Github CLI에 대해서 알아보도록 하겠습니다.
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
or
2. 로그인
- 로그인 명령어
$ gh auth login
- github 서버 선택
? What account do you want to log into? [Use arrows to move, type to filter]
GitHub.com GitHub Enterprise Server
2-1) github hostname 입력 (Enterprise Only)
? What account do you want to log into? GitHub Enterprise Server
? GHE hostname: github.nhnent.com
- 사용할 프로토콜 선택
? What is your preferred protocol for Git operations? [Use arrows to move, type to filter]
HTTPS
> SSH
- 인증 방법 선택
? 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 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
3. 명령어 사용하기
Repository 관련 명령어
$ gh repo [create|fork|clone]
레포지토리 생성 예제
$ gh repo create github-cli-tutorial # 레포지토리 생성
$ gh repo clone s~/github-cli-tutorial # 클론 (git clone 동일)
- 빈 프로젝트에 README.md 생성 (main 브랜치)
# This is a Gihub CLI Tutorial
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
$ gh issue list
$ gh issue view 1
3. Pull Request 관련 명령어
$ gh pr [create|list|close|status|edit|checkout|...]
PR 생성 예제
- 새로운 브랜치 생성
$ git checkout -b feature#1
- README .md 를 아래와 같이 수정
# This is a Gihub CLI Tutorial
- 안녕하세요.
- PR 생성하기
$ git add .
$ git commit -m "add text to README.md"
$ gh pr create
PR 리뷰 예제
- 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
- pr 브랜치로 바로 checkout 하기
$ gh pr checkout feature#1
- pr 리뷰 완료하기
$ gh pr review --comment --body "2번째 라인 수정이 필요합니다."
$ gh pr review --approve
그래서 어디에 쓰지?
위에서 한 작업들은 그냥 웹이나 IDE에서 하면 더 직관적이고 편할 것 같은데… 굳이 CLI로?
장점을 뽑아보자면
- 브라우저, 깃 GUI 툴, IDE 간의 전환 필요 없이 개발이 가능하다.
- issue나 pr등 github API에서 제공하는 기능들을 간단한 명령어로 사용 가능하도록 해준다. => 기존 github API 라이브러리 or 모듈을 사용하여 개발하는 것보다 심플하게 개발 가능.
유용할 것 같은 케이스
간단한 자동화 예제
- PR 생성 시, 자동으로 라벨을 붙여주는 기능
- 오래된 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: $
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'
그외
- 특정 시간에 PR 자동 승인, 머지, 클로즈 하도록 하는 기능
- 소나큐브 연동
등등 아이디어만 있으면 여러가지를 적용해 볼 수 있다.
Extensions
$ gh extension browse
예제: gh-ls
$ gh extension install wuwe1/gh-ls
$ gh ls -R ~/github-cli-tutorial
결론
Github CLI라는 도구가 있고, 이를 이용하여 Github와 Github API 등과 관련된 작업을 쉽게 할 수 있다.
참고
Comments
Copied to clipboard