일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 파이썬
- VUE
- CSS
- HTML
- 알고리즘
- 자바스크립트
- 이슈
- 프론트엔드
- 블록체인
- 이더리움
- docker
- 가상화
- kubernetes
- 웹
- 리액트
- 솔리디티
- 클라우드
- 컴퓨터공학
- next.js
- 쿠버네티스
- es6
- k8s
- BFS
- react
- 백엔드
- AWS
- TypeScript
- JavaScript
- 타입스크립트
- 백준
- Today
- Total
즐겁게, 코드
Github Action과 함께 알고리즘 풀이 저장 자동화하기 본문
본 포스트의 내용은 이 깃허브 레포에서 확인해보실 수 있습니다. 🙂
저는 알고리즘 문제를 풀이하면 그 코드를 깃허브에 업로드하곤 하는데요, 어느 날 저장소의 일관되지 않은 커밋 메시지가 신경쓰이기 시작했습니다.
컨벤션이나 커밋 템플릿을 따로 제작해둔다고 해도 이는 결국 사람이 남기는 것인 만큼 실수가 발생할 여지가 충분히 있었고, 이번 기회에 Github Action
을 사용해 커밋 메시지를 고정하는 태스크를 추가해보려 시도했습니다.
✅ 나중에 알게 된 사실이지만, 이렇게 Git의 이벤트(Ex. commit, push...) 를 감지해 특정 액션을 트리거히고자 할 때는 클라이언트에서 실행되는 Git hooks 를 사용할 수도 있습니다.
1. 커밋 메시지 고정하기
첫 번째 목표는 커밋 메시지를 특정 컨벤션으로 강제로 고정시키는 것이었습니다.
현재는 [feat: 푼 문제 번호]
또는 [문제 유형 : 문제 번호]
처럼 커밋 메시지를 통일하려고 시도는 했으나 제대로 이루어지지 않고 있었는데요, 이번 작업에서는 {현재 날짜} 문제풀이 기록
이라는 이름으로 커밋 메시지가 통일되도록 시도했습니다.
이를 위해 stefanzweifel/git-auto-commit-action@v4
이라는 커스텀 액션을 도입했고, 처음에는 이렇게만 작성하면 될 줄 알았습니다.
name: 알고리즘 문제풀이 기록
on:
push:
branches:
- "master"
jobs:
Create-PS-Record:
name: "금일 알고리즘 문제풀이 기록"
runs-on: ubuntu-latest
steps:
# 오늘 날짜를 환경 변수에 저장합니다.
# date 커맨드를 사용하면 오늘 날짜 정보를 형식에 맞게 읽어올 수 있습니다.
- name: set Today Date
run: echo TODAY_DATE=$(date +%Y년\ %m월\ %d일) >> $GITHUB_ENV
- name: overlap commit
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: ${{ env.TODAY_DATE }} 문제 풀이 기록
commit_user_name: Chanmin, Kim <kimchanmin1@gmail.com>
commit_author: "Chanmin, Kim <kimchanmin1@gmail.com>"
✅ Tip - runs-on, with 등 정해진 Github Action 키의 이름을 어떻게 다 외울 수 있나요?
저도 처음에는 이 부분이 막막하게 느껴졌는데요, Github Actions VSCode 익스텐션을 사용하면 인텔리센스처럼 액션 키 자동완성이나 YAML 유효성 검증을 지원해줘 어렵지 않게 태스크를 작성할 수 있었습니다.
그리고 공식 문서가 정말 잘 되어있는 편이라, 문서를 따라가다 보면 금방 익히실 수 있을 거에요!
그런데 액션을 통해 커밋을 추가하니 현재 저장소가 깃 저장소가 아니라는 메시지가 출력되었는데요, 이유를 알아보니 액션에서 현재 저장소의 정보(커밋 기록, 파일 목록 등)을 불러오기 위해서는 checkout
이라는 커스텀 액션을 반드시 스텝 제일 위에서 사용해야 함을 알 수 있었습니다.
name: 알고리즘 문제풀이 기록
on:
push:
branches:
- "master"
jobs:
Create-PS-Record:
name: "금일 알고리즘 문제풀이 기록"
runs-on: ubuntu-latest
steps:
- name: set Today Date
run: echo TODAY_DATE=$(date +%Y년\ %m월\ %d일) >> $GITHUB_ENV
# 저장소 정보를 읽어옵니다.
- name: fetch repository info
uses: actions/checkout@v2
with:
ref: ${{ github.head_ref }}
- name: overlap commit
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: ${{ env.TODAY_DATE }} 문제 풀이 기록
commit_user_name: Chanmin, Kim <kimchanmin1@gmail.com>
commit_author: "Chanmin, Kim <kimchanmin1@gmail.com>"
이제 커밋을 남기면 {현재 날짜} 문제풀이 기록
이라는 이름의 커밋이 새로 추가되는데요, 이를 통해 원하는 형태의 커밋 메시지를 남길 수 있게 되었습니다.
🧐 그런데 이러면 두 개의 커밋이 생긴다는 건데, 커밋을 스쿼시하거나 commit --amend 로 해결할 수 있는 방법은 없을까요?
아쉽게도 Github Action 태스크는 주어진 스텝을 클라우드 상에서 실행하는 것이다 보니, 별도의 텍스트 에디터를 필요로 하는 두 동작에 대해서는 구현할 수 있는 방법이 없는 것 같았습니다. 😢
2. 작성한 코드를 특정 폴더로 이동시키기
커밋 메시지를 고정시킨다는 처음의 목적을 달성하니 두 번째 시도를 해보고 싶었습니다.
기존에는 알고리즘 문제를 유형별로 나눈 폴더에 기록하고 있었는데, 일일 알고리즘 풀이 저장을 목적으로 하는 만큼, 이를 {YYYY년-MM월-DD일}
폴더에 자동으로 위치시키고 싶었습니다.
따라서 이를 위해 오늘 날짜 이름으로 폴더를 생성한 후, 해당 폴더로 소스를 옮기는 쉘 스크립트를 다음과 같이 작성했습니다.
name: 알고리즘 문제풀이 기록
on:
push:
branches:
- "master"
jobs:
Create-PS-Record:
name: "금일 알고리즘 문제풀이 기록"
runs-on: ubuntu-latest
steps:
- name: set Today Date
run: echo TODAY_DATE=$(date +%Y년\ %m월\ %d일) >> $GITHUB_ENV
- name: fetch repository info
uses: actions/checkout@v2
with:
ref: ${{ github.head_ref }}
# 스크립트 설명
# try: 오늘 날짜로 된 폴더를 생성한 후, 루트 폴더에 위치한 파이썬 파일을 생성된 폴더로 옮깁니다.
# catch: 루트 폴더에 위치한 파이썬 파일을 생성된 폴더로 옮깁니다.
- name: make directory with today's date & move solved code
run: mkdir "$(date '+%Y년 %m월 %d일')" && mv *.py "$('date +%Y년 %m월 %d일')" || mv *.py "$(date '+%Y년 %m월 %d일')"
- name: show current directory (to check mkdir's success)
run: ls
- name: overlap commit
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: ${{ env.TODAY_DATE }} 문제 풀이 기록
commit_user_name: Chanmin, Kim <kimchanmin1@gmail.com>
commit_author: "Chanmin, Kim <kimchanmin1@gmail.com>"
결과는 성공한 모습입니다!
이제 루트 폴더에 오늘 해결한 문제 풀이들을 위치시키고, 커밋을 아무렇게나 남기기만 하면 자동으로 {오늘 날짜} 풀이 기록
이라는 커밋 메시지와 함께 {오늘 날짜}
폴더 안에 문제 코드들이 위치하게 됩니다.
비록 간단한 작업이지만 Github Action을 사용해 처음으로 특정 작업을 자동화해본 경험이었는데요, 리눅스 커맨드와 쉘 스크립트 문법에 대해서도 알아볼 수 있었던 즐거운 시도였던 것 같습니다! 😆
'⚡️ DevOps > CI & CD' 카테고리의 다른 글
서비스 가용성을 위한 무중단 배포와 전략 알아보기 (0) | 2022.05.12 |
---|