Skip to content

Commit 1ea0dd1

Browse files
authored
Merge pull request #7 from EntryDSM/20250511-114550/casper-application-pr16
[Auto] Casper-Application: Refactor/15 pre commit 분리
2 parents 362d31a + 47e8110 commit 1ea0dd1

1 file changed

Lines changed: 74 additions & 0 deletions

File tree

documents/etc/16-pre-commit.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# ENTB-XXX-XXXX: 빌드 검증 및 커밋 메시지 포맷 검증 기능 개발
2+
3+
---
4+
## 요약
5+
`pre commit`을 활용하여 빌드 실패 시와 커밋 메시지 포맷이 잘 못 되었을 시 커밋이 안되도록 검증 기능을 개발하였습니다.
6+
7+
---
8+
## 동기
9+
- 협업 중 빌드에 실패하는 코드나 잘못된 형식의 커밋 메시지가 main 브랜치에 올라가는 일이 반복되었습니다.
10+
- 이를 방지하기 위해 사전에 검증할 수 있는 자동화된 체계가 필요하였습니다.
11+
- 개발자가 실수로 잘못된 코드를 커밋하지 않도록 막아 코드 품질과 협업 효율을 높이고자 했습니다.
12+
- 팀 내 커밋 메시지 규칙을 지키도록 강제하여, 커밋 로그의 일관성과 가독성을 유지하고자 했습니다.
13+
14+
### 목표
15+
- 커밋 전에 코드가 빌드 가능한지 자동으로 확인하여 빌드 오류가 있는 커밋을 방지합니다.
16+
- 커밋 메시지가 정해진 포맷에 맞는지 검증하여 일관된 커밋 로그를 유지합니다.
17+
- 위 조건이 만족되지 않으면 커밋 자체를 막도록하여 실수로 인한 문제를 사전에 차단합니다.
18+
- pre-commit 훅을 통해 개발자의 로컬 환경에서 자동 실행되도록 구성하여 별도의 수동 확인 없이도 자동화되도록 합니다.
19+
20+
### 목표가 아닌 것
21+
- 빌드 오류의 원인을 상세히 분석하거나 자동으로 수정하지 않습니다.
22+
- 커밋 메시지를 자동으로 수정하거나 생성하지 않습니다.
23+
- 로컬 외의 환경에서의 검증은 포함하지 않습니다.
24+
- 특정 프레임워크나 프로젝트 구조에 종속되지 않도록 범용적으로 설계되어 있으나, 모든 종류의 프로젝트에서 완벽하게 동작함을 보장하지 않습니다.
25+
26+
27+
28+
---
29+
## 제안
30+
- `commit-msg`
31+
- 커밋 메시지가 다음과 같은 규칙을 따르는지 정규표현식으로 검증합니다.
32+
- `커밋타입 ( #이슈번호 ) : 커밋메시지`
33+
- `pre-commit`
34+
- 커밋 전에 자동으로 Gradle 빌드를 수행하여 빌드가 성공적으로 진행되면 커밋이 되도록 구현하였습니다.
35+
36+
### 기술 설계
37+
- `.git/hooks/` 위치에 `commit-msg``pre-commit`을 작성하였습니다.
38+
- `commit-msg``pre-commit`에 각 목표에 맞는 스크립트 코드를 작성하였습니다.
39+
40+
41+
42+
`commit-msg`
43+
```shell
44+
#!/bin/bash
45+
# .git/hooks/commit-msg
46+
47+
msg_file="$1"
48+
commit_msg="$(<"$msg_file")"
49+
50+
regex="^(feat|fix|chore|docs|style|refactor|test|perf|ci|build|revert) \\( #[0-9]+ \\) : .+$"
51+
52+
if [[ ! $commit_msg =~ $regex ]]; then
53+
echo "❌ 메시지 형식 에러: 타입 ( #이슈 ) : 설명"
54+
exit 1
55+
fi
56+
57+
echo "✅ 커밋 메시지 형식 OK"
58+
```
59+
60+
`pre-commit`
61+
```
62+
#!/bin/bash
63+
# .git/hooks/pre-commit
64+
65+
echo "🔨 Gradle 빌드 검증…"
66+
67+
if ! ./gradlew clean build --no-daemon; then
68+
echo "❌ 빌드 실패—커밋 중단"
69+
exit 1
70+
fi
71+
72+
echo "✅ 빌드 성공"
73+
74+
```

0 commit comments

Comments
 (0)