in archiver/archive.go [26:87]
func ArchivePackage(w io.Writer, properties PackageProperties) (err error) {
zipWriter := zip.NewWriter(w)
defer func() {
var multiErr multierror.Errors
if err != nil {
multiErr = append(multiErr, err)
}
err = zipWriter.Close()
if err != nil {
multiErr = append(multiErr, fmt.Errorf("closing zip writer failed: %w", err))
}
if multiErr != nil {
err = multiErr.Err()
}
}()
rootDir := fmt.Sprintf("%s-%s", properties.Name, properties.Version)
err = filepath.Walk(properties.Path, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
relativePath, err := filepath.Rel(properties.Path, path)
if err != nil {
return fmt.Errorf("finding relative path failed (packagePath: %s, path: %s): %w", properties.Path, path, err)
}
if relativePath == "." {
return nil
}
header, err := buildArchiveHeader(info, filepath.Join(rootDir, relativePath))
if err != nil {
return fmt.Errorf("building archive header failed (path: %s): %w", relativePath, err)
}
w, err = zipWriter.CreateHeader(header)
if err != nil {
return fmt.Errorf("writing header failed (path: %s): %w", relativePath, err)
}
if !info.IsDir() {
err = writeFileContentToArchive(path, w)
if err != nil {
return fmt.Errorf("archiving file content failed (path: %s): %w", path, err)
}
}
return nil
})
if err != nil {
return fmt.Errorf("processing package path '%s' failed: %w", properties.Path, err)
}
err = zipWriter.Flush()
if err != nil {
return fmt.Errorf("flushing zip writer failed: %w", err)
}
return nil
}