diff --git a/.github/workflows/workflow.yaml b/.github/workflows/workflow.yaml index ee7693273..77bde5177 100644 --- a/.github/workflows/workflow.yaml +++ b/.github/workflows/workflow.yaml @@ -53,6 +53,354 @@ jobs: echo "short_ref=${BRANCHTRANSLATED}" >> $GITHUB_OUTPUT echo "sha_short=SHA-$(git rev-parse --short=12 HEAD)" >> $GITHUB_OUTPUT echo "version=${VERSION}" >> $GITHUB_OUTPUT + + build2: + name: Build Simulator + needs: refs + runs-on: windows-2022 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Checkout berry submodule + run: | + git submodule update --init --recursive libraries/berry + + - name: Setup MSBuild + uses: microsoft/setup-msbuild@v2 + + - name: Checkout simulator repository + run: | + git clone https://github.com/openshwprojects/obkSimulator + mkdir -p ./libs_for_simulator + cp -r ./obkSimulator/simulator/libs_for_simulator/* ./libs_for_simulator + + - name: Build project + run: msbuild openBeken_win32_mvsc2017.vcxproj /p:Configuration=Release /p:PlatformToolset=v143 + - name: Flatten build assets + run: | + mkdir -p flat + cp ./Release/openBeken_win32.exe flat/ + cp ./obkSimulator/simulator/*.dll flat/ + cp ./run_*.bat flat/ + mkdir -p flat/examples + cp -r ./obkSimulator/examples/* flat/examples/ + - name: Run unit tests + run: | + ./flat/openBeken_win32.exe -runUnitTests 2 + - name: Compress build assets + run: | + Compress-Archive -Path flat/* -DestinationPath obkSimulator_win32_${{ needs.refs.outputs.version }}.zip + - name: Copy build assets + run: | + mkdir -Force output/${{ needs.refs.outputs.version }} + cp obkSimulator_win32_${{ needs.refs.outputs.version }}.zip output/${{ needs.refs.outputs.version }}/obkSimulator_${{ needs.refs.outputs.version }}.zip + - name: Upload build assets + uses: actions/upload-artifact@v4 + with: + name: ${{ env.APP_NAME }}_${{ needs.refs.outputs.version }}_sim + path: output/${{ needs.refs.outputs.version }}/obkSimulator_${{ needs.refs.outputs.version }}.zip + + build_asan: + name: Build Linux Simulator and Run Tests With Address Sanitizer + needs: refs + runs-on: ubuntu-22.04 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Checkout berry submodule + run: | + git submodule update --init --recursive libraries/berry + mkdir -p libraries/berry/generate + ./libraries/berry/tools/coc/coc -o libraries/berry/generate libraries/berry/src src/berry/modules -c include/berry_conf.h + + - name: Build project + run: ASAN=1 make -f custom.mk + - name: Run unit tests + run: | + export LSAN_OPTIONS=suppressions=platforms/linux/asan.suppressions + ./build/win_main -runUnitTests 2 + + build_ubsan: + name: Build Linux Simulator and Run Tests With Undefined Behavior Sanitizer + needs: refs + runs-on: ubuntu-22.04 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Checkout berry submodule + run: | + git submodule update --init --recursive libraries/berry + mkdir -p libraries/berry/generate + ./libraries/berry/tools/coc/coc -o libraries/berry/generate libraries/berry/src src/berry/modules -c include/berry_conf.h + + - name: Build project + run: UBSAN=1 make -f custom.mk + - name: Run unit tests + run: | + export UBSAN_OPTIONS=halt_on_error=1:print_stacktrace=1:suppressions=platforms/linux/ubsan.suppressions + ./build/win_main -runUnitTests 2 + + build: + name: Build + needs: refs + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + include: + # default for all platforms + - platform: OpenBK7231T + variant: default + - platform: OpenBK7231N + variant: default + - platform: OpenXR809 + variant: default + gcc: 8-2019-q3 + - platform: OpenXR806 + variant: default + gcc: 8-2019-q3 + - platform: OpenXR872 + variant: default + gcc: 8-2019-q3 + - platform: OpenBL602 + variant: default + - platform: OpenW800 + variant: default + - platform: OpenW600 + variant: default + - platform: OpenLN882H + variant: default + gcc: 10.3-2021.10 + - platform: OpenTR6260 + variant: default + - platform: OpenRTL8710A + variant: default + gcc: 8-2019-q3 + - platform: OpenRTL8710B + variant: default + gcc: 8-2019-q3 + - platform: OpenRTL87X0C + variant: default + gcc: apt + - platform: OpenRTL8720D + variant: default + gcc: 10.3-2021.10 + - platform: OpenECR6600 + variant: default + - platform: OpenRDA5981 + variant: default + gcc: 6-2017-q2 + - platform: OpenRTL8721DA + variant: default + - platform: OpenRTL8720E + variant: default + + # extras for BK7231T + - platform: OpenBK7231T + variant: berry + - platform: OpenBK7231T + variant: tuyaMCU + - platform: OpenBK7231T + variant: powerMetering + - platform: OpenBK7231T + variant: irRemoteESP + - platform: OpenBK7231T + variant: sensors + + # extras for BK7231N + - platform: OpenBK7231N + variant: berry + - platform: OpenBK7231N + variant: tuyaMCU + - platform: OpenBK7231N + variant: powerMetering + - platform: OpenBK7231N + variant: irRemoteESP + - platform: OpenBK7231N + variant: sensors + - platform: OpenBK7231N + variant: hlw8112 + + - platform: OpenBL602 + variant: berry + + # ALT firmware + - platform: OpenBK7231N_ALT + variant: default + gcc: apt + - platform: OpenBK7231T_ALT + variant: default + gcc: apt + - platform: OpenBK7231U + variant: default + gcc: apt + - platform: OpenBK7238 + variant: default + gcc: apt + - platform: OpenBK7252 + variant: default + gcc: apt + - platform: OpenBK7252N + variant: default + gcc: apt + # extras for BK7238 + - platform: OpenBK7238 + variant: berry + gcc: apt + - platform: OpenBK7238 + variant: irRemoteESP + gcc: apt + steps: + - name: Source checkout + uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + if: ${{ matrix.platform == 'OpenBL602' || matrix.platform == 'OpenRTL8721DA' || matrix.platform == 'OpenRTL8720E' || matrix.platform == 'OpenRDA5981' }} + with: + python-version: '3.10' + architecture: 'x64' + cache: 'pip' + + - name: Install dependencies + if: ${{ matrix.platform == 'OpenLN882H' }} + uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: cmake + version: 1.0 + + - name: Install arm-none-eabi-gcc + if: ${{ matrix.gcc && matrix.gcc != 'apt' }} + uses: carlosperate/arm-none-eabi-gcc-action@v1 + with: + release: ${{ matrix.gcc }} + path-env-var: ARM_NONE_EABI_GCC_PATH + + - name: Install arm-none-eabi-gcc + if: ${{ matrix.gcc == 'apt' }} + run: | + curl -sL https://raw.githubusercontent.com/ilikenwf/apt-fast/master/quick-install.sh | sudo bash + sudo apt-get update + sudo apt-fast install -y gcc-arm-none-eabi + + - run: ls -la + + - name: Run make + run: make APP_VERSION=${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }} APP_NAME=${{ matrix.platform }} VARIANT="${{ matrix.variant }}" ${{ matrix.platform }} + + - name: Save build assets + uses: actions/upload-artifact@v4 + with: + name: ${{ env.APP_NAME }}_${{ needs.refs.outputs.version }}_${{ matrix.platform }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }} + path: | + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_UA_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.bin + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_UG_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.bin + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_QIO_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.bin + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/OpenBK7231M_QIO_${{ needs.refs.outputs.version }}.bin + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/OpenBK7231M_ALT_QIO_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.bin + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.rbl + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.img + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.bin + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.fls + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}_ota.img + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}_gz.img + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}_OTA.bin + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}_OTA.bin.xz + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}_OTA.bin.xz.ota + if-no-files-found: warn + + build_idf: + name: Build IDF + needs: refs + runs-on: ubuntu-24.04 + strategy: + fail-fast: false + matrix: + include: + - platform: OpenESP32C2 + variant: 2M + version: v5.5.1 + - platform: OpenESP32C3 + variant: 2M + version: v5.5.1 + + - platform: OpenESP32 + variant: 4M + version: v5.5.1 + - platform: OpenESP32C2 + variant: 4M + version: v5.5.1 + - platform: OpenESP32C3 + variant: 4M + version: v5.5.1 + - platform: OpenESP32C6 + variant: 4M + version: v5.5.1 + - platform: OpenESP32S3 + variant: 4M + version: v5.5.1 + - platform: OpenESP32S2 + variant: 4M + version: v5.5.1 + - platform: OpenESP32C5 + variant: 4M + version: v5.5.1 + - platform: OpenESP32C61 + variant: 4M + version: v5.5.1 + steps: + - name: Source checkout + uses: actions/checkout@v4 + - name: SDK checkout + uses: actions/checkout@v4 + with: + repository: espressif/esp-idf + path: sdk/esp-idf + ref: ${{ matrix.version }} + submodules: recursive + - uses: actions/setup-python@v5 + id: pysetup + with: + python-version: '3.10' + architecture: 'x64' + cache: 'pip' + - name: Install dependencies + uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: cmake + version: 1.0 + - name: Cache toolchain + id: cache-toolchain + uses: actions/cache@v4 + with: + path: ~/.espressif # cache whole folder, not just dist + key: ESP-IDF_toolchain_${{ matrix.version }}_${{ steps.pysetup.outputs.python-version }} + - name: Get toolchain + if: steps.cache-toolchain.outputs.cache-hit != 'true' + run: | + cd sdk/esp-idf + ./install.sh + - name: Run make + run: | + cd sdk/esp-idf + . ./export.sh + . ./add_path.sh + cd ../.. + make APP_VERSION=${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }} APP_NAME=${{ matrix.platform }} VARIANT="${{ matrix.variant }}" ${{ matrix.platform }} + - name: Save build assets + uses: actions/upload-artifact@v4 + with: + name: ${{ env.APP_NAME }}_${{ needs.refs.outputs.version }}_${{ matrix.platform }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }} + path: | + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.img + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.factory.bin + if-no-files-found: warn + build_8266: name: Build ESP8266 needs: refs @@ -118,10 +466,44 @@ jobs: output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_2MB_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.factory.bin output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_1MB_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.factory.bin if-no-files-found: warn + + build_txw81x: + name: Build TXW81X + needs: refs + runs-on: windows-latest + defaults: + run: + shell: wsl-bash {0} + strategy: + fail-fast: false + matrix: + include: + - platform: OpenTXW81X + variant: default + steps: + - name: Source checkout + uses: actions/checkout@v4 + - uses: Vampire/setup-wsl@v6 + with: + wsl-version: 1 + distribution: Ubuntu-22.04 + additional-packages: make + - name: Run make + run: | + make APP_VERSION=${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }} APP_NAME=${{ matrix.platform }} VARIANT="${{ matrix.variant }}" ${{ matrix.platform }} + - name: Save build assets + uses: actions/upload-artifact@v4 + with: + name: ${{ env.APP_NAME }}_${{ needs.refs.outputs.version }}_${{ matrix.platform }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }} + path: | + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}.bin + output/${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}/${{ matrix.platform }}_${{ needs.refs.outputs.version }}${{ matrix.variant != 'default' && '_' || '' }}${{ matrix.variant != 'default' && matrix.variant || '' }}_ota.img + if-no-files-found: warn + merge: name: Merge Artifacts runs-on: ubuntu-22.04 - needs: [refs, build_8266] + needs: [refs, build, build2, build_idf, build_8266, build_txw81x] #if: always() && needs.refs.outputs.new_release == 'true' && (github.ref == 'refs/heads/main' || github.ref_name == 'alpha') steps: - name: Merge Artifacts