Skip to content

Commit f8e628a

Browse files
chore: setup test coverage (#949)
* setup cargo llvm-cov * use test:coverage * check coverage example * add contracts/coverage.sh * run contracts coverage on CI * update .gitignore * style: resolve style guide violations * use bash * lower threshold * Temporary disable tests * Create lcov.info in rust * Create lcov in c8 * Add lcov-result-merger * Add scripts * Ignore merged-lcov.info * Add codecov report * style: resolve style guide violations * Enable tests * Include all files * Filter test dir in contracts * Remove --workspace flag * Use relative paths * Use custom merger * Include contracts * CI coverage for contracts * style: resolve style guide violations * increase timeout * Skip if token is not present --------- Co-authored-by: sebastijankuzner <sebastijan.kuzner@outlook.com> Co-authored-by: sebastijankuzner <58827427+sebastijankuzner@users.noreply.github.com>
1 parent a273e0f commit f8e628a

73 files changed

Lines changed: 207 additions & 142 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/contracts.yml

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ jobs:
1818
check:
1919
name: contracts
2020
runs-on: ubuntu-latest
21+
defaults:
22+
run:
23+
working-directory: contracts
2124
steps:
2225
- uses: actions/checkout@v4
2326

@@ -26,12 +29,15 @@ jobs:
2629
with:
2730
version: nightly
2831

29-
- name: Build
30-
working-directory: contracts
32+
- name: Run test with coverage
3133
run: |
32-
forge build
34+
bash ./coverage.sh
3335
34-
- name: Run tests
35-
working-directory: contracts
36-
run: |
37-
forge test -vvv
36+
- name: Upload coverage reports to Codecov
37+
uses: codecov/codecov-action@v5
38+
if: ${{ secrets.CODECOV_TOKEN != '' }}
39+
with:
40+
files: ./lcov.info
41+
token: ${{ secrets.CODECOV_TOKEN }}
42+
slug: ArkEcosystem/mainsail
43+
flags: contracts

.github/workflows/test.yml

Lines changed: 97 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@ jobs:
5353
key: lerna-${{ runner.os }}-${{ github.run_id }}
5454
path: ./.cache
5555

56+
- uses: actions-rs/toolchain@v1
57+
with:
58+
toolchain: stable
59+
components: llvm-tools-preview
60+
profile: minimal
61+
override: true
62+
5663
- name: Install dependencies
5764
run: pnpm install
5865
- name: Build
@@ -96,140 +103,162 @@ jobs:
96103
key: lerna-${{ runner.os }}
97104
path: ./.cache
98105
restore-keys: lerna-${{ runner.os }}-
106+
- uses: actions-rs/toolchain@v1
107+
with:
108+
toolchain: stable
109+
components: llvm-tools-preview
110+
profile: minimal
111+
override: true
112+
- name: Install cargo-llvm-cov
113+
run: cargo install cargo-llvm-cov
114+
- name: Check rustc version
115+
run: rustc --version
99116
- name: Install dependencies
100117
run: pnpm install
101118
- name: Build
102119
run: pnpm run build
103120
- name: Test api
104-
run: cd packages/api && pnpm run test
121+
run: cd packages/api && pnpm run test:coverage
105122
- name: Test api-common
106-
run: cd packages/api-common && pnpm run test
123+
run: cd packages/api-common && pnpm run test:coverage
107124
- name: Test api-database
108-
run: cd packages/api-database && pnpm run test
125+
run: cd packages/api-database && pnpm run test:coverage
109126
- name: Test api-development
110-
run: cd packages/api-development && pnpm run test
127+
run: cd packages/api-development && pnpm run test:coverage
111128
- name: Test api-evm
112-
run: cd packages/api-evm && pnpm run test
129+
run: cd packages/api-evm && pnpm run test:coverage
113130
- name: Test api-http
114-
run: cd packages/api-http && pnpm run test
131+
run: cd packages/api-http && pnpm run test:coverage
115132
- name: Test api-sync
116-
run: cd packages/api-sync && pnpm run test
133+
run: cd packages/api-sync && pnpm run test:coverage
117134
- name: Test api-transaction-pool
118-
run: cd packages/api-transaction-pool && pnpm run test
135+
run: cd packages/api-transaction-pool && pnpm run test:coverage
119136
- name: Test blockchain-utils
120-
run: cd packages/blockchain-utils && pnpm run test
137+
run: cd packages/blockchain-utils && pnpm run test:coverage
121138
- name: Test bootstrap
122-
run: cd packages/bootstrap && pnpm run test
139+
run: cd packages/bootstrap && pnpm run test:coverage
123140
- name: Test cli
124-
run: cd packages/cli && pnpm run test
141+
run: cd packages/cli && pnpm run test:coverage
125142
- name: Test configuration-generator
126-
run: cd packages/configuration-generator && pnpm run test
143+
run: cd packages/configuration-generator && pnpm run test:coverage
127144
- name: Test consensus
128-
run: cd packages/consensus && pnpm run test
145+
run: cd packages/consensus && pnpm run test:coverage
129146
- name: Test consensus-storage
130-
run: cd packages/consensus-storage && pnpm run test
147+
run: cd packages/consensus-storage && pnpm run test:coverage
131148
- name: Test container
132-
run: cd packages/container && pnpm run test
149+
run: cd packages/container && pnpm run test:coverage
133150
- name: Test contracts
134-
run: cd packages/contracts && pnpm run test
151+
run: cd packages/contracts && pnpm run test:coverage
135152
- name: Test core
136-
run: cd packages/core && pnpm run test
153+
run: cd packages/core && pnpm run test:coverage
137154
- name: Test crypto-address-base58
138-
run: cd packages/crypto-address-base58 && pnpm run test
155+
run: cd packages/crypto-address-base58 && pnpm run test:coverage
139156
- name: Test crypto-address-keccak256
140-
run: cd packages/crypto-address-keccak256 && pnpm run test
157+
run: cd packages/crypto-address-keccak256 && pnpm run test:coverage
141158
- name: Test crypto-block
142-
run: cd packages/crypto-block && pnpm run test
159+
run: cd packages/crypto-block && pnpm run test:coverage
143160
- name: Test crypto-commit
144-
run: cd packages/crypto-commit && pnpm run test
161+
run: cd packages/crypto-commit && pnpm run test:coverage
145162
- name: Test crypto-config
146-
run: cd packages/crypto-config && pnpm run test
163+
run: cd packages/crypto-config && pnpm run test:coverage
147164
- name: Test crypto-consensus-bls12-381
148-
run: cd packages/crypto-consensus-bls12-381 && pnpm run test
165+
run: cd packages/crypto-consensus-bls12-381 && pnpm run test:coverage
149166
- name: Test crypto-hash-bcrypto
150-
run: cd packages/crypto-hash-bcrypto && pnpm run test
167+
run: cd packages/crypto-hash-bcrypto && pnpm run test:coverage
151168
- name: Test crypto-key-pair-bls12-381
152-
run: cd packages/crypto-key-pair-bls12-381 && pnpm run test
169+
run: cd packages/crypto-key-pair-bls12-381 && pnpm run test:coverage
153170
- name: Test crypto-key-pair-ecdsa
154-
run: cd packages/crypto-key-pair-ecdsa && pnpm run test
171+
run: cd packages/crypto-key-pair-ecdsa && pnpm run test:coverage
155172
- name: Test crypto-key-pair-ed25519
156-
run: cd packages/crypto-key-pair-ed25519 && pnpm run test
173+
run: cd packages/crypto-key-pair-ed25519 && pnpm run test:coverage
157174
- name: Test crypto-key-pair-schnorr
158-
run: cd packages/crypto-key-pair-schnorr && pnpm run test
175+
run: cd packages/crypto-key-pair-schnorr && pnpm run test:coverage
159176
- name: Test crypto-messages
160-
run: cd packages/crypto-messages && pnpm run test
177+
run: cd packages/crypto-messages && pnpm run test:coverage
161178
- name: Test crypto-signature-bls12-381
162-
run: cd packages/crypto-signature-bls12-381 && pnpm run test
179+
run: cd packages/crypto-signature-bls12-381 && pnpm run test:coverage
163180
- name: Test crypto-signature-ecdsa
164-
run: cd packages/crypto-signature-ecdsa && pnpm run test
181+
run: cd packages/crypto-signature-ecdsa && pnpm run test:coverage
165182
- name: Test crypto-signature-schnorr
166-
run: cd packages/crypto-signature-schnorr && pnpm run test
183+
run: cd packages/crypto-signature-schnorr && pnpm run test:coverage
167184
- name: Test crypto-transaction
168-
run: cd packages/crypto-transaction && pnpm run test
185+
run: cd packages/crypto-transaction && pnpm run test:coverage
169186
- name: Test crypto-transaction-evm-call
170-
run: cd packages/crypto-transaction-evm-call && pnpm run test
187+
run: cd packages/crypto-transaction-evm-call && pnpm run test:coverage
171188
- name: Test crypto-validation
172-
run: cd packages/crypto-validation && pnpm run test
189+
run: cd packages/crypto-validation && pnpm run test:coverage
173190
- name: Test crypto-wif
174-
run: cd packages/crypto-wif && pnpm run test
191+
run: cd packages/crypto-wif && pnpm run test:coverage
175192
- name: Test crypto-worker
176-
run: cd packages/crypto-worker && pnpm run test
193+
run: cd packages/crypto-worker && pnpm run test:coverage
177194
- name: Test database
178-
run: cd packages/database && pnpm run test
179-
# - name: Test evm
180-
# run: cd packages/evm && pnpm run test
195+
run: cd packages/database && pnpm run test:coverage
196+
- name: Test evm
197+
run: cd packages/evm && pnpm run test:coverage
181198
- name: Test evm-api-worker
182-
run: cd packages/evm-api-worker && pnpm run test
199+
run: cd packages/evm-api-worker && pnpm run test:coverage
183200
- name: Test evm-consensus
184-
run: cd packages/evm-consensus && pnpm run test
201+
run: cd packages/evm-consensus && pnpm run test:coverage
185202
- name: Test evm-service
186-
run: cd packages/evm-service && pnpm run test
203+
run: cd packages/evm-service && pnpm run test:coverage
187204
- name: Test evm-state
188-
run: cd packages/evm-state && pnpm run test
205+
run: cd packages/evm-state && pnpm run test:coverage
189206
- name: Test kernel
190-
run: cd packages/kernel && pnpm run test
207+
run: cd packages/kernel && pnpm run test:coverage
191208
- name: Test logger-pino
192-
run: cd packages/logger-pino && pnpm run test
209+
run: cd packages/logger-pino && pnpm run test:coverage
193210
- name: Test logger-winston
194-
run: cd packages/logger-winston && pnpm run test
211+
run: cd packages/logger-winston && pnpm run test:coverage
195212
- name: Test networking-dns
196-
run: cd packages/networking-dns && pnpm run test
213+
run: cd packages/networking-dns && pnpm run test:coverage
197214
- name: Test networking-ntp
198-
run: cd packages/networking-ntp && pnpm run test
215+
run: cd packages/networking-ntp && pnpm run test:coverage
199216
- name: Test p2p
200-
run: cd packages/p2p && pnpm run test
217+
run: cd packages/p2p && pnpm run test:coverage
201218
- name: Test processor
202-
run: cd packages/processor && pnpm run test
219+
run: cd packages/processor && pnpm run test:coverage
203220
- name: Test serializer
204-
run: cd packages/serializer && pnpm run test
221+
run: cd packages/serializer && pnpm run test:coverage
205222
- name: Test snapshot-legacy-exporter
206-
run: cd packages/snapshot-legacy-exporter && pnpm run test
223+
run: cd packages/snapshot-legacy-exporter && pnpm run test:coverage
207224
- name: Test snapshot-legacy-importer
208-
run: cd packages/snapshot-legacy-importer && pnpm run test
225+
run: cd packages/snapshot-legacy-importer && pnpm run test:coverage
209226
- name: Test state
210-
run: cd packages/state && pnpm run test
227+
run: cd packages/state && pnpm run test:coverage
211228
- name: Test test-framework
212-
run: cd packages/test-framework && pnpm run test
229+
run: cd packages/test-framework && pnpm run test:coverage
213230
- name: Test test-runner
214-
run: cd packages/test-runner && pnpm run test
231+
run: cd packages/test-runner && pnpm run test:coverage
215232
- name: Test test-transaction-builders
216-
run: cd packages/test-transaction-builders && pnpm run test
233+
run: cd packages/test-transaction-builders && pnpm run test:coverage
217234
- name: Test transaction-pool-broadcaster
218-
run: cd packages/transaction-pool-broadcaster && pnpm run test
235+
run: cd packages/transaction-pool-broadcaster && pnpm run test:coverage
219236
- name: Test transaction-pool-service
220-
run: cd packages/transaction-pool-service && pnpm run test
237+
run: cd packages/transaction-pool-service && pnpm run test:coverage
221238
- name: Test transaction-pool-worker
222-
run: cd packages/transaction-pool-worker && pnpm run test
239+
run: cd packages/transaction-pool-worker && pnpm run test:coverage
223240
- name: Test transactions
224-
run: cd packages/transactions && pnpm run test
241+
run: cd packages/transactions && pnpm run test:coverage
225242
- name: Test utils
226-
run: cd packages/utils && pnpm run test
243+
run: cd packages/utils && pnpm run test:coverage
227244
- name: Test validation
228-
run: cd packages/validation && pnpm run test
245+
run: cd packages/validation && pnpm run test:coverage
229246
- name: Test validator
230-
run: cd packages/validator && pnpm run test
247+
run: cd packages/validator && pnpm run test:coverage
231248
- name: Test webhooks
232-
run: cd packages/webhooks && pnpm run test
249+
run: cd packages/webhooks && pnpm run test:coverage
250+
251+
- name: Merge test coverage reports
252+
run: pnpm run test:unit:merge
253+
254+
- name: Upload coverage reports to Codecov
255+
uses: codecov/codecov-action@v5
256+
if: ${{ secrets.CODECOV_TOKEN != '' }}
257+
with:
258+
files: ./merged-lcov.info
259+
token: ${{ secrets.CODECOV_TOKEN }}
260+
slug: ArkEcosystem/mainsail
261+
flags: packages
233262

234263
integration:
235264
needs:
@@ -297,7 +326,7 @@ jobs:
297326
group: ${{ github.head_ref }}-e2e-${{ matrix.name }}
298327
runs-on: ubuntu-latest
299328

300-
timeout-minutes: 10
329+
timeout-minutes: 15
301330

302331
strategy:
303332
matrix:
@@ -442,7 +471,7 @@ jobs:
442471
group: ${{ github.head_ref }}-e2e-${{ matrix.name }}
443472
runs-on: ubuntu-latest
444473

445-
timeout-minutes: 10
474+
timeout-minutes: 15
446475

447476
strategy:
448477
matrix:

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ lib-cov
1717
# Coverage directory used by tools like istanbul
1818
.coverage
1919
**/coverage
20+
lcov.info
21+
merged-lcov.info
2022

2123
# nyc test coverage
2224
.nyc_output

contracts/coverage.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash
2+
3+
forge coverage --report lcov
4+
sed -n '/^SF:test\//!p;/^SF:test\//q' lcov.info > filtered-lcov.info
5+
mv filtered-lcov.info lcov.info

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,11 @@
3131
"setup": "pnpm install && pnpm run build",
3232
"sort": "sort-package-json \"package.json\" \"packages/*/package.json\"",
3333
"sort:dry": "sort-package-json --check \"package.json\" \"packages/*/package.json\"",
34+
"test:contracts:coverage": "cd contracts && bash coverage.sh",
3435
"test:integration": "lerna run test:integration --parallel",
3536
"test:unit": "lerna run test --parallel",
37+
"test:unit:coverage": "lerna run test:coverage --parallel",
38+
"test:unit:merge": "bash scripts/development/create-lcov-report.sh",
3639
"version": "lerna version --no-git-tag-version --yes",
3740
"workflows:unit": "node scripts/generate-unit-workflow.js"
3841
},

