Skip to content

Release v0.103.1 — the base image moves out of the deprecated build.yaml - #100

Merged
tesseractAZ merged 2 commits into
mainfrom
fix/build-config
Sep 15, 2026
Merged

tesseractAZ merged 2 commits into
mainfrom
fix/build-config

Conversation

@tesseractAZ

Copy link
Copy Markdown
Owner

Summary

During the v0.100.6 update the Supervisor logged: "App 5c825282_switchboard uses build.yaml which is deprecated. Move build parameters into the Dockerfile".

Since Supervisor 2026.04.0 (home-assistant/supervisor#6694), BUILD_FROM is passed only while a build file exists. Once that compatibility path is removed, both FROM ${BUILD_FROM} lines would resolve empty. On-device updates would then fail to build and silently stop installing, while the old container kept running.

  • Base image moves into the Dockerfile. ARG SWITCHBOARD_BASE_IMAGE=ghcr.io/home-assistant/base:3.21 is used by both stages.
    • The name deliberately isn't BUILD_FROM. Supervisors older than 2026.04.0 always pass that argument, falling back to an unpinned :latest.
    • base:3.21 is a multi-platform manifest. Its amd64 and arm64 children matched the old amd64-base:3.21 / aarch64-base:3.21 digests (checked 2026-09-14).
  • build.yaml is deleted. Its OCI labels move to the Dockerfile LABEL.
  • CI builds what the device builds. ci.yml smoke builds and publish-release.yml no longer pass a base image.
  • One source of truth is pinned. tests/test_build_config.py checks it and rejects an empty FROM.

Sources:

  • Supervisor apps/build.py and its tests.
  • PR #6694, first shipped in 2026.04.0.
  • developers.home-assistant.io docs/apps/configuration.
  • The 2026-04-02 builder-migration post.

The live Supervisor logs from supervisor.apps.build, which means it is at least 2026.05.1.

Testing

  • The full suite passes.
  • A mutation battery on the new test killed 18 of 18 mutants.
  • Adversarial review found nits only; verdict: ship.
  • This PR's Dockerfile smoke builds (amd64 and aarch64) are the first real build of this Dockerfile.
  • The rebase conflicted only in the Dockerfile version label, which three releases bumped. The conflict was resolved by keeping the branch content, and a check confirmed main had changed no other Dockerfile line.
  • After deploy, verify:
    • no deprecation warning;
    • buildx runs without BUILD_FROM;
    • the image is Alpine 3.21 with the same Asterisk.
  • A failed on-device build leaves the old container serving calls.

🤖 Generated with Claude Code

tesseractAZ and others added 2 commits September 14, 2026 18:44
…erfile

During the v0.100.6 update (2026-09-14) the Supervisor logged "uses build.yaml
which is deprecated. Move build parameters into the Dockerfile directly." The
base image was written only in build.yaml, and the Dockerfile declared a bare
`ARG BUILD_FROM`. Since Supervisor 2026.04.0 (home-assistant/supervisor#6694)
BUILD_FROM is passed only while a build.yaml exists, so the release that drops
that compatibility path would blank both FROM lines and fail every on-device
update, while the old container kept running.

- Dockerfile: `ARG SWITCHBOARD_BASE_IMAGE=ghcr.io/home-assistant/base:3.21`,
  used by both FROM lines. Deliberately not BUILD_FROM: Supervisors before
  2026.04.0 always pass --build-arg BUILD_FROM and, with no build.yaml, fall back
  to an unpinned {arch}-base:latest that would override a default of that name.
  base:3.21 is a multi-platform manifest whose amd64/arm64 children have the
  same digests as the amd64-base:3.21 / aarch64-base:3.21 images build.yaml
  named, so the built base does not change.
- Dockerfile: build.yaml's org.opencontainers.image.* labels moved into LABEL.
- build.yaml deleted (the Supervisor finds it with a recursive build.* glob).
- ci.yml docker-smoke and publish-release.yml images: the build.yaml resolver
  steps and the BUILD_FROM build-arg are gone, so CI and the release build
  exactly what the device builds.
- tests/test_build_config.py pins it: no build.{yaml,yml,json} anywhere under
  the add-on, no Dockerfile.<arch>, every FROM resolves from the Dockerfile's
  global ARG default to one pinned multi-platform base through a name no
  builder injects, no workflow passes or reads a base image, the build matrices
  match config.yaml's arches, and the labels survived. A mutation battery of 18
  mutants was fully killed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The Supervisor warned on the v0.100.6 update that build.yaml is deprecated.
Since Supervisor 2026.04.0 (home-assistant/supervisor#6694) BUILD_FROM is passed
only while a build file exists, so dropping that compatibility path would have
left both FROM lines empty and every on-device update failing to build.

The base image is now the Dockerfile's own ARG SWITCHBOARD_BASE_IMAGE default
(ghcr.io/home-assistant/base:3.21, whose amd64 and arm64 children are the images
build.yaml named). build.yaml is deleted; CI smoke builds and the release
workflow no longer pass a base, so they build exactly what the device builds.
tests/test_build_config.py pins one source.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@tesseractAZ
tesseractAZ merged commit 96d83f7 into main Sep 15, 2026
10 checks passed
@tesseractAZ
tesseractAZ deleted the fix/build-config branch September 15, 2026 01:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant