-
Notifications
You must be signed in to change notification settings - Fork 3
138 lines (127 loc) · 5.54 KB
/
publish-unit-test.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
132
133
134
135
136
137
138
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
#
# Copyright 2022 Hewlett Packard Enterprise Development LP
# Other additional copyright holders may be indicated within.
#
# The entirety of this work is licensed under the Apache License,
# Version 2.0 (the "License"); you may not use this file except
# in compliance with the License.
#
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
name: Publish Unit Test
on:
workflow_call:
workflow_run:
workflows: [Pull Request]
types:
- completed
jobs:
# During a push event, the user will have the required permissions to create
# a checkrun. Since all workflows are included in the same run, the
# download-artifact action can be used to retrieve the test reports.
publish:
name: Publish
if: ${{ github.event_name == 'push' }}
runs-on: ubuntu-latest
steps:
- name: Publish Event File
uses: actions/upload-artifact@v3
if: ${{ runner.debug }}
with:
name: publish-unit-event-file
path: ${{ github.event_path }}
- uses: actions/download-artifact@v3
with:
name: unit-test-results
- name: Publish Unit Test Results
uses: scacap/action-surefire-report@v1
with:
report_paths: "**/*.junit.xml"
check_name: "Unit Test Report"
# During a workflow_run event, pull requests coming from a forked repository
# will not have the required permissions to create a checkrun or post the
# code coverage summary comment. Github actions will trigger this workflow
# from the main branch and run the workflow on behalf of the pull request.
publish_checkrun:
name: Publish Checkrun
if: ${{ github.event_name == 'workflow_run' }}
runs-on: ubuntu-latest
steps:
- name: Publish Event File
uses: actions/upload-artifact@v2
if: ${{ runner.debug }}
with:
name: publish-unit-event-file
path: ${{ github.event_path }}
# Since this workflow is invoked by a "workflow_run" trigger, the
# "download-artifact" action will not find the test results. The
# "github-script" action provides a handy javascript environment
# with access to a github actions client and basic packages. This
# is used to query for the triggering workflow and download the
# test results and event file.
- name: 'Download artifacts'
uses: actions/github-script@v6
with:
script: |
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: context.payload.workflow_run.id,
});
let matchArtifactTestResults = allArtifacts.data.artifacts.filter((artifact) => {
return artifact.name == "unit-test-results"
})[0];
let matchArtifactEventFile = allArtifacts.data.artifacts.filter((artifact) => {
return artifact.name == "unit-test-event-file"
})[0];
let downloadTestResults = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifactTestResults.id,
archive_format: 'zip',
});
let downloadEventFile = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifactEventFile.id,
archive_format: 'zip',
});
let fs = require('fs');
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/unit-test-results.zip`, Buffer.from(downloadTestResults.data));
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/event.json.zip`, Buffer.from(downloadEventFile.data));
- name: Unzip artifacts
run: unzip unit-test-results.zip && unzip event.json.zip
# This action creates a checkrun that publishes the junit test report in
# the first workflow run in the commit. This should only be the
# "Pull Request" workflow, but could end up being the "Build" workflow
# if the PR is made from a branch within the same repository
- name: Publish Unit Test Results
uses: scacap/action-surefire-report@v1
with:
report_paths: "**/*.junit.xml"
check_name: "Unit Test Report"
commit: ${{ github.event.workflow_run.head_sha }}
# Get the PR number to post the code coverage summary comment to the
# correct PR. The triggering workflow's event file is the only way to
# retrieve the PR number in this context. The PR number is saved to the
# "GITHUB_ENV" environment variable so it can be used below.
- name: Get PR Number
if: github.event.workflow_run.event == 'pull_request'
run: |
NUM="$(jq -r ".number" event.json)"
echo "TEST_PR_NUMBER=$NUM" >> $GITHUB_ENV
- name: Add Coverage PR Comment
uses: marocchino/sticky-pull-request-comment@v2
if: github.event.workflow_run.event == 'pull_request'
with:
path: code-coverage-results.md
number: ${{ env.TEST_PR_NUMBER }}