mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-03-17 20:47:50 +02:00
Merge pull request #260 from goreleaser/archive
using goreleaser/archive
This commit is contained in:
commit
2764d13877
8
Gopkg.lock
generated
8
Gopkg.lock
generated
@ -31,6 +31,12 @@
|
||||
packages = ["query"]
|
||||
revision = "53e6ce116135b80d037921a7fdd5138cf32d7a8a"
|
||||
|
||||
[[projects]]
|
||||
name = "github.com/goreleaser/archive"
|
||||
packages = [".","tar","zip"]
|
||||
revision = "caa5f3f5742eb0535631e94fa5e171c74c0144b7"
|
||||
version = "v1.0.0"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
name = "github.com/mattn/go-zglob"
|
||||
@ -94,6 +100,6 @@
|
||||
[solve-meta]
|
||||
analyzer-name = "dep"
|
||||
analyzer-version = 1
|
||||
inputs-digest = "d6da23d2c5d62fbc0e9d6effeeea88169d4c5add4eb620087f17af4853a41cc4"
|
||||
inputs-digest = "15a60b1efa147cc2507589fd45e4b767e118c6853c6ae2e2728a6ba01b818fe4"
|
||||
solver-name = "gps-cdcl"
|
||||
solver-version = 1
|
||||
|
@ -64,7 +64,9 @@
|
||||
## what source location any dependent projects specify.
|
||||
# source = "https://github.com/myfork/package.git"
|
||||
|
||||
|
||||
[[constraint]]
|
||||
name = "github.com/goreleaser/archive"
|
||||
version = "1.0.0"
|
||||
|
||||
[[constraint]]
|
||||
branch = "master"
|
||||
|
@ -1,64 +0,0 @@
|
||||
// Package tar implements the Archive interface providing tar.gz archiving
|
||||
// and compression.
|
||||
package tar
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"compress/gzip"
|
||||
"io"
|
||||
"os"
|
||||
)
|
||||
|
||||
// Archive as tar.gz
|
||||
type Archive struct {
|
||||
gw *gzip.Writer
|
||||
tw *tar.Writer
|
||||
}
|
||||
|
||||
// Close all closeables
|
||||
func (a Archive) Close() error {
|
||||
if err := a.tw.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := a.gw.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// New tar.gz archive
|
||||
func New(target *os.File) Archive {
|
||||
gw := gzip.NewWriter(target)
|
||||
tw := tar.NewWriter(gw)
|
||||
return Archive{
|
||||
gw: gw,
|
||||
tw: tw,
|
||||
}
|
||||
}
|
||||
|
||||
// Add file to the archive
|
||||
func (a Archive) Add(name, path string) (err error) {
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
_ = file.Close()
|
||||
}()
|
||||
stat, err := file.Stat()
|
||||
if err != nil || stat.IsDir() {
|
||||
return
|
||||
}
|
||||
header := new(tar.Header)
|
||||
header.Name = name
|
||||
header.Size = stat.Size()
|
||||
header.Mode = int64(stat.Mode())
|
||||
header.ModTime = stat.ModTime()
|
||||
if err := a.tw.WriteHeader(header); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := io.Copy(a.tw, file); err != nil {
|
||||
return err
|
||||
}
|
||||
return
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
package tar
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestTarGzFile(t *testing.T) {
|
||||
var assert = assert.New(t)
|
||||
|
||||
folder, err := ioutil.TempDir("", "targztest")
|
||||
assert.NoError(err)
|
||||
|
||||
file, err := os.Create(folder + "/folder.tar.gz")
|
||||
assert.NoError(err)
|
||||
|
||||
empty, err := os.Create(folder + "/empty.txt")
|
||||
assert.NoError(err)
|
||||
|
||||
empty2, err := os.Create(folder + "/empty2.txt")
|
||||
assert.NoError(err)
|
||||
|
||||
assert.NoError(os.Mkdir(folder+"/folder-inside", 0755))
|
||||
|
||||
archive := New(file)
|
||||
assert.NoError(archive.Add("empty.txt", empty.Name()))
|
||||
assert.Error(archive.Add("dont.txt", empty.Name()+"_nope"))
|
||||
assert.NoError(archive.Add("empty.txt", folder+"/folder-inside"))
|
||||
assert.NoError(archive.Close())
|
||||
assert.Error(archive.Add("empty2.txt", empty2.Name()))
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
// Package zip implements the Archive interface providing zip archiving
|
||||
// and compression.
|
||||
package zip
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"io"
|
||||
"os"
|
||||
)
|
||||
|
||||
// Archive zip struct
|
||||
type Archive struct {
|
||||
z *zip.Writer
|
||||
}
|
||||
|
||||
// Close all closeables
|
||||
func (a Archive) Close() error {
|
||||
return a.z.Close()
|
||||
}
|
||||
|
||||
// New zip archive
|
||||
func New(target *os.File) Archive {
|
||||
return Archive{
|
||||
z: zip.NewWriter(target),
|
||||
}
|
||||
}
|
||||
|
||||
// Add a file to the zip archive
|
||||
func (a Archive) Add(name, path string) (err error) {
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
stat, err := file.Stat()
|
||||
if err != nil || stat.IsDir() {
|
||||
return
|
||||
}
|
||||
defer func() { _ = file.Close() }()
|
||||
f, err := a.z.Create(name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = io.Copy(f, file)
|
||||
return err
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
package zip
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestZipFile(t *testing.T) {
|
||||
var assert = assert.New(t)
|
||||
|
||||
folder, err := ioutil.TempDir("", "ziptest")
|
||||
assert.NoError(err)
|
||||
|
||||
file, err := os.Create(folder + "/folder.zip")
|
||||
assert.NoError(err)
|
||||
|
||||
empty, err := os.Create(folder + "/empty.txt")
|
||||
assert.NoError(err)
|
||||
|
||||
assert.NoError(os.Mkdir(folder+"/folder-inside", 0755))
|
||||
|
||||
archive := New(file)
|
||||
assert.NoError(archive.Add("empty.txt", empty.Name()))
|
||||
assert.NoError(archive.Add("empty.txt", folder+"/folder-inside"))
|
||||
assert.Error(archive.Add("dont.txt", empty.Name()+"_nope"))
|
||||
assert.NoError(archive.Close())
|
||||
}
|
@ -9,10 +9,9 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/apex/log"
|
||||
"github.com/goreleaser/archive"
|
||||
"github.com/goreleaser/goreleaser/context"
|
||||
"github.com/goreleaser/goreleaser/internal/ext"
|
||||
"github.com/goreleaser/goreleaser/internal/tar"
|
||||
"github.com/goreleaser/goreleaser/internal/zip"
|
||||
"github.com/mattn/go-zglob"
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
@ -38,12 +37,6 @@ func (Pipe) Run(ctx *context.Context) error {
|
||||
return g.Wait()
|
||||
}
|
||||
|
||||
// Archive represents a compression archive files from disk can be written to.
|
||||
type Archive interface {
|
||||
Close() error
|
||||
Add(name, path string) error
|
||||
}
|
||||
|
||||
func create(ctx *context.Context, platform, name string) error {
|
||||
var folder = filepath.Join(ctx.Config.Dist, name)
|
||||
var format = formatFor(ctx, platform)
|
||||
@ -53,7 +46,7 @@ func create(ctx *context.Context, platform, name string) error {
|
||||
}
|
||||
log.WithField("archive", file.Name()).Info("creating")
|
||||
defer func() { _ = file.Close() }()
|
||||
var archive = archiveFor(file, format)
|
||||
var archive = archive.New(file)
|
||||
defer func() { _ = archive.Close() }()
|
||||
|
||||
files, err := findFiles(ctx)
|
||||
@ -84,13 +77,6 @@ func findFiles(ctx *context.Context) (result []string, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func archiveFor(file *os.File, format string) Archive {
|
||||
if format == "zip" {
|
||||
return zip.New(file)
|
||||
}
|
||||
return tar.New(file)
|
||||
}
|
||||
|
||||
func formatFor(ctx *context.Context, platform string) string {
|
||||
for _, override := range ctx.Config.Archive.FormatOverrides {
|
||||
if strings.HasPrefix(platform, override.Goos) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user