Skip to content

Commit b713146

Browse files
gha: add subsets to build
speed up build with subsets Signed-off-by: Robert Gałat <[email protected]>
1 parent 8f37f36 commit b713146

File tree

3 files changed

+69
-12
lines changed

3 files changed

+69
-12
lines changed

.github/workflows/on-pr.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ jobs:
2828
name: Build samples
2929
uses: ./.github/workflows/samples_build.yml
3030

31-
build_and_run_tests:
32-
name: Build and run unit tests
33-
uses: ./.github/workflows/run_tests.yml
31+
# build_and_run_tests:
32+
# name: Build and run unit tests
33+
# uses: ./.github/workflows/run_tests.yml

.github/workflows/samples_build.yml

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ name: Build Sidewalk samples
22
on:
33
workflow_call:
44
inputs:
5+
jobs_per_subset:
6+
type: number
7+
required: false
8+
default: 3
59
save_images:
610
type: boolean
711
required: false
@@ -16,6 +20,8 @@ jobs:
1620
options: --cpus 2 --privileged
1721
outputs:
1822
total_platforms_json: ${{ steps.platforms.outputs.total_platforms_json }}
23+
subset_matrix: ${{ steps.subsets.outputs.matrix }}
24+
subset_config: ${{ steps.subsets.outputs.config }}
1925
defaults:
2026
run:
2127
shell: nrfutil toolchain-manager launch --install-dir /root/ncs bash -- {0}
@@ -45,17 +51,46 @@ jobs:
4551
total_platforms_json=$(printf '%s' "${total_platforms[@]}" | jq -R . | jq -s -c .)
4652
echo "total_platforms_json=$total_platforms_json" >> $GITHUB_OUTPUT;
4753
54+
- name: subsets configuration
55+
id: subsets
56+
run: |
57+
rm -rf twister-out*
58+
west twister --test-config sidewalk/test_config.yaml --testsuite-root sidewalk --level="samples" --dry-run
59+
total_platforms=$(jq -r '.testsuites |map({platform: .platform}) | unique | .[].platform' twister-out/testplan.json)
60+
echo "[]" > configuration
61+
for platform in $total_platforms; do
62+
west twister --test-config sidewalk/test_config.yaml --testsuite-root sidewalk --level="samples" --dry-run --platform $platform
63+
total_jobs=$(jq '.testsuites | length' twister-out/testplan.json)
64+
subsets=$(( ( total_jobs + ${{inputs.jobs_per_subset}}) / ${{inputs.jobs_per_subset}}))
65+
echo $subsets >> max
66+
cat configuration | jq -c --arg platform_name $platform --arg subsets $subsets '. += [{"platform": $platform_name, "subsets": $subsets}]' > configuration_new
67+
mv configuration_new configuration
68+
done
69+
sort max > max_sorted
70+
max_subset=$(tail -n 1 max_sorted)
71+
subset_matrix="[$(seq -s ', ' 1 $max_subset)]"
72+
cat configuration
73+
echo $subset_matrix
74+
75+
echo "matrix=$subset_matrix" >> $GITHUB_OUTPUT;
76+
echo "config=`cat configuration`" >> $GITHUB_OUTPUT;
77+
4878
- name: clean
4979
if: always()
5080
run: |
51-
rm -rf twister*
81+
rm -rf twister* sidewalk*
5282
5383
build_samples:
5484
needs: [discover_targets]
5585
strategy:
5686
fail-fast: false
5787
matrix:
88+
subset: ${{ fromJson(needs.discover_targets.outputs.subset_matrix) }}
5889
target: ${{ fromJson(needs.discover_targets.outputs.total_platforms_json) }}
90+
5991
uses: ./.github/workflows/samples_build_target.yml
6092
with:
6193
target: ${{matrix.target}}
94+
subset: ${{matrix.subset}}
95+
subset_config: '${{needs.discover_targets.outputs.subset_config}}'
96+
# subset_config: '[{"platform":"nrf52840dk/nrf52840","subsets":"4"},{"platform":"nrf5340dk/nrf5340/cpuapp","subsets":"4"},{"platform":"nrf54l15dk/nrf54l10/cpuapp","subsets":"4"},{"platform":"nrf54l15dk/nrf54l15/cpuapp","subsets":"4"},{"platform":"nrf54l15dk/nrf54l15/cpuapp/ns","subsets":"4"},{"platform":"thingy53/nrf5340/cpuapp","subsets":"1"}]'

