GitHub Actions 기반 Formatting 자동화
Introduction
Algorithm 문제를 풀고 GitHub에서 관리하고 있었는데, 문제를 해결할 때 replit을 초기에 많이 사용했었다.
하지만 현재 사용하고 있는 Visual Studio Code와 indentation의 규칙이 달라서 GitHub Actions로 모두 동일한 format을 가지도록 자동화하겠다.
GitHub Actions는 구동 조건 (CronJob, 특정 branch에 push, …)을 만족하면 준비된 스크립트를 자동적으로 실행해준다.
따라서 CI/CD를 포함하여 다양한 작업에 사용되고 있다. (로또 자동화도 가능,,,)
Automating Code Formatting
시작하기 전에 구동하려는 repository 내에서 “Setting - Secrets and variables - Actions”로 들어가 아래와 같이 GitHub token 값을 공개되지 않도록 환경 변수로 지정한다.
${YOUR_REPOSITORY_PATH}/.github/workflows/${YOUR_ACTIONS}.yml
경로에 원하는 행동을 작성하고 repository에 push하면 조건에 맞춰 실행된다.
actions/checkout@v3
로 현재 구동하려는 repository를 지정해주고 필요한 환경을 설정해준다. (Python, Formatting tools)
shell script를 개발하는 것과 비슷하게 조건문으로 isort
와 autopep8
를 구동하고 변동사항이 있다면 push 할 수 있도록 개발하였다.
1 | name: Formatter |
준비된 Formatter.yml
파일을 push하면 아래와 같이 잘 실행된다.
변경 내역을 확인해보면 모두 정갈하게 바뀐 것을 알 수 있다.
차후 시도
Pylint를 사용하면 python 코드를 평가해준다.
해당 기능을 GitHub Actions에 추가하여 사용하면 귀여울 것 같다.
1 | pylint main.py |
마지막으로, 현재 문제점은 GitHub Actions가 main branch에 push 될 때 구동되는데 여기서 formatting을 진행하고 변경사항이 있으면 다시 push 하고, git add .
를 사용하는 것이다.
이 말은 재귀적으로 GitHub Actions를 호출하는 것이기 때문에 이런 것을 어떻게 바꿀 수 있을지 고민해야한다.
아마 Git Hooks & Husky를 사용하면 이런 문제를 해결할 수 있을 것 같다.