Skip to content

Update image build instructions after Builder deprecation, add blog post#3027

Merged
sairon merged 11 commits intomasterfrom
new-builder-workflow-instructions
Apr 2, 2026
Merged

Update image build instructions after Builder deprecation, add blog post#3027
sairon merged 11 commits intomasterfrom
new-builder-workflow-instructions

Conversation

@sairon
Copy link
Copy Markdown
Member

@sairon sairon commented Apr 1, 2026

Proposed change

Document the recent changes in how apps and other HA containers are built and update docs where they were deprecated (e.g. still mentioning Codenotary).

Add blog post describing the changes in bigger picture and link it from the old 2020 post that described how the builder action can be used.

Closes #3001, closes #178, closes #803, closes #1939, closes #2026

Type of change

  • Document existing features within Home Assistant
  • Document new or changing features for which there is an existing pull request elsewhere
  • Spelling or grammatical corrections, or rewording for improved clarity
  • Changes to the backend of this documentation
  • Remove stale or deprecated documentation

Checklist

  • I have read and followed the documentation guidelines.
  • I have verified that my changes render correctly in the documentation.

Additional information

Summary by CodeRabbit

  • Documentation
    • Added a detailed migration blog post and a note marking the legacy builder action as deprecated.
    • Guided migration to Dockerfile-based FROM/LABEL/ARG usage and recommended generic multi‑arch image references (keep {arch} as fallback).
    • Replaced Codenotary signing guidance with Cosign-based signing recommendations.
    • Updated publishing and workflow docs to GitHub Actions composite actions and removed legacy builder/container instructions.
    • Revised local testing, publishing, supervisor development, and examples to prefer aarch64|amd64 and clarified platform/name mapping.

Document the recent changes in how apps and other HA containers are
built and update docs where they were deprecated (e.g. still mentioning
Codenotary).

Add blog post describing the changes in bigger picture and link it from
the old 2020 post that described how the builder action can be used.

Closes #3001, closes #178, closes #803, closes #1939, closes #2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 1, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Added a builder migration guide and updated docs to migrate CI/local image builds from the legacy home-assistant/builder action/container to Docker BuildKit and Home Assistant composite GitHub Actions; updated Dockerfile and config.yaml guidance, removed legacy builder instructions and Codenotary CAS references.

Changes

Cohort / File(s) Summary
Migration Guide & Legacy Note
blog/2026-04-02-builder-migration.md, blog/2020-10-29-supervisor-update.md, docs/apps.md
Add new builder migration post; add admonition that home-assistant/builder@master is legacy and link to migration guide; adjust link text to “Home Assistant Builder actions.”
App Configuration & Publishing
docs/apps/configuration.md, docs/apps/publishing.md
Remove build.yaml-centric guidance; instruct moving build_fromFROM, labelsLABEL (require io.hass.type), argsARG in Dockerfile; prefer generic multi-arch image references in config.yaml (keep {arch} fallback); replace Docker-run builder instructions with composite-action CI workflows.
App Testing & Security
docs/apps/testing.md, docs/apps/security.md
Rewrite local testing to use docker build and Docker --platform multi-arch guidance; rename local image examples to local/my-test-app; remove Codenotary CAS section and update signing guidance to reference Cosign and publishing workflow.
Supervisor Development
docs/supervisor/development.md
Replace remote builder-container build/publish flow with local BuildKit docker build --platform ... --tag ... --push and GHCR examples; update platform/arch mapping, GHCR auth, and retag instructions.
Presentation & Tutorial Examples
docs/apps/presentation.md, docs/apps/tutorial.md
Narrow example arch: lists to aarch64 and amd64 in YAML snippets; remove older architectures from examples and adjust example security scoring.
Minor docs edits
docs/apps.md
Small link text change to reference “Home Assistant Builder actions.”

Sequence Diagram(s)

