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 }