Github Actions로 트위터 봇 만들기

늘 그렇듯 한 번 만들어보면 별거 없습니다;

YI Eun Gook
4 min readSep 22, 2020

트위터에 코로나 19 신규 확진자 정보 봇을
Github Actions로 만들어 보았습니다.
https://twitter.com/c19bot

https://github.com/eungook/c19bot-01
이 리포지터리를 통해서 돌아가고 있고요,
Node.js로 만들어 보았습니다.

const Tweet = require('./tweet');
const OpenAPI = require('./openapi');
const { getKSTDate } = require('./util');
(async () => {
// 확진자 수 조회
const now = new Date();
const kst = getKSTDate(now);
console.log({ now, kst });
const newDecideCnt = await OpenAPI.init().getNewDecideCnt(kst);
console.log({ newDecideCnt });
// 트윗
const yyyy = kst.getFullYear();
const m = kst.getMonth() + 1;
const d = kst.getDate();
const status = `${yyyy}년 ${m}월 ${d}일 기준 일일 신규 확진자 수는 ${newDecideCnt}명 입니다.`;
Tweet.init().update(status);
})();

코드는 간단하게 작성 했습니다.
중요한건 Github Actions 쪽이겠죠?
https://github.com/eungook/c19bot-01/blob/master/.github/workflows/tweet.yml

on:
workflow_dispatch:
schedule:
- cron: '0 3 * * *'
# UTC 03:00 = KST 12:00

workflow_dispatch 옵션으로 여차할 때 수동으로 돌릴 수 있게 하였고
schedule을 통해 크론을 등록해 줍니다.
참고로 Github Actions 기본 Runner의 타임존은 UTC더라고요.

steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm install

actions/starter-workflows를 참고하여 약간 수정했습니다.

    - run: node --unhandled-rejections=strict index.js
env:
OPEN_API_SERVICE_KEY: ${{ secrets.OPEN_API_SERVICE_KEY }}
CONSUMER_KEY: ${{ secrets.CONSUMER_KEY }}
CONSUMER_SECRET: ${{ secrets.CONSUMER_SECRET }}
ACCESS_TOKEN_KEY: ${{ secrets.ACCESS_TOKEN_KEY }}
ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }}

여러 키는 Secrets쪽에 등록하여 .env를 통해 사용하고,
Promise 내의 Exception이 Propagate될 수 있도록 --unhandled-rejections=strict 옵션을 추가 했습니다. 이상입니다.

다음에는 이걸 만드는 과정을 한 번 정리해 보겠습니다.
Github Actions를 잘 몰라서 엄춍 해맸던 거나
여러 키를 숨기기까지 과정이나
나름 유닛 테스트도 만들어본걸 한 번 적어보겠습니다. 감사합니다.

--

--

No responses yet