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.
Files changed (72) hide show
  1. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/CHANGELOG.md +12 -0
  2. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/PKG-INFO +1 -1
  3. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/__init__.py +1 -1
  4. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/app.py +10 -4
  5. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/yaml/parser.py +3 -1
  6. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/pyproject.toml +1 -1
  7. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/setup.py +1 -1
  8. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_finder.py +3 -3
  9. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_manifest.py +37 -13
  10. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.editorconfig +0 -0
  11. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.git-blame-ignore-revs +0 -0
  12. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.gitattributes +0 -0
  13. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.github/dependabot.yml +0 -0
  14. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.github/workflows/publish-pypi.yml +0 -0
  15. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.github/workflows/sync-jira.yml +0 -0
  16. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.github/workflows/test-build-docs.yml +0 -0
  17. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.github/workflows/test-build-idf-apps.yml +0 -0
  18. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.gitignore +0 -0
  19. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.pre-commit-config.yaml +0 -0
  20. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/.readthedocs.yml +0 -0
  21. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/CONTRIBUTING.md +0 -0
  22. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/LICENSE +0 -0
  23. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/README.md +0 -0
  24. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/_apidoc_templates/module.rst_t +0 -0
  25. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/_apidoc_templates/package.rst_t +0 -0
  26. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/_apidoc_templates/toc.rst_t +0 -0
  27. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/_static/espressif-logo.svg +0 -0
  28. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/_static/theme_overrides.css +0 -0
  29. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/_templates/layout.html +0 -0
  30. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/conf_common.py +0 -0
  31. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/Makefile +0 -0
  32. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/conf.py +0 -0
  33. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/explanations/build.rst +0 -0
  34. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/explanations/build_status.rst +0 -0
  35. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/explanations/config_rules.rst +0 -0
  36. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/explanations/dependency_driven_build.rst +0 -0
  37. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/explanations/find.rst +0 -0
  38. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/guides/1.x_to_2.x.md +0 -0
  39. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/guides/custom_app.md +0 -0
  40. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/index.rst +0 -0
  41. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/others/CHANGELOG.md +0 -0
  42. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/others/CONTRIBUTING.md +0 -0
  43. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/references/cli.rst +0 -0
  44. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/references/config_file.rst +0 -0
  45. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/docs/en/references/manifest.rst +0 -0
  46. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/__main__.py +0 -0
  47. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/args.py +0 -0
  48. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/autocompletions.py +0 -0
  49. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/constants.py +0 -0
  50. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/finder.py +0 -0
  51. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/junit/__init__.py +0 -0
  52. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/junit/report.py +0 -0
  53. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/junit/utils.py +0 -0
  54. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/log.py +0 -0
  55. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/main.py +0 -0
  56. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/manifest/__init__.py +0 -0
  57. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/manifest/manifest.py +0 -0
  58. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/manifest/soc_header.py +0 -0
  59. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/py.typed +0 -0
  60. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/session_args.py +0 -0
  61. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/utils.py +0 -0
  62. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/vendors/__init__.py +0 -0
  63. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/vendors/pydantic_sources.py +0 -0
  64. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/idf_build_apps/yaml/__init__.py +0 -0
  65. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/license_header.txt +0 -0
  66. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/conftest.py +0 -0
  67. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_app.py +0 -0
  68. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_args.py +0 -0
  69. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_build.py +0 -0
  70. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_cmd.py +0 -0
  71. {idf_build_apps-2.14.0 → idf_build_apps-2.15.0}/tests/test_disable_reasons.py +0 -0
  72. {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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: idf-build-apps
3
- Version: 2.14.0
3
+ Version: 2.15.0
4
4
  Summary: Tools for building ESP-IDF related apps.
5
5
  Author-email: Fu Hanxi <fuhanxi@espressif.com>
6
6
  Requires-Python: >=3.7
@@ -8,7 +8,7 @@ Tools for building ESP-IDF related apps.
8
8
  # ruff: noqa: E402
9
9
  # avoid circular imports
10
10
 
11
- __version__ = '2.14.0'
11
+ __version__ = '2.15.0'
12
12
 
13
13
  from .session_args import (
14
14
  SessionArgs,
@@ -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
- CMAKE_PROJECT_LINE: t.ClassVar[str] = r'include($ENV{IDF_PATH}/tools/cmake/project.cmake)'
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 cls.CMAKE_PROJECT_LINE not in cmakelists_file_content:
1068
- return False
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 True
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:
@@ -65,7 +65,7 @@ idf-build-apps = "idf_build_apps:main.main"
65
65
 
66
66
  [tool.commitizen]
67
67
  name = "czespressif"
68
- version = "2.14.0"
68
+ version = "2.15.0"
69
69
 
70
70
  tag_format = "v$version"
71
71
  version_scheme = "pep440"
@@ -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.14.0',
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
- {test_dir}:
122
- enable:
123
- - if: IDF_TARGET == "esp32s2"
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
- test1:
244
- depends_components:
245
- - if: IDF_VERSION == "5.9.0"
246
- content: [ "VVV" ]
247
- - default: ["some_1", "some_2", "some_3"]
248
- - hello: 123
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
- test1:
262
- depends_components:
263
- - if: IDF_VERSION == "5.9.0"
264
- content: [ "VVV" ]
265
- - default: ["some_1", "some_2", "some_3"]
266
- - 123
267
- - 234
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