func newArtifactZipper()

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
	}
}