Skip to content

Commit 953c91e

Browse files
authored
build: Code Coverage for Nightly Build Workflows (deephaven#6635)
Added java coverage to the Nightly Check CI according to the following contract: - Coverage only runs on JVM 21 - Coverage runs on a schedule for any main repo branch - Coverage runs On Push on any branch (including forks) that starts with "coverage/" - Coverage is collected from separate jobs into a combined report uploaded as an Github artifact
1 parent 62f325a commit 953c91e

File tree

2 files changed

+74
-7
lines changed

2 files changed

+74
-7
lines changed

.github/workflows/nightly-check-ci.yml

+67-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ on:
77
# 2AM EST == 6AM UTC
88
- cron: '0 6 * * *'
99
push:
10-
branches: [ 'nightly/**', 'release/v*', 'dependabot/**' ]
10+
branches: [ 'nightly/**', 'release/v*', 'dependabot/**', 'coverage/**']
1111

1212
jobs:
1313
nightly:
@@ -21,6 +21,8 @@ jobs:
2121
concurrency:
2222
group: ${{ matrix.gradle-task }}-${{ matrix.test-jvm-version }}-${{ github.workflow }}-${{ github.ref }}
2323
cancel-in-progress: true
24+
env:
25+
COVER: ${{ (github.event_name == 'schedule' || startsWith(github.ref_name, 'coverage/')) && matrix.test-jvm-version == '21' }}
2426
steps:
2527
- name: Checkout
2628
uses: actions/checkout@v4
@@ -66,8 +68,16 @@ jobs:
6668
.github/scripts/gradle-properties.sh >> gradle.properties
6769
cat gradle.properties
6870
69-
- name: Run gradle ${{ matrix.gradle-task }} on java ${{ matrix.test-jvm-version }}
70-
run: ./gradlew --scan --continue --rerun-tasks ${{ matrix.gradle-task }} -PtestRuntimeVersion=${{ matrix.test-jvm-version }}
71+
- name: Run gradle ${{ matrix.gradle-task }} on java ${{ matrix.test-jvm-version }} with coverage=${{ env.COVER }}
72+
run: ./gradlew --scan --continue --rerun-tasks ${{ matrix.gradle-task }} -PtestRuntimeVersion=${{ matrix.test-jvm-version }} -Pcoverage.enabled=$COVER
73+
74+
- name: Upload Coverage Results
75+
if: ${{ env.COVER == 'true' }}
76+
uses: actions/upload-artifact@v4
77+
with:
78+
name: coverage-${{ matrix.gradle-task }}-results
79+
path: |
80+
**/build/jacoco/*.exec
7181
7282
- name: Upload Test Results
7383
uses: actions/upload-artifact@v4
@@ -111,3 +121,57 @@ jobs:
111121
}
112122
env:
113123
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_NIGHTLY_FAILURE }}
124+
125+
combined-coverage-report:
126+
if: ${{ github.event_name == 'schedule' || startsWith(github.ref_name, 'coverage/') }}
127+
needs: nightly
128+
runs-on: ubuntu-24.04
129+
steps:
130+
- name: Checkout
131+
uses: actions/checkout@v4
132+
with:
133+
lfs: true
134+
135+
- name: Download Coverage Results
136+
uses: actions/download-artifact@v4
137+
with:
138+
pattern: coverage-*-results
139+
merge-multiple: true
140+
141+
- name: Setup JDK 21
142+
id: setup-java-21
143+
uses: actions/setup-java@v4
144+
with:
145+
distribution: 'temurin'
146+
java-version: '21'
147+
148+
- name: Setup JDK 11
149+
id: setup-java-11
150+
uses: actions/setup-java@v4
151+
with:
152+
distribution: 'temurin'
153+
java-version: '11'
154+
155+
- name: Setup Gradle
156+
uses: gradle/actions/setup-gradle@v4
157+
158+
- name: Set JAVA_HOME
159+
run: echo "JAVA_HOME=${{ steps.setup-java-11.outputs.path }}" >> $GITHUB_ENV
160+
161+
- name: Setup gradle properties
162+
run: |
163+
.github/scripts/gradle-properties.sh >> gradle.properties
164+
cat gradle.properties
165+
166+
- name: Run gradle ${{ matrix.gradle-task }}
167+
run: |
168+
./gradlew -Pcoverage.enabled=true jacocoTestReport
169+
./gradlew -Pcoverage.enabled=true coverage:coverage-merge
170+
171+
- name: Upload Combined Coverage Results
172+
uses: actions/upload-artifact@v4
173+
with:
174+
name: combined-coverage-results
175+
path: |
176+
coverage/build/reports/jacoco/**
177+
coverage/build/reports/coverage/**

coverage/gather-coverage.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,17 @@
1919
os.makedirs(coverage_dir)
2020

2121
# Aggregate and normalize coverage for java projects
22+
print("Aggregating Java Coverage")
2223
input_glob = proj_root_dir + '/build/reports/jacoco/jacoco-merge/jacoco-merge.csv'
2324
with open(f'{coverage_dir}/java-coverage.csv', 'w', newline='') as outfile:
2425
csv_writer = csv.writer(outfile)
25-
csv_writer.writerow(['Language','Project','Package','Class','Missed','Covered'])
26+
csv_writer.writerow(['Language','Package','Class','Missed','Covered'])
2627
for filename in glob.glob(input_glob, recursive = True):
2728
with open(filename, 'r') as csv_in:
2829
csv_reader = csv.reader(csv_in)
2930
next(csv_reader, None)
3031
for row in csv_reader:
31-
new_row = ['java',row[0],row[1],row[2],row[3],row[4]]
32+
new_row = ['java',row[1],row[2],row[3],row[4]]
3233
csv_writer.writerow(new_row)
3334

3435
# Load packages to be excluded from the aggregated coverage CSV
@@ -39,8 +40,10 @@
3940
with open(coverage_output_path, 'w', newline='') as outfile:
4041
csv_writer = csv.writer(outfile)
4142
for csv_file in glob.glob(coverage_input_glob):
43+
if os.path.basename(csv_file) == "all-coverage.csv": continue
44+
print('Merging', os.path.basename(csv_file))
4245
with open(csv_file, 'r') as csv_in:
4346
for row in csv.reader(csv_in):
44-
if row[2] in excludes: continue
45-
new_row = [row[0],row[1],row[2],row[3],row[4],row[5]]
47+
if row[1] in excludes: continue
48+
new_row = [row[0],row[1],row[2],row[3],row[4]]
4649
csv_writer.writerow(new_row)

0 commit comments

Comments
 (0)