diff --git a/.github/workflows/examples_build-host-test.yml b/.github/workflows/examples_build-host-test.yml new file mode 100644 index 000000000..15d30c7cc --- /dev/null +++ b/.github/workflows/examples_build-host-test.yml @@ -0,0 +1,48 @@ +name: "examples: build/host-tests" + +on: + push: + branches: + - master + pull_request: + types: [opened, synchronize, reopened, labeled] + +jobs: + build_all_examples: + if: contains(github.event.pull_request.labels.*.name, 'examples') || github.event_name == 'push' + name: Build examples + strategy: + matrix: + idf_ver: ["latest", "release-v5.1"] + runs-on: ubuntu-20.04 + container: espressif/idf:${{ matrix.idf_ver }} + steps: + - name: Checkout esp-protocols + uses: actions/checkout@v3 + - name: Build with IDF-${{ matrix.idf_ver }} + shell: bash + run: | + . ${IDF_PATH}/export.sh + python -m pip install idf-build-apps + # Build default configs for all targets + python ./ci/build_apps.py examples -m examples/.build-test-rules.yml -d -c + + build_and_run_on_host: + if: contains(github.event.pull_request.labels.*.name, 'examples') || github.event_name == 'push' + name: Build and run examples on linux + strategy: + matrix: + idf_ver: ["latest"] + runs-on: ubuntu-20.04 + container: espressif/idf:${{ matrix.idf_ver }} + steps: + - name: Checkout esp-protocols + uses: actions/checkout@v3 + - name: Build with IDF-${{ matrix.idf_ver }} + shell: bash + run: | + . ${IDF_PATH}/export.sh + python -m pip install idf-build-apps + python ./ci/build_apps.py examples/mqtt -l -t linux + timeout 5 ./examples/mqtt/build_linux_default/esp_mqtt_demo.elf | tee test.log || true + grep 'MQTT_EVENT_DATA' test.log diff --git a/ci/build_apps.py b/ci/build_apps.py index d7aa2e0e6..78127f09b 100644 --- a/ci/build_apps.py +++ b/ci/build_apps.py @@ -26,20 +26,25 @@ if __name__ == '__main__': parser.add_argument('-r', '--rules', nargs='*', default=['sdkconfig.ci=default', 'sdkconfig.ci.*=', '=default'], help='Rules how to treat configs') parser.add_argument('-m', '--manifests', nargs='*', default=[], help='list of manifest files') parser.add_argument('-d', '--delete', action='store_true', help='Delete build artifacts') + parser.add_argument('-c', '--recursive', action='store_true', help='Build recursively') + parser.add_argument('-l', '--linux', action='store_true', help='Include linux build (dont check warnings)') args = parser.parse_args() IDF_PATH = os.environ['IDF_PATH'] - print(args.paths) + ignore_warning = os.environ['EXPECTED_WARNING'] if 'EXPECTED_WARNING' in os.environ else None + if args.linux: + SUPPORTED_TARGETS.append('linux') + ignore_warning = 'warning: ' # Ignore all common warnings on linux builds setup_logging(2) apps = find_apps( args.paths, - recursive=False, + recursive=args.recursive, target=args.target, build_dir='build_@t_@w', config_rules_str=args.rules, build_log_path='build_log.txt', - size_json_path='size.json', + size_json_path='size.json' if not args.linux else None, check_warnings=True, preserve=not args.delete, manifest_files=args.manifests, @@ -54,5 +59,5 @@ if __name__ == '__main__': build_apps(apps, dry_run=False, keep_going=False, - ignore_warning_strs=os.environ['EXPECTED_WARNING'] - if 'EXPECTED_WARNING' in os.environ else None)) + ignore_warning_strs=ignore_warning) + ) diff --git a/examples/.build-test-rules.yml b/examples/.build-test-rules.yml new file mode 100644 index 000000000..ffb926571 --- /dev/null +++ b/examples/.build-test-rules.yml @@ -0,0 +1,3 @@ +examples/esp_netif/multiple_netifs: + disable: + - if: IDF_TARGET != "esp32" diff --git a/examples/mqtt/CMakeLists.txt b/examples/mqtt/CMakeLists.txt index 25cc297c6..49dde1536 100644 --- a/examples/mqtt/CMakeLists.txt +++ b/examples/mqtt/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.16) # For ESP32 platform target set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common) -if(${IDF_TARGET} STREQUAL "linux") +if("${IDF_TARGET}" STREQUAL "linux") # For linux-target we have two options: # - With lwIP (must be defined on command line, e.g. idf.py -DWITH_LWIP=1) # access networking from linux `tap` interface (TAP networking mode) diff --git a/examples/mqtt/sdkconfig.defaults b/examples/mqtt/sdkconfig.defaults index 75186ee56..e69de29bb 100644 --- a/examples/mqtt/sdkconfig.defaults +++ b/examples/mqtt/sdkconfig.defaults @@ -1,2 +0,0 @@ -CONFIG_IDF_TARGET="linux" -# CONFIG_ESP_EVENT_POST_FROM_ISR is not set diff --git a/examples/mqtt/sdkconfig.defaults.esp32h2 b/examples/mqtt/sdkconfig.defaults.esp32h2 new file mode 100644 index 000000000..26ce34bdd --- /dev/null +++ b/examples/mqtt/sdkconfig.defaults.esp32h2 @@ -0,0 +1,3 @@ +CONFIG_IDF_TARGET="esp32h2" +CONFIG_EXAMPLE_CONNECT_WIFI=n +CONFIG_EXAMPLE_CONNECT_ETHERNET=y diff --git a/examples/mqtt/sdkconfig.defaults.linux b/examples/mqtt/sdkconfig.defaults.linux new file mode 100644 index 000000000..75186ee56 --- /dev/null +++ b/examples/mqtt/sdkconfig.defaults.linux @@ -0,0 +1,2 @@ +CONFIG_IDF_TARGET="linux" +# CONFIG_ESP_EVENT_POST_FROM_ISR is not set