Skip to content

Commit 4e29117

Browse files
committed
ci: generate coverage for both UT and smoke tests
Introduce a new nydus-build-debug job to build debug binaries with coverage enabled, upload profraw files for build, smoke, unit test, and takeover stages. Add a nydus-coverage job to aggregate coverage data from various test jobs, generate combined codecov report, and upload coverage artifacts. Update existing jobs to enable debug mode and upload corresponding coverage files, improving code coverage tracking and analysis in CI workflows. Signed-off-by: Peng Tao <bergwolf@hyper.sh>
1 parent 966f6b9 commit 4e29117

File tree

3 files changed

+115
-22
lines changed

3 files changed

+115
-22
lines changed

.github/workflows/smoke.yml

Lines changed: 112 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,44 @@ jobs:
6161
working-directory: ${{ matrix.path }}
6262
args: --timeout=10m --verbose
6363

64+
nydus-build-debug:
65+
runs-on: ubuntu-latest
66+
steps:
67+
- name: Checkout
68+
uses: actions/checkout@v6
69+
- name: Rust Cache
70+
uses: Swatinem/rust-cache@v2
71+
with:
72+
cache-on-failure: true
73+
shared-key: ${{ runner.os }}-cargo-amd64-debug
74+
save-if: ${{ github.ref == 'refs/heads/master' }}
75+
- uses: dsherret/rust-toolchain-file@v1
76+
- name: Read Rust toolchain version
77+
id: set_toolchain_version
78+
run: |
79+
RUST_TOOLCHAIN_VERSION=$(grep -oP '(?<=channel = ")[^"]*' rust-toolchain.toml)
80+
echo "Rust toolchain version: $RUST_TOOLCHAIN_VERSION"
81+
echo "rust-version=$RUST_TOOLCHAIN_VERSION" >> $GITHUB_OUTPUT
82+
shell: bash
83+
- name: Build Nydus Debug Version
84+
run: |
85+
make -e ENABLE_DEBUG=1 build
86+
mv target/$RUST_TARGET/debug/nydusd .
87+
mv target/$RUST_TARGET/debug/nydus-image .
88+
- name: Upload Nydus Binaries
89+
uses: actions/upload-artifact@v6
90+
with:
91+
name: nydus-artifact-debug
92+
path: |
93+
nydus-image
94+
nydusd
95+
- name: Upload Nydus Build profraw
96+
uses: actions/upload-artifact@v6
97+
with:
98+
name: nydus-profraw-build
99+
path: |
100+
coverage/*.profraw
101+
64102
nydus-build:
65103
runs-on: ubuntu-latest
66104
strategy:
@@ -122,7 +160,7 @@ jobs:
122160
if: matrix.arch == 'amd64'
123161
uses: actions/upload-artifact@v6
124162
with:
125-
name: nydus-artifact
163+
name: nydus-artifact-release
126164
path: |
127165
nydus-image
128166
nydusd
@@ -153,7 +191,7 @@ jobs:
153191
154192
nydus-integration-test:
155193
runs-on: ubuntu-latest
156-
needs: [contrib-build, nydus-build]
194+
needs: [contrib-build, nydus-build-debug]
157195
steps:
158196
- name: Checkout
159197
uses: actions/checkout@v6
@@ -163,9 +201,8 @@ jobs:
163201
- name: Download Nydus
164202
uses: actions/download-artifact@v7
165203
with:
166-
name: nydus-artifact
167-
path: |
168-
target/release
204+
name: nydus-artifact-debug
205+
path: target/debug
169206
- name: Download Nydusify
170207
uses: actions/download-artifact@v7
171208
with:
@@ -210,9 +247,10 @@ jobs:
210247
- name: Integration Test
211248
run: |
212249
sudo mkdir -p /usr/bin/nydus-latest /home/runner/work/workdir
250+
sudo chmod +x contrib/nydusify/cmd/nydusify target/debug/nydusd target/debug/nydus-image
213251
sudo install -D -m 755 contrib/nydusify/cmd/nydusify /usr/bin/nydus-latest
214-
sudo install -D -m 755 target/release/nydusd target/release/nydus-image /usr/bin/nydus-latest
215-
sudo bash misc/prepare.sh
252+
sudo install -D -m 755 target/debug/nydusd target/debug/nydus-image /usr/bin/nydus-latest
253+
sudo INSTALL_TARGET_TYPE=debug bash misc/prepare.sh
216254
217255
export NYDUS_STABLE_VERSION=$(curl https://api.github.com/repos/Dragonflyoss/nydus/releases/latest | jq -r '.tag_name')
218256
export NYDUS_STABLE_VERSION_EXPORT="${NYDUS_STABLE_VERSION//./_}"
@@ -228,7 +266,13 @@ jobs:
228266
done
229267
230268
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sudo sh -s -- -b /usr/bin v2.1.6
231-
sudo -E make smoke-only
269+
sudo -E ENABLE_DEBUG=1 make smoke-only
270+
- name: Upload Nydus Smoke profraw
271+
uses: actions/upload-artifact@v6
272+
with:
273+
name: nydus-profraw-smoke
274+
path: |
275+
coverage/*.profraw
232276
233277
nydus-unit-test:
234278
runs-on: ubuntu-latest
@@ -248,13 +292,13 @@ jobs:
248292
- name: Unit Test
249293
run: |
250294
sudo -E ENABLE_DEBUG=1 "PATH=$PATH" make ut-nextest
251-
sudo -E "PATH=$PATH" make generate-codecov
252-
- name: Upload nydus coverage file
295+
#sudo -E "PATH=$PATH" make generate-codecov
296+
- name: Upload Nydus UT profraw
253297
uses: actions/upload-artifact@v6
254298
with:
255-
name: nydus-test-coverage-artifact
299+
name: nydus-profraw-ut
256300
path: |
257-
coverage/coverage.info
301+
coverage/*.profraw
258302
259303
contrib-unit-test:
260304
runs-on: ubuntu-latest
@@ -278,7 +322,7 @@ jobs:
278322
279323
upload-coverage-to-codecov:
280324
runs-on: ubuntu-latest
281-
needs: [contrib-unit-test, nydus-unit-test]
325+
needs: [contrib-unit-test, nydus-coverage]
282326
steps:
283327
- uses: actions/checkout@v6
284328
- name: Download nydus coverage file
@@ -320,7 +364,7 @@ jobs:
320364
- name: Download Nydus
321365
uses: actions/download-artifact@v7
322366
with:
323-
name: nydus-artifact
367+
name: nydus-artifact-release
324368
path: target/release
325369
- name: Download Nydusify
326370
uses: actions/download-artifact@v7
@@ -337,24 +381,72 @@ jobs:
337381
338382
takeover-test:
339383
runs-on: ubuntu-latest
340-
needs: [contrib-build, nydus-build]
384+
needs: [contrib-build, nydus-build-debug]
341385
steps:
342386
- name: Checkout
343387
uses: actions/checkout@v6
344388
- name: Download Nydus
345389
uses: actions/download-artifact@v7
346390
with:
347-
name: nydus-artifact
348-
path: target/release
391+
name: nydus-artifact-debug
392+
path: target/debug
349393
- name: Download Nydusify
350394
uses: actions/download-artifact@v7
351395
with:
352396
name: nydusify-artifact
353397
path: contrib/nydusify/cmd
354398
- name: Prepare Nydus Container Environment
355399
run: |
356-
sudo bash misc/prepare.sh takeover_test
400+
sudo INSTALL_TARGET_TYPE=debug bash misc/prepare.sh takeover_test
357401
- name: Takeover Test
358402
run: |
359-
export NEW_NYDUSD_BINARY_PATH=target/release/nydusd
360-
sudo -E make smoke-takeover
403+
export NEW_NYDUSD_BINARY_PATH=target/debug/nydusd
404+
sudo chmod +x target/debug/nydus-image
405+
sudo -E ENABLE_DEBUG=1 make smoke-takeover
406+
- name: Upload Nydus Takeover
407+
uses: actions/upload-artifact@v6
408+
with:
409+
name: nydus-profraw-takeover
410+
path: |
411+
coverage/*.profraw
412+
413+
nydus-coverage:
414+
runs-on: ubuntu-latest
415+
needs: [takeover-test,nydus-integration-test,nydus-unit-test]
416+
steps:
417+
- name: Checkout
418+
uses: actions/checkout@v6
419+
- name: Download Nydus
420+
uses: actions/download-artifact@v7
421+
with:
422+
name: nydus-artifact-debug
423+
path: target/debug
424+
- name: Download Nydus Build profraw
425+
uses: actions/download-artifact@v7
426+
with:
427+
name: nydus-profraw-build
428+
path: coverage/
429+
- name: Download Nydus Smoke profraw
430+
uses: actions/download-artifact@v7
431+
with:
432+
name: nydus-profraw-smoke
433+
path: coverage/
434+
- name: Download Nydus UT profraw
435+
uses: actions/download-artifact@v7
436+
with:
437+
name: nydus-profraw-ut
438+
path: coverage/
439+
- name: Download Nydus Takeover profraw
440+
uses: actions/download-artifact@v7
441+
with:
442+
name: nydus-profraw-takeover
443+
path: coverage/
444+
- name: Generate Nydus Codecov
445+
run: |
446+
ls coverage | wc -l
447+
sudo -E "PATH=$PATH" make generate-codecov
448+
- name: Upload Nydus Codecov
449+
uses: actions/upload-artifact@v6
450+
with:
451+
name: nydus-test-coverage-artifact
452+
path: coverage/coverage.info

Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ CARGO_COV_FLAGS :=
5858
ifdef ENABLE_DEBUG
5959
$(eval CARGO_COV_FLAGS += NYDUS_NYDUSD_latest=${DEBUG_BINARY_DIR}/nydusd )
6060
$(eval CARGO_COV_FLAGS += NYDUS_BUILDER_latest=${DEBUG_BINARY_DIR}/nydus-image )
61-
$(eval CARGO_COV_FLAGS += NEW_NYDUSD_BINARY_PATH=$(NYDUS_NYDUSD_latest) )
6261
$(eval CARGO_COV_FLAGS += RUSTFLAGS='-C instrument-coverage')
6362
$(eval CARGO_COV_FLAGS += TEST_WORKDIR_PREFIX=$(TEST_WORKDIR_PREFIX) )
6463
$(eval CARGO_COV_FLAGS += LLVM_PROFILE_FILE=$(LLVM_PROFILE_FILE) )

misc/prepare.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#!/bin/bash
22

3+
: ${INSTALL_TARGET_TYPE:="release"}
4+
35
SNAPSHOTTER_CONFIG="misc/performance/snapshotter_config.toml"
46
if [ "$1" == "takeover_test" ]; then
57
sed -i 's/recover_policy = "restart"/recover_policy = "failover"/' "$SNAPSHOTTER_CONFIG"
@@ -11,7 +13,7 @@ readonly CNI_PLUGINS_VERSION=`curl -s https://api.github.com/repos/containernetw
1113

1214
# setup nerdctl and nydusd env
1315
sudo install -D -m 755 contrib/nydusify/cmd/nydusify /usr/local/bin
14-
sudo install -D -m 755 target/release/nydusd target/release/nydus-image /usr/local/bin
16+
sudo install -D -m 755 target/$INSTALL_TARGET_TYPE/nydusd target/$INSTALL_TARGET_TYPE/nydus-image /usr/local/bin
1517
wget https://github.com/containerd/nydus-snapshotter/releases/download/$SNAPSHOTTER_VERSION/nydus-snapshotter-$SNAPSHOTTER_VERSION-linux-amd64.tar.gz
1618
tar zxvf nydus-snapshotter-$SNAPSHOTTER_VERSION-linux-amd64.tar.gz
1719
sudo install -D -m 755 bin/containerd-nydus-grpc /usr/local/bin

0 commit comments

Comments
 (0)