Compare commits

..

No commits in common. "main" and "v0.32.0" have entirely different histories.

13 changed files with 1370 additions and 2074 deletions

View file

@ -21,9 +21,9 @@
"integrity": "sha256:586c9a6f7dd40bd3ba2cd41e7f2f88dcc31fbe5d1442afcbf07ffbc66b686857" "integrity": "sha256:586c9a6f7dd40bd3ba2cd41e7f2f88dcc31fbe5d1442afcbf07ffbc66b686857"
}, },
"ghcr.io/devcontainers/features/rust:1": { "ghcr.io/devcontainers/features/rust:1": {
"version": "1.5.1", "version": "1.5.0",
"resolved": "ghcr.io/devcontainers/features/rust@sha256:f7afd923fd283db88ca961342ae65ea63a8c95bcf86e42c4c363f43bc4ba26a5", "resolved": "ghcr.io/devcontainers/features/rust@sha256:0c55e65f2e3df736e478f26ee4d5ed41bae6b54dac1318c443e31444c8ed283c",
"integrity": "sha256:f7afd923fd283db88ca961342ae65ea63a8c95bcf86e42c4c363f43bc4ba26a5" "integrity": "sha256:0c55e65f2e3df736e478f26ee4d5ed41bae6b54dac1318c443e31444c8ed283c"
}, },
"ghcr.io/flexwie/devcontainer-features/op:1": { "ghcr.io/flexwie/devcontainer-features/op:1": {
"version": "1.0.0", "version": "1.0.0",

View file

@ -35,9 +35,7 @@
"ms-vscode-remote.remote-containers", "ms-vscode-remote.remote-containers",
"redhat.vscode-yaml", "redhat.vscode-yaml",
"ryanluker.vscode-coverage-gutters", "ryanluker.vscode-coverage-gutters",
"MermaidChart.vscode-mermaid-chart", "MermaidChart.vscode-mermaid-chart"
"Anthropic.claude-code",
"openai.chatgpt"
], ],
"settings": { "settings": {
"editor.tabSize": 4, "editor.tabSize": 4,

View file

@ -9,7 +9,6 @@ on:
permissions: permissions:
contents: write contents: write
actions: write # Needed to explicitly dispatch release.yml (see note below)
concurrency: concurrency:
group: ${{ github.workflow }} group: ${{ github.workflow }}
@ -21,7 +20,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v7.0.1 uses: actions/checkout@v7
with: with:
fetch-depth: 0 # Need full history for git describe fetch-depth: 0 # Need full history for git describe
@ -67,22 +66,6 @@ jobs:
echo "✅ Created and pushed tag: $TAG" echo "✅ Created and pushed tag: $TAG"
- name: Trigger release notes workflow
if: steps.tag_check.outputs.exists == 'false'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG="v${{ steps.manifest.outputs.version }}"
# NOTE: Tag pushes made with the default GITHUB_TOKEN do NOT trigger
# other workflows (GitHub's built-in recursion guard). Since we just
# pushed the tag above using GITHUB_TOKEN, release.yml's
# `push: tags: v*.*.*` trigger will NOT fire on its own.
# workflow_dispatch/repository_dispatch are exempt from that guard,
# so we explicitly dispatch release.yml here instead.
echo "::notice::Explicitly dispatching release.yml for $TAG (tag push via GITHUB_TOKEN does not auto-trigger workflows)"
gh workflow run release.yml --ref "$TAG" -f tag="$TAG"
- name: Summary - name: Summary
run: | run: |
if [ "${{ steps.tag_check.outputs.exists }}" = "true" ]; then if [ "${{ steps.tag_check.outputs.exists }}" = "true" ]; then

View file

@ -29,7 +29,7 @@ jobs:
name: github-pages name: github-pages
url: ${{ steps.deployment.outputs.page_url }} url: ${{ steps.deployment.outputs.page_url }}
steps: steps:
- uses: actions/checkout@v7.0.1 - uses: actions/checkout@v7
with: with:
fetch-depth: 0 # Needed for version timestamps fetch-depth: 0 # Needed for version timestamps
@ -44,7 +44,7 @@ jobs:
echo "Stable tag or branch: ${GITHUB_REF}" echo "Stable tag or branch: ${GITHUB_REF}"
fi fi
- uses: actions/setup-node@v7 - uses: actions/setup-node@v6
with: with:
node-version: 24 node-version: 24
cache: "npm" cache: "npm"
@ -54,7 +54,7 @@ jobs:
# VERIFY GENERATED DOCS # VERIFY GENERATED DOCS
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v7 uses: actions/setup-python@v6
with: with:
python-version: "3.14" python-version: "3.14"

View file

@ -26,15 +26,15 @@ jobs:
runs-on: "ubuntu-latest" runs-on: "ubuntu-latest"
steps: steps:
- name: Checkout the repository - name: Checkout the repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up Python - name: Set up Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with: with:
python-version: "3.14" python-version: "3.14"
- name: Install uv - name: Install uv
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with: with:
version: "0.9.3" version: "0.9.3"

View file

@ -27,7 +27,7 @@ jobs:
version: ${{ steps.tag.outputs.version }} version: ${{ steps.tag.outputs.version }}
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v7.0.1 uses: actions/checkout@v7
with: with:
fetch-depth: 0 fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@ -106,7 +106,7 @@ jobs:
needs: sync-manifest # Wait for manifest sync to complete needs: sync-manifest # Wait for manifest sync to complete
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v7.0.1 uses: actions/checkout@v7
with: with:
fetch-depth: 0 # Fetch all history for git-cliff fetch-depth: 0 # Fetch all history for git-cliff
ref: main # Use updated main branch if manifest was synced ref: main # Use updated main branch if manifest was synced

View file

@ -29,10 +29,10 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout the repository - name: Checkout the repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Run hassfest validation - name: Run hassfest validation
uses: home-assistant/actions/hassfest@e3fb68ebda13d88a0d695082f471ba2c83d025fb # master uses: home-assistant/actions/hassfest@f4ca6f671bd429efb108c0f2fa0ae8af0215986c # master
hacs: # https://github.com/hacs/action hacs: # https://github.com/hacs/action
name: HACS validation name: HACS validation

File diff suppressed because it is too large Load diff

View file

@ -15,22 +15,22 @@
"typecheck": "tsc" "typecheck": "tsc"
}, },
"dependencies": { "dependencies": {
"@docusaurus/core": "^3.10.2", "@docusaurus/core": "^3.10.1",
"@docusaurus/faster": "^3.10.2", "@docusaurus/faster": "^3.10.1",
"@docusaurus/preset-classic": "^3.10.2", "@docusaurus/preset-classic": "^3.10.1",
"@docusaurus/theme-mermaid": "^3.10.2", "@docusaurus/theme-mermaid": "^3.10.1",
"@mdx-js/react": "^3.0.0", "@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0", "clsx": "^2.0.0",
"docusaurus-lunr-search": "^3.6.0", "docusaurus-lunr-search": "^3.6.0",
"prism-react-renderer": "^2.3.0", "prism-react-renderer": "^2.3.0",
"react": "^19.2.8", "react": "^19.2.7",
"react-dom": "^19.2.8" "react-dom": "^19.2.7"
}, },
"devDependencies": { "devDependencies": {
"@docusaurus/module-type-aliases": "^3.10.0", "@docusaurus/module-type-aliases": "^3.10.0",
"@docusaurus/tsconfig": "^3.10.2", "@docusaurus/tsconfig": "^3.10.1",
"@docusaurus/types": "^3.10.0", "@docusaurus/types": "^3.10.0",
"typescript": "~7.0.2" "typescript": "~6.0.3"
}, },
"browserslist": { "browserslist": {
"production": [ "production": [

File diff suppressed because it is too large Load diff

View file

@ -15,23 +15,23 @@
"typecheck": "tsc" "typecheck": "tsc"
}, },
"dependencies": { "dependencies": {
"@docusaurus/core": "^3.10.2", "@docusaurus/core": "^3.10.1",
"@docusaurus/faster": "^3.10.2", "@docusaurus/faster": "^3.10.1",
"@docusaurus/preset-classic": "^3.10.2", "@docusaurus/preset-classic": "^3.10.1",
"@docusaurus/theme-mermaid": "^3.10.2", "@docusaurus/theme-mermaid": "^3.10.1",
"@giscus/react": "^3.1.0", "@giscus/react": "^3.1.0",
"@mdx-js/react": "^3.0.0", "@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0", "clsx": "^2.0.0",
"docusaurus-lunr-search": "^3.6.0", "docusaurus-lunr-search": "^3.6.0",
"prism-react-renderer": "^2.3.0", "prism-react-renderer": "^2.3.0",
"react": "^19.2.8", "react": "^19.2.7",
"react-dom": "^19.2.8" "react-dom": "^19.2.7"
}, },
"devDependencies": { "devDependencies": {
"@docusaurus/module-type-aliases": "^3.10.0", "@docusaurus/module-type-aliases": "^3.10.0",
"@docusaurus/tsconfig": "^3.10.2", "@docusaurus/tsconfig": "^3.10.1",
"@docusaurus/types": "^3.10.0", "@docusaurus/types": "^3.10.0",
"typescript": "~7.0.2" "typescript": "~6.0.3"
}, },
"browserslist": { "browserslist": {
"production": [ "production": [

View file

@ -1,7 +1,7 @@
# Project/dev tooling NO Home Assistant here # Project/dev tooling NO Home Assistant here
colorlog>=6.12.0,<6.13.0 colorlog>=6.10.1,<6.11.0
pre-commit>=4.6.1,<4.7.0 pre-commit>=4.6.0,<4.7.0
ruff>=0.16.0,<0.17.0 ruff>=0.15.20,<0.16.0
zlib_ng>=1.0.0,<1.1.0 zlib_ng>=1.0.0,<1.1.0
isal>=1.8.0,<1.9.0 isal>=1.8.0,<1.9.0
# Must match HA_VERSION in scripts/setup/bootstrap exactly (1:1 mapping) # Must match HA_VERSION in scripts/setup/bootstrap exactly (1:1 mapping)

View file

@ -435,53 +435,30 @@ ${DIFF_CONTEXT}
Output ONLY the release notes. Start directly with the # title. Output ONLY the release notes. Start directly with the # title.
End after the Buy Me A Coffee button. No meta-commentary, no explanations." End after the Buy Me A Coffee button. No meta-commentary, no explanations."
# Save prompt to temp file for copilot
TEMP_PROMPT=$(mktemp)
echo "$PROMPT" >"$TEMP_PROMPT"
# Use Claude Sonnet for better user-focused, plain-language release notes. # Use Claude Sonnet for better user-focused, plain-language release notes.
# Haiku tends to echo technical commit language; Sonnet better translates to user benefits. # Haiku tends to echo technical commit language; Sonnet better translates to user benefits.
# Can override with: COPILOT_MODEL=claude-haiku-4.5 ./scripts/release/generate-notes # Can override with: COPILOT_MODEL=claude-haiku-4.5 ./scripts/release/generate-notes
COPILOT_MODEL="${COPILOT_MODEL:-claude-sonnet-4.6}" COPILOT_MODEL="${COPILOT_MODEL:-claude-sonnet-4.6}"
# Call copilot CLI (it will handle authentication interactively). # Call copilot CLI (it will handle authentication interactively)
# Flags matter here (recent copilot CLI versions, e.g. 1.0.68+): copilot --model "$COPILOT_MODEL" <"$TEMP_PROMPT" || {
# The prompt is piped into stdin (a real pipe, not a `<file` redirect and
# not the -p argument). Two prior approaches were tried and broke:
# - `-p "$PROMPT"` puts the whole prompt on the command line, which
# blows past the OS argv/environ size limit (ARG_MAX) on releases
# with many commits, failing with "Argument list too long".
# - `<"$TEMP_PROMPT"` (file redirect) gave copilot a seekable regular
# file as stdin; it was observed to sometimes respond "No prompt
# provided..." yet still exit 0 for that same input in a real
# terminal, silently producing empty release notes. A shell pipe
# presents stdin as a FIFO, matching what "via standard in" in
# copilot's own help text expects, and has no size limit.
# --available-tools (no value) disables all tools — this task only needs
# plain text generation from the embedded context, and without this the
# agent may attempt tool calls that silently stall/no-op in
# non-interactive mode, producing empty output (least-privilege, avoids
# needing --allow-all-tools).
# --silent suppresses the post-response stats block (Changes/AI
# Credits/Tokens/Resume) that newer versions print to stdout, which
# would otherwise leak into the generated release notes.
# --no-custom-instructions skips loading this repo's AGENTS.md, which is
# unrelated to release-note writing style and would just burn tokens.
# --no-color keeps the captured output free of ANSI escape codes.
COPILOT_OUTPUT=$(printf '%s' "$PROMPT" | copilot --model "$COPILOT_MODEL" --available-tools --silent --no-custom-instructions --no-color) || true
# Treat empty/whitespace-only output as a failure too: copilot has been
# observed to exit 0 while producing no content (e.g. when it could not
# obtain a prompt), which previously slipped past the "||" failure check.
if [[ -z "${COPILOT_OUTPUT//[[:space:]]/}" ]]; then
echo "" echo ""
log_info "${YELLOW}Warning: GitHub Copilot CLI failed, was not authenticated, or returned no output${NC}" log_info "${YELLOW}Warning: GitHub Copilot CLI failed or was not authenticated${NC}"
log_info "${YELLOW}Falling back to git-cliff${NC}" log_info "${YELLOW}Falling back to git-cliff${NC}"
rm -f "$TEMP_PROMPT"
if command -v git-cliff >/dev/null 2>&1; then if command -v git-cliff >/dev/null 2>&1; then
generate_with_gitcliff generate_with_gitcliff
else else
generate_with_manual generate_with_manual
fi fi
return return
fi }
printf "%s\n" "$COPILOT_OUTPUT" rm -f "$TEMP_PROMPT"
} }
# ============================================================================ # ============================================================================