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: [hellen72, cypress, frankenso_na6, kinetis, mre_f4, mre_f4_recovery, mre_f4_hardware_QC_special_build, mre_f7, prometheus_405, prometheus_469, proteus_f4, proteus_f4_hardware_QC_special_build, proteus_f7, stm32f767_nucleo, stm32h743_nucleo, subaru_eg33_f7] include: # Board configurations - build-target: hellen72 folder: hellen/hellen72 ini-file: rusefi_hellen72.ini # 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_recovery 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_f4_hardware_QC_special_build folder: proteus ini-file: rusefi_proteus_f4.ini - build-target: proteus_f7 folder: proteus ini-file: rusefi_proteus_f7.ini - build-target: stm32f767_nucleo folder: nucleo_f767 ini-file: no console-settings: firmware/config/boards/nucleo_f767/rusefi_console_properties.xml skip-config: yes - build-target: stm32h743_nucleo folder: nucleo_h743 ini-file: no skip-config: yes - build-target: subaru_eg33_f7 folder: subaru_eg33 ini-file: rusefi_subaru_eg33_f7.ini steps: - uses: actions/checkout@v1 with: submodules: recursive - uses: actions/setup-java@v1 with: java-version: '8' - name: Install multilib, mingw, ncftp and mtools run: | sudo apt-get update sudo apt-get install gcc-multilib g++-multilib g++-mingw-w64 gcc-mingw-w64 ncftp mtools - 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; } elif [ "${{ matrix.build-target }}" = "subaru_eg33_f7" ]; then bash config/boards/subaru_eg33/config/gen_config.sh [ $? -eq 0 ] || { echo "ERROR generating board subaru_eg33 subaru_eg33_f7"; 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 env: ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' 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: Configs Set FTP variables env: ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' 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*.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*.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*.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*.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 - uses: actions/setup-java@v1 with: java-version: '8' - name: Generate Enum Strings working-directory: ./firmware/ run: bash gen_enum_to_string.sh - 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 env: ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' 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: primary Set FTP variables env: ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' 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