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  }