Skip to content

Commit 8eb76d4

Browse files
authored
Merge pull request #1 from EntryDSM/feature/01-auto-documents
DOCS 생성 자동화
2 parents a5bac55 + f789f42 commit 8eb76d4

14 files changed

Lines changed: 256 additions & 136 deletions

File tree

.gitconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[core]
2+
hooksPath = .githooks

.githooks/pre-commit

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#!/bin/bash
2+
3+
# 프로젝트 루트 디렉토리 저장
4+
PROJECT_ROOT="$(git rev-parse --show-toplevel)"
5+
cd "$PROJECT_ROOT"
6+
7+
echo "Casper Documents 유효성 검사를 시작합니다..."
8+
9+
# 스크립트 실행 권한 확인 및 부여
10+
if [ ! -x "$PROJECT_ROOT/script/validate-entb.sh" ]; then
11+
chmod +x "$PROJECT_ROOT/script/validate-entb.sh"
12+
fi
13+
if [ ! -x "$PROJECT_ROOT/script/validate-entf.sh" ]; then
14+
chmod +x "$PROJECT_ROOT/script/validate-entf.sh"
15+
fi
16+
17+
# 스테이징된 파일 목록 확인
18+
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)
19+
20+
# 백엔드 문서 필터링
21+
BACKEND_FILES=$(echo "$STAGED_FILES" | grep -E "^documents/backend/.*\.md$" || true)
22+
# 프론트엔드 문서 필터링
23+
FRONTEND_FILES=$(echo "$STAGED_FILES" | grep -E "^documents/frontend/.*\.md$" || true)
24+
25+
if [ -z "$BACKEND_FILES" ] && [ -z "$FRONTEND_FILES" ]; then
26+
echo "검사할 문서 파일이 없습니다. 유효성 검사를 건너뜁니다."
27+
exit 0
28+
fi
29+
30+
# 유효성 검사 실패 여부 플래그
31+
VALIDATION_FAILED=0
32+
33+
# 백엔드 문서 유효성 검사
34+
if [ -n "$BACKEND_FILES" ]; then
35+
echo "백엔드 문서 유효성 검사 시작..."
36+
37+
for file in $BACKEND_FILES; do
38+
echo "검사 중: $file"
39+
if ! "$PROJECT_ROOT/script/validate-entb.sh" "$file"; then
40+
VALIDATION_FAILED=1
41+
echo "오류: '$file' 파일의 유효성 검사에 실패했습니다."
42+
else
43+
echo "통과: '$file' 파일의 유효성 검사에 성공했습니다."
44+
fi
45+
done
46+
fi
47+
48+
# 프론트엔드 문서 유효성 검사
49+
if [ -n "$FRONTEND_FILES" ]; then
50+
echo "프론트엔드 문서 유효성 검사 시작..."
51+
52+
for file in $FRONTEND_FILES; do
53+
echo "검사 중: $file"
54+
if ! "$PROJECT_ROOT/script/validate-entf.sh" "$file"; then
55+
VALIDATION_FAILED=1
56+
echo "오류: '$file' 파일의 유효성 검사에 실패했습니다."
57+
else
58+
echo "통과: '$file' 파일의 유효성 검사에 성공했습니다."
59+
fi
60+
done
61+
fi
62+
63+
# 유효성 검사 결과 확인
64+
if [ $VALIDATION_FAILED -eq 1 ]; then
65+
echo "=================================================================="
66+
echo " 오류: 하나 이상의 문서 파일이 유효성 검사에 실패했습니다."
67+
echo " 문제를 수정한 후 다시 커밋해주세요."
68+
echo "=================================================================="
69+
exit 1
70+
else
71+
echo "모든 문서 파일이 유효성 검사를 통과했습니다. 커밋을 진행합니다."
72+
exit 0
73+
fi

.github/workflows/Parse-Backend-Documents.yaml

Lines changed: 0 additions & 60 deletions
This file was deleted.

.github/workflows/Parse-Frontend-Documents.yaml

