mirror of
https://github.com/coder/coder.git
synced 2026-06-03 13:08:25 +00:00
9d2643d3aa
## Description Fixes https://github.com/coder/coder/issues/21885 When multiple `coder_env` resources define the same key for a single agent, the final environment variable value was non-deterministic because Go maps have random iteration order. The `ConvertState` function iterated over `tfResourcesByLabel` (a map) to associate `coder_env` resources with agents, making the order of `ExtraEnvs` unpredictable across builds. ## Changes - Added `sortedResourcesByType()` helper in `resources.go` that collects resources of a given type from the label map and sorts them by Terraform address before processing - Replaced map iteration for `coder_env` and `coder_script` association with sorted iteration, ensuring deterministic ordering - Added `duplicate-env-keys` test case and fixture verifying that when two `coder_env` resources define the same key, the result is deterministic (sorted by address) ## How it works When duplicate keys exist, the last one by sorted Terraform address wins. For example, `coder_env.path_a` is processed before `coder_env.path_b`, so `path_b`'s value will be the final one in `ExtraEnvs`. Since `provisionerdserver.go` merges `ExtraEnvs` into a map (last wins), this produces stable, predictable results.