From e2d3740d2fc4150272b1582592fca29e174583b4 Mon Sep 17 00:00:00 2001 From: mateuszziolkowski Date: Fri, 27 Mar 2026 10:51:24 +0100 Subject: [PATCH 1/2] add ignore_polling_services for global auto update --- bin/core/src/api/write/stack.rs | 8 +++++++- client/core/rs/src/entities/stack.rs | 12 ++++++++++++ client/core/ts/src/types.ts | 6 ++++++ ui/public/client/types.d.ts | 6 ++++++ ui/src/resources/stack/config/index.tsx | 23 +++++++++++++++++++++++ 5 files changed, 54 insertions(+), 1 deletion(-) diff --git a/bin/core/src/api/write/stack.rs b/bin/core/src/api/write/stack.rs index a3a9cca9e..71c2cb42c 100644 --- a/bin/core/src/api/write/stack.rs +++ b/bin/core/src/api/write/stack.rs @@ -775,7 +775,13 @@ pub async fn check_stack_for_update_inner( if image.is_empty() || // Images with a hardcoded digest can't have update. - image.contains('@') + image.contains('@') || + // Services explicitly excluded from global auto-update checks. + // Manual checks should still evaluate all services. + (wait_for_auto_update && + stack.config.ignore_polling_services.contains( + &service.service_name, + )) { service.image_digest = None; continue; diff --git a/client/core/rs/src/entities/stack.rs b/client/core/rs/src/entities/stack.rs index 1cff045dd..f2f18a9fb 100644 --- a/client/core/rs/src/entities/stack.rs +++ b/client/core/rs/src/entities/stack.rs @@ -601,6 +601,17 @@ pub struct StackConfig { #[builder(default)] pub ignore_services: Vec, + /// Ignore certain services during Global Auto Update polling. + /// Services listed here are skipped only in the global auto-update flow. + /// Manual checks still include all services. + #[serde(default, deserialize_with = "string_list_deserializer")] + #[partial_attr(serde( + default, + deserialize_with = "option_string_list_deserializer" + ))] + #[builder(default)] + pub ignore_polling_services: Vec, + /// The contents of the file directly, for management in the UI. /// If this is empty, it will fall back to checking git config for /// repo based compose file. @@ -689,6 +700,7 @@ impl Default for StackConfig { auto_update: Default::default(), auto_update_all_services: Default::default(), ignore_services: Default::default(), + ignore_polling_services: Default::default(), pre_deploy: Default::default(), post_deploy: Default::default(), extra_args: Default::default(), diff --git a/client/core/ts/src/types.ts b/client/core/ts/src/types.ts index 4d4e0d186..effe43eda 100644 --- a/client/core/ts/src/types.ts +++ b/client/core/ts/src/types.ts @@ -2454,6 +2454,12 @@ export interface StackConfig { run_build?: boolean; /** Whether to poll for any updates to the images. */ poll_for_updates?: boolean; + /** + * Ignore certain services during Global Auto Update polling. + * Services listed here are skipped only in the global auto-update flow. + * Manual checks still include all services. + */ + ignore_polling_services?: string[]; /** * Whether to automatically redeploy when * newer images are found. Will implicitly diff --git a/ui/public/client/types.d.ts b/ui/public/client/types.d.ts index 4374fb160..0a0b6b530 100644 --- a/ui/public/client/types.d.ts +++ b/ui/public/client/types.d.ts @@ -2603,6 +2603,12 @@ export interface StackConfig { * enable both. */ auto_update?: boolean; + /** + * Ignore certain services during Global Auto Update polling. + * Services listed here are skipped only in the global auto-update flow. + * Manual checks still include all services. + */ + ignore_polling_services?: string[]; /** * If auto update is enabled, Komodo will * by default only update the specific services diff --git a/ui/src/resources/stack/config/index.tsx b/ui/src/resources/stack/config/index.tsx index 456372872..ff4395e70 100644 --- a/ui/src/resources/stack/config/index.tsx +++ b/ui/src/resources/stack/config/index.tsx @@ -95,6 +95,8 @@ export default function StackConfig({ const disabled = global_disabled || !canWrite; const runBuild = update.run_build ?? config.run_build; + const poll_for_updates = update.poll_for_updates ?? config.poll_for_updates; + const mode = getStackMode(update, config); const gitProvider = update.git_provider ?? config.git_provider; @@ -390,6 +392,27 @@ export default function StackConfig({ /> ); }, + ignore_polling_services: (values, set) => + poll_for_updates && ( + + } + placeholder={values?.length ? "Add services" : "Select services"} + value={values} + data={allServices} + onChange={(ignore_polling_services) => + set({ ignore_polling_services }) + } + disabled={disabled} + w="fit-content" + searchable + clearable + /> + + ), auto_update: { description: "Trigger a redeploy if a newer image is found.", }, From f05df9595318ede96439381b6898b9ba5f196a2d Mon Sep 17 00:00:00 2001 From: mateuszziolkowski Date: Thu, 2 Apr 2026 07:33:33 +0200 Subject: [PATCH 2/2] rename ignore_polling_services to auto_update_skip_services and reorganize --- bin/core/src/api/write/stack.rs | 2 +- client/core/rs/src/entities/stack.rs | 24 ++++++++++++------------ client/core/ts/src/types.ts | 12 ++++++------ ui/public/client/types.d.ts | 12 ++++++------ ui/src/resources/stack/config/index.tsx | 6 +++--- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/bin/core/src/api/write/stack.rs b/bin/core/src/api/write/stack.rs index 71c2cb42c..0d958168c 100644 --- a/bin/core/src/api/write/stack.rs +++ b/bin/core/src/api/write/stack.rs @@ -779,7 +779,7 @@ pub async fn check_stack_for_update_inner( // Services explicitly excluded from global auto-update checks. // Manual checks should still evaluate all services. (wait_for_auto_update && - stack.config.ignore_polling_services.contains( + stack.config.auto_update_skip_services.contains( &service.service_name, )) { diff --git a/client/core/rs/src/entities/stack.rs b/client/core/rs/src/entities/stack.rs index f2f18a9fb..c49aa608a 100644 --- a/client/core/rs/src/entities/stack.rs +++ b/client/core/rs/src/entities/stack.rs @@ -371,6 +371,17 @@ pub struct StackConfig { #[builder(default)] pub auto_update_all_services: bool, + /// Ignore certain services during Global Auto Update polling. + /// Services listed here are skipped only in the global auto-update flow. + /// Manual checks still include all services. + #[serde(default, deserialize_with = "string_list_deserializer")] + #[partial_attr(serde( + default, + deserialize_with = "option_string_list_deserializer" + ))] + #[builder(default)] + pub auto_update_skip_services: Vec, + /// Whether to run `docker compose down` before `compose up`. #[serde(default)] #[builder(default)] @@ -601,17 +612,6 @@ pub struct StackConfig { #[builder(default)] pub ignore_services: Vec, - /// Ignore certain services during Global Auto Update polling. - /// Services listed here are skipped only in the global auto-update flow. - /// Manual checks still include all services. - #[serde(default, deserialize_with = "string_list_deserializer")] - #[partial_attr(serde( - default, - deserialize_with = "option_string_list_deserializer" - ))] - #[builder(default)] - pub ignore_polling_services: Vec, - /// The contents of the file directly, for management in the UI. /// If this is empty, it will fall back to checking git config for /// repo based compose file. @@ -699,8 +699,8 @@ impl Default for StackConfig { poll_for_updates: Default::default(), auto_update: Default::default(), auto_update_all_services: Default::default(), + auto_update_skip_services: Default::default(), ignore_services: Default::default(), - ignore_polling_services: Default::default(), pre_deploy: Default::default(), post_deploy: Default::default(), extra_args: Default::default(), diff --git a/client/core/ts/src/types.ts b/client/core/ts/src/types.ts index effe43eda..ecf945045 100644 --- a/client/core/ts/src/types.ts +++ b/client/core/ts/src/types.ts @@ -2454,12 +2454,6 @@ export interface StackConfig { run_build?: boolean; /** Whether to poll for any updates to the images. */ poll_for_updates?: boolean; - /** - * Ignore certain services during Global Auto Update polling. - * Services listed here are skipped only in the global auto-update flow. - * Manual checks still include all services. - */ - ignore_polling_services?: string[]; /** * Whether to automatically redeploy when * newer images are found. Will implicitly @@ -2474,6 +2468,12 @@ export interface StackConfig { * Komodo will redeploy the whole Stack (all services). */ auto_update_all_services?: boolean; + /** + * Ignore certain services during Global Auto Update polling. + * Services listed here are skipped only in the global auto-update flow. + * Manual checks still include all services. + */ + auto_update_skip_services?: string[]; /** Whether to run `docker compose down` before `compose up`. */ destroy_before_deploy?: boolean; /** Whether to skip secret interpolation into the stack environment variables. */ diff --git a/ui/public/client/types.d.ts b/ui/public/client/types.d.ts index 0a0b6b530..c612beb26 100644 --- a/ui/public/client/types.d.ts +++ b/ui/public/client/types.d.ts @@ -2603,12 +2603,6 @@ export interface StackConfig { * enable both. */ auto_update?: boolean; - /** - * Ignore certain services during Global Auto Update polling. - * Services listed here are skipped only in the global auto-update flow. - * Manual checks still include all services. - */ - ignore_polling_services?: string[]; /** * If auto update is enabled, Komodo will * by default only update the specific services @@ -2616,6 +2610,12 @@ export interface StackConfig { * Komodo will redeploy the whole Stack (all services). */ auto_update_all_services?: boolean; + /** + * Ignore certain services during Global Auto Update polling. + * Services listed here are skipped only in the global auto-update flow. + * Manual checks still include all services. + */ + auto_update_skip_services?: string[]; /** Whether to run `docker compose down` before `compose up`. */ destroy_before_deploy?: boolean; /** Whether to skip secret interpolation into the stack environment variables. */ diff --git a/ui/src/resources/stack/config/index.tsx b/ui/src/resources/stack/config/index.tsx index ff4395e70..fedef6f74 100644 --- a/ui/src/resources/stack/config/index.tsx +++ b/ui/src/resources/stack/config/index.tsx @@ -392,7 +392,7 @@ export default function StackConfig({ /> ); }, - ignore_polling_services: (values, set) => + auto_update_skip_services: (values, set) => poll_for_updates && ( - set({ ignore_polling_services }) + onChange={(auto_update_skip_services) => + set({ auto_update_skip_services }) } disabled={disabled} w="fit-content"