packages/api-common/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"clean": "del distribution",
1717
"release": "pnpm publish --access public",
1818
"test": "pnpm run uvu source .test.ts",
19-
"test:coverage": "c8 pnpm run test",
19+
"test:coverage": "c8 -r=text -r=lcov --all pnpm run test",
2020
"test:coverage:html": "c8 -r html --all pnpm run test",
2121
"test:file": "pnpm run uvu source",
2222
"uvu": "tsx --tsconfig ../../tsconfig.test.json ./node_modules/uvu/bin.js"

packages/api-database/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"clean": "del distribution",
1717
"release": "pnpm publish --access public",
1818
"test": "pnpm run uvu source .test.ts",
19-
"test:coverage": "c8 pnpm run test",
19+
"test:coverage": "c8 -r=text -r=lcov --all pnpm run test",
2020
"test:coverage:html": "c8 -r html --all pnpm run test",
2121
"test:file": "pnpm run uvu source",
2222
"typeorm": "typeorm",

packages/api-development/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"clean": "del distribution",
1717
"release": "pnpm publish --access public",
1818
"test": "pnpm run uvu source .test.ts",
19-
"test:coverage": "c8 pnpm run test",
19+
"test:coverage": "c8 -r=text -r=lcov --all pnpm run test",
2020
"test:coverage:html": "c8 -r html --all pnpm run test",
2121
"test:file": "pnpm run uvu source",
2222
"uvu": "tsx --tsconfig ../../tsconfig.test.json ./node_modules/uvu/bin.js"

packages/api-evm/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"clean": "del distribution",
1717
"release": "pnpm publish --access public",
1818
"test": "pnpm run uvu source .test.ts",
19-
"test:coverage": "c8 pnpm run test",
19+
"test:coverage": "c8 -r=text -r=lcov --all pnpm run test",
2020
"test:coverage:html": "c8 -r html --all pnpm run test",
2121
"test:file": "pnpm run uvu source",
2222
"uvu": "tsx --tsconfig ../../tsconfig.test.json ./node_modules/uvu/bin.js"

packages/api-http/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"clean": "del distribution",
1717
"release": "pnpm publish --access public",
1818
"test": "pnpm run uvu source .test.ts",
19-
"test:coverage": "c8 pnpm run test",
19+
"test:coverage": "c8 -r=text -r=lcov --all pnpm run test",
2020
"test:coverage:html": "c8 -r html --all pnpm run test",
2121
"test:file": "pnpm run uvu source",
2222
"test:integration": "pnpm run uvu integration .test.ts",

0 commit comments

Comments
 (0)