Skip to content

Commit 9a29cc5

Browse files
authored
2025.10.0 (#152881)
2 parents f3b9bda + 55d5e76 commit 9a29cc5

File tree

1,836 files changed

+117153
-21788
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,836 files changed

+117153
-21788
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
---
2+
name: quality-scale-rule-verifier
3+
description: |
4+
Use this agent when you need to verify that a Home Assistant integration follows a specific quality scale rule. This includes checking if the integration implements required patterns, configurations, or code structures defined by the quality scale system.
5+
6+
<example>
7+
Context: The user wants to verify if an integration follows a specific quality scale rule.
8+
user: "Check if the peblar integration follows the config-flow rule"
9+
assistant: "I'll use the quality scale rule verifier to check if the peblar integration properly implements the config-flow rule."
10+
<commentary>
11+
Since the user is asking to verify a quality scale rule implementation, use the quality-scale-rule-verifier agent.
12+
</commentary>
13+
</example>
14+
15+
<example>
16+
Context: The user is reviewing if an integration reaches a specific quality scale level.
17+
user: "Verify that this integration reaches the bronze quality scale"
18+
assistant: "Let me use the quality scale rule verifier to check the bronze quality scale implementation."
19+
<commentary>
20+
The user wants to verify the integration has reached a certain quality level, so use multiple quality-scale-rule-verifier agents to verify each bronze rule.
21+
</commentary>
22+
</example>
23+
model: inherit
24+
color: yellow
25+
tools: Read, Bash, Grep, Glob, WebFetch
26+
---
27+
28+
You are an expert Home Assistant integration quality scale auditor specializing in verifying compliance with specific quality scale rules. You have deep knowledge of Home Assistant's architecture, best practices, and the quality scale system that ensures integration consistency and reliability.
29+
30+
You will verify if an integration follows a specific quality scale rule by:
31+
32+
1. **Fetching Rule Documentation**: Retrieve the official rule documentation from:
33+
`https://raw.githubusercontent.com/home-assistant/developers.home-assistant/refs/heads/master/docs/core/integration-quality-scale/rules/{rule_name}.md`
34+
where `{rule_name}` is the rule identifier (e.g., 'config-flow', 'entity-unique-id', 'parallel-updates')
35+
36+
2. **Understanding Rule Requirements**: Parse the rule documentation to identify:
37+
- Core requirements and mandatory implementations
38+
- Specific code patterns or configurations required
39+
- Common violations and anti-patterns
40+
- Exemption criteria (when a rule might not apply)
41+
- The quality tier this rule belongs to (Bronze, Silver, Gold, Platinum)
42+
43+
3. **Analyzing Integration Code**: Examine the integration's codebase at `homeassistant/components/<integration domain>` focusing on:
44+
- `manifest.json` for quality scale declaration and configuration
45+
- `quality_scale.yaml` for rule status (done, todo, exempt)
46+
- Relevant Python modules based on the rule requirements
47+
- Configuration files and service definitions as needed
48+
49+
4. **Verification Process**:
50+
- Check if the rule is marked as 'done', 'todo', or 'exempt' in quality_scale.yaml
51+
- If marked 'exempt', verify the exemption reason is valid
52+
- If marked 'done', verify the actual implementation matches requirements
53+
- Identify specific files and code sections that demonstrate compliance or violations
54+
- Consider the integration's declared quality tier when applying rules
55+
- To fetch the integration docs, use WebFetch to fetch from `https://raw.githubusercontent.com/home-assistant/home-assistant.io/refs/heads/current/source/_integrations/<integration domain>.markdown`
56+
- To fetch information about a PyPI package, use the URL `https://pypi.org/pypi/<package>/json`
57+
58+
5. **Reporting Findings**: Provide a comprehensive verification report that includes:
59+
- **Rule Summary**: Brief description of what the rule requires
60+
- **Compliance Status**: Clear pass/fail/exempt determination
61+
- **Evidence**: Specific code examples showing compliance or violations
62+
- **Issues Found**: Detailed list of any non-compliance issues with file locations
63+
- **Recommendations**: Actionable steps to achieve compliance if needed
64+
- **Exemption Analysis**: If applicable, whether the exemption is justified
65+
66+
When examining code, you will:
67+
- Look for exact implementation patterns specified in the rule
68+
- Verify all required components are present and properly configured
69+
- Check for common mistakes and anti-patterns
70+
- Consider edge cases and error handling requirements
71+
- Validate that implementations follow Home Assistant conventions
72+
73+
You will be thorough but focused, examining only the aspects relevant to the specific rule being verified. You will provide clear, actionable feedback that helps developers understand both what needs to be fixed and why it matters for integration quality.
74+
75+
If you cannot access the rule documentation or find the integration code, clearly state what information is missing and what you would need to complete the verification.
76+
77+
Remember that quality scale rules are cumulative - Bronze rules apply to all integrations with a quality scale, Silver rules apply to Silver+ integrations, and so on. Always consider the integration's target quality level when determining which rules should be enforced.

.core_files.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ base_platforms: &base_platforms
5858
# Extra components that trigger the full suite
5959
components: &components
6060
- homeassistant/components/alexa/**
61+
- homeassistant/components/analytics/**
6162
- homeassistant/components/application_credentials/**
6263
- homeassistant/components/assist_pipeline/**
6364
- homeassistant/components/auth/**

.devcontainer/devcontainer.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
"PYTHONASYNCIODEBUG": "1"
99
},
1010
"features": {
11+
// Node feature required for Claude Code until fixed https://github.com/anthropics/devcontainer-features/issues/28
12+
"ghcr.io/devcontainers/features/node:1": {},
1113
"ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {},
1214
"ghcr.io/devcontainers/features/github-cli:1": {}
1315
},

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,20 @@
5555
creating the PR. If you're unsure about any of them, don't hesitate to ask.
5656
We're here to help! This is simply a reminder of what we are going to look
5757
for before merging your code.
58+
59+
AI tools are welcome, but contributors are responsible for *fully*
60+
understanding the code before submitting a PR.
5861
-->
5962

63+
- [ ] I understand the code I am submitting and can explain how it works.
6064
- [ ] The code change is tested and works locally.
6165
- [ ] Local tests pass. **Your PR cannot be merged unless tests pass**
6266
- [ ] There is no commented out code in this PR.
6367
- [ ] I have followed the [development checklist][dev-checklist]
6468
- [ ] I have followed the [perfect PR recommendations][perfect-pr]
6569
- [ ] The code has been formatted using Ruff (`ruff format homeassistant tests`)
6670
- [ ] Tests have been added to verify that the new code works.
71+
- [ ] Any generated code has been carefully reviewed for correctness and compliance with project standards.
6772

6873
If user exposed functionality or configuration variables are added/changed:
6974

.github/workflows/builder.yml

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ jobs:
2727
publish: ${{ steps.version.outputs.publish }}
2828
steps:
2929
- name: Checkout the repository
30-
uses: actions/[email protected]
30+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
3131
with:
3232
fetch-depth: 0
3333

3434
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
35-
uses: actions/setup-python@v5.6.0
35+
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
3636
with:
3737
python-version: ${{ env.DEFAULT_PYTHON }}
3838

@@ -69,7 +69,7 @@ jobs:
6969
run: find ./homeassistant/components/*/translations -name "*.json" | tar zcvf translations.tar.gz -T -
7070

7171
- name: Upload translations
72-
uses: actions/[email protected]
72+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
7373
with:
7474
name: translations
7575
path: translations.tar.gz
@@ -90,11 +90,11 @@ jobs:
9090
arch: ${{ fromJson(needs.init.outputs.architectures) }}
9191
steps:
9292
- name: Checkout the repository
93-
uses: actions/[email protected]
93+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
9494

9595
- name: Download nightly wheels of frontend
9696
if: needs.init.outputs.channel == 'dev'
97-
uses: dawidd6/action-download-artifact@v11
97+
uses: dawidd6/action-download-artifact@ac66b43f0e6a346234dd65d4d0c8fbb31cb316e5 # v11
9898
with:
9999
github_token: ${{secrets.GITHUB_TOKEN}}
100100
repo: home-assistant/frontend
@@ -105,7 +105,7 @@ jobs:
105105

106106
- name: Download nightly wheels of intents
107107
if: needs.init.outputs.channel == 'dev'
108-
uses: dawidd6/action-download-artifact@v11
108+
uses: dawidd6/action-download-artifact@ac66b43f0e6a346234dd65d4d0c8fbb31cb316e5 # v11
109109
with:
110110
github_token: ${{secrets.GITHUB_TOKEN}}
111111
repo: OHF-Voice/intents-package
@@ -116,7 +116,7 @@ jobs:
116116

117117
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
118118
if: needs.init.outputs.channel == 'dev'
119-
uses: actions/setup-python@v5.6.0
119+
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
120120
with:
121121
python-version: ${{ env.DEFAULT_PYTHON }}
122122

@@ -175,7 +175,7 @@ jobs:
175175
sed -i "s|pykrakenapi|# pykrakenapi|g" requirements_all.txt
176176
177177
- name: Download translations
178-
uses: actions/[email protected]
178+
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
179179
with:
180180
name: translations
181181

@@ -190,14 +190,15 @@ jobs:
190190
echo "${{ github.sha }};${{ github.ref }};${{ github.event_name }};${{ github.actor }}" > rootfs/OFFICIAL_IMAGE
191191
192192
- name: Login to GitHub Container Registry
193-
uses: docker/[email protected]
193+
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
194194
with:
195195
registry: ghcr.io
196196
username: ${{ github.repository_owner }}
197197
password: ${{ secrets.GITHUB_TOKEN }}
198198

199+
# home-assistant/builder doesn't support sha pinning
199200
- name: Build base image
200-
uses: home-assistant/builder@2025.03.0
201+
uses: home-assistant/builder@2025.09.0
201202
with:
202203
args: |
203204
$BUILD_ARGS \
@@ -242,7 +243,7 @@ jobs:
242243
- green
243244
steps:
244245
- name: Checkout the repository
245-
uses: actions/[email protected]
246+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
246247

247248
- name: Set build additional args
248249
run: |
@@ -256,14 +257,15 @@ jobs:
256257
fi
257258
258259
- name: Login to GitHub Container Registry
259-
uses: docker/[email protected]
260+
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
260261
with:
261262
registry: ghcr.io
262263
username: ${{ github.repository_owner }}
263264
password: ${{ secrets.GITHUB_TOKEN }}
264265

266+
# home-assistant/builder doesn't support sha pinning
265267
- name: Build base image
266-
uses: home-assistant/builder@2025.03.0
268+
uses: home-assistant/builder@2025.09.0
267269
with:
268270
args: |
269271
$BUILD_ARGS \
@@ -279,7 +281,7 @@ jobs:
279281
runs-on: ubuntu-latest
280282
steps:
281283
- name: Checkout the repository
282-
uses: actions/[email protected]
284+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
283285

284286
- name: Initialize git
285287
uses: home-assistant/actions/helpers/git-init@master
@@ -321,23 +323,23 @@ jobs:
321323
registry: ["ghcr.io/home-assistant", "docker.io/homeassistant"]
322324
steps:
323325
- name: Checkout the repository
324-
uses: actions/[email protected]
326+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
325327

326328
- name: Install Cosign
327-
uses: sigstore/cosign-installer@v3.9.2
329+
uses: sigstore/cosign-installer@d7543c93d881b35a8faa02e8e3605f69b7a1ce62 # v3.10.0
328330
with:
329331
cosign-release: "v2.2.3"
330332

331333
- name: Login to DockerHub
332334
if: matrix.registry == 'docker.io/homeassistant'
333-
uses: docker/[email protected]
335+
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
334336
with:
335337
username: ${{ secrets.DOCKERHUB_USERNAME }}
336338
password: ${{ secrets.DOCKERHUB_TOKEN }}
337339

338340
- name: Login to GitHub Container Registry
339341
if: matrix.registry == 'ghcr.io/home-assistant'
340-
uses: docker/[email protected]
342+
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
341343
with:
342344
registry: ghcr.io
343345
username: ${{ github.repository_owner }}
@@ -454,15 +456,15 @@ jobs:
454456
if: github.repository_owner == 'home-assistant' && needs.init.outputs.publish == 'true'
455457
steps:
456458
- name: Checkout the repository
457-
uses: actions/[email protected]
459+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
458460

459461
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
460-
uses: actions/setup-python@v5.6.0
462+
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
461463
with:
462464
python-version: ${{ env.DEFAULT_PYTHON }}
463465

464466
- name: Download translations
465-
uses: actions/[email protected]
467+
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
466468
with:
467469
name: translations
468470

@@ -480,7 +482,7 @@ jobs:
480482
python -m build
481483
482484
- name: Upload package to PyPI
483-
uses: pypa/gh-action-pypi-publish@v1.12.4
485+
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
484486
with:
485487
skip-existing: true
486488

@@ -531,7 +533,7 @@ jobs:
531533

532534
- name: Generate artifact attestation
533535
if: needs.init.outputs.channel != 'dev' && needs.init.outputs.publish == 'true'
534-
uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0
536+
uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0
535537
with:
536538
subject-name: ${{ env.HASSFEST_IMAGE_NAME }}
537539
subject-digest: ${{ steps.push.outputs.digest }}

0 commit comments

Comments
 (0)