at3@: use STM32's chconf.h #681
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Firmware at GHA | |
on: | |
push: | |
pull_request: | |
schedule: | |
- cron: '0 0 * * *' | |
workflow_dispatch: | |
inputs: | |
lts: | |
description: 'LTS Build' | |
required: false | |
type: boolean | |
jobs: | |
build-libopenblt-linux: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: cmake configure libopenblt | |
working-directory: ./firmware/ext/openblt/Host/Source/LibOpenBLT/build | |
run: cmake -DCMAKE_BUILD_TYPE=Release .. | |
# - name: make libopenblt | |
# working-directory: ./firmware/ext/openblt/Host/Source/LibOpenBLT/build | |
# run: make -j8 | |
- name: cmake configure libopenblt_jni | |
working-directory: ./misc/libopenblt_jni/build | |
run: cmake -DCMAKE_BUILD_TYPE=Release .. | |
# - name: make libopenblt_jni | |
# working-directory: ./misc/libopenblt_jni/build | |
# run: make -j8 | |
- name: coalesce | |
if: 0 | |
run: | | |
mkdir deliver | |
cp ./firmware/ext/openblt/Host/libopenblt.so deliver/ | |
cp ./misc/libopenblt_jni/build/libopenblt_jni.so deliver/ | |
# - uses: actions/upload-artifact@v4 | |
# if: 0 | |
# name: libopenblt-linux | |
# path: | | |
# ./deliver/libopenblt.so | |
# ./deliver/libopenblt_jni.so | |
release: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Dump GitHub context | |
env: | |
GITHUB_CONTEXT: ${{ toJson(github) }} | |
run: echo "$GITHUB_CONTEXT" | |
- name: Set run condition variables | |
run: | | |
if [ "${{github.event_name}}" = "schedule" ] && [ "${{github.repository}}" = "rusefi/rusefi" ]; then | |
echo "full=true" >> $GITHUB_ENV | |
echo "upload=release" >> $GITHUB_ENV | |
echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV | |
fi | |
- uses: mukunku/[email protected] | |
id: checkTag | |
with: | |
tag: ${{ env.date }} | |
- name: Create Release Tag | |
if: ${{ env.full == 'true' && env.upload == 'release' && steps.checkTag.outputs.exists == 'false' }} | |
id: tag | |
uses: mathieudutour/[email protected] | |
with: | |
github_token: ${{ secrets.ACCESS_TOKEN }} | |
custom_tag: ${{ env.date }} | |
tag_prefix: '' | |
- name: Create Release | |
if: ${{ env.full == 'true' && env.upload == 'release' }} | |
uses: ncipollo/[email protected] | |
with: | |
tag: ${{ env.date }} | |
name: "Nightly ${{ env.date }}" | |
artifacts: "artifacts/rusefi_bundle_*.zip" | |
replacesArtifacts: false | |
token: ${{ secrets.ACCESS_TOKEN }} | |
allowUpdates: true | |
prerelease: true | |
- name: coalesce | |
if: 0 | |
run: | | |
mkdir deliver | |
cp ./firmware/ext/openblt/Host/libopenblt.dylib deliver/ | |
cp ./misc/libopenblt_jni/build/libopenblt_jni.dylib deliver/ | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: bootcommander-linux | |
path: | | |
./deliver/libopenblt.dylib | |
./deliver/libopenblt_jni.dylib | |
build-firmware: | |
runs-on: ubuntu-latest | |
needs: [ | |
# todo proper build of build-libopenblt #5866 | |
#build-libopenblt-linux, | |
#build-libopenblt-macos, | |
release] | |
strategy: | |
# Let all builds finish even if one fails early | |
fail-fast: false | |
matrix: | |
# What boards should we build for? In the 'include' section below, | |
# set up what each of these boards needs to build. | |
# | |
# see also gen_config where we have a similar list for all boards! | |
# see also build-primary-bundle where default/primary bundle is build separately | |
# | |
build-target: [ | |
alphax-2chan, | |
alphax-4chan, | |
alphax-4chan_f7, | |
alphax-8chan, | |
alphax-8chan_debug, | |
# todo alphax-8chan-revA, | |
m74_9, | |
s105, | |
t-b-g, | |
hellen72, | |
hellen81, | |
hellen88bmw, | |
hellen88bmw_avr, | |
hellen-nb1, | |
hellen-gm-e67, | |
hellenNA8_96, | |
hellenNA6, | |
hellen128, | |
hellen121vag, | |
hellen-honda-k, | |
hellen121nissan, | |
cypress, | |
frankenso_na6, | |
kinetis, | |
mre_f4, | |
mre_f7, | |
prometheus_405, | |
prometheus_469, | |
proteus_f4, | |
proteus_f7, | |
proteus_h7, | |
stm32f429_nucleo, | |
stm32f767_nucleo, | |
stm32f767_nucleo_debug, | |
stm32h743_nucleo, | |
subaru_eg33_f7, | |
subaru_eg33_f7_no_bl, | |
f407-discovery, | |
f429-discovery, | |
atlas, | |
tdg-pdm8, | |
at_start_f435, | |
] | |
include: | |
# Board configurations | |
# 'target' should match corresponding SHORT_BOARD_NAME | |
- build-target: hellen72 | |
folder: config/boards/hellen/hellen72 | |
skip-rate: 90 | |
- build-target: hellen81 | |
folder: config/boards/hellen/hellen81 | |
skip-rate: 90 | |
- build-target: alphax-2chan | |
folder: config/boards/hellen/alphax-2chan | |
skip-rate: 0 | |
- build-target: alphax-4chan | |
folder: config/boards/hellen/alphax-4chan | |
- build-target: alphax-4chan_f7 | |
folder: config/boards/hellen/alphax-4chan | |
- build-target: alphax-8chan | |
folder: config/boards/hellen/alphax-8chan | |
skip-rate: 0 | |
- build-target: alphax-8chan_debug | |
folder: config/boards/hellen/alphax-8chan | |
skip-rate: 95 | |
- build-target: alphax-8chan_f7 | |
folder: config/boards/hellen/alphax-8chan | |
skip-rate: 0 | |
# - build-target: alphax-8chan-revA | |
# folder: config/boards/hellen/alphax-8chan-revA | |
# skip-rate: 30 | |
- build-target: s105 | |
folder: config/boards/s105 | |
skip-rate: 90 | |
- build-target: t-b-g | |
folder: config/boards/test-build-guards | |
skip-rate: 90 | |
- build-target: m74_9 | |
folder: config/boards/m74_9 | |
skip-rate: 50 | |
- build-target: small-can-board | |
folder: config/boards/hellen/small-can-board | |
skip-rate: 50 | |
- build-target: uaefi | |
folder: config/boards/hellen/uaefi | |
- build-target: small-can-board_debug | |
folder: config/boards/hellen/small-can-board | |
skip-rate: 00 | |
- build-target: hellen88bmw | |
folder: config/boards/hellen/hellen88bmw | |
skip-rate: 99 | |
- build-target: hellen88bmw_avr | |
folder: config/boards/hellen/hellen88bmw | |
skip-rate: 99 | |
- build-target: hellen-nb1 | |
folder: config/boards/hellen/hellen-nb1 | |
skip-rate: 99 | |
- build-target: hellen-112-17 | |
folder: config/boards/hellen/hellen-112-17 | |
skip-rate: 50 | |
- build-target: hellen-112-17_debug | |
folder: config/boards/hellen/hellen-112-17 | |
skip-rate: 50 | |
- build-target: hellen-gm-e67 | |
folder: config/boards/hellen/hellen-gm-e67 | |
skip-rate: 99 | |
- build-target: hellenNA8_96 | |
folder: config/boards/hellen/hellenNA8_96 | |
skip-rate: 99 | |
- build-target: hellenNA6 | |
folder: config/boards/hellen/hellen64_miataNA6_94 | |
skip-rate: 90 | |
- build-target: hellen128 | |
folder: config/boards/hellen/hellen128 | |
skip-rate: 50 | |
- build-target: hellen121vag | |
folder: config/boards/hellen/hellen121vag | |
skip-rate: 99 | |
- build-target: hellen121nissan | |
folder: config/boards/hellen/hellen121nissan | |
skip-rate: 50 | |
- build-target: hellen-honda-k | |
folder: config/boards/hellen/hellen-honda-k | |
- build-target: hellen-honda-k_debug | |
folder: config/boards/hellen/hellen-honda-k | |
skip-rate: 50 | |
- build-target: hellen154hyundai | |
folder: config/boards/hellen/hellen154hyundai | |
skip-rate: 0 | |
- build-target: hellen154hyundai_f7 | |
folder: config/boards/hellen/hellen154hyundai | |
skip-rate: 90 | |
- build-target: cypress | |
folder: config/boards/cypress | |
- build-target: frankenso_na6 | |
folder: config/boards/frankenso_na6 | |
skip-rate: 90 | |
- build-target: kinetis | |
folder: config/boards/kinetis | |
skip-rate: 0 | |
- build-target: mre_f4 | |
folder: config/boards/microrusefi | |
- build-target: mre_f7 | |
folder: config/boards/microrusefi | |
skip-rate: 90 | |
- build-target: prometheus_405 | |
folder: config/boards/prometheus/f405 | |
skip-rate: 90 | |
- build-target: prometheus_469 | |
folder: config/boards/prometheus/f469 | |
skip-rate: 90 | |
- build-target: proteus_f4 | |
folder: config/boards/proteus | |
- build-target: proteus_f4_debug | |
folder: config/boards/proteus | |
skip-rate: 80 | |
- build-target: proteus_f7 | |
folder: config/boards/proteus | |
# - build-target: proteus_f7_debug | |
# folder: config/boards/proteus | |
# skip-rate: 80 | |
- build-target: proteus_h7 | |
folder: config/boards/proteus | |
skip-rate: 90 | |
- build-target: stm32f429_nucleo | |
folder: config/boards/nucleo_f429 | |
skip-rate: 50 | |
- build-target: stm32f767_nucleo | |
folder: config/boards/nucleo_f767 | |
skip-rate: 50 | |
- build-target: stm32f767_nucleo_debug | |
folder: config/boards/nucleo_f767 | |
skip-rate: 50 | |
- build-target: stm32h743_nucleo | |
folder: config/boards/nucleo_h743 | |
skip-rate: 95 | |
- build-target: subaru_eg33_f7 | |
folder: config/boards/subaru_eg33 | |
skip-rate: 50 | |
- build-target: subaru_eg33_f7_no_bl | |
folder: config/boards/subaru_eg33 | |
skip-rate: 50 | |
- build-target: f407-discovery | |
folder: config/boards/f407-discovery | |
skip-rate: 0 | |
- build-target: f407-discovery_debug | |
folder: config/boards/f407-discovery | |
skip-rate: 0 | |
- build-target: f429-discovery | |
folder: config/boards/f429-discovery | |
skip-rate: 95 | |
- build-target: atlas | |
folder: config/boards/atlas | |
skip-rate: 95 | |
- build-target: tdg-pdm8 | |
folder: config/boards/tdg-pdm8 | |
skip-rate: 95 | |
- build-target: at_start_f435 | |
folder: config/boards/at_start_f435 | |
skip-rate: 0 | |
steps: | |
- name: Check branch name | |
if: ${{ contains(github.ref_name, '.') }} | |
run: echo '::error::Branch names must not contain ".", this breaks firmware autoupdates.' && exit 1 | |
- name: Execution throttle early exit | |
# Don't skip any jobs if this workflow was run manually, | |
# or if the commit contains `only:`, signifying that only one bundle should be built. | |
if: ${{ matrix.skip-rate && github.event_name != 'workflow_dispatch' && github.event_name != 'schedule' && github.event_name != 'pull_request' && github.run_attempt == 1 || contains(github.event.head_commit.message, 'only:') }} | |
run: | | |
# if the commit message contains `only:`, get the part after the semicolon and check if it matches the build target. | |
read -d '' MSG << EOM || true | |
${{ github.event.head_commit.message }} | |
EOM | |
if echo $MSG | grep "only:"; then | |
if [ "$(echo $MSG | grep -Po '(?<=only:)[^\s]*')" = "${{ matrix.build-target }}" ]; then | |
exit 0 | |
else | |
# if it doesn't match, skip this job. | |
echo "skip=true" >> $GITHUB_ENV | |
exit 0 | |
fi | |
fi | |
if (($(($RANDOM % 100)) < ${{ matrix.skip-rate }})); then echo "skip=true" >> $GITHUB_ENV; fi | |
- name: Set run condition variables | |
run: | | |
if [ "${{github.event_name}}" = "schedule" ] && [ "${{github.repository}}" = "rusefi/rusefi" ]; then | |
echo "Scheduled mode" | |
echo "full=true" >> $GITHUB_ENV | |
echo "upload=release" >> $GITHUB_ENV | |
echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV | |
elif [ "${{github.event_name}}" = "push" ]\ | |
&& [ "${{github.ref}}" = "refs/heads/master" ]\ | |
&& [ "${{env.skip}}" != "true" ]\ | |
|| [ "${{toJSON(inputs.lts)}}" = "true" ]; then | |
echo "Full mode" | |
echo "full=true" >> $GITHUB_ENV | |
echo "upload=server" >> $GITHUB_ENV | |
elif [ "${{env.skip}}" != "true" ]; then | |
echo "Partial mode" | |
echo "partial=true" >> $GITHUB_ENV | |
fi | |
- uses: actions/checkout@v4 | |
if: ${{ env.skip != 'true' }} | |
- name: Checkout Submodules | |
if: ${{ env.skip != 'true' }} | |
run: | | |
git submodule update --init --depth=1 firmware/ChibiOS | |
git submodule update --init --depth=1 firmware/ChibiOS-Contrib | |
git submodule update --init --depth=1 firmware/libfirmware | |
git submodule update --init --depth=1 firmware/ext/lua | |
git submodule update --init --depth=1 firmware/ext/uzlib | |
git submodule update --init --depth=1 firmware/ext/openblt | |
git submodule update --init --depth=1 firmware/controllers/lua/luaaa | |
git submodule update --init --depth=1 firmware/controllers/can/wideband_firmware | |
git submodule update --init --depth=1 java_console/luaformatter | |
git submodule update --init --depth=1 java_console/peak-can-basic | |
- uses: actions/setup-java@v4 | |
if: ${{ env.skip != 'true' }} | |
with: | |
distribution: 'zulu' | |
java-version: '11' | |
- name: Install multilib, mingw, sshpass and mtools | |
if: ${{ env.skip != 'true' }} | |
run: | | |
sudo bash misc/actions/add-ubuntu-latest-apt-mirrors.sh | |
sudo apt-get install gcc-multilib g++-multilib g++-mingw-w64 gcc-mingw-w64 sshpass mtools zip dosfstools | |
- name: Generate Live Documentation | |
if: ${{ env.skip != 'true' }} | |
working-directory: ./firmware/ | |
run: ./gen_live_documentation.sh | |
- name: Set Build Env Variables | |
if: ${{ env.skip != 'true' }} | |
working-directory: ./firmware/ | |
run: | | |
echo LTS=${{toJSON(inputs.lts)}} >> $GITHUB_ENV | |
echo REF=${{github.ref_name}} >> $GITHUB_ENV | |
echo BUNDLE_NAME=${{matrix.build-target}} >> $GITHUB_ENV | |
echo BOARD_DIR=${{matrix.folder}} >> $GITHUB_ENV | |
echo BOARD_META_PATH=$(bash bin/find_meta_info.sh ${{matrix.folder}} ${{matrix.build-target}}) >> $GITHUB_ENV | |
- name: Git Status | |
if: ${{ env.skip != 'true' }} | |
run: | | |
git status | |
# | |
# Note to humans: on personal devices we have firmware/provide_gcc.sh and setup_linux_environment.sh | |
# | |
- name: Install Arm GNU Toolchain (arm-none-eabi-gcc) | |
if: ${{ env.skip != 'true' }} | |
uses: carlosperate/arm-none-eabi-gcc-action@v1 | |
with: | |
release: '12.3.Rel1' | |
# Make sure the compiler we just downloaded works - just print out the version | |
- name: Test arm-none-eabi-gcc Compiler | |
if: ${{ env.skip != 'true' }} | |
run: arm-none-eabi-gcc -v | |
- name: Configs build_server upload SSH variables | |
if: ${{ env.full == 'true' && env.upload == 'server' }} | |
env: | |
ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' | |
run: | | |
echo "RUSEFI_SSH_SERVER=${{secrets.RUSEFI_SSH_SERVER}}" >> $GITHUB_ENV | |
echo "RUSEFI_SSH_USER=${{secrets.RUSEFI_SSH_USER}}" >> $GITHUB_ENV | |
echo "RUSEFI_SSH_PASS=${{secrets.RUSEFI_SSH_PASS}}" >> $GITHUB_ENV | |
# - name: Download LibOpenBLT Tool (Linux) | |
# uses: actions/download-artifact@v3 | |
# with: | |
# name: libopenblt-linux | |
# path: ./firmware/ext/openblt/Host/ | |
# - name: Download LibOpenBLT Tool (MacOS) | |
# uses: actions/download-artifact@v3 | |
# with: | |
# name: libopenblt-macos | |
# path: ./firmware/ext/openblt/Host/ | |
# Build the firmware! | |
- name: Build Firmware | |
if: ${{ env.skip != 'true' }} | |
working-directory: ./firmware/ | |
run: | | |
make clean | |
if [ "$full" == "true" ]; then | |
bash bin/compile.sh -b ${{env.BOARD_META_PATH}} | |
else | |
bash bin/compile.sh ${{env.BOARD_META_PATH}} all deliver/rusefi.dfu deliver/rusefi.bin | |
fi | |
- name: Upload Bundle | |
if: ${{ env.full == 'true' }} | |
working-directory: ./artifacts | |
run: bash ../firmware/bin/upload_bundle.sh | |
- name: Add Bundles to Release | |
if: ${{ env.full == 'true' && env.upload == 'release' }} | |
uses: ncipollo/[email protected] | |
with: | |
tag: ${{ env.date }} | |
name: "Nightly ${{ env.date }}" | |
artifacts: "artifacts/rusefi_bundle_*.zip" | |
replacesArtifacts: false | |
token: ${{ secrets.ACCESS_TOKEN }} | |
allowUpdates: true | |
prerelease: true | |
- name: Upload .ini files to rusEFI Online server | |
if: ${{ env.full == 'true' }} | |
working-directory: ./firmware | |
run: | | |
source config/boards/common_script_read_meta_env.inc ${{ env.BOARD_META_PATH }} | |
cd tunerstudio/generated | |
../upload_ini.sh ${{ secrets.RUSEFI_ONLINE_FTP_USER }} ${{ secrets.RUSEFI_ONLINE_FTP_PASS }} ${{ secrets.RUSEFI_FTP_SERVER }} | |
- name: Upload github action elf artifact | |
if: ${{ env.partial == 'true' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rusefi_${{matrix.build-target}}.elf | |
path: ./firmware/build/rusefi.elf | |
- name: Upload github action map artifact | |
if: ${{ env.partial == 'true' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rusefi_${{matrix.build-target}}.map | |
path: ./firmware/build/rusefi.map | |
- name: Upload github action bin artifact | |
if: ${{ env.partial == 'true' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rusefi_${{matrix.build-target}}.bin | |
path: ./firmware/deliver/rusefi*.bin | |
- name: Upload github action hex artifact | |
if: ${{ env.partial == 'true' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rusefi_${{matrix.build-target}}.hex | |
# we have a bit of a mess - this file from 'build' folder is only legit for not-BLT builds | |
# todo: we should produce .hex in both OpenBLT and non-OpenBLT case same as we do for .bin and .elf | |
path: ./firmware/build/rusefi*.hex | |
- name: Upload github action dfu artifact | |
if: ${{ env.partial == 'true' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rusefi_${{matrix.build-target}}.dfu | |
path: ./firmware/deliver/rusefi*.dfu | |
- name: Upload bundle artifact | |
if: ${{ env.full == 'true' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rusefi_bundle_${{matrix.build-target}}.zip | |
path: ./artifacts/rusefi_bundle*.zip | |
- name: Upload github action autoupdate artifact | |
if: ${{ env.full == 'true' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rusefi_bundle_${{matrix.build-target}}_autoupdate.zip | |
path: ./artifacts/rusefi_bundle_${{matrix.build-target}}_autoupdate.zip |