sequenceDiagram
    actor Developer
    participant Repo as "GitHub Repository"
    participant GH_Actions as "GitHub Actions"
    participant Composite as "HA Composite Actions"
    participant BuildKit as "Docker BuildKit"
    participant Registry as "Container Registry (GHCR)"

    Developer->>Repo: Push code + Dockerfile
    Repo->>GH_Actions: Trigger workflow
    GH_Actions->>Composite: Invoke build/publish composite actions
    Composite->>BuildKit: Run docker build --platform (BuildKit)
    BuildKit->>BuildKit: Build per-arch images
    BuildKit->>Registry: Push per-arch images
    Composite->>Registry: Publish multi-arch manifest
    Registry->>Developer: Multi-arch image available (ghcr.io/...)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: updating image build instructions after Builder deprecation and adding a blog post explaining the migration.
Description check ✅ Passed The description follows the template with all required sections completed: Proposed change, Type of change (checked), Checklist items confirmed, and issue references provided.
Linked Issues check ✅ Passed The PR comprehensively addresses all five linked issues: #3001 (documents new build workflows and removes legacy references), #178 (documentation updates for container builds), #803 (fixes builder documentation), #1939 (updates add-on build instructions for config.yaml/build.yaml), and #2026 (removes Codenotary references).
Out of Scope Changes check ✅ Passed All changes are documentation-only updates directly scoped to the linked issues: migration guidance, builder deprecation notes, architecture list updates, and removal of obsolete Codenotary references. No out-of-scope changes detected.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch new-builder-workflow-instructions

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
docs/apps/configuration.md (1)

120-120: Rephrase for grammar clarity.

Line 120 reads awkwardly: “does recursively search”. Use “searches recursively” for concise, natural phrasing.

