in cft/pkg/util.go [49:108]
func zipPath(root string) (string, error) {
tmpFile, err := ioutil.TempFile(os.TempDir(), "*.zip")
if err != nil {
return "", err
}
defer tmpFile.Close()
w := zip.NewWriter(tmpFile)
defer w.Close()
zRoot := root
info, err := os.Stat(zRoot)
if err != nil {
return "", err
}
if !info.IsDir() {
zRoot = filepath.Dir(zRoot)
}
err = filepath.Walk(root, func(path string, info fs.FileInfo, err error) error {
if err != nil {
return err
}
if !info.Mode().IsRegular() {
return nil
}
in, err := os.Open(path)
if err != nil {
return err
}
defer in.Close()
zPath, err := filepath.Rel(zRoot, path)
if err != nil {
return err
}
zPath = filepath.ToSlash(zPath)
fh, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
fh.Name = zPath
fh.Method = zip.Deflate
out, err := w.CreateHeader(fh)
if err != nil {
return err
}
_, err = io.Copy(out, in)
return err
})
return tmpFile.Name(), err
}