Merge pull request #2004 from pguyot/w48/fix-private_append-corruption #5400
This file contains hidden or 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
| # | |
| # Copyright 2022 Davide Bettio <davide@uninstall.it> | |
| # | |
| # SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later | |
| # | |
| name: ESP32 Builds | |
| on: | |
| push: | |
| paths: | |
| - '.github/workflows/esp32-build.yaml' | |
| - 'CMakeLists.txt' | |
| - 'CMakeModules/**' | |
| - 'libs/**' | |
| - 'src/platforms/esp32/**' | |
| - 'src/platforms/esp32/**/**' | |
| - 'src/libAtomVM/**' | |
| - 'tools/packbeam/**' | |
| pull_request: | |
| paths: | |
| - '.github/workflows/esp32-build.yaml' | |
| - 'CMakeLists.txt' | |
| - 'CMakeModules/**' | |
| - 'libs/**' | |
| - 'src/platforms/esp32/**' | |
| - 'src/platforms/esp32/**/**' | |
| - 'src/libAtomVM/**' | |
| - 'tools/packbeam/**' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref != 'refs/heads/main' && github.ref || github.run_id }} | |
| cancel-in-progress: true | |
| jobs: | |
| esp-idf: | |
| runs-on: ubuntu-24.04 | |
| container: espressif/idf:${{ matrix.idf-version }} | |
| permissions: | |
| actions: read | |
| contents: read | |
| security-events: write | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| esp-idf-target: ["esp32", "esp32c3", "esp32p4"] | |
| language: ['cpp'] | |
| idf-version: | |
| - 'v5.1.6' | |
| - 'v5.2.6' | |
| - 'v5.3.4' | |
| - 'v5.4.3' | |
| - 'v5.5.1' | |
| exclude: | |
| - esp-idf-target: "esp32c3" | |
| idf-version: 'v5.1.6' | |
| - esp-idf-target: "esp32p4" | |
| idf-version: 'v5.1.6' | |
| - esp-idf-target: "esp32p4" | |
| idf-version: 'v5.2.6' | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@v4 | |
| - name: "Git config safe.directory for codeql" | |
| run: git config --global --add safe.directory /__w/AtomVM/AtomVM | |
| - name: "Initialize CodeQL" | |
| uses: github/codeql-action/init@v3 | |
| with: | |
| languages: ${{matrix.language}} | |
| build-mode: manual | |
| queries: +./code-queries/term-to-non-term-func.ql,./code-queries/non-term-to-term-func.ql | |
| - name: Build with idf.py | |
| shell: bash | |
| working-directory: ./src/platforms/esp32/ | |
| run: | | |
| . $IDF_PATH/export.sh | |
| export IDF_TARGET=${{matrix.esp-idf-target}} | |
| idf.py set-target ${{matrix.esp-idf-target}} | |
| idf.py build | |
| idf.py size | |
| - name: Print component size info with idf.py | |
| shell: bash | |
| working-directory: ./src/platforms/esp32/ | |
| run: | | |
| . $IDF_PATH/export.sh | |
| idf.py size-components | |
| - name: "Perform CodeQL Analysis" | |
| uses: github/codeql-action/analyze@v3 | |
| - name: Install dependencies to build host AtomVM and run qemu | |
| run: | | |
| set -eu | |
| apt update | |
| DEBIAN_FRONTEND=noninteractive apt install -y -q \ | |
| doxygen libglib2.0-0 libpixman-1-0 \ | |
| gcc g++ zlib1g-dev libsdl2-2.0-0 libslirp0 libmbedtls-dev | |
| - name: "Set ImageOS for erlef/setup-beam" | |
| run: | | |
| sed -n -E -e 's|VERSION_ID="(.+)\..+"|ImageOS=ubuntu\1|p' /etc/os-release >> ${GITHUB_ENV} | |
| - uses: erlef/setup-beam@v1 | |
| with: | |
| otp-version: "28" | |
| elixir-version: "1.19" | |
| rebar3-version: "3.25.1" | |
| gleam-version: "1.11.1" | |
| hexpm-mirrors: | | |
| https://builds.hex.pm | |
| https://repo.hex.pm | |
| https://cdn.jsdelivr.net/hex | |
| - name: Install qemu binary from espressif/qemu esp32 | |
| if: runner.arch != 'ARM64' && runner.os == 'Linux' && matrix.esp-idf-target == 'esp32' | |
| run: | | |
| set -eu | |
| QEMU_VER=esp-develop-9.0.0-20240606 | |
| QEMU_XTENSA_DIST=qemu-xtensa-softmmu-esp_develop_9.0.0_20240606-x86_64-linux-gnu.tar.xz | |
| QEMU_XTENSA_SHA256=071d117c44a6e9a1bc8664ab63b592d3e17ceb779119dcb46c59571a4a7a88c9 | |
| wget --no-verbose https://github.com/espressif/qemu/releases/download/${QEMU_VER}/${QEMU_XTENSA_DIST} | |
| echo "${QEMU_XTENSA_SHA256} *${QEMU_XTENSA_DIST}" | sha256sum --check --strict - | |
| tar -xf ${QEMU_XTENSA_DIST} -C /opt && rm ${QEMU_XTENSA_DIST} | |
| - name: Install qemu binary from espressif/qemu esp32c3 | |
| if: runner.arch != 'ARM64' && runner.os == 'Linux' && matrix.esp-idf-target == 'esp32c3' | |
| run: | | |
| set -eu | |
| QEMU_VER=esp-develop-9.0.0-20240606 | |
| QEMU_RISCV32_DIST=qemu-riscv32-softmmu-esp_develop_9.0.0_20240606-x86_64-linux-gnu.tar.xz | |
| QEMU_RISCV32_SHA256=47120e826cfec7180db8cb611a7a4aed2e9b2191c2a739194f8ce085e63cdd8d | |
| wget --no-verbose https://github.com/espressif/qemu/releases/download/${QEMU_VER}/${QEMU_RISCV32_DIST} | |
| echo "${QEMU_RISCV32_SHA256} *${QEMU_RISCV32_DIST}" | sha256sum --check --strict - | |
| tar -xf ${QEMU_RISCV32_DIST} -C /opt && rm ${QEMU_RISCV32_DIST} | |
| - name: Install qemu binary from espressif/qemu ARM64 esp32 | |
| if: runner.arch == 'ARM64' && runner.os == 'Linux' && matrix.esp-idf-target == 'esp32' | |
| run: | | |
| set -eu | |
| QEMU_VER=esp-develop-9.0.0-20240606 | |
| QEMU_XTENSA_DIST=qemu-xtensa-softmmu-esp_develop_9.0.0_20240606-aarch64-linux-gnu.tar.xz | |
| QEMU_XTENSA_SHA256=43552f32b303a6820d0d9551903e54fc221aca98ccbd04e5cbccbca881548008 | |
| wget --no-verbose https://github.com/espressif/qemu/releases/download/${QEMU_VER}/${QEMU_XTENSA_DIST} | |
| echo "${QEMU_XTENSA_SHA256} *${QEMU_XTENSA_DIST}" | sha256sum --check --strict - | |
| tar -xf ${QEMU_XTENSA_DIST} -C /opt && rm ${QEMU_XTENSA_DIST} | |
| - name: Install qemu binary from espressif/qemu ARM64 esp32c3 | |
| if: runner.arch == 'ARM64' && runner.os == 'Linux' && matrix.esp-idf-target == 'esp32c3' | |
| run: | | |
| set -eu | |
| QEMU_VER=esp-develop-9.0.0-20240606 | |
| QEMU_RISCV32_DIST=qemu-riscv32-softmmu-esp_develop_9.0.0_20240606-aarch64-linux-gnu.tar.xz | |
| QEMU_RISCV32_SHA256=3b6221a8b1881d2c9b9fa0b0bf8d7065c84153d2a54e429307bde9feae235c27 | |
| wget --no-verbose https://github.com/espressif/qemu/releases/download/${QEMU_VER}/${QEMU_RISCV32_DIST} | |
| echo "${QEMU_RISCV32_SHA256} *${QEMU_RISCV32_DIST}" | sha256sum --check --strict - | |
| tar -xf ${QEMU_RISCV32_DIST} -C /opt && rm ${QEMU_RISCV32_DIST} | |
| - name: Install pytest and pytest-embedded plugins | |
| # ESP32P4 is not currently supported by espressif/qemu, but an issue has been opened | |
| # (https://github.com/espressif/qemu/issues/127) and marked as "todo" status, but no | |
| # expected timeline is available yet. | |
| # TODO: remove the following exclusion when ESP32P4 support is added to espressif/qemu | |
| if: matrix.esp-idf-target != 'esp32p4' | |
| run: | | |
| set -e | |
| . $IDF_PATH/export.sh | |
| pip install pytest==8.2.2 \ | |
| pytest-embedded==1.10.3 \ | |
| pytest-embedded-serial-esp==1.10.3 \ | |
| pytest-embedded-idf==1.10.3 \ | |
| pytest-embedded-qemu==1.10.3 | |
| - name: Build ESP32 tests using idf.py with memory checks | |
| # TODO: remove the following exclusion when ESP32P4 support is added to espressif/qemu | |
| if: matrix.esp-idf-target != 'esp32p4' | |
| working-directory: ./src/platforms/esp32/test/ | |
| run: | | |
| set -e | |
| export PATH=${PATH}:${HOME}/.cache/rebar3/bin | |
| cp sdkconfig.defaults sdkconfig.defaults.backup | |
| echo "CONFIG_COMPILER_STACK_CHECK_MODE_ALL=y" >> sdkconfig.defaults | |
| echo "CONFIG_COMPILER_STACK_CHECK=y" >> sdkconfig.defaults | |
| echo "CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=y" >> sdkconfig.defaults | |
| echo "CONFIG_HEAP_POISONING_COMPREHENSIVE=y" >> sdkconfig.defaults | |
| echo "CONFIG_ESP_WIFI_IRAM_OPT=n" >> sdkconfig.defaults | |
| echo "CONFIG_ESP_WIFI_RX_IRAM_OPT=n" >> sdkconfig.defaults | |
| . $IDF_PATH/export.sh | |
| export IDF_TARGET=${{matrix.esp-idf-target}} | |
| idf.py set-target ${{matrix.esp-idf-target}} | |
| idf.py build | |
| - name: Run ESP32 tests using qemu with memory checks build | |
| # TODO: remove the following exclusion when ESP32P4 support is added to espressif/qemu | |
| if: matrix.esp-idf-target != 'esp32p4' | |
| working-directory: ./src/platforms/esp32/test/ | |
| timeout-minutes: 10 | |
| run: | | |
| set -e | |
| . $IDF_PATH/export.sh | |
| export PATH=/opt/qemu/bin:${PATH} | |
| pytest --target=${{matrix.esp-idf-target}} --embedded-services=idf,qemu -s | |
| idf.py clean | |
| cp sdkconfig.defaults.backup sdkconfig.defaults | |
| - name: Build ESP32 tests using idf.py | |
| # TODO: remove the following exclusion when ESP32P4 support is added to espressif/qemu | |
| if: matrix.esp-idf-target != 'esp32p4' | |
| working-directory: ./src/platforms/esp32/test/ | |
| run: | | |
| set -e | |
| . $IDF_PATH/export.sh | |
| export IDF_TARGET=${{matrix.esp-idf-target}} | |
| export PATH=${PATH}:${HOME}/.cache/rebar3/bin | |
| idf.py set-target ${{matrix.esp-idf-target}} | |
| idf.py build | |
| - name: Run ESP32 tests using qemu | |
| # TODO: remove the following exclusion when ESP32P4 support is added to espressif/qemu | |
| if: matrix.esp-idf-target != 'esp32p4' | |
| working-directory: ./src/platforms/esp32/test/ | |
| timeout-minutes: 10 | |
| run: | | |
| set -e | |
| . $IDF_PATH/export.sh | |
| export PATH=/opt/qemu/bin:${PATH} | |
| pytest --target=${{matrix.esp-idf-target}} --embedded-services=idf,qemu -s |