Skip to content

Commit 7e244cd

Browse files
ci: connect features folder to sonarcloud coverage pipeline
1 parent 90b74b0 commit 7e244cd

File tree

8 files changed

+153
-6
lines changed

8 files changed

+153
-6
lines changed

.changeset/wild-moose-buy.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@features/market-banner": minor
3+
---
4+
5+
connect features folder to SonarCloud coverage pipeline

.github/workflows/build-and-test-pr.yml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,13 @@ jobs:
8787
uses: LedgerHQ/ledger-live/.github/workflows/test-libs-reusable.yml@develop
8888
secrets: inherit
8989

90+
test-features:
91+
name: "Test Features"
92+
needs: determine-affected
93+
if: ${{contains(needs.determine-affected.outputs.paths, 'features') && !github.event.pull_request.head.repo.fork}}
94+
uses: LedgerHQ/ledger-live/.github/workflows/test-features-reusable.yml@develop
95+
secrets: inherit
96+
9097
test-design-system:
9198
name: "Test UI Libs"
9299
needs: determine-affected
@@ -129,14 +136,16 @@ jobs:
129136
- test-desktop
130137
- test-mobile
131138
- test-libraries
139+
- test-features
132140
- determine-affected
133141
uses: LedgerHQ/ledger-live/.github/workflows/scan-sonar-reusable.yml@develop
134-
if: ${{ always() && !cancelled() && !github.event.pull_request.head.repo.fork && (needs.test-desktop.result == 'success' || needs.test-mobile.result == 'success' || needs.test-libraries.result == 'success' || contains(needs.determine-affected.outputs.paths, 'e2e')) }}
142+
if: ${{ always() && !cancelled() && !github.event.pull_request.head.repo.fork && (needs.test-desktop.result == 'success' || needs.test-mobile.result == 'success' || needs.test-libraries.result == 'success' || needs.test-features.result == 'success' || contains(needs.determine-affected.outputs.paths, 'e2e')) }}
135143
secrets: inherit
136144
with:
137145
should_download_desktop_coverage: ${{ needs.test-desktop.outputs.coverage_generated }}
138146
should_download_mobile_coverage: ${{ needs.test-mobile.outputs.coverage_generated }}
139147
should_download_libs_coverage: ${{ needs.test-libraries.outputs.coverage_generated }}
148+
should_download_features_coverage: ${{ needs.test-features.outputs.coverage_generated }}
140149

141150
# Final Check required
142151
ok:
@@ -147,6 +156,7 @@ jobs:
147156
- test-mobile
148157
- build-test-mobile
149158
- test-libraries
159+
- test-features
150160
- test-design-system
151161
- build-web-tools
152162
- test-cli

.github/workflows/build-and-test-push.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ jobs:
4545
uses: LedgerHQ/ledger-live/.github/workflows/test-libs-reusable.yml@develop
4646
secrets: inherit
4747

48+
test-features:
49+
name: "Test Features"
50+
uses: LedgerHQ/ledger-live/.github/workflows/test-features-reusable.yml@develop
51+
secrets: inherit
52+
4853
test-design-system:
4954
name: "Test UI Libs"
5055
uses: LedgerHQ/ledger-live/.github/workflows/test-design-system-reusable.yml@develop

.github/workflows/scan-sonar-reusable.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ on:
1515
required: false
1616
default: "false"
1717
type: string
18+
should_download_features_coverage:
19+
required: false
20+
default: "false"
21+
type: string
1822

1923
permissions:
2024
id-token: write
@@ -67,6 +71,13 @@ jobs:
6771
name: coverage-libs
6872
path: coverage-libs
6973

74+
- name: Download features unit test coverage
75+
if: ${{ inputs.should_download_features_coverage == 'true' }}
76+
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
77+
with:
78+
name: coverage-features
79+
path: coverage-features
80+
7081
- name: Merge coverage files
7182
run: |
7283
if [ -d ./coverage-desktop ]; then
@@ -84,6 +95,11 @@ jobs:
8495
cat ./coverage-libs/lcov.info >> ./lcov.info
8596
cat ./coverage-libs/sonar-executionTests-report.xml >> ./sonar-executionTests-report.xml
8697
fi
98+
if [ -d ./coverage-features ]; then
99+
echo "Merging features coverage files"
100+
cat ./coverage-features/lcov.info >> ./lcov.info
101+
cat ./coverage-features/sonar-executionTests-report.xml >> ./sonar-executionTests-report.xml
102+
fi
87103
if [ ! -f ./sonar-executionTests-report.xml ]; then
88104
echo "No report found, creating empty report to avoid sonar scan failing!"
89105
echo '<testExecutions version="1"></testExecutions>' > ./sonar-executionTests-report.xml

