11name : Build and Release
22
33on :
4- workflow_dispatch :
54 push :
6- branches :
7- - main
8- paths :
9- - " bootloader/**"
10- - " firmware/**"
11- tags :
12- - " v*"
13-
14- env :
15- REPO_PATH : ${{ github.workspace }}/wavephoenix
16- BOOTLOADER_PATH : ${{ github.workspace }}/wavephoenix/bootloader
17- FIRMWARE_PATH : ${{ github.workspace }}/wavephoenix/firmware
18- GECKO_SDK_PATH : ${{ github.workspace }}/gecko_sdk
19- SIMPLICITY_COMMANDER_PATH : ${{ github.workspace }}/commander
20- SLC_CLI_PATH : ${{ github.workspace }}/slc_cli
21- ARM_TOOLCHAIN_PATH : ${{ github.workspace }}/arm-toolchain
22- GECKO_SDK_VERSION : v4.4.5
23- ARM_GNU_TOOLCHAIN_VERSION : 12.2.rel1
5+ branches : [main]
6+ tags : ["v*"]
7+ paths : ["bootloader/**", "firmware/**"]
8+ pull_request :
9+ branches : [main]
10+ workflow_dispatch :
2411
2512jobs :
2613 build :
2714 runs-on : ubuntu-latest
15+
16+ env :
17+ ARM_GNU_TOOLCHAIN_VERSION : 13.3.rel1
18+ SIMPLICITY_SDK_VERSION : v2025.6.2
19+
2820 strategy :
2921 matrix :
30- board :
31- - efr32xg22e
32- - rf-bm-bg22c3
22+ board : ["efr32xg22e", "rf-bm-bg22c3"]
23+
3324 steps :
25+ # Checkout repository and submodules
26+ - name : Checkout repository
27+ uses : actions/checkout@v6
28+ with :
29+ submodules : true
30+
31+ # Set up dependencies
3432 - name : Install build dependencies
3533 run : |
36- export DEBIAN_FRONTEND=noninteractive
3734 sudo apt-get update
38- sudo apt-get -o Dpkg::Options::="--path-exclude=/usr/share/man/*" -o Dpkg::Options::="--path-exclude=/usr/share/doc/*" -o Dpkg::Options::="--path-exclude=/usr/share/locale*" install -y cmake ninja-build
39-
40- - name : Set up Python
41- uses : actions/setup-python@v5
42- with :
43- python-version : " 3.10"
44-
45- - name : Install Python packages
46- run : pip install jinja2 pyyaml numpy scipy
35+ sudo apt-get install -y cmake ninja-build unzip wget
4736
4837 - name : Set up Java
4938 uses : actions/setup-java@v4
5039 with :
5140 distribution : " corretto"
5241 java-version : " 21"
5342
43+ # Setup ARM GNU Toolchain
5444 - name : Cache ARM GNU Toolchain
5545 id : cache-arm-toolchain
5646 uses : actions/cache@v4
5747 with :
58- path : ${{ env.ARM_TOOLCHAIN_PATH }}
48+ path : arm-gnu-toolchain- ${{ env.ARM_GNU_TOOLCHAIN_VERSION }}-x86_64-arm-none-eabi
5949 key : arm-toolchain-${{ env.ARM_GNU_TOOLCHAIN_VERSION }}
6050
6151 - name : Install ARM GNU Toolchain
6252 if : steps.cache-arm-toolchain.outputs.cache-hit != 'true'
6353 run : |
64- mkdir -p ${{ env.ARM_TOOLCHAIN_PATH }}
65- curl -L "https://developer. arm.com/-/media/Files/downloads/ gnu/${{ env.ARM_GNU_TOOLCHAIN_VERSION }}/binrel/arm-gnu- toolchain-${{ env.ARM_GNU_TOOLCHAIN_VERSION }}-x86_64-arm-none-eabi.tar.xz" | tar -xJ -C "${{ env.ARM_TOOLCHAIN_PATH }}" --strip-components=1
54+ wget -q https://developer.arm.com/-/media/Files/downloads/gnu/ ${{ env.ARM_GNU_TOOLCHAIN_VERSION }}/binrel/arm-gnu-toolchain-${{ env.ARM_GNU_TOOLCHAIN_VERSION }}-x86_64-arm-none-eabi.tar.xz
55+ tar xf arm- gnu- toolchain-${{ env.ARM_GNU_TOOLCHAIN_VERSION }}-x86_64-arm-none-eabi.tar.xz
6656
6757 - name : Add ARM GNU Toolchain to PATH
68- run : echo "${{ env.ARM_TOOLCHAIN_PATH }}/bin" >> $GITHUB_PATH
58+ run : |
59+ echo "$PWD/arm-gnu-toolchain-${{ env.ARM_GNU_TOOLCHAIN_VERSION }}-x86_64-arm-none-eabi/bin" >> $GITHUB_PATH
6960
70- - name : Checkout repository
71- uses : actions/checkout@v4
61+ # Setup Simplicity SDK
62+ - name : Cache Simplicity SDK
63+ id : cache-simplicity-sdk
64+ uses : actions/cache@v4
7265 with :
73- path : ${{ env.REPO_PATH }}
66+ path : simplicity_sdk
67+ key : simplicity-sdk-${{ env.SIMPLICITY_SDK_VERSION }}
68+
69+ - name : Install Simplicity SDK
70+ if : steps.cache-simplicity-sdk.outputs.cache-hit != 'true'
71+ run : |
72+ wget -q https://github.com/SiliconLabs/simplicity_sdk/releases/download/${{ env.SIMPLICITY_SDK_VERSION }}/simplicity-sdk.zip
73+ unzip -q simplicity-sdk.zip -d simplicity_sdk
7474
75- - name : Cache Gecko SDK
76- id : cache-gecko-sdk
75+ # Setup SLC-CLI
76+ - name : Cache SLC-CLI
77+ id : cache-slc-cli
7778 uses : actions/cache@v4
7879 with :
79- path : ${{ env.GECKO_SDK_PATH }}
80- key : gecko-sdk-${{ env.GECKO_SDK_VERSION }}
80+ path : slc_cli
81+ key : slc-cli-${{ runner.os }}
82+
83+ - name : Install SLC-CLI
84+ if : steps.cache-slc-cli.outputs.cache-hit != 'true'
85+ run : |
86+ wget -q https://www.silabs.com/documents/login/software/slc_cli_linux.zip
87+ unzip -q slc_cli_linux.zip
88+ chmod +x slc_cli/slc
89+
90+ - name : Add SLC-CLI to PATH
91+ run : |
92+ echo "$PWD/slc_cli" >> $GITHUB_PATH
8193
82- - name : Download Gecko SDK
83- if : steps.cache-gecko-sdk.outputs.cache-hit != 'true'
94+ - name : Configure SLC-CLI
8495 run : |
85- wget -nv https://github.com/SiliconLabs/gecko_sdk/releases/download/${{ env.GECKO_SDK_VERSION }}/gecko-sdk.zip
86- unzip -q gecko-sdk.zip -d ${{ env.GECKO_SDK_PATH }}
96+ slc configuration --sdk simplicity_sdk
97+ slc configuration --gcc-toolchain arm-gnu-toolchain-${{ env.ARM_GNU_TOOLCHAIN_VERSION }}-x86_64-arm-none-eabi
98+ slc signature trust --sdk simplicity_sdk
99+
100+ # Setup Simplicity Commander
101+ - name : Cache Simplicity Commander
102+ id : cache-simplicity-commander
103+ uses : actions/cache@v4
104+ with :
105+ path : commander
106+ key : simplicity-commander-${{ runner.os }}
87107
88- - name : " Download Simplicity Commander"
108+ - name : Install Simplicity Commander
109+ if : steps.cache-simplicity-commander.outputs.cache-hit != 'true'
89110 run : |
90- wget -nv https://www.silabs.com/documents/login/software/SimplicityCommander-Linux.zip
111+ wget -q https://www.silabs.com/documents/login/software/SimplicityCommander-Linux.zip
91112 unzip -q SimplicityCommander-Linux.zip
92113 tar -xf SimplicityCommander-Linux/Commander_linux_x86_64_*.tar.bz
93114
94- - name : Download SLC-CLI
115+ - name : Add Simplicity Commander to PATH
95116 run : |
96- wget -nv https://www.silabs.com/documents/login/software/slc_cli_linux.zip
97- unzip -q slc_cli_linux.zip
117+ echo "$PWD/commander" >> $GITHUB_PATH
98118
99- - name : Build bootloader
119+ # Build bootloader
120+ - name : Generate bootloader project files
121+ working-directory : bootloader
100122 run : |
101- export ARM_GCC_DIR="${{ env.ARM_TOOLCHAIN_PATH }}"
102-
103- cd ${{ env.BOOTLOADER_PATH }}
104- ${{ env.SLC_CLI_PATH }}/slc signature trust --sdk ${{ env.GECKO_SDK_PATH }}
105- ${{ env.SLC_CLI_PATH }}/slc generate -s ${{ env.GECKO_SDK_PATH }} -p bootloader-${{ matrix.board }}.slcp -d bootloader_project -o cmake
123+ slc generate bootloader-${{ matrix.board }}.slcp \
124+ -o cmake \
125+ -d target/${{ matrix.board }}
106126
107- cd bootloader_project/bootloader_cmake
127+ - name : Build bootloader
128+ working-directory : bootloader/target/${{ matrix.board }}/bootloader_cmake
129+ run : |
108130 cmake --workflow --preset project
109- cmake --preset project && cmake --build --preset default_config
131+
132+ # Build firmware
133+ - name : Generate firmware project files
134+ working-directory : firmware
135+ run : |
136+ slc generate wavephoenix.slcp \
137+ --with "${{ matrix.board }};wavephoenix" \
138+ --sdk-extensions=.,libjoybus,libwavebird \
139+ -o cmake \
140+ -d target/${{ matrix.board }}
110141
111142 - name : Build firmware
143+ working-directory : firmware/target/${{ matrix.board }}/wavephoenix_cmake
112144 run : |
113- cd ${{ env.FIRMWARE_PATH }}
114- cmake --preset ${{ matrix.board }} && cmake --build --preset ${{ matrix.board }}
145+ cmake --workflow --preset project
115146
116- - name : Update trunk tag
117- if : github.ref == 'refs/heads/main'
147+ - name : Generate firmware .gbl
148+ working-directory : firmware/target/${{ matrix.board }}/wavephoenix_cmake/build/default_config
118149 run : |
119- cd ${{ env.REPO_PATH }}
120- git tag -f trunk
121- git push -f origin trunk
122- env :
123- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
150+ commander gbl create \
151+ --app wavephoenix.s37 \
152+ wavephoenix.gbl
124153
154+ # Upload artifacts
125155 - name : Rename artifacts
126156 run : |
127157 if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
@@ -130,9 +160,18 @@ jobs:
130160 VERSION="trunk"
131161 fi
132162
133- mv ${{ env.BOOTLOADER_PATH }}/bootloader_project/bootloader_cmake/build/default_config/bootloader.hex "wavephoenix-bootloader-${VERSION}-${{ matrix.board }}.hex"
134- mv ${{ env.FIRMWARE_PATH }}/build/${{ matrix.board }}/receiver/receiver.hex "wavephoenix-receiver-${VERSION}-${{ matrix.board }}.hex"
135- mv ${{ env.FIRMWARE_PATH }}/build/${{ matrix.board }}/receiver/receiver.gbl "wavephoenix-receiver-${VERSION}-${{ matrix.board }}.gbl"
163+ mv bootloader/target/${{ matrix.board }}/bootloader_cmake/build/default_config/bootloader.hex "wavephoenix-bootloader-${VERSION}-${{ matrix.board }}.hex"
164+ mv firmware/target/${{ matrix.board }}/wavephoenix_cmake/build/default_config/wavephoenix.hex "wavephoenix-receiver-${VERSION}-${{ matrix.board }}.hex"
165+ mv firmware/target/${{ matrix.board }}/wavephoenix_cmake/build/default_config/wavephoenix.gbl "wavephoenix-receiver-${VERSION}-${{ matrix.board }}.gbl"
166+
167+ - name : Update trunk tag
168+ if : github.ref == 'refs/heads/main'
169+ run : |
170+ cd ${{ env.REPO_PATH }}
171+ git tag -f trunk
172+ git push -f origin trunk
173+ env :
174+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
136175
137176 - name : Upload artifacts to trunk release
138177 if : github.ref == 'refs/heads/main'
0 commit comments