LoadUserDefaults loads and merges environment files for local module defaults. It combines the inner .env file (from the module's source root) with relevant entries from the outer .env file (found via find-up from the host), filtered by the module name and original module name as prefixes. Example:
(ctx context.Context)
| 1052 | // Outer .env (found via find-up): MYMODULE_BAZ=qux, OTHER_VAR=ignored |
| 1053 | // Result: FOO=bar, BAZ=qux (prefix "MYMODULE_" removed from outer entries) |
| 1054 | func (src *ModuleSource) LoadUserDefaults(ctx context.Context) (rerr error) { |
| 1055 | ctx, span := Tracer(ctx).Start(ctx, "loading user defaults", telemetry.Internal()) |
| 1056 | defer telemetry.EndWithCause(span, &rerr) |
| 1057 | // For local module sources, ensure we have the right client context for filesystem access. |
| 1058 | // Modules run as their own clients, but need access to the original caller's filesystem. |
| 1059 | // NonModuleParentClientMetadata is idempotent, so this is safe to call multiple times. |
| 1060 | if src.Kind == ModuleSourceKindLocal { |
| 1061 | query, err := CurrentQuery(ctx) |
| 1062 | if err != nil { |
| 1063 | return fmt.Errorf("failed to get current query: %w", err) |
| 1064 | } |
| 1065 | localSourceClientMetadata, err := query.NonModuleParentClientMetadata(ctx) |
| 1066 | if err != nil { |
| 1067 | return fmt.Errorf("failed to get client metadata: %w", err) |
| 1068 | } |
| 1069 | ctx = engine.ContextWithClientMetadata(ctx, localSourceClientMetadata) |
| 1070 | } |
| 1071 | innerEnvFile, _, err := src.innerEnvFile(ctx) |
| 1072 | if err != nil { |
| 1073 | return err |
| 1074 | } |
| 1075 | outerEnvFile, _, err := src.outerEnvFile(ctx) |
| 1076 | if err != nil { |
| 1077 | return err |
| 1078 | } |
| 1079 | outerForName, err := outerEnvFile.Namespace(ctx, src.ModuleName) |
| 1080 | if err != nil { |
| 1081 | return err |
| 1082 | } |
| 1083 | outerForOriginalName, err := outerEnvFile.Namespace(ctx, src.ModuleOriginalName) |
| 1084 | if err != nil { |
| 1085 | return err |
| 1086 | } |
| 1087 | src.UserDefaults = NewEnvFile(true).WithEnvFiles(innerEnvFile, outerForName, outerForOriginalName) |
| 1088 | return nil |
| 1089 | } |
| 1090 | |
| 1091 | // we mix this into digest hashes to ensure they don't accidentally collide |
| 1092 | // with any others |
no test coverage detected