Skip to content

Commit a2ac7d7

Browse files
committed
fix: backup binary with version number instead of .old
- Backups named as fleetctl.<version> (e.g., fleetctl.0.0.1-rc.4) - Shows backup location after successful update - Easier to identify which version a backup contains
1 parent 6e8baa6 commit a2ac7d7

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

cmd/fleetctl/cmd/update.go

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,9 @@ func isWritable(path string) bool {
238238
}
239239

240240
func replaceBinary(src, dest string) error {
241-
// Backup current binary
242-
backup := dest + ".old"
241+
// Backup current binary with version number
242+
currentVersion := strings.TrimPrefix(version.Version, "v")
243+
backup := dest + "." + currentVersion
243244
if err := os.Rename(dest, backup); err != nil {
244245
return fmt.Errorf("failed to backup current binary: %w", err)
245246
}
@@ -256,18 +257,32 @@ func replaceBinary(src, dest string) error {
256257
return fmt.Errorf("failed to set permissions: %w", err)
257258
}
258259

259-
// Remove backup
260-
os.Remove(backup)
260+
printInfo("Backed up previous version to: %s", backup)
261261

262262
return nil
263263
}
264264

265265
func replaceBinaryWithSudo(src, dest string) error {
266-
// Use sudo to replace the binary
267-
cmd := exec.Command("sudo", "cp", src, dest)
266+
// Backup current binary with version number
267+
currentVersion := strings.TrimPrefix(version.Version, "v")
268+
backup := dest + "." + currentVersion
269+
270+
// Move current binary to backup
271+
cmd := exec.Command("sudo", "mv", dest, backup)
272+
cmd.Stdout = os.Stdout
273+
cmd.Stderr = os.Stderr
274+
if err := cmd.Run(); err != nil {
275+
return fmt.Errorf("failed to backup current binary: %w", err)
276+
}
277+
278+
// Copy new binary
279+
cmd = exec.Command("sudo", "cp", src, dest)
268280
cmd.Stdout = os.Stdout
269281
cmd.Stderr = os.Stderr
270282
if err := cmd.Run(); err != nil {
283+
// Restore backup on failure
284+
restoreCmd := exec.Command("sudo", "mv", backup, dest)
285+
restoreCmd.Run()
271286
return fmt.Errorf("failed to copy with sudo: %w", err)
272287
}
273288

@@ -277,6 +292,8 @@ func replaceBinaryWithSudo(src, dest string) error {
277292
return fmt.Errorf("failed to set permissions: %w", err)
278293
}
279294

295+
printInfo("Backed up previous version to: %s", backup)
296+
280297
return nil
281298
}
282299

0 commit comments

Comments
 (0)