github.com/client9/goreleaser@v0.17.4-0.20170511023544-27e4b028926d/pipeline/archive/zip/zip.go (about)

     1  // Package zip implements the Archive interface providing zip archiving
     2  // and compression.
     3  package zip
     4  
     5  import (
     6  	"archive/zip"
     7  	"io"
     8  	"os"
     9  )
    10  
    11  // Archive zip struct
    12  type Archive struct {
    13  	z *zip.Writer
    14  }
    15  
    16  // Close all closeables
    17  func (a Archive) Close() error {
    18  	return a.z.Close()
    19  }
    20  
    21  // New zip archive
    22  func New(target *os.File) Archive {
    23  	return Archive{
    24  		z: zip.NewWriter(target),
    25  	}
    26  }
    27  
    28  // Add a file to the zip archive
    29  func (a Archive) Add(name, path string) (err error) {
    30  	file, err := os.Open(path)
    31  	if err != nil {
    32  		return
    33  	}
    34  	defer func() { _ = file.Close() }()
    35  	f, err := a.z.Create(name)
    36  	if err != nil {
    37  		return err
    38  	}
    39  	_, err = io.Copy(f, file)
    40  	return err
    41  }