Openblt can #1148
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: | |
workflow_dispatch: | |
inputs: | |
do_upload: | |
description: 'Upload Build Outputs' | |
required: false | |
type: boolean | |
build_name: | |
description: 'Release Build Name' | |
required: false | |
type: string | |
jobs: | |
build-libopenblt-linux: | |
runs-on: ubuntu-latest-selfhost | |
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 | |
run: | | |
mkdir deliver | |
cp ./firmware/ext/openblt/Host/libopenblt.so deliver/ | |
cp ./misc/libopenblt_jni/build/libopenblt_jni.so deliver/ | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: libopenblt-linux | |
path: | | |
./deliver/libopenblt.so | |
./deliver/libopenblt_jni.so | |
build-libopenblt-macos: | |
runs-on: macos-13 | |
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 | |
run: | | |
mkdir deliver | |
cp ./firmware/ext/openblt/Host/libopenblt.dylib deliver/ | |
cp ./misc/libopenblt_jni/build/libopenblt_jni.dylib deliver/ | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: libopenblt-macos | |
path: | | |
./deliver/libopenblt.dylib | |
./deliver/libopenblt_jni.dylib | |
build-firmware: | |
needs: [build-libopenblt-linux, build-libopenblt-macos] | |
runs-on: ubuntu-latest-selfhost | |
strategy: | |
# Let all builds finish even if one fails early | |
fail-fast: false | |
matrix: | |
include: | |
# Board configurations | |
- build-target: hellen72 | |
folder: config/boards/hellen/hellen72 | |
ini-file: fome_hellen72.ini | |
# - build-target: hellen81 | |
# folder: config/boards/hellen/hellen81 | |
# ini-file: fome_hellen81.ini | |
# - build-target: alphax-2chan | |
# folder: config/boards/hellen/alphax-2chan | |
# ini-file: fome_alphax-2chan.ini | |
# - build-target: alphax-4chan | |
# folder: config/boards/hellen/alphax-4chan | |
# ini-file: fome_alphax-4chan.ini | |
# - build-target: alphax-8chan | |
# folder: config/boards/hellen/alphax-8chan | |
# ini-file: fome_alphax-8chan.ini | |
# - build-target: harley81 | |
# folder: config/boards/hellen/harley81 | |
# ini-file: fome_harley81.ini | |
- build-target: small-can-board | |
folder: config/boards/hellen/small-can-board | |
ini-file: rusefi_small-can-board.ini | |
# - build-target: hellen88bmw | |
# folder: config/boards/hellen/hellen88bmw | |
# ini-file: fome_hellen88bmw.ini | |
- build-target: hellen-nb1 | |
folder: config/boards/hellen/hellen-nb1 | |
ini-file: fome_hellen-nb1.ini | |
# - build-target: hellen-gm-e67 | |
# folder: config/boards/hellen/hellen-gm-e67 | |
# ini-file: fome_hellen-gm-e67.ini | |
- build-target: hellenNA8_96 | |
folder: config/boards/hellen/hellenNA8_96 | |
ini-file: fome_hellenNA8_96.ini | |
- build-target: hellenNA6 | |
folder: config/boards/hellen/hellen64_miataNA6_94 | |
ini-file: fome_hellenNA6.ini | |
# - build-target: hellen128 | |
# folder: config/boards/hellen/hellen128 | |
# ini-file: fome_hellen128mercedes.ini | |
# - build-target: hellen121vag | |
# folder: config/boards/hellen/hellen121vag | |
# ini-file: fome_hellen121vag.ini | |
# - build-target: hellen121nissan | |
# folder: config/boards/hellen/hellen121nissan | |
# ini-file: fome_hellen121nissan.ini | |
# - build-target: hellen-honda-k | |
# folder: config/boards/hellen/hellen-honda-k | |
# ini-file: fome_hellen-honda-k.ini | |
# - build-target: hellen154hyundai | |
# folder: config/boards/hellen/hellen154hyundai | |
# ini-file: fome_hellen154hyundai.ini | |
# - build-target: frankenso_na6 | |
# folder: config/boards/frankenso | |
# ini-file: fome_frankenso_na6.ini | |
- build-target: mre_f4 | |
folder: config/boards/microrusefi | |
ini-file: fome_mre_f4.ini | |
# - build-target: mre_f4_no_openblt | |
# folder: config/boards/microrusefi | |
# ini-file: fome_mre_f4.ini | |
# - build-target: mre_f4_debug | |
# folder: config/boards/microrusefi | |
# ini-file: fome_mre_f4.ini | |
# - build-target: mre_f4_recovery | |
# folder: config/boards/microrusefi | |
# ini-file: fome_mre_f4.ini | |
- build-target: mre_f7 | |
folder: config/boards/microrusefi | |
ini-file: fome_mre_f7.ini | |
# - build-target: prometheus_405 | |
# folder: config/boards/prometheus | |
# ini-file: fome_prometheus_405.ini | |
# - build-target: prometheus_469 | |
# folder: config/boards/prometheus | |
# ini-file: fome_prometheus_469.ini | |
- build-target: proteus_f4 | |
folder: config/boards/proteus | |
ini-file: fome_proteus_f4.ini | |
- build-target: proteus_f7 | |
folder: config/boards/proteus | |
ini-file: fome_proteus_f7.ini | |
- build-target: proteus_h7 | |
folder: config/boards/proteus | |
ini-file: fome_proteus_h7.ini | |
- build-target: stm32f429_nucleo | |
folder: config/boards/nucleo_f429 | |
ini-file: fome_stm32f429_nucleo.ini | |
# - build-target: stm32f767_nucleo | |
# folder: config/boards/nucleo_f767 | |
# ini-file: fome_stm32f767_nucleo.ini | |
# - build-target: stm32h743_nucleo | |
# folder: config/boards/nucleo_h743 | |
# ini-file: fome_stm32h743_nucleo.ini | |
# - build-target: subaru_eg33_f7 | |
# folder: config/boards/subaru_eg33 | |
# ini-file: fome_subaru_eg33_f7.ini | |
- build-target: f407-discovery | |
folder: config/boards/f407-discovery | |
ini-file: fome_f407-discovery.ini | |
# - build-target: f429-discovery | |
# folder: config/boards/f429-discovery | |
# ini-file: fome_f429-discovery.ini | |
- build-target: core8 | |
folder: config/boards/core8 | |
ini-file: fome_core8.ini | |
- build-target: core48 | |
folder: config/boards/core48 | |
ini-file: fome_core48.ini | |
# - build-target: atlas | |
# folder: config/boards/atlas | |
# ini-file: fome_atlas.ini | |
# - build-target: tdg-pdm8 | |
# folder: config/boards/tdg-pdm8 | |
# ini-file: fome_tdg-pdm8.ini | |
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: Set run condition variables | |
run: | | |
if [ "${{github.repository}}" = "FOME-Tech/fome-fw" ]\ | |
&& [ "${{github.event_name}}" = "push" ]\ | |
&& [ "${{github.ref}}" = "refs/heads/master" ]\ | |
|| [ "${{toJSON(inputs.do_upload)}}" = "true" ]; then | |
echo "full=true" >> $GITHUB_ENV | |
echo "upload=true" >> $GITHUB_ENV | |
elif [ "${{github.event_name}}" = "push" ]\ | |
&& [ "${{github.ref}}" = "refs/heads/master" ]; then | |
echo "full=true" >> $GITHUB_ENV | |
fi | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
# - uses: actions/setup-java@v3 | |
# with: | |
# distribution: 'zulu' | |
# java-version: '8' | |
# - name: Install multilib, mingw, sshpass and mtools | |
# working-directory: ./.github/workflows/ | |
# run: | | |
# sudo ./add-ubuntu-latest-apt-mirrors.sh | |
# sudo apt-get install gcc-multilib g++-multilib g++-mingw-w64 gcc-mingw-w64 sshpass mtools | |
# sudo apt-get install zip | |
# sudo apt-get install dosfstools | |
- name: Generate Live Documentation | |
working-directory: ./firmware/ | |
run: ./gen_live_documentation.sh | |
- name: Generate Configs for build-target | |
working-directory: ./firmware/ | |
# todo: we have code duplication with gen_config.sh here :( | |
run: | | |
if [ "${{ matrix.build-target }}" = "subaru_eg33_f7" ]; then | |
bash config/boards/subaru_eg33/config/gen_subaru_config.sh | |
[ $? -eq 0 ] || { echo "ERROR generating board subaru_eg33 subaru_eg33_f7"; exit 1; } | |
elif [ "${{ matrix.ini-file }}" = "" ]; then | |
echo "ERROR: ${{ matrix.build-target }} is missing ini-file attribute" | |
exit -1 | |
else | |
bash gen_config_board.sh ${{matrix.folder}} ${{matrix.build-target}} ${{matrix.ini-file}} | |
fi | |
# Build machines don't have arm-none-eabi gcc, so let's download it and put it on the path | |
# - name: Download & Install GCC | |
# env: | |
# ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' | |
# run: | | |
# ./firmware/provide_gcc.sh | |
# echo "::add-path::`pwd`/gcc-arm-none-eabi/bin" | |
# Make sure the compiler we just downloaded works - just print out the version | |
- name: Test Compiler | |
run: arm-none-eabi-gcc -v | |
# - name: Configs Set SSH variables | |
# if: ${{ env.full == 'true' && env.upload == 'true' }} | |
# env: | |
# ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' | |
# run: | | |
# echo "::set-env name=RUSEFI_SSH_SERVER::${{secrets.RUSEFI_SSH_SERVER}}"; | |
# echo "::set-env name=RUSEFI_SSH_USER::${{secrets.RUSEFI_SSH_USER}}"; | |
# echo "::set-env name=RUSEFI_SSH_PASS::${{secrets.RUSEFI_SSH_PASS}}"; | |
# Build the firmware! | |
- name: Build Firmware | |
run: bash misc/jenkins/compile_other_versions/compile.sh ${{matrix.folder}} ${{matrix.build-target}} | |
# Build rusEFI console | |
- name: Build console | |
if: ${{ env.full == 'true' }} | |
run: bash misc/jenkins/build_java_console.sh | |
# Build the simulator | |
- name: Build simulator | |
if: ${{ env.full == 'true' }} | |
# 'OS="Windows_NT"' allows us to build Windows executable on unix | |
run: OS="Windows_NT" bash misc/jenkins/build_simulator.sh | |
- 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/ | |
- name: Package Bundle | |
if: ${{ env.full == 'true' }} | |
run: bash misc/jenkins/compile_other_versions/prepare_bundle.sh ${{matrix.build-target}} "${{matrix.ini-file}}" ${{ toJSON(inputs.build_name) }} | |
- name: Upload INI to tunes.fome.tech | |
if: ${{ env.full == 'true' && env.upload == 'true' }} | |
uses: hyper-tuner/ini-upload-action@v1 | |
with: | |
api-url: "${{ secrets.HYPER_TUNER_INI_UPLOAD_URL }}" | |
username: "${{ secrets.HYPER_TUNER_INI_UPLOAD_USERNAME }}" | |
password: "${{ secrets.HYPER_TUNER_INI_UPLOAD_PASSWORD }}" | |
path: ./firmware/tunerstudio/generated/${{matrix.ini-file}} | |
ecosystem: fome | |
# - name: Upload .ini files | |
# if: ${{ env.full == 'true' && env.upload == 'true' }} | |
# working-directory: ./firmware/tunerstudio/generated | |
# run: ../upload_ini.sh ${{matrix.ini-file}} ${{ secrets.RUSEFI_ONLINE_FTP_USER }} ${{ secrets.RUSEFI_ONLINE_FTP_PASS }} ${{ secrets.RUSEFI_FTP_SERVER }} | |
# - name: Upload build elf | |
# if: ${{ env.full == 'true' && env.upload == 'true' }} | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: fome_${{matrix.build-target}}.elf | |
# path: ./firmware/build/rusefi.elf | |
# - name: Upload build bin | |
# if: ${{ env.full == 'true' && env.upload == 'true' }} | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: fome_${{matrix.build-target}}.bin | |
# path: ./firmware/deliver/rusefi*.bin | |
# - name: Upload build hex | |
# if: ${{ env.full == 'true' && env.upload == 'true' }} | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: fome_${{matrix.build-target}}.hex | |
# path: ./firmware/deliver/rusefi*.hex | |
# - name: Upload build dfu | |
# if: ${{ env.full == 'true' && env.upload == 'true' }} | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: fome_${{matrix.build-target}}.dfu | |
# path: ./firmware/deliver/rusefi*.dfu | |
- name: Upload bundle | |
if: ${{ env.full == 'true' && env.upload == 'true' }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: fome_bundle_${{matrix.build-target}}.zip | |
path: ./artifacts/fome_bundle_${{matrix.build-target}}.zip |