이 게시물은 ‘GitHub Protips: Tips, tricks, hacks, and secrets from Jason Etcovitch’을 번역/정리한 게시물이다. 번역 전문가도 아니고 많은 의역/직역있으니… 모호한 내용은 원본 게시물을 참고바람. 😉


Github Action와 Probot

이 내용은 팁보다는 더 복잡한 이야기 이긴한데 자동화 도구를 사용하보면 분명 마음에 들것이다. Github Actions과 Probot은 별도의 프로젝트로 개발자가 보일러플레이트(인증 및 웹훅 이벤트 핸들링과 같은)를 고려하지않게 추상화를 제공하여 Github에서 기능 확장을 할 수 있도록하는 목표를 가지고 있다. 관심이 생긴다면 Github 엔지니어인 Jason Etcovitch의 블로그를 살펴보자. 우선 이 글에서는 두가지 내용을 간단히 설명하도록 하겠다.

자동화는 Action를 통해서

Github Actions은 당신의 저장소(Repository)에서 어떠한 상황이 발생했을때 “어떤 작업"를 수행하기위한 런타임이다. 이건 정말 애매모호한데, Github가 관리하는 가상머신에 원하는 코드를 실핼할 수 있기 때문이다. 대표적으로는 CI(Continuous Integration / 지속적인 통합)이지만, Robots의 도움으로 워크플로우의 조정 및 개선과 같은 더 흥미로운 부분을 살펴보도록 하자. 예를들자면 내 팀이 매주 월요일 아침에 주간 회의 노트 이슈를 JasonEtco/create-an-issue에 작성한다고 하자. 멋진 Github Actions과 그 구축을 도와주는 툴이 포함되어 있으니 살펴보자. 그리고 Actions을 만드는데 관심이 있다면 독선적인 툴깃으로 Actions을 구축하는 actions-toolkit을 확인해보자. 또한 이것을 이용해서 is-sponsor-label-actionaction-record도 만들었다.

ar1

actions/github-script도 꼭 살펴보자. 인증 된 Github API 클라이언를 사용하여 바로 워크플로우 YAML 파일을 JavaScript로 생성할 수 있는 Action이다.

Github Apps를 Probot으로 구축

Probot은 Github 위에 통한 된 Github Apps를 구축하는 프레임워크이다. 몇 가지의 사용사례로는 Actions 대신 Probot 고려하기. 웹훅 기반 이벤트에 초점을 맞추므로, Github에서 무언가가 발생할때 Probot 앱이 작업을 수행할 수 있다. 거의 알려지지 않은 사실을 이야기 해주자면, 사실 Github/Slack 통합은 Probot 앱이다! 더 다양한 범위의 예제로는 첫 기여 축하, 릴리즈 노트 초안 작성, TODO 주석을 이슈로 생성이 있다.

ar2

Magic URL extenstions

사용자(User) 혹은 조직(Organization)의 아바타 가져오기

https://github.com/<username>.png를 이용해 모든 Github 사용자 혹은 조직의 아바타를 가져올 수 있다. 웹사이트를 구축하거나 모든 기여자 표Probot 앱 카탈로그 같이 Github 계정을 기반으로 디자인 할때 유용하다.

ar3

재밌는 사실: 사실 PNG가 아니고 JPEG로 반환한다. 하지만 문젠 없다. (아직은)

패치, 커밋, Pull 요청의 변경사항 가져오기

todo를 구축할때, 커밋 혹은 pull 요청의 변경사항의 일부를 가져오는 방법이 필요했는데, 사실 정말 쉽다.

https://github.com/<owner>/<repo>/commit/<sha>.diff
https://github.com/<owner>/<repo>/commit/<sha>.patch

그리고 같은 방법으로 pull 요청도 가져올 수 있다. 이 예제를 살펴보자

고정 Gists는 나니아로 가는 포탈

작년에 Github는 사용자 프로필에 Gists를 고정하는 기능을 추가했다. 동시에 Gists는 API를 제공하기 때문에, 이 기능을 사용하면 정말 흥미로운 방법으로 “동적” 콘텐츠를 프로필에 추가할 수 있다. 다음 몇가지 예를 살펴보자.

ar4

자신만의 고정 Gists 구축하기

Jason은 gist-box라고 부르는 헬퍼 라이브러리로 구축했는데 자신만의 것으로 구축하고 싶다면 awesome-pinned-gists를 참고하자.

재밌는 사실: Github Education팀은 작년에 Pins to Win competition을 발표했는데, 학생들이 고정 Gists를 통해 자신과 자신의 프로젝트를 흥보하도록 장려했다. 훌륭한 작품들이 많이 있다.

master에 병합(merge)된 branch 삭제

이건 사실 팁은 아니지만 훌륭한 기능이기에 언급하고자 한다. 저장소 설정에서 Automatically delete head branches를 켜도록 하자. 이 기능은 병합된 pull 요청의 head branch를 삭제한다. pull 요청에 병합되는 long-lived branch에 의존하지 않는 이상, 이 설정은 빠른 개선일 것이다. 언제나 원한다면 branch를 복구할 수 있으니, 리스크는 없다. 개인적으로 항상 branch들을 바로 삭제하기 때문에 자동화하지 않을 이유가 없다.

GraphQL API를 통해 “무엇이든” 가져오기

이건은 약간의 틈새 트릭이지만 Github API 통합을 구축할때 매우 도움이 된다. 만약 리소스(저장소나 이슈같은)의 URL을 가지고 있다면 아래와 같은 쿼리를 작성해 그것에 대한 다양한 정보를 반환 받을 수 있다.

query ($url: String!) {
  resource (url: $url) {
    __typename
    
    ... on Repository {
      nameWithOwner
    }
    
    ... on Issue {
      title
    }
  }
}

만약 url이 저장소라면, nameWithOwner 속성을 가지는 객체가 반환된다. 이슈라면 title이 반한된다. 이건 URL만 가지고 있을 때 많은 도움이 된다. 참고로 모든 Github에 있는 URL이 작동하는 것은 아니다. 자세한 것은 resource 문서 참고바람.

GraphQL에 익숙하지 않다면 Github API 문서로 시작하자. 또한 Github의 GraphQL API를 GraphQL Explorer를 통해서 살펴볼 수 있다.

이 글에 대해서 궁금한 사항이나 이야기할 내용이 있다면 부담 가지지 말고 트위터를 통해 연락바란다.


  • 200418 - 초안작성
  • 200419 - 게재