최근에 Probot으로 이것저것 해본 관계로 Probot 관련 글을 연달아 쓰고 있다.
context.config
App을 만들고 혼자서만 사용한다면 코드에 설정이 하드코딩 되어도 크게 문제가 되진 않지만 다른 사람도 사용하게 배포하거나 서버 배포 없이 쉽게 설정을 변경하려면 설정 파일로 관리하는 게 좋다. 예를 들어 Stale같은 경우는 며칠 동안 활동이 없으면 어떤 라벨을 붙이고 며칠 뒤에 이슈를 닫을지 지정해야 하는데 해당 저장소에 .github/stale.yml
파일을 커밋하면 이 파일을 가져다가 Stale 앱이 사용한다. mocha.js에서 사용하는 stale.yml에서 그 내용을 확인할 수 있다.
저장소에 올려놓은 YAML 파일은 context.config
로 읽어올 수 있다.
다음 index.js
를 보자.
module.exports = async app => {
app.log('Yay, the app was loaded!')
app.on('issues.opened', async context => {
const config = await context.config('ping.yml')
// use config
})
}
config()
함수는 context
객체가 있어야 하므로 이슈 생성 등 이벤트 리스너 안에서 사용해야 한다. context.config('ping.yml')
처럼 사용하면 해당 저장소의 .github/ping.yml
을 찾아서 읽어온다. 이 함수는 Promise를 반환하므로 Promise로 사용하거나 위 예제처럼 async
/await
를 이용해야 한다.
name: example
label: test
YAML 파일을 자동으로 파싱해 주므로 위의 YAML은 아래처럼 Object literal로 변환된다.
{
name: 'example'
label: 'test'
}
context.config('ping.yml')
에서 기본값을 사용할 수도 있는데 context.config('ping.yml', { days: 10 })
처럼 두 번째 인자에 객체를 넘기면 읽어온 값과 머지되어 기본값으로 사용할 수 있다.
GitHub App의 사용자가 설정해야 하는 값은 이렇게 context.config()
를 통해 지정하게 할 수 있다. 추가로 한 org 밑에서 여러 저장소에서 설정값을 공통으로 사용하려면 probot-config를 사용해야 한다.
Comments