Build Commands
Reference for the idf-ci build command group, which builds applications and manages .idf_build_apps.toml.
build run
Build applications based on paths and filter options:
idf-ci build run [OPTIONS]
Options:
-p, --paths PATHS- Directories to process (can pass multiple times; default: current directory)-t, --target TARGET- Target chip to process (default: all)--parallel-count COUNT- Total number of parallel build jobs--parallel-index INDEX- Index of this parallel build job (1-based)--modified-files FILES- Semicolon-separated list of modified files--only-test-related- Build only applications needed by tests--only-non-test-related- Build only applications not needed by tests--dry-run- Print which apps would build without compiling them--build-system SYSTEM- Filter apps by build system (“cmake”, “make”, or a custom App class)-m, --marker-expr EXPR- Pytest marker expression to select test apps-k, --filter-expr EXPR- Pytest filter expression to select test apps
Examples:
# Build all applications
idf-ci build run
# Build applications in specific directories
idf-ci build run -p app1 -p app2
# Build for a specific target
idf-ci build run --target esp32
# Build only test-related applications
idf-ci build run --only-test-related
# Preview build list without compiling (dry-run)
idf-ci build run --dry-run
# Build using parallel jobs (job 1 of 4)
idf-ci build run --parallel-count 4 --parallel-index 1
build init
Create a starter build configuration file (.idf_build_apps.toml) with default settings:
idf-ci build init [OPTIONS]
Options:
--path PATH- Directory or file path where the config file is created
Examples:
# Create .idf_build_apps.toml in current directory
idf-ci build init
# Create config file in a specific directory
idf-ci build init --path /path/to/project
build collect
Collect all applications and their test cases, and output the report in JSON or HTML format:
idf-ci build collect [OPTIONS]
Options:
-p, --paths PATHS- Directories to search for applications (default: current directory)-o, --output OUTPUT- File path to write the output to (default: print to stdout)--format [json|html]- Output format (default:json)--include-only-enabled-apps- Include only enabled applications
Output format (JSON):
{
"summary": {
"total_projects": 1,
"total_apps": 1,
"total_test_cases": 4,
"total_test_cases_used": 1,
"total_test_cases_disabled": 2,
"total_test_cases_missing_app": 1
},
"projects": {
"path/to/project": {
"apps": [
{
"target": "esp32",
"config": "release",
"build_status": "should be built",
"build_comment": "",
"test_comment": "Disabled by manifest rule: IDF_TARGET == \"esp32\" (reason: Disabled test for esp32)",
"test_cases": [
{
"name": "test_case_1",
"caseid": "esp32.release.test_case_1"
},
{
"name": "test_case_2",
"caseid": "esp32.release.test_case_2",
"disabled": true,
"disabled_by_manifest": false,
"disabled_by_marker": true,
"skip_reason": "skipped by marker"
},
{
"name": "test_case_3",
"caseid": "esp32.release.test_case_3",
"disabled": true,
"disabled_by_manifest": true,
"disabled_by_marker": false,
"test_comment": "Disabled by manifest rule: IDF_TARGET == \"esp32\" (reason: Disabled test for esp32)"
}
]
}
],
"missing_apps": [
{
"target": "esp32",
"config": "release",
"test_cases": [
{
"name": "test_case_4",
"caseid": "esp32.release.test_case_4"
}
]
}
]
}
}
}
Examples:
# Collect applications in current directory
idf-ci build collect
# Collect applications in specified directories
idf-ci build collect -p dir1 -p dir2
# Save report to a JSON file
idf-ci build collect -o output.json
# Generate an HTML report
idf-ci build collect --format html -o report.html
# Collect only enabled applications
idf-ci build collect --include-only-enabled-apps