Lines changed: 0 additions & 60 deletions
This file was deleted.
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
name: Process All Documents
2+
3+
on:
4+
push:
5+
paths:
6+
- 'documents/backend/*.md'
7+
- 'documents/frontend/*.md'
8+
pull_request:
9+
paths:
10+
- 'documents/backend/*.md'
11+
- 'documents/frontend/*.md'
12+
workflow_dispatch:
13+
14+
jobs:
15+
process-documents:
16+
runs-on: ubuntu-latest
17+
permissions:
18+
contents: write
19+
steps:
20+
- name: Checkout code
21+
uses: actions/checkout@v3
22+
with:
23+
fetch-depth: 0
24+
25+
- name: Setup permissions
26+
run: |
27+
chmod +x ./script/parsing-entb.sh
28+
chmod +x ./script/parsing-entf.sh
29+
chmod +x ./script/validate-entb.sh
30+
chmod +x ./script/validate-entf.sh
31+
32+
- name: Identify changed files
33+
id: changed-files
34+
uses: tj-actions/changed-files@v37
35+
with:
36+
files: |
37+
documents/backend/*.md
38+
documents/frontend/*.md
39+
40+
- name: Process backend documents
41+
if: ${{ steps.changed-files.outputs.any_changed == 'true' }}
42+
run: |
43+
echo "Processing backend documents..."
44+
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
45+
if [[ $file == documents/backend/*.md ]]; then
46+
echo "Validating backend file: $file"
47+
if ./script/validate-entb.sh "$file"; then
48+
echo "Parsing backend file: $file"
49+
./script/parsing-entb.sh "$file"
50+
else
51+
echo "Validation failed for $file"
52+
exit 1
53+
fi
54+
fi
55+
done
56+
57+
- name: Process frontend documents
58+
if: ${{ steps.changed-files.outputs.any_changed == 'true' }}
59+
run: |
60+
echo "Processing frontend documents..."
61+
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
62+
if [[ $file == documents/frontend/*.md ]]; then
63+
echo "Validating frontend file: $file"
64+
if ./script/validate-entf.sh "$file"; then
65+
echo "Parsing frontend file: $file"
66+
./script/parsing-entf.sh "$file"
67+
else
68+
echo "Validation failed for $file"
69+
exit 1
70+
fi
71+
fi
72+
done
73+
74+
- name: Commit changes
75+
if: ${{ steps.changed-files.outputs.any_changed == 'true' }}
76+
run: |
77+
git config --local user.email "action@github.com"
78+
git config --local user.name "GitHub Action"
79+
git add documents/api/ documents/component/ documents/function/
80+
git diff --staged --quiet || git commit -m "자동 문서 생성: $(date +%Y-%m-%d)"
81+
git push

README.md

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Casper Documents는 정형화된 마크다운 문서를 파싱하여 다음과
1616
```
1717
.
1818
├── .github/workflows # GitHub Actions 워크플로우 정의
19+
├── .githooks # Git 훅 스크립트
1920
├── documents # 문서 디렉토리
2021
│ ├── api # 생성된 API 문서
2122
│ ├── backend # 백엔드 명세 문서 (ENTB)
@@ -29,22 +30,37 @@ Casper Documents는 정형화된 마크다운 문서를 파싱하여 다음과
2930
├── parsing-entb.sh # 백엔드 문서 파싱 스크립트
3031
├── parsing-entf.sh # 프론트엔드 문서 파싱 스크립트
3132
├── validate-entb.sh # 백엔드 문서 유효성 검사 스크립트
32-
└── validate-entf.sh # 프론트엔드 문서 유효성 검사 스크립트
33+
├── validate-entf.sh # 프론트엔드 문서 유효성 검사 스크립트
34+
└── setup-hooks.sh # Git 훅 설정 스크립트
3335
```
3436

37+
## 설치 및 설정
38+
39+
### Git 훅 설정
40+
41+
프로젝트를 클론한 후 다음 명령을 실행하여 Git 훅을 설정합니다:
42+
43+
```bash
44+
./script/setup-hooks.sh
45+
```
46+
47+
이 스크립트는 문서 파일을 커밋할 때마다 자동으로 유효성 검사를 실행하도록 Git 훅을 설정합니다.
48+
3549
## 사용 방법
3650

3751
### 백엔드 문서 작성
3852

3953
1. `documents/backend/` 디렉토리에 `ENTB-XXX-XXXX.md` 형식의 마크다운 파일을 생성합니다.
4054
2. 템플릿을 참고하여 백엔드 명세를 작성합니다.
41-
3. 문서를 커밋하면 GitHub Actions가 자동으로 문서 유효성을 검사하고, API 문서와 함수 문서를 생성합니다.
55+
3. 문서를 커밋하면 Git 훅이 자동으로 문서 유효성을 검사합니다.
56+
4. 유효성 검사를 통과하면 GitHub Actions가 자동으로 API 문서와 함수 문서를 생성합니다.
4257

4358
### 프론트엔드 문서 작성
4459

4560
1. `documents/frontend/` 디렉토리에 `ENTF-XXX-XXXX.md` 형식의 마크다운 파일을 생성합니다.
4661
2. 템플릿을 참고하여 프론트엔드 명세를 작성합니다.
47-
3. 문서를 커밋하면 GitHub Actions가 자동으로 문서 유효성을 검사하고, 컴포넌트 문서와 함수 문서를 생성합니다.
62+
3. 문서를 커밋하면 Git 훅이 자동으로 문서 유효성을 검사합니다.
63+
4. 유효성 검사를 통과하면 GitHub Actions가 자동으로 컴포넌트 문서와 함수 문서를 생성합니다.
4864

4965
### 문서 유효성 검사
5066

@@ -72,14 +88,25 @@ Casper Documents는 정형화된 마크다운 문서를 파싱하여 다음과
7288
./script/parsing-entf.sh documents/frontend/ENTF-XXX-XXXX.md
7389
```
7490

75-
## GitHub Actions 자동화
91+
## 자동화 워크플로우
92+
93+
### Git 훅 (로컬)
94+
95+
`pre-commit` 훅은 다음 작업을 수행합니다:
96+
97+
1. 커밋하려는 백엔드/프론트엔드 문서 파일을 검색합니다.
98+
2. 각 문서 파일에 대해 유효성 검사를 실행합니다.
99+
3. 유효성 검사에 실패한 파일이 있으면 커밋을 중단합니다.
100+
4. 모든 파일이 유효성 검사를 통과하면 커밋을 허용합니다.
76101

77-
이 프로젝트는 GitHub Actions를 사용하여 문서 검증 및 생성을 자동화합니다:
102+
### GitHub Actions (원격)
78103

79-
- **Parse-Backend-Documents**: 백엔드 문서가 변경될 때 문서를 검증하고, API 문서와 함수 문서를 생성합니다.
80-
- **Parse-Frontend-Documents**: 프론트엔드 문서가 변경될 때 문서를 검증하고, 컴포넌트 문서와 함수 문서를 생성합니다.
104+
GitHub Actions 워크플로우는 다음 작업을 수행합니다:
81105

82-
두 워크플로우 모두 수동으로 실행할 수도 있습니다. 문서 유효성 검사에 실패하면 문서 생성 단계는 실행되지 않습니다.
106+
1. 푸시된 커밋에서 변경된 백엔드/프론트엔드 문서 파일을 검색합니다.
107+
2. 각 문서 파일에 대해 유효성 검사를 실행합니다.
108+
3. 유효성 검사를 통과한 파일은 자동으로 파싱하여 API/컴포넌트/함수 문서를 생성합니다.
109+
4. 생성된 문서 파일을 자동으로 커밋하여 저장소에 추가합니다.
83110

84111
## 문서 템플릿
85112

documents/api/.gitkeep

Whitespace-only changes.

documents/backend/.gitkeep

Whitespace-only changes.

documents/component/.gitkeep

Whitespace-only changes.

documents/frontend/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)