github.com/jfrog/jfrog-client-go@v1.40.2/utils/io/fileutils/zip.go (about) 1 package fileutils 2 3 import ( 4 "archive/zip" 5 "errors" 6 "github.com/jfrog/jfrog-client-go/utils/errorutils" 7 "io" 8 "os" 9 "path/filepath" 10 ) 11 12 func ZipFolderFiles(source, target string) (err error) { 13 zipFile, err := os.Create(target) 14 if err != nil { 15 return errorutils.CheckError(err) 16 } 17 defer func() { 18 err = errors.Join(errorutils.CheckError(zipFile.Close())) 19 }() 20 21 archive := zip.NewWriter(zipFile) 22 defer func() { 23 err = errors.Join(errorutils.CheckError(archive.Close())) 24 }() 25 26 return filepath.Walk(source, func(path string, info os.FileInfo, err error) (currentErr error) { 27 if info.IsDir() { 28 return 29 } 30 31 if currentErr = errors.Join(currentErr, err); currentErr != nil { 32 return 33 } 34 35 header, currentErr := zip.FileInfoHeader(info) 36 if currentErr != nil { 37 return errorutils.CheckError(currentErr) 38 } 39 40 header.Method = zip.Deflate 41 writer, currentErr := archive.CreateHeader(header) 42 if currentErr != nil { 43 return errorutils.CheckError(currentErr) 44 } 45 46 file, currentErr := os.Open(path) 47 if currentErr != nil { 48 return errorutils.CheckError(currentErr) 49 } 50 defer func() { 51 currentErr = errors.Join(errorutils.CheckError(file.Close())) 52 }() 53 _, currentErr = io.Copy(writer, file) 54 return 55 }) 56 }