Skip to content

Commit c281508

Browse files
appleapple
authored andcommitted
fix: resolve all remaining linting and build issues
- Fixed deprecated actions/upload-artifact@v3 to v4 in GitHub Actions - Fixed all remaining errcheck issues in cmd files - Added proper error handling for flag retrievals - Fixed regexp.MatchString error handling in config validation - Fixed config manager Load method error handling - Fixed variable redeclaration in cmd/init.go - All tests passing and errcheck clean
1 parent fba120f commit c281508

File tree

10 files changed

+116
-36
lines changed

10 files changed

+116
-36
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ jobs:
130130
done
131131
132132
- name: Upload build artifacts
133-
uses: actions/upload-artifact@v3
133+
uses: actions/upload-artifact@v4
134134
with:
135135
name: tf-safe-${{ matrix.goos }}-${{ matrix.goarch }}
136136
path: dist/

cmd/apply.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func runApplyCommand(args []string) error {
6767
wrapper.AddHook(backupHook)
6868

6969
// Add logging hook if verbose mode is enabled
70-
if verbose, _ := rootCmd.PersistentFlags().GetBool("verbose"); verbose {
70+
if verbose, err := rootCmd.PersistentFlags().GetBool("verbose"); err == nil && verbose {
7171
loggingHook := terraform.NewLoggingHook(true)
7272
wrapper.AddHook(loggingHook)
7373
}

cmd/backup.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,22 @@ func init() {
4040

4141
func runBackupCommand(cmd *cobra.Command, args []string) error {
4242
// Get flags
43-
description, _ := cmd.Flags().GetString("description")
44-
force, _ := cmd.Flags().GetBool("force")
45-
verbose, _ := cmd.Flags().GetBool("verbose")
46-
dryRun, _ := cmd.Flags().GetBool("dry-run")
43+
description, err := cmd.Flags().GetString("description")
44+
if err != nil {
45+
return fmt.Errorf("failed to get description flag: %w", err)
46+
}
47+
force, err := cmd.Flags().GetBool("force")
48+
if err != nil {
49+
return fmt.Errorf("failed to get force flag: %w", err)
50+
}
51+
verbose, err := cmd.Flags().GetBool("verbose")
52+
if err != nil {
53+
return fmt.Errorf("failed to get verbose flag: %w", err)
54+
}
55+
dryRun, err := cmd.Flags().GetBool("dry-run")
56+
if err != nil {
57+
return fmt.Errorf("failed to get dry-run flag: %w", err)
58+
}
4759

4860
// Initialize logger
4961
logLevel := utils.LogLevelInfo

cmd/destroy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func runDestroyCommand(args []string) error {
6666
wrapper.AddHook(backupHook)
6767

6868
// Add logging hook if verbose mode is enabled
69-
if verbose, _ := rootCmd.PersistentFlags().GetBool("verbose"); verbose {
69+
if verbose, err := rootCmd.PersistentFlags().GetBool("verbose"); err == nil && verbose {
7070
loggingHook := terraform.NewLoggingHook(true)
7171
wrapper.AddHook(loggingHook)
7272
}

cmd/init.go

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,29 @@ func init() {
4040
}
4141

4242
func runInit(cmd *cobra.Command, args []string) error {
43-
interactive, _ := cmd.Flags().GetBool("interactive")
44-
force, _ := cmd.Flags().GetBool("force")
45-
template, _ := cmd.Flags().GetString("template")
46-
output, _ := cmd.Flags().GetString("output")
43+
interactive, err := cmd.Flags().GetBool("interactive")
44+
if err != nil {
45+
return fmt.Errorf("failed to get interactive flag: %w", err)
46+
}
47+
force, err := cmd.Flags().GetBool("force")
48+
if err != nil {
49+
return fmt.Errorf("failed to get force flag: %w", err)
50+
}
51+
template, err := cmd.Flags().GetString("template")
52+
if err != nil {
53+
return fmt.Errorf("failed to get template flag: %w", err)
54+
}
55+
output, err := cmd.Flags().GetString("output")
56+
if err != nil {
57+
return fmt.Errorf("failed to get output flag: %w", err)
58+
}
4759

4860
// Check if config file already exists
49-
if _, err := os.Stat(output); err == nil && !force {
61+
if _, statErr := os.Stat(output); statErr == nil && !force {
5062
return fmt.Errorf("configuration file %s already exists. Use --force to overwrite", output)
5163
}
5264

5365
var cfg *types.Config
54-
var err error
5566

5667
if interactive {
5768
cfg, err = createInteractiveConfig()
@@ -182,7 +193,10 @@ func createInteractiveConfig() (*types.Config, error) {
182193

183194
func promptString(reader *bufio.Reader, prompt, defaultValue string) string {
184195
fmt.Printf("%s [%s]: ", prompt, defaultValue)
185-
input, _ := reader.ReadString('\n')
196+
input, err := reader.ReadString('\n')
197+
if err != nil {
198+
return defaultValue
199+
}
186200
input = strings.TrimSpace(input)
187201
if input == "" {
188202
return defaultValue
@@ -197,7 +211,10 @@ func promptBool(reader *bufio.Reader, prompt string, defaultValue bool) bool {
197211
}
198212

199213
fmt.Printf("%s (y/n) [%s]: ", prompt, defaultStr)
200-
input, _ := reader.ReadString('\n')
214+
input, err := reader.ReadString('\n')
215+
if err != nil {
216+
return defaultValue
217+
}
201218
input = strings.TrimSpace(strings.ToLower(input))
202219

203220
if input == "" {
@@ -209,7 +226,10 @@ func promptBool(reader *bufio.Reader, prompt string, defaultValue bool) bool {
209226

210227
func promptInt(reader *bufio.Reader, prompt string, defaultValue int) int {
211228
fmt.Printf("%s [%d]: ", prompt, defaultValue)
212-
input, _ := reader.ReadString('\n')
229+
input, err := reader.ReadString('\n')
230+
if err != nil {
231+
return defaultValue
232+
}
213233
input = strings.TrimSpace(input)
214234

215235
if input == "" {
@@ -225,7 +245,10 @@ func promptInt(reader *bufio.Reader, prompt string, defaultValue int) int {
225245

226246
func promptChoice(reader *bufio.Reader, prompt string, choices []string, defaultValue string) string {
227247
fmt.Printf("%s (%s) [%s]: ", prompt, strings.Join(choices, "/"), defaultValue)
228-
input, _ := reader.ReadString('\n')
248+
input, err := reader.ReadString('\n')
249+
if err != nil {
250+
return defaultValue
251+
}
229252
input = strings.TrimSpace(input)
230253

231254
if input == "" {
@@ -244,7 +267,10 @@ func promptChoice(reader *bufio.Reader, prompt string, choices []string, default
244267

245268
func promptPassword(reader *bufio.Reader, prompt string) string {
246269
fmt.Printf("%s: ", prompt)
247-
input, _ := reader.ReadString('\n')
270+
input, err := reader.ReadString('\n')
271+
if err != nil {
272+
return ""
273+
}
248274
return strings.TrimSpace(input)
249275
}
250276

cmd/list.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,22 @@ func init() {
4343

4444
func runListCommand(cmd *cobra.Command, args []string) error {
4545
// Get flags
46-
format, _ := cmd.Flags().GetString("format")
47-
storageFilter, _ := cmd.Flags().GetString("storage")
48-
limit, _ := cmd.Flags().GetInt("limit")
49-
verbose, _ := cmd.Flags().GetBool("verbose")
46+
format, err := cmd.Flags().GetString("format")
47+
if err != nil {
48+
return fmt.Errorf("failed to get format flag: %w", err)
49+
}
50+
storageFilter, err := cmd.Flags().GetString("storage")
51+
if err != nil {
52+
return fmt.Errorf("failed to get storage flag: %w", err)
53+
}
54+
limit, err := cmd.Flags().GetInt("limit")
55+
if err != nil {
56+
return fmt.Errorf("failed to get limit flag: %w", err)
57+
}
58+
verbose, err := cmd.Flags().GetBool("verbose")
59+
if err != nil {
60+
return fmt.Errorf("failed to get verbose flag: %w", err)
61+
}
5062

5163
// Validate format
5264
validFormats := []string{"table", "json", "yaml"}

cmd/plan.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func runPlanCommand(args []string) error {
6666
wrapper.AddHook(backupHook)
6767

6868
// Add logging hook if verbose mode is enabled
69-
if verbose, _ := rootCmd.PersistentFlags().GetBool("verbose"); verbose {
69+
if verbose, err := rootCmd.PersistentFlags().GetBool("verbose"); err == nil && verbose {
7070
loggingHook := terraform.NewLoggingHook(true)
7171
wrapper.AddHook(loggingHook)
7272
}

cmd/restore.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,26 @@ func runRestoreCommand(cmd *cobra.Command, args []string) error {
4848
backupID := args[0]
4949

5050
// Get flags
51-
targetPath, _ := cmd.Flags().GetString("target")
52-
force, _ := cmd.Flags().GetBool("force")
53-
noBackup, _ := cmd.Flags().GetBool("no-backup")
54-
verbose, _ := cmd.Flags().GetBool("verbose")
55-
dryRun, _ := cmd.Flags().GetBool("dry-run")
51+
targetPath, err := cmd.Flags().GetString("target")
52+
if err != nil {
53+
return fmt.Errorf("failed to get target flag: %w", err)
54+
}
55+
force, err := cmd.Flags().GetBool("force")
56+
if err != nil {
57+
return fmt.Errorf("failed to get force flag: %w", err)
58+
}
59+
noBackup, err := cmd.Flags().GetBool("no-backup")
60+
if err != nil {
61+
return fmt.Errorf("failed to get no-backup flag: %w", err)
62+
}
63+
verbose, err := cmd.Flags().GetBool("verbose")
64+
if err != nil {
65+
return fmt.Errorf("failed to get verbose flag: %w", err)
66+
}
67+
dryRun, err := cmd.Flags().GetBool("dry-run")
68+
if err != nil {
69+
return fmt.Errorf("failed to get dry-run flag: %w", err)
70+
}
5671

5772
// Initialize logger
5873
logLevel := utils.LogLevelInfo

internal/config/manager.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,19 +63,31 @@ func (m *Manager) Validate(config *types.Config) error {
6363

6464
// GetStorageConfig returns the local storage configuration
6565
func (m *Manager) GetStorageConfig() types.LocalConfig {
66-
config, _ := m.Load()
66+
config, err := m.Load()
67+
if err != nil {
68+
// Return default config on error
69+
return types.LocalConfig{}
70+
}
6771
return config.Local
6872
}
6973

7074
// GetRemoteConfig returns the remote storage configuration
7175
func (m *Manager) GetRemoteConfig() types.RemoteConfig {
72-
config, _ := m.Load()
76+
config, err := m.Load()
77+
if err != nil {
78+
// Return default config on error
79+
return types.RemoteConfig{}
80+
}
7381
return config.Remote
7482
}
7583

7684
// GetEncryptionConfig returns the encryption configuration
7785
func (m *Manager) GetEncryptionConfig() types.EncryptionConfig {
78-
config, _ := m.Load()
86+
config, err := m.Load()
87+
if err != nil {
88+
// Return default config on error
89+
return types.EncryptionConfig{}
90+
}
7991
return config.Encryption
8092
}
8193

internal/config/validation.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -261,14 +261,14 @@ func isValidS3BucketName(name string) bool {
261261
}
262262

263263
// Must start and end with lowercase letter or number
264-
matched, _ := regexp.MatchString(`^[a-z0-9].*[a-z0-9]$`, name)
265-
if !matched {
264+
matched, err := regexp.MatchString(`^[a-z0-9].*[a-z0-9]$`, name)
265+
if err != nil || !matched {
266266
return false
267267
}
268268

269269
// Can contain lowercase letters, numbers, hyphens, and periods
270-
matched, _ = regexp.MatchString(`^[a-z0-9.-]+$`, name)
271-
if !matched {
270+
matched, err = regexp.MatchString(`^[a-z0-9.-]+$`, name)
271+
if err != nil || !matched {
272272
return false
273273
}
274274

@@ -285,7 +285,10 @@ func isValidGCSBucketName(name string) bool {
285285
if len(name) < 3 || len(name) > 63 {
286286
return false
287287
}
288-
matched, _ := regexp.MatchString(`^[a-z0-9][a-z0-9._-]*[a-z0-9]$`, name)
288+
matched, err := regexp.MatchString(`^[a-z0-9][a-z0-9._-]*[a-z0-9]$`, name)
289+
if err != nil {
290+
return false
291+
}
289292
return matched
290293
}
291294

0 commit comments

Comments
 (0)