.github/workflows/samples_build_target.yml

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,33 @@ on:
99
target:
1010
type: string
1111
required: true
12+
subset_config:
13+
type: string
14+
required: true
15+
subset:
16+
type: number
17+
required: true
1218

1319
jobs:
20+
parse_config:
21+
runs-on: ubuntu-24.04
22+
name: ${{inputs.subset}} - ${{inputs.target}} config
23+
outputs:
24+
max_subset: ${{steps.subsets.outputs.max_subset}}
25+
steps:
26+
- name: subsets
27+
id: subsets
28+
run: |
29+
echo '${{inputs.subset_config}}' > configuration.json
30+
cat configuration.json
31+
max_subsets=$(jq --arg target_name "${{inputs.target}}" '.[] | select(.platform == $target_name).subsets | tonumber' configuration.json)
32+
echo "max_subset=$max_subsets"
33+
echo "max_subset=$max_subsets" >> $GITHUB_OUTPUT
34+
1435
build_samples:
15-
name: ${{inputs.target}}
36+
needs: [parse_config]
37+
name: ${{inputs.subset}} - ${{inputs.target}}
38+
if: ${{ inputs.subset <= needs.parse_config.outputs.max_subset }}
1639
runs-on: ubuntu-24.04
1740
container:
1841
image: ghcr.io/nrfconnect/sdk-sidewalk:main
@@ -57,23 +80,22 @@ jobs:
5780
- name: Twister build samples
5881
run: |
5982
source zephyr/zephyr-env.sh
60-
west twister --test-config sidewalk/test_config.yaml --testsuite-root sidewalk --level="samples" --platform ${{ inputs.target}} --inline-logs --overflow-as-errors --enable-size-report --show-footprint -vvv --build-only
83+
west twister --test-config sidewalk/test_config.yaml --testsuite-root sidewalk --level="samples" --platform ${{ inputs.target}} --inline-logs --overflow-as-errors --enable-size-report --show-footprint -vvv --build-only --subset ${{inputs.subset}}/${{needs.parse_config.outputs.max_subset}}
6184
6285
- name: Print ccache stats
6386
run: |
6487
ccache -ps;
6588
6689
- name: Prepare artifacts for upload
6790
run: |
68-
touch dummy
91+
mkdir subset_${{inputs.subset}}; cp twister-out/twister.json subset_${{inputs.subset}}
6992
7093
- name: Upload build metadata
7194
uses: actions/upload-artifact@v4
7295
with:
73-
name: sample-artifacts-meta-${{ steps.replace.outputs.target_board}}
96+
name: sample-artifacts-meta-${{ steps.replace.outputs.target_board}}-${{inputs.subset}}
7497
path: |
75-
dummy
76-
twister-out/twister.json
98+
subset_${{inputs.subset}}
7799
twister-out/**/build.log
78100
twister-out/**/.config
79101
twister-out/**/runners.yaml
@@ -84,9 +106,9 @@ jobs:
84106
uses: actions/upload-artifact@v4
85107
if: ${{ inputs.save_images }}
86108
with:
87-
name: sample-artifacts-build-${{ steps.replace.outputs.target_board}}
109+
name: sample-artifacts-build-${{ steps.replace.outputs.target_board}}-${{inputs.subset}}
88110
path: |
89-
dummy
111+
subset_${{inputs.subset}}
90112
twister-out/**/zephyr.elf
91113
twister-out/**/zephyr.hex
92114
twister-out/**/merged.hex

0 commit comments

Comments
 (0)