-
Notifications
You must be signed in to change notification settings - Fork 2
131 lines (102 loc) · 3.82 KB
/
ci-with-gradle-and-sonar.yml
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# Workflow 이름
name: CI Report with Gradle & Sonar
# 트리거 이벤트
on:
pull_request:
branches: [ "main", "master", "develop", "release" ]
# 테스트 결과 작성을 위해 쓰기 권한 추가
permissions: write-all
# 실행
jobs:
build:
runs-on: ubuntu-latest
# 실행 스텝
steps:
# workflow 가 repo 에 접근하기 위한 Marketplace action
- uses: actions/checkout@v4.2.2
# 우리 repo 디렉토리는 ~/ 아니라 그냥 ./ 임
# workflow 실행 시 구조 잘 확인하려고 추가한 step
- name: Show CWD Properties
run: |
echo "Current directory : `pwd`"
ls -al
echo 'tree ./'
tree ./ -a
# jdk setup
- name: Set up JDK 17
uses: actions/setup-java@v4.5.0
with:
java-version: '17'
distribution: 'oracle' # 그냥 Oracle JDK
# gradle 캐시해서 빌드 시간 단축
- name: Gradle caching
uses: actions/cache@v4.1.2
with:
# cache 저장할 폴더 설정
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys:
${{ runner.os }}-gradle-
# gradlew 실행 권한 부여
- name: Grant Execute Permission For Gradlew
run: chmod +x ./gradlew
# Secret 들 test-resources 에 추가
- name: Set up secret yml file
env:
YAML_SECRET: ${{ secrets.SECRET_YAML }}
YAML_DIR: src/main/resources
YAML_TEST_DIR: src/test/resources
YAML_FILE_NAME: application-secret.yml
run: |
echo $YAML_SECRET | base64 --decode > $YAML_DIR/$YAML_FILE_NAME
echo $YAML_SECRET | base64 --decode > $YAML_TEST_DIR/$YAML_FILE_NAME
echo "YAML_SECRET has been decoded and saved to $YAML_DIR/$YAML_FILE_NAME"
echo "YAML_SECRET has been decoded and saved to $YAML_TEST_DIR/$YAML_FILE_NAME"
# test 없이 그냥 build
- name: Build with Gradle
run: ./gradlew build -x test --build-cache
# Redis 활성화
- name: Start Redis
uses: supercharge/redis-github-action@1.1.0
with:
redis-version: 6
# 테스트 실행
- name: Run Tests
run: ./gradlew --info test
# 실행할꺼 다 실행하고 다시 한번 파일 구조 확인하기 (편의성)
# workflow 실행 시 구조 잘 확인하려고 추가한 step
- name: Show CWD Properties
run: |
echo "Current directory : `pwd`"
ls -al
echo 'tree ./'
tree ./ -a
# Pull Request 코멘트에 테스트 결과 댓글 달기
- name: Publish Unit Test Results To PR Comment
uses: EnricoMi/publish-unit-test-result-action@v2.18.0
if: ${{ always() }} # 앞에 step 이 fail 해도 실행
with:
files: build/test-results/**/*.xml
# 테스트 실패한 부분 PR Code Review 에 주석 달기
- name: Add Annotation to Failed Test on PR Code Review
uses: mikepenz/action-junit-report@v5
if: success() || failure() # 앞에 step 이 fail 해도 실행
with:
# test report 위치
report_paths: '**/build/test-results/test/*.xml'
require_tests: true
# Sonar Cloud 패키지 캐싱
- name: Cache SonarCloud packages
uses: actions/cache@v4.1.2
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
# Sonar 로 코드 분석 & SonarCloud 로 결과 upload
- name: Analyze via Sonar
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: ./gradlew sonar --info