idf-build-apps 2.14.0__tar.gz → 2.15.1__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.1}/CHANGELOG.md +27 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/PKG-INFO +1 -1
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/__init__.py +1 -1
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/app.py +10 -4
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/args.py +12 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/main.py +3 -1
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/yaml/parser.py +3 -1
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/pyproject.toml +1 -1
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/setup.py +1 -1
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/tests/test_cmd.py +36 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/tests/test_finder.py +3 -3
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/tests/test_manifest.py +37 -13
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/.editorconfig +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/.git-blame-ignore-revs +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/.gitattributes +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/.github/dependabot.yml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/.github/workflows/publish-pypi.yml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/.github/workflows/sync-jira.yml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/.github/workflows/test-build-docs.yml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/.github/workflows/test-build-idf-apps.yml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/.gitignore +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/.pre-commit-config.yaml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/.readthedocs.yml +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/CONTRIBUTING.md +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/LICENSE +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/README.md +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/_apidoc_templates/module.rst_t +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/_apidoc_templates/package.rst_t +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/_apidoc_templates/toc.rst_t +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/_static/espressif-logo.svg +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/_static/theme_overrides.css +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/_templates/layout.html +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/conf_common.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/Makefile +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/conf.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/explanations/build.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/explanations/build_status.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/explanations/config_rules.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/explanations/dependency_driven_build.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/explanations/find.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/guides/1.x_to_2.x.md +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/guides/custom_app.md +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/index.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/others/CHANGELOG.md +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/others/CONTRIBUTING.md +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/references/cli.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/references/config_file.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/docs/en/references/manifest.rst +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/__main__.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/autocompletions.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/constants.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/finder.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/junit/__init__.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/junit/report.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/junit/utils.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/log.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/manifest/__init__.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/manifest/manifest.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/manifest/soc_header.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/py.typed +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/session_args.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/utils.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/vendors/__init__.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/vendors/pydantic_sources.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/idf_build_apps/yaml/__init__.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/license_header.txt +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/tests/conftest.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/tests/test_app.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/tests/test_args.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/tests/test_build.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/tests/test_disable_reasons.py +0 -0
- {idf_build_apps-2.14.0 → idf_build_apps-2.15.1}/tests/test_utils.py +0 -0
|
@@ -20,6 +20,29 @@
|
|
|
20
20
|
</div>
|
|
21
21
|
<hr>
|
|
22
22
|
|
|
23
|
+
## v2.15.1 (2026-02-04)
|
|
24
|
+
|
|
25
|
+
### 🐛 Bug Fixes
|
|
26
|
+
|
|
27
|
+
- dump-manifest-sha with common_components *(Fu Hanxi - f5e6414)*
|
|
28
|
+
|
|
29
|
+
### 📖 Documentation
|
|
30
|
+
|
|
31
|
+
- fix the changelog *(Fu Hanxi - 13e53c1)*
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## v2.15.0 (2026-01-26)
|
|
35
|
+
|
|
36
|
+
### ✨ New Features
|
|
37
|
+
|
|
38
|
+
- support detection of ESP-IDF build system v2 projects *(Sudeep Mohanty - 16479c0)*
|
|
39
|
+
|
|
40
|
+
### 🐛 Bug Fixes
|
|
41
|
+
|
|
42
|
+
- mock common_components when it is none *(igor.udot - 273e603)*
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
23
46
|
## v2.14.0 (2026-01-16)
|
|
24
47
|
|
|
25
48
|
### ✨ New Features
|
|
@@ -41,6 +64,10 @@
|
|
|
41
64
|
|
|
42
65
|
## v2.13.3 (2025-10-23)
|
|
43
66
|
|
|
67
|
+
### 🏗️ Changes
|
|
68
|
+
|
|
69
|
+
- Remove non-production code
|
|
70
|
+
|
|
44
71
|
---
|
|
45
72
|
|
|
46
73
|
## v2.13.2 (2025-10-23)
|
|
@@ -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):
|
|
@@ -929,6 +929,18 @@ class DumpManifestShaArguments(GlobalArguments):
|
|
|
929
929
|
description='Path to the manifest files which contains the build test rules of the apps',
|
|
930
930
|
default=None, # type: ignore
|
|
931
931
|
)
|
|
932
|
+
common_components: t.Optional[t.List[str]] = field(
|
|
933
|
+
FieldMetadata(
|
|
934
|
+
validate_method=[ValidateMethod.TO_LIST],
|
|
935
|
+
type=semicolon_separated_str_to_list,
|
|
936
|
+
shorthand='-rc',
|
|
937
|
+
),
|
|
938
|
+
description='semicolon-separated list of components. '
|
|
939
|
+
'expand the `- *common_components` placeholder in manifests. '
|
|
940
|
+
'If set to "", the value would be considered as None. '
|
|
941
|
+
'If set to ";", the value would be considered as an empty list.',
|
|
942
|
+
default=None, # type: ignore
|
|
943
|
+
)
|
|
932
944
|
|
|
933
945
|
output: t.Optional[str] = field(
|
|
934
946
|
FieldMetadata(
|
|
@@ -394,7 +394,9 @@ def main():
|
|
|
394
394
|
|
|
395
395
|
if action == 'dump-manifest-sha':
|
|
396
396
|
arguments = DumpManifestShaArguments(**kwargs_without_none)
|
|
397
|
-
Manifest.from_files(arguments.manifest_files).dump_sha_values(
|
|
397
|
+
Manifest.from_files(arguments.manifest_files, common_components=arguments.common_components).dump_sha_values(
|
|
398
|
+
arguments.output
|
|
399
|
+
)
|
|
398
400
|
sys.exit(0)
|
|
399
401
|
|
|
400
402
|
if action == 'find':
|
|
@@ -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.1',
|
|
42
42
|
description='Tools for building ESP-IDF related apps.',
|
|
43
43
|
author=None,
|
|
44
44
|
author_email='Fu Hanxi <fuhanxi@espressif.com>',
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import os
|
|
4
|
+
import subprocess
|
|
4
5
|
import sys
|
|
5
6
|
from pathlib import Path
|
|
6
7
|
from textwrap import dedent
|
|
@@ -73,6 +74,41 @@ foobar:
|
|
|
73
74
|
)
|
|
74
75
|
|
|
75
76
|
|
|
77
|
+
def test_manifest_dump_sha_values_with_common_components():
|
|
78
|
+
Path('.idf_build_apps.toml').write_text(
|
|
79
|
+
"""
|
|
80
|
+
common_components = ["foo", "bar"]
|
|
81
|
+
"""
|
|
82
|
+
)
|
|
83
|
+
Path('test.yml').write_text(
|
|
84
|
+
"""
|
|
85
|
+
foo:
|
|
86
|
+
depends_components:
|
|
87
|
+
- *common_components
|
|
88
|
+
""",
|
|
89
|
+
encoding='utf8',
|
|
90
|
+
)
|
|
91
|
+
subprocess.run(
|
|
92
|
+
['idf-build-apps', 'dump-manifest-sha', '--manifest-files', 'test.yml', '--output', 'test.sha1'], check=True
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
os.remove('.idf_build_apps.toml')
|
|
96
|
+
Path('test2.yml').write_text(
|
|
97
|
+
"""
|
|
98
|
+
foo:
|
|
99
|
+
depends_components:
|
|
100
|
+
- foo
|
|
101
|
+
- bar
|
|
102
|
+
""",
|
|
103
|
+
encoding='utf8',
|
|
104
|
+
)
|
|
105
|
+
subprocess.run(
|
|
106
|
+
['idf-build-apps', 'dump-manifest-sha', '--manifest-files', 'test2.yml', '--output', 'test2.sha1'], check=True
|
|
107
|
+
)
|
|
108
|
+
with open('test.sha1') as f1, open('test2.sha1') as f2:
|
|
109
|
+
assert f1.read() == f2.read()
|
|
110
|
+
|
|
111
|
+
|
|
76
112
|
def test_manifest_patterns(tmp_path, monkeypatch, capsys):
|
|
77
113
|
manifest = tmp_path / 'manifest.yml'
|
|
78
114
|
manifest.write_text(
|
|
@@ -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.1}/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
|