From fb5dcd05c386b892356254d19f9553ab1e078f5b Mon Sep 17 00:00:00 2001 From: Orestis Floros Date: Thu, 9 Oct 2025 11:04:18 +0200 Subject: [PATCH 1/2] mage: Improve error messages and resource handling This commit includes minor developer tooling improvements: - Improves the checksum mismatch error message for better diagnostics. - Fix spurious "error closing" logs when double-closing files explicitely and with `defer` --- dev-tools/mage/downloads/utils.go | 2 +- dev-tools/mage/pkgtypes.go | 31 ++++++++++++++----------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/dev-tools/mage/downloads/utils.go b/dev-tools/mage/downloads/utils.go index e0ae9cfd20e..a0cbfffd4a5 100644 --- a/dev-tools/mage/downloads/utils.go +++ b/dev-tools/mage/downloads/utils.go @@ -110,7 +110,7 @@ func verifyChecksum(checksumFile string) error { } if expectedChecksum != actualChecksum { - return fmt.Errorf("checksum of file %s does not match expected checksum of %s", fileName, actualChecksum) + return fmt.Errorf("%s checksum mismatch: expected=%s actual=%s", fileName, expectedChecksum, actualChecksum) } return nil diff --git a/dev-tools/mage/pkgtypes.go b/dev-tools/mage/pkgtypes.go index 8da5d7ca9fa..60f00803344 100644 --- a/dev-tools/mage/pkgtypes.go +++ b/dev-tools/mage/pkgtypes.go @@ -9,6 +9,7 @@ import ( "archive/zip" "bytes" "compress/gzip" + "errors" "fmt" "hash/fnv" "io" @@ -666,27 +667,15 @@ func PackageTarGz(spec PackageSpec) error { if err != nil { return err } - defer func() { - if err := outFile.Close(); err != nil { - log.Printf("failed to close output file: %v", err) - } - }() + defer closeOrLog(outFile, "output file") // Create a gzip writer to our output file gzWriter := gzip.NewWriter(outFile) - defer func() { - if err := gzWriter.Close(); err != nil { - log.Printf("failed to close gzip writer: %v", err) - } - }() + defer closeOrLog(gzWriter, "gzip writer") // Create a new tar archive. w := tar.NewWriter(gzWriter) - defer func() { - if err := w.Close(); err != nil { - log.Printf("failed to close tar writer: %v", err) - } - }() + defer closeOrLog(gzWriter, "tar writer") // // Replace the darwin-universal by darwin-x86_64 and darwin-arm64. Also // // keep the other files. @@ -759,6 +748,14 @@ func PackageTarGz(spec PackageSpec) error { return nil } +func closeOrLog(closer io.Closer, what string) { + err := closer.Close() + if err == nil || errors.Is(err, os.ErrClosed) { + return + } + log.Printf("failed to close %s: %v", what, err) +} + // PackageDeb packages a deb file. This requires Docker to execute FPM. func PackageDeb(spec PackageSpec) error { return runFPM(spec, Deb) @@ -953,7 +950,7 @@ func addFileToZip(ar *zip.Writer, baseDir string, pkgFile PackageFile) error { if err != nil { return err } - defer file.Close() + defer closeOrLog(file, "zip input file") if _, err = io.Copy(w, file); err != nil { return err @@ -1034,7 +1031,7 @@ func addFileToTar(ar *tar.Writer, baseDir string, pkgFile PackageFile) error { if err != nil { return err } - defer file.Close() + defer closeOrLog(file, "tar input file") if _, err = io.Copy(ar, file); err != nil { return err From 62f163431a1a8988ca9a6821a557061ed6506688 Mon Sep 17 00:00:00 2001 From: Orestis Floros Date: Thu, 9 Oct 2025 12:44:38 +0200 Subject: [PATCH 2/2] fix test --- dev-tools/mage/downloads/utils_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev-tools/mage/downloads/utils_test.go b/dev-tools/mage/downloads/utils_test.go index 43c84df0fc0..daa1e7eeba4 100644 --- a/dev-tools/mage/downloads/utils_test.go +++ b/dev-tools/mage/downloads/utils_test.go @@ -86,6 +86,7 @@ func TestVerifyChecksum(t *testing.T) { require.NoError(t, os.WriteFile(checksumPath, []byte(checksumContent), 0644)) err := verifyChecksum(checksumPath) - assert.ErrorContains(t, err, "does not match expected checksum") + contains := fmt.Sprintf("%s checksum mismatch: expected=%s", fileName, hashHex) + assert.ErrorContains(t, err, contains) }) }