OctoKit
Github API를 편하게 쓰도록 만든 라이브러리 세트
GitHub REST API, GraphQL API 호출을
- 인증
- rate-limit 처리
- pagination
- 오류 처리
- webhook 검증 등을 수행해줌
사용 예시
REST API
import { Octokit } from "octokit";
const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN });
const { data } = await octokit.rest.repos.get({
owner: "octocat",
repo: "Hello-World",
});
console.log(data);GraphQL API
import { graphql } from "@octokit/graphql";
const { repository } = await graphql(
`
query ($owner: String!, $repo: String!) {
repository(owner: $owner, name: $repo) {
stargazerCount
}
}
`,
{
owner: "octocat",
repo: "Hello-World",
headers: {
authorization: `token ${process.env.GITHUB_TOKEN}`,
},
}
);
console.log(repository.stargazerCount);전체 구조
- Core (핵심 HTTP/인증 기능)
- REST API (GitHub REST wrapper)
- GraphQL API
- Webhooks (서명 검증/리스너)
- Plugins (확장 기능)
Octokit Core 기능
@octokit/core
모든 Octokit 패키지의 기반.
핵심 기능 인증
- Personal Access Token
- GitHub App 인증 (App ID + Private Key)
- OAuth App 인증
- Web OAuth Flow 지원
- JWT 발급 자동 처리
요청(Request) 기능
- GitHub API 스펙 자동 적용
- 파라미터 검증
- 자동 User-Agent 설정
- Base URL 커스텀(GitHub Enterprise)
오류 처리(Error Handling)
- API rate limit 에러
- Abuse detection
- Validation error 자동 파싱
- Retry 가능
Pagination (자동 페이지네이션)
- octokit.paginate() API 제공
- 전체 데이터 자동 수집
Hook 시스템
- before/after hooks로 요청을 가로채서 커스텀 가능.
REST API 기능
@octokit/rest
GitHub의 600+ REST API 엔드포인트를 method로 제공.
주요 기능 인증된 사용자
- 내 정보 가져오기
- 이메일 목록
- 사용자 Organizations 조회
Repository 관리
- 레포 만들기
- 삭제/아카이브/포크
- branch, tree, blobs 관리
- Collaborator 추가/삭제
- Webhook 생성/삭제
Issues
- 생성/조회/수정/닫기
- 라벨 관리
- Assignees 관리
- Comment 추가/삭제
Pull Requests
- 생성
- Merge
- Review 등록/승인/요청변경
- 코멘트, 커밋, 파일 변경 내역 읽기
Releases
- 릴리즈 생성/수정/삭제
- Release Assets 업로드
- 태그 관리
Git 데이터 API
- 커밋/트리/블롭 관리
- Git 객체 생성
- 참조(ref) 생성/삭제
- SHA 체크
Actions
- workflow 실행 트리거
- 실행 로그 조회
- artifacts 조회/다운로드/삭제
- workflow dispatch 호출
Checks API
- CI 상태 체크 생성
- 상태를 GitHub UI에 표시
Permissions
- Token 조회
- Github App permissions 체크
Stats
- 기여도 통계
- 트래픽, 인기 파일 조회
GitHub Packages
- 패키지 조회
- 버전 삭제
- 패키지 다운로드 정보
GraphQL API 기능
@octokit/graphql
GitHub의 GraphQL API를 편하게 호출하는 클라이언트.
가능한 기능
- GraphQL 쿼리 실행
- 변수 바인딩
- Header 커스텀(auth)
- GitHub의 전체 스키마(레포/유저/PR/이슈 모두) 접근
GraphQL의 장점:
- 필요한 데이터만 가져오기
- 복잡한 nested 관계를 한번에 조회
- REST에서 여러 요청이 필요한 작업을 한 번에 끝냄
Webhooks 기능
@octokit/webhooks
GitHub에서 오는 이벤트를 받아 처리하는 기능.
지원하는 기능
- Webhook signature 검증(HMAC SHA-256)
- 이벤트 라우팅 (예: issues.opened)
- 모든 GitHub 이벤트 타입 지원 (100+)
- Express/Fastify/Koa 등 Node 프레임워크 연결
- 배포 방식(FaaS) 대응
예:
webhooks.on("issues.opened", async ({ payload }) => {
console.log("이슈 생성됨:", payload.issue.title);
});Plugins 시스템
Octokit은 플러그인을 조합해서 기능을 확장하도록 설계됨.
주요 플러그인들:
@octokit/plugin-retry
- GitHub API rate limit → 자동 재시도
- 네트워크 오류 자동 재시도
@octokit/plugin-rest-endpoint-methods
- REST API 엔드포인트를 자동 메소드화
- octokit.rest.* 제공하게 하는 핵심
@octokit/plugin-paginate-rest
- 페이지네이션 자동 처리
- 모든 list API에서 .paginate() 제공
@octokit/auth- (여러 종류)
- 앱 인증
- OAuth 인증
- SSO 인증 등
@octokit/plugin-throttling
- GitHub가 abuse detection 걸면 요청 속도 제한 조절
- GitHub Actions 봇 개발 시 필수
@octokit/plugin-request-log
- API 요청/응답 로깅
기타 기능
- GitHub Enterprise 호환
- GraphQL rate-limit 검사
- Linking, Hypermedia 지원
특수 라이브러리들
Octokit 생태계에 있는 중요 패키지들:
패키지 기능 octokit Core + REST + paginate + retry 번들 @octokit/auth-app GitHub App 인증 전체 자동화 @octokit/oauth-methods OAuth device flow 등 @octokit/webhooks-methods 웹훅 생성/삭제 등 probot Octokit 기반 GitHub App 프레임워크
Octokit으로 가능한 것들 전체 요약
GitHub 자동화
- Issue/PR 자동 생성
- PR merge bot 만들기
- release 자동 생성
- 잔디 자동 커밋 봇
GitHub Actions 외부 스크립팅
- 빌드 완료 후 release 생성
- CI 결과 보고 Slack 알리기
GitHub App 제작
- Webhook + Octokit 조합
- 리뷰 자동 할당
- 스팸 PR 차단
Git 데이터 직접 조작
- repo 파일 읽기/쓰기
- 커밋 직접 생성
- ref 브랜치 조작
GraphQL로 고급 데이터 조회
- 팀 기여도 통계
- 대규모 레포 분석