idf-build-apps 2.14.0__tar.gz → 2.15.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/CHANGELOG.md +12 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/PKG-INFO +1 -1
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/__init__.py +1 -1
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/app.py +10 -4
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/yaml/parser.py +3 -1
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/pyproject.toml +1 -1
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/setup.py +1 -1
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_finder.py +3 -3
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_manifest.py +37 -13
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.editorconfig +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.git-blame-ignore-revs +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.gitattributes +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.github/dependabot.yml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.github/workflows/publish-pypi.yml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.github/workflows/sync-jira.yml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.github/workflows/test-build-docs.yml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.github/workflows/test-build-idf-apps.yml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.gitignore +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.pre-commit-config.yaml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.readthedocs.yml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/CONTRIBUTING.md +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/LICENSE +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/README.md +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/_apidoc_templates/module.rst_t +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/_apidoc_templates/package.rst_t +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/_apidoc_templates/toc.rst_t +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/_static/espressif-logo.svg +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/_static/theme_overrides.css +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/_templates/layout.html +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/conf_common.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/Makefile +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/conf.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/explanations/build.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/explanations/build_status.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/explanations/config_rules.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/explanations/dependency_driven_build.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/explanations/find.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/guides/1.x_to_2.x.md +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/guides/custom_app.md +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/index.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/others/CHANGELOG.md +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/others/CONTRIBUTING.md +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/references/cli.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/references/config_file.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/references/manifest.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/__main__.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/args.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/autocompletions.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/constants.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/finder.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/junit/__init__.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/junit/report.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/junit/utils.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/log.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/main.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/manifest/__init__.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/manifest/manifest.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/manifest/soc_header.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/py.typed +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/session_args.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/utils.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/vendors/__init__.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/vendors/pydantic_sources.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/yaml/__init__.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/license_header.txt +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/conftest.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_app.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_args.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_build.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_cmd.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_disable_reasons.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_utils.py +0 -0
|
@@ -20,6 +20,18 @@
|
|
|
20
20
|
</div>
|
|
21
21
|
<hr>
|
|
22
22
|
|
|
23
|
+
## v2.15.0 (2026-01-26)
|
|
24
|
+
|
|
25
|
+
### ✨ New Features
|
|
26
|
+
|
|
27
|
+
- support detection of ESP-IDF build system v2 projects *(Sudeep Mohanty - 16479c0)*
|
|
28
|
+
|
|
29
|
+
### 🐛 Bug Fixes
|
|
30
|
+
|
|
31
|
+
- mock common_components when it is none *(igor.udot - 273e603)*
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
23
35
|
## v2.14.0 (2026-01-16)
|
|
24
36
|
|
|
25
37
|
### ✨ New Features
|
|
@@ -956,7 +956,11 @@ class CMakeApp(App):
|
|
|
956
956
|
|
|
957
957
|
# While ESP-IDF component CMakeLists files can be identified by the presence of 'idf_component_register' string,
|
|
958
958
|
# there is no equivalent for the project CMakeLists files. This seems to be the best option...
|
|
959
|
-
|
|
959
|
+
# Support both build system v1 and v2 patterns
|
|
960
|
+
CMAKE_PROJECT_LINE: t.ClassVar[t.List[str]] = [
|
|
961
|
+
r'include($ENV{IDF_PATH}/tools/cmake/project.cmake)',
|
|
962
|
+
r'include($ENV{IDF_PATH}/tools/cmakev2/idf.cmake)',
|
|
963
|
+
]
|
|
960
964
|
|
|
961
965
|
build_system: Literal['cmake'] = 'cmake' # type: ignore
|
|
962
966
|
|
|
@@ -1064,10 +1068,12 @@ class CMakeApp(App):
|
|
|
1064
1068
|
if not cmakelists_file_content:
|
|
1065
1069
|
return False
|
|
1066
1070
|
|
|
1067
|
-
if
|
|
1068
|
-
|
|
1071
|
+
# Check if any of the supported build system patterns are present
|
|
1072
|
+
for pattern in cls.CMAKE_PROJECT_LINE:
|
|
1073
|
+
if pattern in cmakelists_file_content:
|
|
1074
|
+
return True
|
|
1069
1075
|
|
|
1070
|
-
return
|
|
1076
|
+
return False
|
|
1071
1077
|
|
|
1072
1078
|
|
|
1073
1079
|
class AppDeserializer(BaseModel):
|
|
@@ -77,6 +77,8 @@ def flatten_common_components(manifest_dict: t.Dict):
|
|
|
77
77
|
|
|
78
78
|
flattened: t.List[str] = []
|
|
79
79
|
for item in depends:
|
|
80
|
+
if not item:
|
|
81
|
+
continue
|
|
80
82
|
if isinstance(item, t.List):
|
|
81
83
|
flattened.extend(map(str, item))
|
|
82
84
|
else:
|
|
@@ -89,7 +91,7 @@ def parse(path: PathLike, *, common_components: t.Optional[t.Sequence[str]] = No
|
|
|
89
91
|
common_components_yaml = (
|
|
90
92
|
'.common_components: &common_components\n' + '\n'.join(f' - {component}' for component in common_components)
|
|
91
93
|
if common_components
|
|
92
|
-
else ''
|
|
94
|
+
else '.common_components: &common_components\n null'
|
|
93
95
|
)
|
|
94
96
|
|
|
95
97
|
with open(path, encoding='utf-8') as f:
|
|
@@ -38,7 +38,7 @@ entry_points = \
|
|
|
38
38
|
{'console_scripts': ['idf-build-apps = idf_build_apps:main.main']}
|
|
39
39
|
|
|
40
40
|
setup(name='idf-build-apps',
|
|
41
|
-
version='2.
|
|
41
|
+
version='2.15.0',
|
|
42
42
|
description='Tools for building ESP-IDF related apps.',
|
|
43
43
|
author=None,
|
|
44
44
|
author_email='Fu Hanxi <fuhanxi@espressif.com>',
|
|
@@ -118,9 +118,9 @@ examples/get-started:
|
|
|
118
118
|
yaml_file = tmp_path / 'test.yml'
|
|
119
119
|
yaml_file.write_text(
|
|
120
120
|
f"""
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
{test_dir}:
|
|
122
|
+
enable:
|
|
123
|
+
- if: IDF_TARGET == "esp32s2"
|
|
124
124
|
""",
|
|
125
125
|
encoding='utf8',
|
|
126
126
|
)
|
|
@@ -203,6 +203,30 @@ test5:
|
|
|
203
203
|
'some_3',
|
|
204
204
|
]
|
|
205
205
|
|
|
206
|
+
def test_manifest_empty_common_components(self, tmp_path):
|
|
207
|
+
common_components = None
|
|
208
|
+
|
|
209
|
+
yaml_file = tmp_path / 'test.yml'
|
|
210
|
+
yaml_file.write_text(
|
|
211
|
+
"""
|
|
212
|
+
test5:
|
|
213
|
+
depends_components:
|
|
214
|
+
- *common_components
|
|
215
|
+
- "some_1"
|
|
216
|
+
- "some_2"
|
|
217
|
+
- "some_3"
|
|
218
|
+
|
|
219
|
+
""",
|
|
220
|
+
encoding='utf8',
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
manifest = Manifest.from_file(yaml_file, common_components=common_components)
|
|
224
|
+
assert manifest.depends_components('test5', None, None) == [
|
|
225
|
+
'some_1',
|
|
226
|
+
'some_2',
|
|
227
|
+
'some_3',
|
|
228
|
+
]
|
|
229
|
+
|
|
206
230
|
def test_manifest_switch_clause_with_postfix(self, tmp_path):
|
|
207
231
|
yaml_file = tmp_path / 'test.yml'
|
|
208
232
|
|
|
@@ -240,12 +264,12 @@ test1:
|
|
|
240
264
|
|
|
241
265
|
yaml_file.write_text(
|
|
242
266
|
"""
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
267
|
+
test1:
|
|
268
|
+
depends_components:
|
|
269
|
+
- if: IDF_VERSION == "5.9.0"
|
|
270
|
+
content: [ "VVV" ]
|
|
271
|
+
- default: ["some_1", "some_2", "some_3"]
|
|
272
|
+
- hello: 123
|
|
249
273
|
|
|
250
274
|
""",
|
|
251
275
|
encoding='utf8',
|
|
@@ -258,13 +282,13 @@ test1:
|
|
|
258
282
|
|
|
259
283
|
yaml_file.write_text(
|
|
260
284
|
"""
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
285
|
+
test1:
|
|
286
|
+
depends_components:
|
|
287
|
+
- if: IDF_VERSION == "5.9.0"
|
|
288
|
+
content: [ "VVV" ]
|
|
289
|
+
- default: ["some_1", "some_2", "some_3"]
|
|
290
|
+
- 123
|
|
291
|
+
- 234
|
|
268
292
|
""",
|
|
269
293
|
encoding='utf8',
|
|
270
294
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/explanations/dependency_driven_build.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|