@@ -32,15 +32,67 @@ jobs:
3232 - coprocessor/fhevm-engine/**
3333 - coprocessor/proto/**
3434 cargo-tests :
35- name : coprocessor-cargo-test/cargo-tests (bpr)
35+ name : coprocessor-cargo-test/${{ matrix.service }}
3636 needs : check-changes
3737 if : ${{ needs.check-changes.outputs.changes-rust-files == 'true' }}
3838 permissions :
3939 contents : ' read' # Required to checkout repository code
4040 checks : ' write' # Required to create GitHub checks for test results
4141 packages : ' read' # Required to read GitHub packages/container registry
42- pull-requests : ' write' # Required to post coverage comment on PR
43- runs-on : large_ubuntu_16
42+ runs-on : ${{ matrix.runner }}
43+ strategy :
44+ fail-fast : false
45+ matrix :
46+ include :
47+ - service : tfhe-worker
48+ package : tfhe-worker
49+ needs_db : true
50+ needs_db_reset : false
51+ needs_localstack : false
52+ needs_foundry : false
53+ runner : large_ubuntu_16
54+ - service : sns-worker
55+ package : sns-worker
56+ needs_db : true
57+ needs_db_reset : true
58+ needs_localstack : true
59+ needs_foundry : false
60+ runner : large_ubuntu_16
61+ - service : zkproof-worker
62+ package : zkproof-worker
63+ needs_db : true
64+ needs_db_reset : true
65+ needs_localstack : false
66+ needs_foundry : false
67+ runner : large_ubuntu_16
68+ - service : transaction-sender
69+ package : transaction-sender
70+ needs_db : true
71+ needs_db_reset : true
72+ needs_localstack : true
73+ needs_foundry : true
74+ runner : large_ubuntu_16
75+ - service : gw-listener
76+ package : gw-listener
77+ needs_db : true
78+ needs_db_reset : true
79+ needs_localstack : false
80+ needs_foundry : true
81+ runner : large_ubuntu_16
82+ - service : host-listener
83+ package : host-listener
84+ needs_db : true
85+ needs_db_reset : true
86+ needs_localstack : false
87+ needs_foundry : true
88+ runner : large_ubuntu_16
89+ - service : common
90+ package : fhevm-engine-common
91+ needs_db : false
92+ needs_db_reset : false
93+ needs_localstack : false
94+ needs_foundry : false
95+ runner : ubuntu-latest
4496 steps :
4597 - name : Checkout code
4698 uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
@@ -65,10 +117,13 @@ jobs:
65117 - name : Install cargo dependencies
66118 run : |
67119 sudo apt-get update
68- sudo apt-get install -y protobuf-compiler && \
69- cargo install sqlx-cli --version 0.7.2 --no-default-features --features postgres --locked
120+ sudo apt-get install -y protobuf-compiler
121+ - name : Install sqlx-cli
122+ if : ${{ matrix.needs_db }}
123+ run : cargo install sqlx-cli --version 0.7.2 --no-default-features --features postgres --locked
70124
71125 - name : Install foundry
126+ if : ${{ matrix.needs_foundry }}
72127 uses : foundry-rs/foundry-toolchain@de808b1eea699e761c404bda44ba8f21aba30b2c
73128
74129 - name : Cache cargo
@@ -78,24 +133,27 @@ jobs:
78133 ~/.cargo/registry
79134 ~/.cargo/git
80135 target
81- key : ${{ runner.os }}-cargo-coverage-${{ hashFiles('**/Cargo.lock') }}
82- restore-keys : ${{ runner.os }}-cargo-coverage-
136+ key : ${{ runner.os }}-cargo-coverage-${{ matrix.service }}-${{ hashFiles('**/Cargo.lock') }}
137+ restore-keys : ${{ runner.os }}-cargo-coverage-${{ matrix.service }}-
83138
84139 - name : Login to GitHub Container Registry
140+ if : ${{ matrix.needs_db }}
85141 uses : docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
86142 with :
87143 registry : ghcr.io
88144 username : ${{ github.actor }}
89145 password : ${{ secrets.GITHUB_TOKEN }}
90146
91147 - name : Login to GitHub Chainguard Registry
148+ if : ${{ matrix.needs_db }}
92149 uses : docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
93150 with :
94151 registry : cgr.dev
95152 username : ${{ secrets.CGR_USERNAME }}
96153 password : ${{ secrets.CGR_PASSWORD }}
97154
98155 - name : Init database
156+ if : ${{ matrix.needs_db }}
99157 run : make init_db
100158 working-directory : coprocessor/fhevm-engine/tfhe-worker
101159
@@ -105,47 +163,82 @@ jobs:
105163 node-version : 20.x
106164
107165 - name : Start localstack
166+ if : ${{ matrix.needs_localstack }}
108167 run : |
109168 docker run --rm -d -p 4566:4566 --name localstack localstack/localstack:4.14.0
110169
111- - name : Clean previous coverage data
112- run : cargo llvm-cov clean --workspace --profile coverage
113- working-directory : coprocessor/fhevm-engine
114-
115170 - name : Run tests with coverage
116171 run : |
172+ cargo llvm-cov clean --workspace --profile coverage
117173 DATABASE_URL=postgresql://postgres:postgres@localhost:5432/coprocessor \
118- TEST_GLOBAL_LOCALSTACK=1 \
119- cargo llvm-cov --no-report --workspace --profile coverage
174+ COPROCESSOR_TEST_LOCALHOST_RESET=${{ matrix.needs_db_reset && '1' || '0' }} \
175+ TEST_GLOBAL_LOCALSTACK=${{ matrix.needs_localstack && '1' || '0' }} \
176+ cargo llvm-cov --no-report -p ${{ matrix.package }} --profile coverage
120177 working-directory : coprocessor/fhevm-engine
121178
122- - name : Generate coverage report
179+ - name : Export LCOV coverage data
123180 if : ${{ !cancelled() }}
181+ run : cargo llvm-cov report --lcov --profile coverage --output-path /tmp/lcov.info || true
182+ working-directory : coprocessor/fhevm-engine
183+
184+ - name : Upload coverage artifact
185+ if : ${{ !cancelled() }}
186+ uses : actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
187+ with :
188+ name : lcov-${{ matrix.service }}
189+ path : /tmp/lcov.info
190+ retention-days : 1
191+ if-no-files-found : ignore
192+
193+ coverage-report :
194+ name : coprocessor-cargo-test/coverage-report
195+ needs : [check-changes, cargo-tests]
196+ if : ${{ !cancelled() && needs.check-changes.outputs.changes-rust-files == 'true' }}
197+ permissions :
198+ contents : ' read' # Required to checkout repository code
199+ pull-requests : ' write' # Required to post coverage comment on PR
200+ runs-on : ubuntu-latest
201+ steps :
202+ - name : Checkout code
203+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
204+ with :
205+ persist-credentials : ' false'
206+
207+ - name : Install lcov
208+ run : sudo apt-get update && sudo apt-get install -y lcov
209+
210+ - name : Download all coverage artifacts
211+ uses : actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
212+ with :
213+ pattern : lcov-*
214+ path : /tmp/coverage
215+
216+ - name : Merge LCOV files
124217 run : |
125- if cargo llvm-cov report --profile coverage > /tmp/cov-report.txt 2>&1; then
126- REPORT=$(cat /tmp/cov-report.txt)
127- else
128- echo "cargo llvm-cov report failed:"
129- cat /tmp/cov-report.txt
130- REPORT=""
218+ LCOV_FILES=$(find /tmp/coverage -name 'lcov.info' -size +0c)
219+ if [ -z "$LCOV_FILES" ]; then
220+ echo "No coverage data found"
221+ exit 0
131222 fi
223+ LCOV_ARGS=""
224+ for f in $LCOV_FILES; do
225+ LCOV_ARGS="$LCOV_ARGS -a $f"
226+ done
227+ lcov $LCOV_ARGS -o /tmp/lcov.info
228+
229+ - name : Generate coverage summary
230+ if : ${{ !cancelled() }}
231+ run : |
132232 {
133233 echo '## Coverage: coprocessor/fhevm-engine'
134- if [ -n "$REPORT" ]; then
234+ if [ -f /tmp/lcov.info ]; then
135235 echo '```'
136- echo "$REPORT"
236+ lcov --summary /tmp/lcov.info 2>&1 || true
137237 echo '```'
138238 else
139239 echo '*No coverage data available (tests may have failed before producing profiling data).*'
140240 fi
141241 } >> "$GITHUB_STEP_SUMMARY"
142- echo "$REPORT"
143- working-directory : coprocessor/fhevm-engine
144-
145- - name : Export LCOV coverage data
146- if : ${{ !cancelled() }}
147- run : cargo llvm-cov report --lcov --profile coverage --output-path /tmp/lcov.info || true
148- working-directory : coprocessor/fhevm-engine
149242
150243 - name : Diff coverage of changed lines
151244 if : ${{ !cancelled() }}
0 commit comments