.github/workflows/sonar.yml

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ jobs:
4343
LANG: en_US.UTF-8
4444
run: |
4545
pnpm i --filter="./libs/**" --no-frozen-lockfile --unsafe-perm
46+
pnpm i --filter="./features/**" --no-frozen-lockfile --unsafe-perm
4647
pnpm i --filter="live-mobile..." --filter="ledger-live" --no-frozen-lockfile --unsafe-perm
4748
pnpm i --filter="ledger-live-desktop..." --filter="ledger-live" --no-frozen-lockfile --unsafe-perm
4849
@@ -68,7 +69,7 @@ jobs:
6869
for package_json in $(find ./libs -name "package.json"); do
6970
lib=$(dirname "$package_json")
7071
echo "Processing library at path: $lib"
71-
72+
7273
if [ -f "$package_json" ] && jq -e '.scripts.coverage' "$package_json"; then
7374
if [ -f "$lib/coverage/lcov.info" ] && [ -f "$lib/coverage/sonar-executionTests-report.xml" ]; then
7475
echo "Appending coverage files for $lib"
@@ -82,10 +83,33 @@ jobs:
8283
fi
8384
done
8485
86+
- name: Generate Unit test coverage for features
87+
run: |
88+
mkdir -p features/coverage
89+
touch features/coverage/lcov.info
90+
touch features/coverage/sonar-executionTests-report.xml
91+
92+
pnpm turbo run coverage --filter="./features/**" --concurrency=4 -- --runInBand=1
93+
94+
for package_json in $(find ./features -name "package.json" -not -path "*/node_modules/*"); do
95+
pkg=$(dirname "$package_json")
96+
echo "Processing feature at path: $pkg"
97+
98+
if [ -f "$package_json" ] && jq -e '.scripts.coverage' "$package_json" > /dev/null 2>&1; then
99+
if [ -f "$pkg/coverage/lcov.info" ] && [ -f "$pkg/coverage/sonar-executionTests-report.xml" ]; then
100+
echo "Appending coverage files for $pkg"
101+
cat "$pkg/coverage/lcov.info" >> features/coverage/lcov.info
102+
cat "$pkg/coverage/sonar-executionTests-report.xml" >> features/coverage/sonar-executionTests-report.xml
103+
fi
104+
else
105+
echo "No coverage script found for $pkg, skipping."
106+
fi
107+
done
108+
85109
- name: Merge coverage files
86110
run: |
87-
cat libs/coverage/lcov.info apps/ledger-live-desktop/coverage/lcov.info apps/ledger-live-mobile/coverage/lcov.info > ./lcov.info
88-
cat libs/coverage/sonar-executionTests-report.xml apps/ledger-live-desktop/coverage/sonar-executionTests-report.xml apps/ledger-live-mobile/coverage/sonar-executionTests-report.xml > ./sonar-executionTests-report.xml
111+
cat libs/coverage/lcov.info features/coverage/lcov.info apps/ledger-live-desktop/coverage/lcov.info apps/ledger-live-mobile/coverage/lcov.info > ./lcov.info
112+
cat libs/coverage/sonar-executionTests-report.xml features/coverage/sonar-executionTests-report.xml apps/ledger-live-desktop/coverage/sonar-executionTests-report.xml apps/ledger-live-mobile/coverage/sonar-executionTests-report.xml > ./sonar-executionTests-report.xml
89113
90114
- name: Sonarqube Scan
91115
uses: SonarSource/sonarqube-scan-action@fd88b7d7ccbaefd23d8f36f73b59db7a3d246602 # v6
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
name: "[Features] - Test - Called"
2+
3+
on:
4+
workflow_call:
5+
outputs:
6+
coverage_generated:
7+
value: ${{ jobs.test-features.outputs.coverage_generated }}
8+
9+
workflow_dispatch:
10+
inputs:
11+
ref:
12+
description: |
13+
If you run this manually, and want to run on a PR, the correct ref should be refs/pull/{PR_NUMBER}/merge to
14+
have the "normal" scenario involving checking out a merge commit between your branch and the base branch.
15+
If you want to run only on a branch or specific commit, you can use either the sha or the branch name instead (prefer the first verion for PRs).
16+
required: false
17+
18+
permissions:
19+
id-token: write
20+
contents: read
21+
22+
jobs:
23+
test-features:
24+
name: "Features Test"
25+
timeout-minutes: 20
26+
env:
27+
NODE_OPTIONS: "--max-old-space-size=7168"
28+
FORCE_COLOR: 3
29+
CI_OS: ubuntu-22.04
30+
outputs:
31+
coverage_generated: ${{ contains(steps.generate_coverage.outcome, 'success') }}
32+
33+
runs-on: [ledger-live-linux-8CPU-32RAM]
34+
steps:
35+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
36+
with:
37+
ref: ${{ inputs.ref || github.sha }}
38+
39+
- name: Setup the caches
40+
uses: LedgerHQ/ledger-live/tools/actions/composites/setup-caches@develop
41+
id: setup-caches
42+
with:
43+
skip-turbo-cache: "false"
44+
install-proto: true
45+
accountId: ${{ secrets.AWS_ACCOUNT_ID_PROD }}
46+
roleName: ${{ secrets.AWS_CACHE_ROLE_NAME }}
47+
region: ${{ secrets.AWS_CACHE_REGION }}
48+
turbo-server-token: ${{ secrets.TURBOREPO_SERVER_TOKEN }}
49+
50+
- name: Install dependencies
51+
run: pnpm i --filter="./features/**"
52+
53+
- name: Run coverage on feature packages
54+
run: |
55+
mkdir -p ${{ github.workspace }}/coverage
56+
touch ${{ github.workspace }}/coverage/lcov.info
57+
touch ${{ github.workspace }}/coverage/sonar-executionTests-report.xml
58+
59+
pnpm turbo run coverage --api="http://127.0.0.1:${{ steps.setup-caches.outputs.port }}" --token="${{ secrets.TURBOREPO_SERVER_TOKEN }}" --team="foo" --filter="./features/**" --concurrency=4 -- --runInBand=1
60+
61+
- name: Process coverage files
62+
id: process-coverage
63+
run: |
64+
for package_json in $(find ./features -name "package.json" -not -path "*/node_modules/*"); do
65+
pkg=$(dirname "$package_json")
66+
echo "Processing feature at path: $pkg"
67+
if [ -f "$package_json" ] && jq -e '.scripts.coverage' "$package_json" > /dev/null 2>&1; then
68+
if [ -f "$pkg/coverage/lcov.info" ] && [ -f "$pkg/coverage/sonar-executionTests-report.xml" ]; then
69+
echo "Appending coverage files for $pkg"
70+
cat "$pkg/coverage/lcov.info" >> ${{ github.workspace }}/coverage/lcov.info
71+
cat "$pkg/coverage/sonar-executionTests-report.xml" >> ${{ github.workspace }}/coverage/sonar-executionTests-report.xml
72+
fi
73+
else
74+
echo "No coverage script found for $pkg, skipping."
75+
fi
76+
done
77+
shell: bash
78+
79+
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
80+
if: ${{ !cancelled() }}
81+
id: generate_coverage
82+
with:
83+
name: coverage-features
84+
path: ${{ github.workspace }}/coverage

