From 06e599b181e9293b3f866117564c6e6715f5618f Mon Sep 17 00:00:00 2001 From: Artyom Tetyukhin <51746822+arttet@users.noreply.github.com> Date: Wed, 8 Apr 2026 19:44:17 +0400 Subject: [PATCH] fix(executor): avoid re-invoking providers on each render-env pass Skip re-resolving keys that are already fully resolved in env_vars, preventing provider functions (e.g. compose.collect-files) from being called on every stabilization pass. --- src/engine/executor.nu | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/engine/executor.nu b/src/engine/executor.nu index 8a87a38..3f35231 100644 --- a/src/engine/executor.nu +++ b/src/engine/executor.nu @@ -122,8 +122,13 @@ def render-env [content: string, ctx: record, ...excluded: string] { if ($key | is-empty) or ($key in $excluded) { $acc } else { - let resolved = try { resolve $val ($ctx | upsert env_vars $acc) } catch { $val } - $acc | upsert $key $resolved + let current = ($acc | get --optional $key | default "") + if ($current | is-not-empty) and not ($current | str contains "{{") { + $acc + } else { + let resolved = try { resolve $val ($ctx | upsert env_vars $acc) } catch { $val } + $acc | upsert $key $resolved + } } } }) @@ -146,7 +151,12 @@ def render-env [content: string, ctx: record, ...excluded: string] { if ($key | is-empty) or ($key in $excluded) { $line } else { - let resolved = try { resolve $val ($ctx | upsert env_vars $resolved_vars) } catch { $val } + let current = ($resolved_vars | get --optional $key | default "") + let resolved = if ($current | is-not-empty) and not ($current | str contains "{{") { + $current + } else { + try { resolve $val ($ctx | upsert env_vars $resolved_vars) } catch { $val } + } $"($key)=($resolved)" } }