github.com/goreleaser/goreleaser@v1.25.1/pkg/archive/targz/targz.go (about) 1 // Package targz implements the Archive interface providing tar.gz archiving 2 // and compression. 3 package targz 4 5 import ( 6 "compress/gzip" 7 "io" 8 9 "github.com/goreleaser/goreleaser/pkg/archive/tar" 10 "github.com/goreleaser/goreleaser/pkg/config" 11 ) 12 13 // Archive as tar.gz. 14 type Archive struct { 15 gw *gzip.Writer 16 tw *tar.Archive 17 } 18 19 // New tar.gz archive. 20 func New(target io.Writer) Archive { 21 // the error will be nil since the compression level is valid 22 gw, _ := gzip.NewWriterLevel(target, gzip.BestCompression) 23 tw := tar.New(gw) 24 return Archive{ 25 gw: gw, 26 tw: &tw, 27 } 28 } 29 30 func Copying(source io.Reader, target io.Writer) (Archive, error) { 31 // the error will be nil since the compression level is valid 32 gw, _ := gzip.NewWriterLevel(target, gzip.BestCompression) 33 srcgz, err := gzip.NewReader(source) 34 if err != nil { 35 return Archive{}, err 36 } 37 tw, err := tar.Copying(srcgz, gw) 38 return Archive{ 39 gw: gw, 40 tw: &tw, 41 }, err 42 } 43 44 // Close all closeables. 45 func (a Archive) Close() error { 46 if err := a.tw.Close(); err != nil { 47 return err 48 } 49 return a.gw.Close() 50 } 51 52 // Add file to the archive. 53 func (a Archive) Add(f config.File) error { 54 return a.tw.Add(f) 55 }