Skip to content

Merge pull request #2004 from pguyot/w48/fix-private_append-corruption #5400

Merge pull request #2004 from pguyot/w48/fix-private_append-corruption

Merge pull request #2004 from pguyot/w48/fix-private_append-corruption #5400

Workflow file for this run

#
# 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