features/market-banner/jest.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ module.exports = {
2727
collectCoverage: true,
2828
reporters: [
2929
"default",
30+
["jest-sonar", { outputName: "sonar-executionTests-report.xml", reportedFilePath: "absolute" }],
3031
],
3132
projects: [
3233
// Web tests (Desktop) - uses jsdom environment

sonar-project.properties

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
sonar.projectKey=LedgerHQ_ledger-live
22
sonar.projectName=ledger-live
33
sonar.sourceEncoding=UTF-8
4-
sonar.sources=apps,libs,e2e
4+
sonar.sources=apps,libs,e2e,features
55
sonar.exclusions=.pnpm/**,\
66
**/node_modules/**,\
77
**/coverage/**,\
@@ -34,6 +34,8 @@ libs/**.test.tsx,\
3434
libs/**/specs.ts,\
3535
libs/**/e2e/**,\
3636
libs/coin-tester*/**,\
37+
features/**.test.ts,\
38+
features/**.test.tsx,\
3739
e2e/**/userdata/*.json,\
3840
**/__mocks__/**,\
3941
**/__tests__/**,\
@@ -69,7 +71,7 @@ e2e/**/userdata/*.json,\
6971
sonar.coverage.exclusions=e2e/**/*
7072
sonar.javascript.lcov.reportPaths=lcov.info
7173
sonar.testExecutionReportPaths=sonar-executionTests-report.xml
72-
sonar.typescript.tsconfigPaths=tsconfig.base.json,apps/**/tsconfig.json,e2e/**/tsconfig.json
74+
sonar.typescript.tsconfigPaths=tsconfig.base.json,apps/**/tsconfig.json,e2e/**/tsconfig.json,features/**/tsconfig.json
7375
sonar.organization=ledger
7476
sonar.javascript.node.maxspace=24576
7577
sonar.c.file.suffixes=-

0 commit comments

Comments
 (0)