command-runner/internal/fs/zip_collector.go (26 lines of code) (raw):

package fs import ( "archive/zip" "io" "io/fs" ) // ZipCollector is a Collector that writes files to a zip file type ZipCollector struct { ZipWriter *zip.Writer // the zip writer to write files to } // WriteFile writes files to a zip file func (zc ZipCollector) WriteFile(fpath string, fi fs.FileInfo, _ string, f io.Reader) error { // create a new dir/file header header, err := zip.FileInfoHeader(fi) if err != nil { return err } header.Name = fpath header.SetMode(fi.Mode()) header.Modified = fi.ModTime() // write the header writer, err := zc.ZipWriter.CreateHeader(header) if err != nil { return err } // copy file data into zip writer if _, err := io.Copy(writer, f); err != nil { return err } return nil }