Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion bin/core/src/api/write/stack.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.auto_update_skip_services.contains(
&service.service_name,
))
{
service.image_digest = None;
continue;
Expand Down
12 changes: 12 additions & 0 deletions client/core/rs/src/entities/stack.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<String>,

/// Whether to run `docker compose down` before `compose up`.
#[serde(default)]
#[builder(default)]
Expand Down Expand Up @@ -688,6 +699,7 @@ 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(),
pre_deploy: Default::default(),
post_deploy: Default::default(),
Expand Down
6 changes: 6 additions & 0 deletions client/core/ts/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2468,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. */
Expand Down
6 changes: 6 additions & 0 deletions ui/public/client/types.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2610,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. */
Expand Down
23 changes: 23 additions & 0 deletions ui/src/resources/stack/config/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -390,6 +392,27 @@ export default function StackConfig({
/>
);
},
auto_update_skip_services: (values, set) =>
poll_for_updates && (
<ConfigItem
label="Ignore Services During Polling"
description="Services listed here are skipped only during Global Auto Update checks. Manual checks still include all services."
>
<MultiSelect
leftSection={<ICONS.Service size="1rem" />}
placeholder={values?.length ? "Add services" : "Select services"}
value={values}
data={allServices}
onChange={(auto_update_skip_services) =>
set({ auto_update_skip_services })
}
disabled={disabled}
w="fit-content"
searchable
clearable
/>
</ConfigItem>
),
auto_update: {
description: "Trigger a redeploy if a newer image is found.",
},
Expand Down