-
-
Notifications
You must be signed in to change notification settings - Fork 148
163 lines (152 loc) · 6.49 KB
/
main.yml
File metadata and controls
163 lines (152 loc) · 6.49 KB
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
name: Build and Deploy Snapshot
on:
push:
branches: ['3.*']
paths-ignore:
- "README.md"
- "release-notes/*"
pull_request:
paths-ignore:
- "README.md"
- "release-notes/*"
permissions:
contents: read
pull-requests: write
jobs:
build:
runs-on: 'ubuntu-24.04'
strategy:
fail-fast: false
matrix:
java_version: ['17', '21', '25']
include:
- java_version: '17'
release_build: 'R'
env:
JAVA_OPTS: "-XX:+TieredCompilation -XX:TieredStopAtLevel=1"
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set up JDK
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: 'temurin'
java-version: ${{ matrix.java_version }}
cache: 'maven'
server-id: central-snapshots
server-username: CI_DEPLOY_USERNAME
server-password: CI_DEPLOY_PASSWORD
# See https://github.com/actions/setup-java/blob/v2/docs/advanced-usage.md#Publishing-using-Apache-Maven
# gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} # Value of the GPG private key to import
# gpg-passphrase: MAVEN_GPG_PASSPHRASE # env variable for GPG private key passphrase
- name: Build
run: ./mvnw -B -q -ff -ntp verify
- name: Extract project Maven version
id: projectVersion
run: echo "version=$(./mvnw org.apache.maven.plugins:maven-help-plugin:3.5.1:evaluate -DforceStdout -Dexpression=project.version -q)" >> $GITHUB_OUTPUT
- name: Deploy snapshot
if: ${{ matrix.release_build && github.event_name != 'pull_request' && endsWith(steps.projectVersion.outputs.version, '-SNAPSHOT') }}
env:
CI_DEPLOY_USERNAME: ${{ secrets.CENTRAL_DEPLOY_USERNAME }}
CI_DEPLOY_PASSWORD: ${{ secrets.CENTRAL_DEPLOY_PASSWORD }}
# MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
run: ./mvnw -B -q -ff -DskipTests -ntp source:jar deploy
- name: Generate code coverage
if: ${{ matrix.release_build }}
run: ./mvnw -B -q -ff -ntp test jacoco:report
- name: Publish code coverage
if: ${{ matrix.release_build && github.event_name != 'pull_request' }}
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: cbor/target/site/jacoco/jacoco.xml,smile/target/site/jacoco/jacoco.xml,avro/target/site/jacoco/jacoco.xml,protobuf/target/site/jacoco/jacoco.xml,ion/target/site/jacoco/jacoco.xml
flags: unittests
- name: Upload coverage report as artifact
if: ${{ matrix.release_build && github.event_name != 'pull_request' && github.repository == 'FasterXML/jackson-dataformats-binary' }}
uses: actions/upload-artifact@v7
with:
name: jacoco-report
path: '**/target/site/jacoco/jacoco.csv'
retention-days: 30
- name: Download base branch coverage
if: ${{ matrix.release_build && github.event_name == 'pull_request' }}
uses: dawidd6/action-download-artifact@v20
continue-on-error: true
with:
workflow: main.yml
branch: ${{ github.event.pull_request.base.ref }}
name: jacoco-report
path: base-coverage/
- name: Generate coverage comment
if: ${{ matrix.release_build && github.event_name == 'pull_request' }}
run: |
parse_coverage() {
local col_missed=$1 col_covered=$2
shift 2
awk -F',' -v m="$col_missed" -v c="$col_covered" \
'FNR>1 { total_missed += $m; total_covered += $c }
END { if (total_missed + total_covered > 0)
printf "%.2f", (total_covered * 100.0) / (total_missed + total_covered) }' "$@"
}
badge_color() {
awk -v pct="$1" 'BEGIN{
if (pct >= 90) print "brightgreen"
else if (pct >= 80) print "green"
else if (pct >= 70) print "yellowgreen"
else if (pct >= 60) print "yellow"
else if (pct >= 50) print "orange"
else print "red"
}'
}
compute_delta() {
awk -v pr="$1" -v base="$2" 'BEGIN{
delta = pr - base
if (delta > 0) printf "📈 +%.2f%%", delta
else if (delta < 0) printf "📉 %.2f%%", delta
else printf "= 0.00%%"
}'
}
PR_CSV_FILES="cbor/target/site/jacoco/jacoco.csv \
smile/target/site/jacoco/jacoco.csv \
avro/target/site/jacoco/jacoco.csv \
protobuf/target/site/jacoco/jacoco.csv \
ion/target/site/jacoco/jacoco.csv"
PR_COVERAGE=$(parse_coverage 4 5 $PR_CSV_FILES)
PR_BRANCHES=$(parse_coverage 6 7 $PR_CSV_FILES)
COV_COLOR=$(badge_color "$PR_COVERAGE")
BR_COLOR=$(badge_color "$PR_BRANCHES")
COV_BADGE=""
BR_BADGE=""
BASE_CSV_FILES=$(find base-coverage -name "jacoco.csv" 2>/dev/null | tr '\n' ' ')
if [ -n "$BASE_CSV_FILES" ]; then
BASE_COVERAGE=$(parse_coverage 4 5 $BASE_CSV_FILES)
BASE_BRANCHES=$(parse_coverage 6 7 $BASE_CSV_FILES)
COVERAGE_DELTA=$(compute_delta "$PR_COVERAGE" "$BASE_COVERAGE")
BRANCHES_DELTA=$(compute_delta "$PR_BRANCHES" "$BASE_BRANCHES")
TABLE_HEADER="| Coverage Type | Coverage | Change |"
TABLE_SEP="|---|---|---|"
TABLE_COV="| :memo: Instructions | ${COV_BADGE} | ${COVERAGE_DELTA} |"
TABLE_BR="| :twisted_rightwards_arrows: Branches | ${BR_BADGE} | ${BRANCHES_DELTA} |"
else
TABLE_HEADER="| Coverage Type | Coverage |"
TABLE_SEP="|---|---|"
TABLE_COV="| :memo: Instructions | ${COV_BADGE} |"
TABLE_BR="| :twisted_rightwards_arrows: Branches | ${BR_BADGE} |"
fi
{
echo '## :test_tube: Code Coverage Report'
echo ''
echo "$TABLE_HEADER"
echo "$TABLE_SEP"
echo "$TABLE_COV"
echo "$TABLE_BR"
} > comment-body.txt
echo "${{ github.event.pull_request.number }}" > pr-number.txt
- name: Upload PR comment artifact
if: ${{ matrix.release_build && github.event_name == 'pull_request' }}
uses: actions/upload-artifact@v7
with:
name: pr-coverage-comment
path: |
pr-number.txt
comment-body.txt
retention-days: 1