diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 503a50c5c2..c043c25936 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -345,20 +345,31 @@ jobs: run: script/ci-suggest-changes if: always() + clang-tidy-deps: + name: Clang-tidy dependencies + runs-on: ubuntu-24.04 + needs: + - common + - ci-custom + - clang-format + - pytest + - determine-jobs + if: | + always() && + needs.determine-jobs.outputs.clang-tidy == 'true' + steps: + - run: echo "All clang-tidy dependencies ready" + clang-tidy: name: ${{ matrix.name }} runs-on: ubuntu-24.04 needs: - - common - - ruff - - ci-custom - - clang-format - - flake8 - - pylint - - pytest - - pyupgrade + - clang-tidy-deps - determine-jobs - if: needs.determine-jobs.outputs.clang-tidy == 'true' + if: | + always() && + needs.determine-jobs.outputs.clang-tidy == 'true' && + needs.clang-tidy-deps.result == 'success' env: GH_TOKEN: ${{ github.token }} strategy: @@ -575,6 +586,7 @@ jobs: - pytest - integration-tests - pyupgrade + - clang-tidy-deps - clang-tidy - determine-jobs - test-build-components diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9c7955cc88..203808c88b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,13 @@ --- # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks + +ci: + autoupdate_commit_msg: 'pre-commit: autoupdate' + autoupdate_schedule: weekly + # Skip hooks that have issues in pre-commit CI environment + skip: [pylint, clang-tidy-hash, yamllint] + repos: - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. diff --git a/esphome/components/substitutions/__init__.py b/esphome/components/substitutions/__init__.py index 5c346ea616..e494529b9e 100644 --- a/esphome/components/substitutions/__init__.py +++ b/esphome/components/substitutions/__init__.py @@ -146,8 +146,11 @@ def _substitute_item(substitutions, item, path, jinja, ignore_missing): if sub is not None: item[k] = sub for old, new in replace_keys: - item[new] = merge_config(item.get(old), item.get(new)) - del item[old] + if str(new) == str(old): + item[new] = item[old] + else: + item[new] = merge_config(item.get(old), item.get(new)) + del item[old] elif isinstance(item, str): sub = _expand_substitutions(substitutions, item, path, jinja, ignore_missing) if isinstance(sub, JinjaStr) or sub != item: diff --git a/tests/unit_tests/fixtures/substitutions/00-simple_var.approved.yaml b/tests/unit_tests/fixtures/substitutions/00-simple_var.approved.yaml index c031399c37..f5d2f8aa20 100644 --- a/tests/unit_tests/fixtures/substitutions/00-simple_var.approved.yaml +++ b/tests/unit_tests/fixtures/substitutions/00-simple_var.approved.yaml @@ -17,3 +17,5 @@ test_list: - ${undefined_var} - $undefined_var - ${ undefined_var } + - key1: 1 + key2: 2 diff --git a/tests/unit_tests/fixtures/substitutions/00-simple_var.input.yaml b/tests/unit_tests/fixtures/substitutions/00-simple_var.input.yaml index 88a4ffb991..5717433c7e 100644 --- a/tests/unit_tests/fixtures/substitutions/00-simple_var.input.yaml +++ b/tests/unit_tests/fixtures/substitutions/00-simple_var.input.yaml @@ -19,3 +19,5 @@ test_list: - ${undefined_var} - $undefined_var - ${ undefined_var } + - key${var1}: 1 + key${var2}: 2 diff --git a/tests/unit_tests/fixtures/substitutions/03-closures.approved.yaml b/tests/unit_tests/fixtures/substitutions/03-closures.approved.yaml index c8f7d9976c..dad3be8aa7 100644 --- a/tests/unit_tests/fixtures/substitutions/03-closures.approved.yaml +++ b/tests/unit_tests/fixtures/substitutions/03-closures.approved.yaml @@ -6,6 +6,7 @@ package_result: root file - Double substitution also works; the value of var7 is 79, where A is a package var + - key79: Key should substitute to key79 local_results: - The value of B is 5 - 'You will see, however, that diff --git a/tests/unit_tests/fixtures/substitutions/closures_package.yaml b/tests/unit_tests/fixtures/substitutions/closures_package.yaml index e87908814d..4a0be24b93 100644 --- a/tests/unit_tests/fixtures/substitutions/closures_package.yaml +++ b/tests/unit_tests/fixtures/substitutions/closures_package.yaml @@ -1,3 +1,4 @@ package_result: - The value of A*B is ${A * B}, where A is a package var and B is a substitution in the root file - Double substitution also works; the value of var7 is ${var$A}, where A is a package var + - key${var7}: Key should substitute to key79