rusefi/.github/workflows/build-firmware.yaml

249 lines
9.3 KiB
YAML

name: Build Firmware
on: [push, pull_request]
jobs:
build-firmware:
runs-on: ubuntu-latest
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.
build-target: [cypress, frankenso_na6, kinetis, mre_f4, mre_f4_hardware_QC_special_build, mre_f7, prometheus_405, prometheus_469, proteus_f4, proteus_f7, stm32f746_nucleo, stm32f767_nucleo]
include:
# Board configurations
- build-target: cypress
folder: hellen
ini-file: rusefi_hellen_cypress.ini
- build-target: frankenso_na6
folder: frankenso
ini-file: rusefi_frankenso_na6.ini
- build-target: kinetis
folder: kinetis
ini-file: rusefi_kinetis.ini
- build-target: mre_f4
folder: microrusefi
ini-file: rusefi_mre_f4.ini
- build-target: mre_f4_hardware_QC_special_build
folder: microrusefi
ini-file: rusefi_mre_f4.ini
- build-target: mre_f7
folder: microrusefi
ini-file: rusefi_mre_f7.ini
console-settings: firmware/config/boards/nucleo_f767/rusefi_console_properties.xml
- build-target: prometheus_405
folder: prometheus
ini-file: rusefi_prometheus_405.ini
- build-target: prometheus_469
folder: prometheus
ini-file: rusefi_prometheus_469.ini
- build-target: proteus_f4
folder: proteus
ini-file: rusefi_proteus_f4.ini
- build-target: proteus_f7
folder: proteus
ini-file: rusefi_proteus_f7.ini
- build-target: stm32f746_nucleo
folder: nucleo_f746
ini-file: no
console-settings: firmware/config/boards/nucleo_f767/rusefi_console_properties.xml
skip-config: yes
- build-target: stm32f767_nucleo
folder: nucleo_f767
ini-file: no
console-settings: firmware/config/boards/nucleo_f767/rusefi_console_properties.xml
skip-config: yes
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- name: Generate Configs
if: ${{ matrix.skip-config != 'yes' }}
working-directory: ./firmware/
run: |
if [ "${{ matrix.build-target }}" = "kinetis" ]; then
cd config/boards/kinetis/config
bash gen_config.sh
[ $? -eq 0 ] || { echo "ERROR generating board kinetis kin"; exit 1; }
elif [ "${{ matrix.build-target }}" = "cypress" ]; then
cd config/boards/hellen/cypress/config
bash gen_config.sh
[ $? -eq 0 ] || { echo "ERROR generating board hellen_cypress hellen_cypress"; exit 1; }
else
bash gen_config_board.sh ${{matrix.folder}} ${{matrix.build-target}}
fi
- name: Generate Enum Strings
working-directory: ./firmware/
run: bash gen_enum_to_string.sh
- name: Generate Default config
working-directory: ./firmware/
run: bash gen_config_default.sh
- name: Generate Live Documentation
working-directory: ./firmware/
run: bash gen_live_documentation.sh
# Build machines don't have arm-none-eabi gcc, so let's download it and put it on the path
- name: Download & Install GCC
run: | # Compiler hosted on our other git repo - avoids having to download from the nice folks at ARM every time
wget 'https://github.com/rusefi/build_support/raw/master/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.xz' -O compiler.tar.xz
tar -xvf compiler.tar.xz
echo "::add-path::`pwd`/gcc-arm-none-eabi-9-2020-q2-update/bin"
# Make sure the compiler we just downloaded works - just print out the version
- name: Test Compiler
run: arm-none-eabi-gcc -v
- name: Install multilib, mingw, and ncftp
run: |
sudo apt-get update
sudo apt-get install gcc-multilib g++-multilib g++-mingw-w64 gcc-mingw-w64 ncftp
- name: Set FTP variables
run: |
if [ "${{github.event_name}}" = "push" ] && [ "${{github.ref}}" = "refs/heads/master" ]; then
echo "::set-env name=RUSEFI_FTP_SERVER::${{secrets.RUSEFI_FTP_SERVER}}";
echo "::set-env name=RUSEFI_BUILD_FTP_USER::${{secrets.RUSEFI_BUILD_FTP_USER}}";
echo "::set-env name=RUSEFI_BUILD_FTP_PASS::${{secrets.RUSEFI_BUILD_FTP_PASS}}";
fi
# Build rusEFI console
- name: Build console
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
run: bash misc/jenkins/build_java_console.sh
# Build the simulator
- name: Build simulator
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
run: OS="Windows_NT" bash misc/jenkins/build_simulator.sh
# Build the firmware!
- name: Build Firmware
run: bash misc/jenkins/compile_other_versions/compile.sh ${{matrix.folder}} ${{matrix.build-target}} ${{matrix.ini-file}} ${{matrix.console-settings}}
- name: Package Bundle
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
run: bash misc/jenkins/compile_other_versions/prepare_bundle.sh ${{matrix.build-target}} ${{matrix.ini-file}}
- name: Attach console junit results
if: always()
uses: actions/upload-artifact@v2
with:
name: console ${{matrix.build-target}} junit
path: ./java_console/build/*.txt
- name: Upload build bin
if: ${{ github.event_name != 'push' || github.ref != 'refs/heads/master' }}
uses: actions/upload-artifact@v2
with:
name: rusefi_${{matrix.build-target}}.bin
path: ./firmware/deliver/rusefi_${{matrix.build-target}}.bin
- name: Upload build hex
if: ${{ github.event_name != 'push' || github.ref != 'refs/heads/master' }}
uses: actions/upload-artifact@v2
with:
name: rusefi_${{matrix.build-target}}.hex
path: ./firmware/deliver/rusefi_${{matrix.build-target}}.hex
- name: Upload build dfu
if: ${{ github.event_name != 'push' || github.ref != 'refs/heads/master' }}
uses: actions/upload-artifact@v2
with:
name: rusefi_${{matrix.build-target}}.dfu
path: ./firmware/deliver/rusefi_${{matrix.build-target}}.dfu
- name: Upload bundle
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
uses: actions/upload-artifact@v2
with:
name: rusefi_bundle_${{matrix.build-target}}.zip
path: ./artifacts/rusefi_bundle_${{matrix.build-target}}.zip
- name: Upload autoupdate bundle
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
uses: actions/upload-artifact@v2
with:
name: rusefi_bundle_${{matrix.build-target}}_autoupdate.zip
path: ./artifacts/rusefi_bundle_${{matrix.build-target}}_autoupdate.zip
build-primary-bundle:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- name: Generate Configs
working-directory: ./firmware/
run: bash gen_config_default.sh
- name: Generate Live Documentation
working-directory: ./firmware/
run: bash gen_live_documentation.sh
# Build machines don't have arm-none-eabi gcc, so let's download it and put it on the path
- name: Download & Install GCC
run: | # Compiler hosted on our other git repo - avoids having to download from the nice folks at ARM every time
wget 'https://github.com/rusefi/build_support/raw/master/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.xz' -O compiler.tar.xz
tar -xvf compiler.tar.xz
echo "::add-path::`pwd`/gcc-arm-none-eabi-9-2020-q2-update/bin"
- name: Install multilib, mingw, and ncftp
run: |
sudo apt-get update
sudo apt-get install gcc-multilib g++-multilib g++-mingw-w64 gcc-mingw-w64 ncftp
# Make sure the compiler we just downloaded works - just print out the version
- name: Test Compiler
run: arm-none-eabi-gcc -v
- name: Set FTP variables
run: |
if [ "${{github.event_name}}" = "push" ] && [ "${{github.ref}}" = "refs/heads/master" ]; then
echo "::set-env name=RUSEFI_FTP_SERVER::${{secrets.RUSEFI_FTP_SERVER}}";
echo "::set-env name=RUSEFI_BUILD_FTP_USER::${{secrets.RUSEFI_BUILD_FTP_USER}}";
echo "::set-env name=RUSEFI_BUILD_FTP_PASS::${{secrets.RUSEFI_BUILD_FTP_PASS}}";
fi
- name: Build Primary Bundle
run: OS="Windows_NT" bash misc/jenkins/functional_test_and_build_bundle/build_current_bundle.sh
- name: Package Bundle
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
run: bash misc/jenkins/compile_other_versions/prepare_bundle.sh default
- name: Attach console junit results
if: always()
uses: actions/upload-artifact@v2
with:
name: console primary junit
path: ./java_console/build/*.txt
- name: Upload primary bundle
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
uses: actions/upload-artifact@v2
with:
name: rusefi_bundle.zip
path: ./artifacts/rusefi_bundle.zip