깃헙 workflows 로 테스트 결과를 자동으로 comment 로 남기자
깃헙 workflows 로 테스트 결과를 자동으로 comment 로 남기자
github 에서 pr 을 생성한 후, 테스트 결과를 자동으로 comment 로 남겨줄 수 있도록 actions 를 추가해주자.
forked repository 가 아닌 경우
forked repository 가 아닌 경우에는 간단하다.
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
# workflow의 이름을 정의한다.
name: 'test-main-and-publish'
# workflow가 언제 동작할지 정의한다.
# 이 workflow의 경우 main, dev branch에 pull_request 이벤트가 발생할 경우 동작한다.
on:
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
checks: write
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- name: Add executable permission to gradlew
run: chmod +x ./gradlew
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- name: Cache Gradle dependencies
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: $-gradle-$
restore-keys: |
$-gradle-
- name: Build with Gradle
run: ./gradlew build
- name: Run tests with Gradle
run: ./gradlew test
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
files: |
build/test-results/test/TEST-*.xml
local 에서 build 를 수행하면 build/test-results/test/ 경로에 테스트 결과에 대한 xml 파일이 생성되는 것을 확인할 수 있다.
동일하게, build 수행 후에, 테스트 결과를 업로드해줄 수 있는 action 을 수행해주면 된다. workflows 로는 https://github.com/EnricoMi/publish-unit-test-result-action 를 택했는데, java 와 junit 을 지원하기 때문이었다.
forked repository 인 경우
forked repository 인 경우에 위의 workflow 를 수행하면 다음과 같은 에러가 발생한다.
1
2
3
4
5
6
2024-08-21 12:52:11 +0000 - publish - INFO - This action is running on a pull_request event for a fork repository.
Pull request comments and check runs cannot be created, so disabling these features.
To fully run the action on fork repository pull requests,
see https://github.com/EnricoMi/publish-unit-test-result-action/blob/v2.17.0/README.md#support-fork-repositories-and-dependabot-branches
에러 메시지에서 제시하는 글을 살펴보면, forked repository 에서 pr 에 대한 comment 를 남기기 위해서는 파일을 업로드한 후, 업로드된 파일을 바탕으로 comment 를 남기도록 구성해야 한다.
테스트 수행 후 파일 업로드
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
# workflow의 이름을 정의한다.
name: 'test-main-and-upload'
# workflow가 언제 동작할지 정의한다.
# 이 workflow의 경우 main, dev branch에 pull_request 이벤트가 발생할 경우 동작한다.
on:
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
checks: write
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- name: Add executable permission to gradlew
run: chmod +x ./gradlew
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- name: Cache Gradle dependencies
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: $-gradle-$
restore-keys: |
$-gradle-
- name: Build with Gradle
run: ./gradlew build
- name: Run tests with Gradle
run: ./gradlew test
- name: Upload Test Results
if: always()
uses: actions/upload-artifact@v4
with:
name: Test Results
path: |
build/test-results/test/TEST-*.xml
업로드된 artifact 로 comment 게시
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
name: PUBLISH_TEST
on:
workflow_run:
workflows: [ "test-main-and-upload" ]
types:
- completed
jobs:
test-results:
name: Test Results
runs-on: ubuntu-latest
if: github.event.workflow_run.conclusion == 'success'
permissions:
checks: write
# needed unless run with comment_mode: off
pull-requests: write
# only needed for private repository
contents: read
# only needed for private repository
issues: read
# required by download step to access artifacts API
actions: read
steps:
- name: Download and Extract Artifacts
uses: dawidd6/action-download-artifact@e7466d1a7587ed14867642c2ca74b5bcc1e19a2d
with:
run_id: $
path: artifacts
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
with:
commit: $
event_file: artifacts/Event File/event.json
event_name: $
files: "artifacts/**/*.xml"
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.