(raw string)
| 1075 | } |
| 1076 | |
| 1077 | func parseAutomationRetryFlag(raw string) (*automationpkg.RetryConfig, error) { |
| 1078 | trimmed := strings.TrimSpace(raw) |
| 1079 | if trimmed == "" { |
| 1080 | return nil, nil |
| 1081 | } |
| 1082 | |
| 1083 | lower := strings.ToLower(trimmed) |
| 1084 | var cfg automationpkg.RetryConfig |
| 1085 | switch { |
| 1086 | case lower == string(automationpkg.RetryStrategyNone): |
| 1087 | cfg = automationpkg.DefaultRetryConfig() |
| 1088 | case lower == string(automationpkg.RetryStrategyBackoff): |
| 1089 | cfg = automationpkg.DefaultBackoffRetryConfig() |
| 1090 | case strings.HasPrefix(lower, "backoff:"): |
| 1091 | payload := strings.TrimSpace(trimmed[len("backoff:"):]) |
| 1092 | parts := strings.Split(payload, ":") |
| 1093 | if len(parts) != 2 { |
| 1094 | return nil, fmt.Errorf( |
| 1095 | `cli: invalid retry value %q: use "none", "backoff", or "backoff:<max_retries>:<base_delay>"`, |
| 1096 | trimmed, |
| 1097 | ) |
| 1098 | } |
| 1099 | maxRetries, err := strconv.Atoi(strings.TrimSpace(parts[0])) |
| 1100 | if err != nil { |
| 1101 | return nil, fmt.Errorf("cli: invalid retry max_retries %q: %w", parts[0], err) |
| 1102 | } |
| 1103 | cfg = automationpkg.RetryConfig{ |
| 1104 | Strategy: automationpkg.RetryStrategyBackoff, |
| 1105 | MaxRetries: maxRetries, |
| 1106 | BaseDelay: strings.TrimSpace(parts[1]), |
| 1107 | } |
| 1108 | default: |
| 1109 | return nil, fmt.Errorf( |
| 1110 | `cli: invalid retry value %q: use "none", "backoff", or "backoff:<max_retries>:<base_delay>"`, |
| 1111 | trimmed, |
| 1112 | ) |
| 1113 | } |
| 1114 | |
| 1115 | if err := cfg.Validate(automationRetryKey); err != nil { |
| 1116 | return nil, fmt.Errorf("cli: %w", err) |
| 1117 | } |
| 1118 | return &cfg, nil |
| 1119 | } |
| 1120 | |
| 1121 | func parseAutomationFilterFlags(flags []string) (map[string]string, error) { |
| 1122 | if len(flags) == 0 { |
no test coverage detected