in command-runner/pkg/features/artifact_creator.go [52:104]
func newArtifactZipper(artifactDir string) common.Executor {
zipPath := filepath.Join(filepath.Dir(artifactDir), fmt.Sprintf("%s.zip", filepath.Base(artifactDir)))
return func(ctx context.Context) error {
dstFile, err := os.Create(zipPath)
if err != nil {
return err
}
defer dstFile.Close()
zipWriter := zip.NewWriter(dstFile)
defer zipWriter.Close()
count := 0
walker := func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
return nil
}
src, err := os.Open(path)
if err != nil {
return err
}
defer src.Close()
relPath, err := filepath.Rel(artifactDir, path)
if err != nil {
return err
}
dst, err := zipWriter.Create(relPath)
if err != nil {
return err
}
_, err = io.Copy(dst, src)
if err != nil {
return err
}
count++
return nil
}
err = filepath.Walk(artifactDir, walker)
if err != nil {
return err
}
if count == 0 {
os.Remove(zipPath)
}
return nil
}
}