1. Probot
- Probot의 Introduction의 설명입니다.
Probot은Node.js로GitHub앱을 구축하기 위한 프레임워크입니다.Webhooks의 수신 및 각 이벤트 처리, Github의 API 실행 등 모든 번거로운 작업을 기능으로 만들 수 있습니다!
-
Probot으로 만들어진 여러 가지 기능들이오픈소스로 제공되고 있습니다.-
Delete merged branch :
Branch가Merge되면 자동으로Branch를 삭제합니다. -
Work In Progress :
Pull Request의 제목에WIP또는wip이 포함될 경우Merge를 막습니다. -
더 많은 기능들은 Probot - featured apps에서 확인할 수 있습니다.
-
2. Delete merged branch
- 가장 많이 사용되는 Delete merged branch를 설치해보겠습니다.

- 화면 우측 상단의
Add to GitHub를 클릭합니다.

All repositories또는Only select repositories를 선택하고,install을 클릭합니다.

Settings → Integrations & service에서 설치된GitHub Apps를 확인할 수 있습니다.

- 잘 작동하는지 확인하기 위해, 이전 포스트를
Merge시켜보겠습니다.

Merge후delete-merged-branch가branch를 삭제했습니다!
3. Probot 프로젝트 생성
-
Merge전Check List에 전부 체크가 되어 있지 않다면,Merge를 할 수 없도록 막는Probot을 만들어 보겠습니다. -
아래의 명령어를 입력하여,
Probot 프로젝트를 생성합니다. 이름은 첵첵봇!
1
2
3
4
5
//npm
$ npx create-probot-app [프로젝트명]
//yarn
$ yarn create probot-app [프로젝트명]

-
음.. 뭔가 에러가 발생했지만 괜찮습니다. 프로젝트 경로로 이동하여
npm install을 입력합니다. -
프로젝트가 잘 생성되었는지, 확인하기 위해 아래의 명령어를 입력합니다.
-
TypeScript를 선택하셨다면,build를 통해TypeScript를JavaScript로 변환해야 합니다.
1
2
3
4
5
6
7
//npm
$ npm run-script build
$ npm start
//yarn
$ yarn build
$ yarn dev
- 실행 후 http://localhost:3000/probot으로 접속할 수 있습니다.

-
안녕!
check-check-bot! -
확인하셨다면,
Ctrl + c를 입력하여 작업을 끝내고,app.yml의 파일에서 필요한 이벤트와 권한을 설정해줍니다. -
저는,
Merge를 막기 위해서statuses의 권한도 추가했습니다. 자세한 이벤트와 권한에 대해서는 WebHooks, Permissions를 참고해주세요!
1
2
3
4
5
6
7
8
9
10
default_events:
- issues
- pull_request
- status
default_permissions:
issues: write
metadata: read
pull_requests: write
statuses: write
- 다음으로
GitHub에 애플리케이션을 등록하겠습니다. 다시 애플리케이션을 기동시킵니다.

-
GitHub에 애플리케이션을 등록하기 위해서,Register GitHub App을 클릭합니다. -
자동 또는 수동으로 등록하는 두 가지 방법이 있습니다. 물론 저는 자동으로!
- 자세한 내용은 Developing an app - Manually Configuring a GitHub App을 참고해주세요!

- 적당한 이름을 입력하고,
Create GitHub App을 클릭합니다.

