From 2dcd81676c5c2df757f62daed5200f736047a072 Mon Sep 17 00:00:00 2001 From: Thomas Camlong Date: Thu, 2 Jul 2026 10:44:54 +0200 Subject: [PATCH] fix(onboarding): address PR review feedback on docker label discovery Fix app-only continue flow, handle stale label sync, per-layout yOffset, blank label normalization, updatedAt on source upsert, docs link, and forceDisableStatus for ping-enabled apps. --- .../docs/integrations/docker-labels/index.mdx | 2 +- apps/docs/docs/integrations/docker/index.mdx | 2 +- .../_steps/integrations/init-integrations.tsx | 19 +++++++-- .../src/docs/homarr-docs-sitemap.ts | 1 + .../src/discovery/parse-container-labels.ts | 8 +++- .../src/discovery/sync-discovered-services.ts | 39 ++++++++++++------- 6 files changed, 51 insertions(+), 20 deletions(-) diff --git a/apps/docs/docs/integrations/docker-labels/index.mdx b/apps/docs/docs/integrations/docker-labels/index.mdx index e478381a2..1e72d69a5 100644 --- a/apps/docs/docs/integrations/docker-labels/index.mdx +++ b/apps/docs/docs/integrations/docker-labels/index.mdx @@ -31,7 +31,7 @@ Homarr can read `homarr.*` labels on your containers to pre-populate apps during ## Homepage fallback -When `homarr.name` is absent, Homarr reads `homepage.name`, `homepage.group`, and `homepage.href` if homepage label reading is enabled (default: on). +When `homarr.name` is absent, Homarr reads `homepage.name`, `homepage.group`, `homepage.href`, `homepage.icon`, and `homepage.description` if homepage label reading is enabled (default: on). ## Example diff --git a/apps/docs/docs/integrations/docker/index.mdx b/apps/docs/docs/integrations/docker/index.mdx index 732708f9d..1fa3e56af 100644 --- a/apps/docs/docs/integrations/docker/index.mdx +++ b/apps/docs/docs/integrations/docker/index.mdx @@ -93,7 +93,7 @@ They are then available in the app list and can be used as normally added apps. ### Configuration -Homarr supports Docker labels for automatic app discovery during onboarding. See [Docker labels](./docker-labels/index.mdx) for the full reference. +Homarr supports Docker labels for automatic app discovery during onboarding. See [Docker labels](../docker-labels/index.mdx) for the full reference. Currently Homarr supports one label for hiding containers: diff --git a/apps/nextjs/src/app/[locale]/init/_steps/integrations/init-integrations.tsx b/apps/nextjs/src/app/[locale]/init/_steps/integrations/init-integrations.tsx index 62454fc6a..95e047fe6 100644 --- a/apps/nextjs/src/app/[locale]/init/_steps/integrations/init-integrations.tsx +++ b/apps/nextjs/src/app/[locale]/init/_steps/integrations/init-integrations.tsx @@ -159,14 +159,21 @@ export const InitIntegrations = () => { const imageApps = selectedApps.filter((app) => app.source !== "label"); if (labelApps.length > 0) { - const labelAppsWithHost = labelApps.filter((app): app is typeof app & { host: string } => Boolean(app.host)); + const labelAppsWithHost = labelApps.filter((app): app is (typeof app & { host: string }) => Boolean(app.host)); + const missingHostCount = labelApps.length - labelAppsWithHost.length; + if (missingHostCount > 0) { + throw new Error("Some selected Docker label apps are missing host metadata"); + } if (labelAppsWithHost.length > 0) { - await syncLabelApps( + const syncResult = await syncLabelApps( labelAppsWithHost.map((app) => ({ containerId: app.containerId, host: app.host, })), ); + if (syncResult.notFound > 0) { + throw new Error("Some selected Docker label apps were not found"); + } } } @@ -384,7 +391,13 @@ export const InitIntegrations = () => { {t("action.skip")}