github.com/tilotech/tilores-cli@v0.28.0/internal/pkg/step/packagezip.go (about) 1 package step 2 3 import ( 4 "archive/zip" 5 "io" 6 "os" 7 "path" 8 ) 9 10 // PackageZip creates a step that packages the source into a zip file. 11 func PackageZip(source string, target string) Step { 12 return func() error { 13 sourceFile, err := os.Open(source) //nolint:gosec // reason: static path 14 if err != nil { 15 return err 16 } 17 defer sourceFile.Close() //nolint:gosec,errcheck // reason: opened for read 18 19 targetFile, err := os.Create(target) //nolint:gosec 20 if err != nil { 21 return err 22 } 23 defer targetFile.Close() //nolint:gosec,errcheck // reason: only applicable for error cases 24 25 zipWriter := zip.NewWriter(targetFile) 26 zipFile, err := zipWriter.Create(path.Base(source)) 27 if err != nil { 28 return err 29 } 30 _, err = io.Copy(zipFile, sourceFile) 31 if err != nil { 32 return err 33 } 34 err = zipWriter.Close() 35 if err != nil { 36 return err 37 } 38 39 return targetFile.Close() 40 } 41 }