Skip to content

Commit 2554e78

Browse files
yroblataskbotCopilot
authored
feat: validate workloads before actually running them (#1047)
Co-authored-by: taskbot <[email protected]> Co-authored-by: Copilot <[email protected]>
1 parent e758fb9 commit 2554e78

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

pkg/runner/config.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,20 @@ func (c *RunConfig) WithEnvironmentVariables(envVarStrings []string) (*RunConfig
277277
return c, nil
278278
}
279279

280+
// ValidateSecrets checks if the secrets can be parsed and are valid
281+
func (c *RunConfig) ValidateSecrets(ctx context.Context, secretManager secrets.Provider) error {
282+
if len(c.Secrets) == 0 {
283+
return nil // No secrets to validate
284+
}
285+
286+
_, err := environment.ParseSecretParameters(ctx, c.Secrets, secretManager)
287+
if err != nil {
288+
return fmt.Errorf("failed to get secrets: %w", err)
289+
}
290+
291+
return nil
292+
}
293+
280294
// WithSecrets processes secrets and adds them to environment variables
281295
func (c *RunConfig) WithSecrets(ctx context.Context, secretManager secrets.Provider) (*RunConfig, error) {
282296
if len(c.Secrets) == 0 {

pkg/workloads/manager.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,37 @@ func (d *defaultManager) RunWorkload(ctx context.Context, runConfig *runner.RunC
189189
return err
190190
}
191191

192+
func validateSecretParameters(ctx context.Context, runConfig *runner.RunConfig) error {
193+
// If there are run secrets, validate them
194+
if len(runConfig.Secrets) > 0 {
195+
cfg := config.GetConfig()
196+
197+
providerType, err := cfg.Secrets.GetProviderType()
198+
if err != nil {
199+
return fmt.Errorf("error determining secrets provider type: %w", err)
200+
}
201+
202+
secretManager, err := secrets.CreateSecretProvider(providerType)
203+
if err != nil {
204+
return fmt.Errorf("error instantiating secret manager: %w", err)
205+
}
206+
207+
err = runConfig.ValidateSecrets(ctx, secretManager)
208+
if err != nil {
209+
return fmt.Errorf("error processing secrets: %w", err)
210+
}
211+
}
212+
return nil
213+
}
214+
192215
//nolint:gocyclo // This function is complex but manageable
193216
func (d *defaultManager) RunWorkloadDetached(ctx context.Context, runConfig *runner.RunConfig) error {
217+
// before running, validate the parameters for the workload
218+
err := validateSecretParameters(ctx, runConfig)
219+
if err != nil {
220+
return fmt.Errorf("failed to validate workload parameters: %w", err)
221+
}
222+
194223
// Get the current executable path
195224
execPath, err := os.Executable()
196225
if err != nil {

0 commit comments

Comments
 (0)