(ctx context.Context, instanceID string)
| 277 | } |
| 278 | |
| 279 | func (r *Runtime) pullEnv(ctx context.Context, instanceID string) (int, bool, error) { |
| 280 | inst, err := r.Instance(ctx, instanceID) |
| 281 | if err != nil { |
| 282 | return 0, false, err |
| 283 | } |
| 284 | |
| 285 | repo, release, err := r.Repo(ctx, instanceID) |
| 286 | if err != nil { |
| 287 | return 0, false, err |
| 288 | } |
| 289 | defer release() |
| 290 | |
| 291 | // Fetch cloud variables if an admin connector is configured (not configured only for tests) |
| 292 | var cloudPerEnv map[string]map[string]string |
| 293 | if inst.AdminConnector != "" { |
| 294 | admin, release, err := r.Admin(ctx, instanceID) |
| 295 | if err != nil { |
| 296 | return 0, false, err |
| 297 | } |
| 298 | defer release() |
| 299 | |
| 300 | cfg, err := admin.GetConfig(ctx) |
| 301 | if err != nil && !errors.Is(err, drivers.ErrNotAuthenticated) { |
| 302 | return 0, false, fmt.Errorf("failed to get project variables: %w", err) |
| 303 | } |
| 304 | if cfg != nil { |
| 305 | cloudPerEnv = cfg.Variables |
| 306 | } |
| 307 | } |
| 308 | |
| 309 | // Parse local .env files |
| 310 | p, err := parser.Parse(ctx, repo, instanceID, inst.Environment, inst.OLAPConnector, false) |
| 311 | if err != nil { |
| 312 | return 0, false, fmt.Errorf("failed to parse project: %w", err) |
| 313 | } |
| 314 | |
| 315 | localPerEnv := p.GetDotEnvPerEnvironment() |
| 316 | |
| 317 | // Check if all environments are already up to date |
| 318 | equal := true |
| 319 | totalCount := 0 |
| 320 | for env, cloudVars := range cloudPerEnv { |
| 321 | totalCount += len(cloudVars) |
| 322 | if !maps.Equal(cloudVars, localPerEnv[env]) { |
| 323 | equal = false |
| 324 | break |
| 325 | } |
| 326 | } |
| 327 | |
| 328 | if equal { |
| 329 | return totalCount, false, nil |
| 330 | } |
| 331 | |
| 332 | // Write merged variables per environment |
| 333 | for env, cloudVars := range cloudPerEnv { |
| 334 | merged := make(map[string]string) |
| 335 | maps.Copy(merged, localPerEnv[env]) |
| 336 | maps.Copy(merged, cloudVars) |
no test coverage detected