Suggested fix
-Avoid using `config.yaml` as filename in your app for anything other than the app configuration. The Supervisor does recursively search for `config.yaml` in the app repository.
+Avoid using `config.yaml` as filename in your app for anything other than the app configuration. The Supervisor searches recursively for `config.yaml` in the app repository.
As per coding guidelines, "Apply the Microsoft Style Guide to ensure documentation maintains clarity and conciseness."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/apps/configuration.md` at line 120, Edit the sentence that currently
reads "does recursively search" concerning how the Supervisor handles
config.yaml and change it to the grammatically correct "searches recursively"
(refer to the phrase "config.yaml" and the existing fragment "does recursively
search") so the line becomes concise and natural per Microsoft Style Guide.
blog/2026-04-02-builder-migration.md (1)

8-8: Tighten the opening instruction for a more direct tone.

Line 8 is understandable, but a direct imperative reads cleaner in instructional docs.

Suggested wording
-The legacy `home-assistant/builder` container and the old `home-assistant/builder` GitHub Action have been retired. We recommend to migrate all app (formerly add-on) repositories to allow direct build with Docker BuildKit and to use the new composite actions described in this post.
+The legacy `home-assistant/builder` container and GitHub Action have been retired. Migrate app (formerly add-on) repositories to direct Docker BuildKit builds and use the composite actions described in this post.
As per coding guidelines, "For instructional content in documentation, use a direct and authoritative tone."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@blog/2026-04-02-builder-migration.md` at line 8, Rewrite the sentence about
retiring the legacy `home-assistant/builder` container and GitHub Action into a
direct imperative: instruct readers to "Migrate your app repositories to build
directly with Docker BuildKit and use the new composite actions" and retain the
clarifying parenthetical "(formerly add-on)". Update the line referencing
`home-assistant/builder` and "Docker BuildKit" and "composite actions" so it
reads as a clear command rather than a passive statement.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/apps/configuration.md`:
- Around line 80-82: Replace the container label value for io.hass.type from
"app" to "addon" in the configuration snippet so it matches the migration guide
and Supervisor requirements; locate the code block containing the labels (the
line with io.hass.type="app" next to io.hass.arch="aarch64|amd64") and change it
to io.hass.type="addon" while keeping the surrounding label format intact.

In `@docs/apps/publishing.md`:
- Around line 7-13: The two headings "Pre-built containers" and "Locally built
containers" are using H3 (###) and should be promoted to H2 (##) to fix the
heading level jump; update both heading lines in the docs to use H2 syntax so
the document outline is consistent and MD001 warnings are resolved.

---

Nitpick comments:
In `@blog/2026-04-02-builder-migration.md`:
- Line 8: Rewrite the sentence about retiring the legacy
`home-assistant/builder` container and GitHub Action into a direct imperative:
instruct readers to "Migrate your app repositories to build directly with Docker
BuildKit and use the new composite actions" and retain the clarifying
parenthetical "(formerly add-on)". Update the line referencing
`home-assistant/builder` and "Docker BuildKit" and "composite actions" so it
reads as a clear command rather than a passive statement.

In `@docs/apps/configuration.md`:
- Line 120: Edit the sentence that currently reads "does recursively search"
concerning how the Supervisor handles config.yaml and change it to the
grammatically correct "searches recursively" (refer to the phrase "config.yaml"
and the existing fragment "does recursively search") so the line becomes concise
and natural per Microsoft Style Guide.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f1505215-ba83-4f68-a729-15187f072acd

📥 Commits

Reviewing files that changed from the base of the PR and between f13bef0 and 464cf44.

📒 Files selected for processing (8)
  • blog/2020-10-29-supervisor-update.md
  • blog/2026-04-02-builder-migration.md
  • docs/apps.md
  • docs/apps/configuration.md
  • docs/apps/publishing.md
  • docs/apps/security.md
  • docs/apps/testing.md
  • docs/supervisor/development.md

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
docs/apps/publishing.md (1)

21-22: Minor grammar improvement.

The phrase "can be then used" would read more naturally as "can then be used."

✍️ Suggested wording improvement
-The recommended way to build and publish multi-architecture app images is through GitHub Actions using the builder composite actions maintained by the Home Assistant project. These actions can be then used for a matrix of builds in an app repository. See the [builder workflow](https://github.com/home-assistant/apps-example/blob/main/.github/workflows/builder.yaml) in the example app repository for a complex example of building multiple apps, or the [example workflow](https://github.com/home-assistant/builder?tab=readme-ov-file#example-workflow) in the builder repository for a single app build. The builder actions are designed to be flexible and can be used in more complex workflows as needed.
+The recommended way to build and publish multi-architecture app images is through GitHub Actions using the builder composite actions maintained by the Home Assistant project. These actions can then be used for a matrix of builds in an app repository. See the [builder workflow](https://github.com/home-assistant/apps-example/blob/main/.github/workflows/builder.yaml) in the example app repository for a complex example of building multiple apps, or the [example workflow](https://github.com/home-assistant/builder?tab=readme-ov-file#example-workflow) in the builder repository for a single app build. The builder actions are designed to be flexible and can be used in more complex workflows as needed.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/apps/publishing.md` around lines 21 - 22, Update the sentence that
currently reads "These actions can be then used for a matrix of builds in an app
repository." to use the improved phrasing "These actions can then be used for a
matrix of builds in an app repository." — locate the phrase "can be then used"
in the paragraph referencing the builder workflow and replace it with "can then
be used".
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@docs/apps/publishing.md`:
- Around line 21-22: Update the sentence that currently reads "These actions can
be then used for a matrix of builds in an app repository." to use the improved
phrasing "These actions can then be used for a matrix of builds in an app
repository." — locate the phrase "can be then used" in the paragraph referencing
the builder workflow and replace it with "can then be used".

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b3b3d745-efb9-410e-a3ef-6e170393a7b5

📥 Commits

Reviewing files that changed from the base of the PR and between 464cf44 and 4246c78.

📒 Files selected for processing (1)
  • docs/apps/publishing.md

Copy link
Copy Markdown
Member

@agners agners left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, some much needed love for some of the pages 😅 .

I wonder if we should mention that we expect a Unix/Linux type environment, e.g. advice users to use WSL2 on Windows 🤔 .

@home-assistant home-assistant bot marked this pull request as draft April 1, 2026 14:41
@home-assistant
Copy link
Copy Markdown

home-assistant bot commented Apr 1, 2026

Please take a look at the requested changes, and use the Ready for review button when you are done, thanks 👍

Learn more about our pull request process.

@sairon sairon marked this pull request as ready for review April 2, 2026 08:11
@home-assistant home-assistant bot requested a review from agners April 2, 2026 08:11
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
docs/supervisor/development.md (1)

31-37: Using docker buildx build is clearer but docker build --push works on modern Docker.

The --push flag is natively supported by modern Docker (which uses Buildx by default), so the existing docker build --push command will work for most users. However, explicitly using docker buildx build makes the builder choice clear and is more reliable for older setups where DOCKER_BUILDKIT might be disabled. If clarity is desired, this change is optional.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/supervisor/development.md` around lines 31 - 37, Replace the docker
build invocation shown (the block containing "--platform linux/arm64 --tag
ghcr.io/YOUR_GH_USERNAME/aarch64-hassio-supervisor:latest --push .") with an
explicit buildx call by using "docker buildx build" instead of "docker build" so
the builder is explicit and the --push behavior is reliable across environments;
keep the existing flags (--platform, --tag, --push, .) unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/supervisor/development.md`:
- Line 64: Replace the current personal-account visibility link
(https://docs.github.com/en/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#configuring-visibility-of-packages-for-your-personal-account)
in the sentence about GHCR image visibility with the organization-specific
package visibility docs URL so the guidance applies to org namespaces as well;
locate the sentence that begins "Docker images uploaded to GHCR are by default
private..." and update the link to the org visibility documentation (or include
both personal and org links) to avoid confusion.

---

Nitpick comments:
In `@docs/supervisor/development.md`:
- Around line 31-37: Replace the docker build invocation shown (the block
containing "--platform linux/arm64 --tag
ghcr.io/YOUR_GH_USERNAME/aarch64-hassio-supervisor:latest --push .") with an
explicit buildx call by using "docker buildx build" instead of "docker build" so
the builder is explicit and the --push behavior is reliable across environments;
keep the existing flags (--platform, --tag, --push, .) unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 17b484b0-204b-4ea5-b488-9b0a420c7b67

📥 Commits

Reviewing files that changed from the base of the PR and between 4246c78 and 1c16c3e.

📒 Files selected for processing (2)
  • blog/2026-04-02-builder-migration.md
  • docs/supervisor/development.md
✅ Files skipped from review due to trivial changes (1)
  • blog/2026-04-02-builder-migration.md

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/apps/presentation.md (1)

220-220: ⚠️ Potential issue | 🟠 Major

Remove obsolete CodeNotary security-point guidance

Line 220 still documents a security score bonus for CodeNotary CAS, which conflicts with the PR objective to remove obsolete/not-available notarization guidance (#2026). Please remove or replace this row with current notarization guidance.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/apps/presentation.md` at line 220, Remove the obsolete markdown table
row that grants "+1" for CodeNotary CAS (the line containing "| App is signed
with [CodeNotary](https://cas.codenotary.com/)| +1||") and either delete the row
entirely or replace it with up-to-date notarization guidance and the correct
scoring/columns; ensure any references to the CodeNotary bonus elsewhere in the
document are updated or removed so the table and narrative remain consistent.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/apps/configuration.md`:
- Line 131: The markdown table row for the `arch` entry is missing a trailing
pipe causing MD055 warnings; fix by adding the missing trailing `|` at the end
of the `| `arch` | list | A list of supported architectures: `aarch64`, `amd64`.
|` row and likewise add a trailing `|` to the other affected row around line 172
so all table rows consistently start and end with `|`.

---

Outside diff comments:
In `@docs/apps/presentation.md`:
- Line 220: Remove the obsolete markdown table row that grants "+1" for
CodeNotary CAS (the line containing "| App is signed with
[CodeNotary](https://cas.codenotary.com/)| +1||") and either delete the row
entirely or replace it with up-to-date notarization guidance and the correct
scoring/columns; ensure any references to the CodeNotary bonus elsewhere in the
document are updated or removed so the table and narrative remain consistent.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c1c8fb45-40ff-499f-ae3b-6300034de275

📥 Commits

Reviewing files that changed from the base of the PR and between 1c16c3e and 57ce7fe.

📒 Files selected for processing (3)
  • docs/apps/configuration.md
  • docs/apps/presentation.md
  • docs/apps/tutorial.md
💤 Files with no reviewable changes (1)
  • docs/apps/tutorial.md

| `slug` | string | Slug of the app. This needs to be unique in the scope of the [repository](/docs/apps/repository) that the app is published in and URI friendly. |
| `description` | string | Description of the app.
| `arch` | list | A list of supported architectures: `armhf`, `armv7`, `aarch64`, `amd64`, `i386`.
| `arch` | list | A list of supported architectures: `aarch64`, `amd64`.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix markdown table pipe style (MD055)

Lines 131 and 172 are missing trailing |, which is causing markdownlint MD055 warnings.

Suggested fix
-| `arch` | list | A list of supported architectures: `aarch64`, `amd64`.
+| `arch` | list | A list of supported architectures: `aarch64`, `amd64`. |

-| `image` | string | | For use with container registries. Set this to the generic (multi-arch) image name, e.g. `ghcr.io/my-org/my-app`. The `{arch}` placeholder is still supported as a compatibility fallback for per-architecture image names (e.g. `ghcr.io/my-org/{arch}-my-app`). If you use this option, set the active Docker tag using the `version` option.
+| `image` | string | | For use with container registries. Set this to the generic (multi-arch) image name, e.g. `ghcr.io/my-org/my-app`. The `{arch}` placeholder is still supported as a compatibility fallback for per-architecture image names (e.g. `ghcr.io/my-org/{arch}-my-app`). If you use this option, set the active Docker tag using the `version` option. |

Also applies to: 172-172

🧰 Tools
🪛 markdownlint-cli2 (0.22.0)

[warning] 131-131: Table pipe style
Expected: leading_and_trailing; Actual: leading_only; Missing trailing pipe

(MD055, table-pipe-style)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/apps/configuration.md` at line 131, The markdown table row for the
`arch` entry is missing a trailing pipe causing MD055 warnings; fix by adding
the missing trailing `|` at the end of the `| `arch` | list | A list of
supported architectures: `aarch64`, `amd64`. |` row and likewise add a trailing
`|` to the other affected row around line 172 so all table rows consistently
start and end with `|`.

Copy link
Copy Markdown
Member

@agners agners left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some suggestions/tweaks on the blog post.

Rest LGTM.

--docker-password ${{ secrets.DOCKER_PASSWORD }}
```

### After (composite actions)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This Before/After is a bit weird, especially since the After then goes on mostly talking about build.yaml migration.

To me a structure like this would make more sense:

## Migration process

### Update Dockerfiles

Move content from `build.yaml` to Dockerfile....

### Update GitHub action workflows

Replace the previous action `home-assistant/builder@master` with... 

I think its also not ideal that we have the YAML of the old actions in the post, but the new ones are just linked 😅 I'd not even show the old yaml at all, people copy stuff without reading, and it doesn't add that much value. I'd just mention that home-assistant/builder@master steps need to go, and then link to the new code.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done!

@home-assistant home-assistant bot marked this pull request as draft April 2, 2026 14:21
@sairon sairon marked this pull request as ready for review April 2, 2026 16:05
@home-assistant home-assistant bot requested a review from agners April 2, 2026 16:05
@sairon sairon merged commit a0dcb77 into master Apr 2, 2026
5 checks passed
@sairon sairon deleted the new-builder-workflow-instructions branch April 2, 2026 16:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants