fix: newer golang archive aren't decompressed correctly

This commit is contained in:
DataHearth 2023-08-21 16:59:05 +02:00
parent 56a0caab83
commit 6157ed66a0
No known key found for this signature in database
GPG Key ID: E88FD356ACC5F3C4
3 changed files with 36 additions and 9 deletions

View File

@ -305,7 +305,7 @@ func ls(ctx *cli.Context) error {
for _, i := range items {
if i.IsDir() && i.Name() != "go" {
fmt.Println(i.Name())
fmt.Println(strings.Replace(i.Name(), "go", "", 1))
}
}

View File

@ -54,7 +54,7 @@ func (d *Release) DownloadRelease() error {
// downloadFile downloads the file to the given writer
func (d *Release) downloadFile(f *os.File) error {
s := spinner.New(spinner.CharSets[35], 100*time.Millisecond)
s := spinner.New(spinner.CharSets[14], 100*time.Millisecond)
s.Suffix = " Downloading release..."
s.Start()
defer s.Stop()
@ -110,9 +110,11 @@ func (d *Release) ExtractRelease() error {
// skip first folder
if start {
rootFolder = h.Name
rootFolder = strings.Split(h.Name, string(os.PathSeparator))[0]
start = false
continue
if h.Typeflag == tar.TypeDir {
continue
}
}
target := filepath.Join(d.releaseFolder, strings.Replace(h.Name, rootFolder, "", 1))
@ -124,7 +126,19 @@ func (d *Release) ExtractRelease() error {
case tar.TypeReg:
file, err := os.OpenFile(target, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, h.FileInfo().Mode())
if err != nil {
return err
// for 1.21.xx, folder aren't detected as tar.TypeDir
if os.IsNotExist(err) {
if err := os.MkdirAll(filepath.Dir(target), 0755); err != nil {
return err
}
file, err = os.OpenFile(target, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, h.FileInfo().Mode())
if err != nil {
return err
}
} else {
return err
}
}
if _, err = io.Copy(file, tarReader); err != nil {
@ -152,6 +166,19 @@ func (d *Release) CheckReleaseExists() error {
return ErrReleaseNotFound
}
entries, err := os.ReadDir(d.releaseFolder)
if err != nil {
return err
}
if len(entries) == 0 {
if err := os.RemoveAll(d.releaseFolder); err != nil {
return err
}
return ErrReleaseNotFound
}
return nil
}

View File

@ -23,7 +23,7 @@ type Tags struct {
}
func NewTags(release string, ctx context.Context) TagsAction {
return Tags{
return &Tags{
release: release,
client: *github.NewClient(nil),
ctx: ctx,
@ -34,7 +34,7 @@ func NewTags(release string, ctx context.Context) TagsAction {
// the given release exists in it
//
// Returns the found release or an error
func (t Tags) GetRelease(beta, rc bool) (string, error) {
func (t *Tags) GetRelease(beta, rc bool) (string, error) {
if t.release == LTS {
return t.getLatestTag(beta, rc)
}
@ -91,7 +91,7 @@ func (t Tags) GetRelease(beta, rc bool) (string, error) {
//
// Returns a list of tags reference if there is as least one
// or an error otherwise.
func (t Tags) GetTagsRef() ([]*github.Reference, error) {
func (t *Tags) GetTagsRef() ([]*github.Reference, error) {
refs, response, err := t.client.Git.ListMatchingRefs(t.ctx, "golang", "go", &github.ReferenceListOptions{
Ref: "tags/go",
})
@ -113,7 +113,7 @@ func (t Tags) GetTagsRef() ([]*github.Reference, error) {
// beta and rc version can be specified.
//
// Returns the latest release or an error
func (t Tags) getLatestTag(beta, rc bool) (string, error) {
func (t *Tags) getLatestTag(beta, rc bool) (string, error) {
refs, err := t.GetTagsRef()
if err != nil {
if err == ErrEmptyTags {