Skip to content

app_config.yml

Every key of the project's app_config.yml, its default and which script reads it.

The file sits in the project directory (Project layout). The shell scripts read it through config_loader.sh; generate_matrix.py and get_app_info.py read it with PyYAML.

Example

---
version: "1.0"
metadata:
  project: "ESP32 TMC9660 Driver Examples"
  default_app: "bldc_comprehensive_test"
  default_build_type: "Release"
  target: "esp32c6"
  idf_versions: ["release/v5.5", "release/v5.4"]
  build_types: [["Debug", "Release"], ["Debug"]]

apps:
  bldc_comprehensive_test:
    description: "BLDC motor test with Hall sensors and velocity control"
    source_file: "bldc_comprehensive_test.cpp"
    idf_versions: ["release/v5.5"]
    build_types: ["Debug", "Release"]
    ci_enabled: true
    featured: true

build_config:
  build_directory_pattern: "build-app-{app_type}-type-{build_type}-target-{target}-idf-{idf_version}"
  project_name_pattern: "esp32_{app_type}_app"

ci_config:
  exclude_combinations:
    - {app_name: bldc_comprehensive_test, build_type: Release}

metadata

Key Default Read by Meaning
default_app none build_app.sh, flash_app.sh App used when no app is given
default_build_type none build_app.sh, flash_app.sh Build type used when none is given
target esp32c6 (generate_matrix.py) all Chip passed to ESP-IDF (IDF_TARGET)
idf_versions ["release/v5.5"] all ESP-IDF branches or tags; the first is the default and is installed first
build_types [["Debug", "Release"]] all One list per entry of idf_versions, by position
project none none (descriptive) Project title

apps.<name>

The key is the app name used on the command line (gpio_test) and passed to CMake as APP_TYPE.

Key Default Meaning
source_file required (or source_files) File passed to CMake as APP_SOURCE_FILE
source_files none A list; the first entry is passed as APP_SOURCE_FILE
description none Shown by build_app.sh list; generate_matrix.py --validate warns when missing
idf_versions metadata.idf_versions ESP-IDF versions for this app
build_types from metadata A flat list for every version, or one list per version
ci_enabled true false leaves the app out of the CI matrix
featured false Listed first by build_app.sh list and flash_app.sh list (with yq)
target metadata.target Read only by idf_flash_monitor.sh; build_app.sh and the matrix use metadata.target
category, tags, dependencies none Descriptive; no script reads them

build_config

Key Meaning
build_directory_pattern Build folder name under builds/, with {app_type}, {build_type}, {target}, {idf_version}
project_name_pattern ESP-IDF project name, with {app_type}; used to find the .bin to flash
build_types.<name> Descriptive (flags, defines); CMake sets the real flags

A pattern that is missing or empty falls back to its default, with or without yq: build-app-{app_type}-type-{build_type}-target-{target}-idf-{idf_version} and esp32_iid_{app_type}_app. Without yq the scripts always use these defaults and ignore the keys.

ci_config

Key Meaning
exclude_combinations Matrix entries to drop: an entry is dropped when every key of an item matches (app_name, build_type, idf_version, target)

Other keys under ci_config (timeout_minutes, fail_fast, special_apps) are not read; the CI workflow sets its own timeout and fail-fast: false.

How the matrix and the local scripts agree

build_app.sh refuses a combination the configuration does not allow (is_valid_combination in config_loader.sh), and generate_matrix.py emits exactly the allowed combinations. When an ESP-IDF version is not given, build_app.sh picks the first version of the app whose build types include the requested one.

Keep arrays on one line without yq

The fallback parser reads idf_versions and build_types from a single line, and reads app names between apps: and build_config:. Write arrays in the inline form shown above and keep build_config after apps.