-
All repositories와Only select repositories중 적용할 곳을 선택합니다. -
다음으로,
app.yml에서 설정한 권한들을 확인 후install을 클릭합니다. -
다시 프로젝트로 돌아오면,
.env라는 파일이 생성되어 있습니다!
1
2
3
4
WEBHOOK_PROXY_URL = WEB HOOK을 수신할 수 있는 URL입니다.
APP_ID = 애플리케이션의 ID입니다.
PRIVATE_KEY = 애플리케이션의 비밀키입니다.
WEBHOOK_SECRET = WEB HOOK을 수신하기 위한 인증 토큰입니다.
-
WEBHOOK_PROXY_URL에는smee.io/XXX로 작성되어있습니다. 로컬에서 애플리케이션을 개발한 경우,smee.io/XXX로WEBHOOK의 이벤트를 수신하여 개발한 부분을 테스트 할 수 있습니다. -
다음으로,
index.js를 수정합니다. -
비슷한 기능을 수행하는
GitHub App을 찾아봤는데, 역시 Task-list-zero-bot이라는 것이 존재했습니다. 이름도check-check-bot보다 좋네요! -
아무튼, Task-list-zero-bot를 참고하여
index.js를 수정합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { Application } from 'probot' // eslint-disable-line no-unused-vars
export = (app: Application) => {
app.on([
'pull_request.opened',
'pull_request.edited',
'pull_request.closed',
'pull_request.reopened',
'pull_request.synchronize'
], async (context) => {
const title = context.payload.pull_request.title;
const body = context.payload.pull_request.body;
const isUnChecked = /-\s\[\s\]/g.test(body);
const status = isUnChecked ? "failure" : "success";
const param: any = {
sha: context.payload.pull_request.head.sha,
state: status,
description: status ? "Please confirm Check List" : "OK!!",
context: "Check Check Bot"
};
context.github.repos.createStatus(context.repo(param))
})
}
- 수정 후,
Check Check bot을 기동시킵니다.

- 다음으로, 애플리케이션을 설치한
Repository에서Pull Request를 작성해봅니다.

All checks have failed라는 경고 문구가 작성되어 있습니다!

Check List의 항목을 모두 체크하니 정상적으로Merge할 수 있습니다.

Check Check bot의 프로젝트에서 문제없이Web Hook을 수신했습니다. 혹시 잘 안되시면, 콘솔을 확인하여 오류를 해결해보아요!
4. Probot 프로젝트 Deploy
-
지금까지는,
로컬에서Probot을 기동시켜 적용시켰습니다. 하지만, 이 프로젝트를 기동시키지 않으면Probot은 작동하지 않습니다. -
따라서, 계속해서
Probot을 이용하기 위해서는 클라우드 프로바이더를 이용하여 배포를 해야 합니다. -
Glitch,Heroku,Now,GitHub Actions등을 이용하여 무료로 배포 할 수 있습니다. 자세한 사항은 Probot - Deployment를 참고해주세요 -
저는
Glitch를 이용하여 배포해보도록 하겠습니다. -
Create a new app on Glitch를 클릭하여, 새로운
Glitch앱을 생성합니다.

- 좌측 상단의
Sign in을 클릭하여, 가입합니다. 저는Sign in With GitHub를 이용했습니다.

-
GitHub Repository로 부터 소스 코드를Import하겠습니다. -
로그인 후, 하단의
Tools→Git, Import, and Export→Connect GitHub→Import from GitHub를 클릭하고,GitHubUser/Repository형식으로Import할 수 있습니다.

- 잠시 기다리시면, 선택한
Repository가Import되어 표시됩니다.

-
화면 좌측 상단의
Show → In a New Windows를 클릭합니다. -
URL의
/probot을 제외한 부분을 복사합니다. 저는https://check-check-bot.glitch.me가 되겠네요! -
GitHub의Settings → Developer settings → GitHub Apps으로 이동하여, 작성한GitHub App의Edit을 클릭합니다.

Webhook URL에 복사한 URL을 붙여넣습니다.Webhook secret은 로컬 프로젝트의.env에서 확인할 수 있습니다.

- 다시 Glitch로 돌아와서
.env파일을 수정합니다. 수정 내용은 Glitch를 참고하면 다음과 같습니다.
1
2
3
4
5
APP_ID=<your app id>
WEBHOOK_SECRET=<your app secret>
# PRIVATE_KEY_PATH=./.data/private-key.pem
# PRIVATE_KEY=<your app private key>
NODE_ENV=production
-
로컬 프로젝트의
APP_ID,WEBHOOK_SECRET을 복사하여 붙여넣습니다.-
PRIVATE_KEY_PATH는Glitch Project에서New File을 클릭하여,.data/private-key.pem을 생성하여private-key.pem에 로컬 프로젝트의PRIVATE_KEY를 붙여넣어도 되고,.env에PRIVATE_KEY항목을 작성하여 직접 붙여넣어도 됩니다. -
Glitch에서는
.data/private-key.pem을 사용하게 되어있습니다.
-

-
잘 작동하는지 확인하기 위해서,
Pull Request를 확인합니다. -
그럼 끝!
참고
- [Probot]](https://probot.github.io/docs/)
- GitHub Developer
- task-list-zero-bot
- Glitch