AOJ for Integration 개발 노트
개발 일자
21-01-15
: bash, python script 작성21-01-16
: GitHub yaml script 작성 및 버그 테스트
개발 동기
알고리즘 문제 해결 전략(종만북) 스터디 내용을 Advanced-Algorithm-Study에 기록하고 있습니다. 해당 repo에는 AC를 받은 코드만 커밋되어 있는데, 이러한 아카이브 성향으로 인해 repo가 정적으로 느껴지고, README를 꾸며도 코드의 신뢰도가 잘 와닿지 않았습니다.
따라서 CI를 하나 구축하여 이 repo가 체계적으로 관리되고 있음을 드러내고자 했습니다.
어떤 CI를 구축할까?
다음의 후보군들이 있었습니다.
- 코드 linter
- 코드 compiler
- 알고스팟(AOJ) 채점기
이 repo는 PS 목적이기에 1번의 linter를 돌리기엔 부적절하다 판단했습니다. PS는 협업이 아니라서 딱히 클린코드를 생각하진 않기 때문입니다.
2번은 다른 repo에서 구축한 것을 본 적 있습니다. 만들기엔 간단하나 굳이? 싶었습니다. 오직 CTE 밖에 못 잡으므로...
3번은 평소에도 이런 거 하나 있었음 좋겠다 싶은 제 아이디어였습니다. 이번에 만들어보지 않으면 다음에는 기회가 없겠다 싶어서 이걸 선택했습니다.
고려할 사항
알고스팟 채점기를 구현하려면 추가로 고려할 점들이 있습니다.
- commit 정보를 복잡한 과정 없이 가져올 수 있는지?
- AOJ 서버에 부하가 가지 않을지?
commit 정보는 최악의 경우 git 로그나 html을 파싱해서 가져오는 조악한(?) 방법을 우려했으나, 다행히 git 명령어 한 줄로 해결할 수 있었습니다. (고마워요 구글신!)
한편, 알고스팟 서버가 제 소유도 아니고 비교적 느리기 때문에 매 커밋마다 모든 코드를 검토(제출)하는 식의 일반적인 CI 방식 적용은 어렵다고 생각했습니다. 다행히 알고스팟은 백준보다 채점 변동사항이 현저히 적어서 이 부분은 직접적으로 해당 코드 파일이 커밋될 때만 제출하는 것으로 간소화했습니다.
플로우 차트
문제와 해결방안
💭 커밋된 파일명을 어떻게 얻을지?
💡
💭 커밋된 파일 내용을 어떻게 얻을지?
💡
💭 커밋 메시지를 어떻게 얻고 파싱할지?
💡
💭 코드 제출 후 채점 결과를 어떻게 가져올지?
💡
💭 AOJ와의 통신 로그를 workflow 콘솔 및 GitHub 코멘트에 출력하는 방법?
💡