@@ -2,40 +2,54 @@ name: Spring Boot CI with gradle
22
33on :
44 push :
5- branches : [ "main", "develop", "feat/**", "feature/**" ]
5+ branches : [ "main", "develop", "feat/**", "feature/**" ] # 이 브랜치들에서 푸시될 때만
6+ paths : # 아래 파일/경로가 변경된 커밋일 때만 실행
7+ - " build.gradle*"
8+ - " settings.gradle*"
9+ - " gradlew"
10+ - " gradle/**"
11+ - " src/**"
12+ - " .github/workflows/**" # CI 파일이 바뀌어도 실행
613 pull_request :
7- branches : [ "main", "develop" ]
8- workflow_dispatch :
14+ branches : [ "main", "develop" ] # 대상(base)이 main/develop인 PR에 대해
15+ paths : # PR 변경에 Gradle/소스가 포함되어 있을 때만 실행
16+ - " build.gradle*"
17+ - " settings.gradle*"
18+ - " gradlew"
19+ - " gradle/**"
20+ - " src/**"
21+ - " .github/workflows/**"
22+ workflow_dispatch : # Actions 탭에서 수동 실행 버튼 제공
923
10- # 최소 권한
24+ # 최소 권한(리포 콘텐츠 읽기만 허용)
1125permissions :
1226 contents : read
1327
14- # 같은 브랜치 중복 실행 시 이전 실행 취소
28+ # 같은 브랜치에서 실행이 겹치면 이전 실행을 취소하여 큐 정리/빌드 낭비 방지
1529concurrency :
1630 group : ${{ github.workflow }}-${{ github.ref }}
1731 cancel-in-progress : true
1832
1933jobs :
2034 build-test :
21- # 레포에 Gradle 빌드 파일이 없으면 아예 실행 안 함(불필요한 실패 방지)
22- if : ${{ hashFiles('**/build.gradle*', '**/settings.gradle*') != '' }}
23- runs-on : ubuntu-latest
24- timeout-minutes : 20
35+ runs-on : ubuntu-latest # GitHub 호스티드 우분투 최신 러너
36+ timeout-minutes : 20 # 무한 대기 방지(20분 초과 시 실패 처리)
2537
2638 steps :
27- # 1) 코드 체크아웃
39+ # 1) 현재 커밋을 러너로 체크아웃
2840 - name : Checkout
2941 uses : actions/checkout@v4
3042
31- # 2) JDK 17 설치(Temurin)
43+ # 2) JDK 17 설치(Temurin 배포판 )
3244 - name : Set up JDK 17
3345 uses : actions/setup-java@v4
3446 with :
3547 distribution : temurin
3648 java-version : 17
3749
38- # 3) Secret로 application.yml 생성(멀티라인 안전)
50+ # 3) GitHub Secret으로 application.yml 생성
51+ # - 레포에 민감정보를 커밋하지 않고 CI에서만 주입
52+ # - heredoc으로 멀티라인 안전 처리 + CRLF 정리
3953 - name : Make application.yml from secret
4054 shell : bash
4155 run : |
@@ -45,15 +59,15 @@ jobs:
4559 EOF
4660 sed -i 's/\r$//' ./src/main/resources/application.yml
4761
48- # 4) Gradle 액션으로 빌드/테스트
49- # - 레포의 Gradle Wrapper를 자동 감지하여 실행
50- # - 캐시(래퍼/디스트리뷰션/의존성) 자동 관리
62+ # 4) Gradle 래퍼로 빌드 & 테스트
63+ # - gradle/gradle-build-action이 래퍼/디스트리뷰션/의존성 캐시를 자동 관리
5164 - name : Build with Gradle
5265 uses : gradle/gradle-build-action@v3
5366 with :
5467 arguments : clean build --no-daemon
5568
56- # 5) 테스트 리포트 업로드(항상)
69+ # 5) 테스트 리포트 업로드(항상 수행)
70+ # - 빌드 실패해도 HTML/XML 리포트를 Actions > Artifacts에서 확인 가능
5771 - name : Upload Test Reports
5872 if : always()
5973 uses : actions/upload-artifact@v4
6377 **/build/test-results/test
6478 **/build/reports/tests/test
6579
66- # 6) 실패 시 간단 요약 출력
80+ # 6) 실패 시 콘솔에 간단 요약 출력(어떤 테스트가 실패했는지 빠르게 확인)
6781 - name : Print failed tests (if any)
6882 if : failure()
6983 shell : bash
0 commit comments