fix: newer golang archive aren't decompressed correctly
This commit is contained in:
parent
56a0caab83
commit
6157ed66a0
|
@ -305,7 +305,7 @@ func ls(ctx *cli.Context) error {
|
||||||
|
|
||||||
for _, i := range items {
|
for _, i := range items {
|
||||||
if i.IsDir() && i.Name() != "go" {
|
if i.IsDir() && i.Name() != "go" {
|
||||||
fmt.Println(i.Name())
|
fmt.Println(strings.Replace(i.Name(), "go", "", 1))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ func (d *Release) DownloadRelease() error {
|
||||||
|
|
||||||
// downloadFile downloads the file to the given writer
|
// downloadFile downloads the file to the given writer
|
||||||
func (d *Release) downloadFile(f *os.File) error {
|
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.Suffix = " Downloading release..."
|
||||||
s.Start()
|
s.Start()
|
||||||
defer s.Stop()
|
defer s.Stop()
|
||||||
|
@ -110,9 +110,11 @@ func (d *Release) ExtractRelease() error {
|
||||||
|
|
||||||
// skip first folder
|
// skip first folder
|
||||||
if start {
|
if start {
|
||||||
rootFolder = h.Name
|
rootFolder = strings.Split(h.Name, string(os.PathSeparator))[0]
|
||||||
start = false
|
start = false
|
||||||
continue
|
if h.Typeflag == tar.TypeDir {
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
target := filepath.Join(d.releaseFolder, strings.Replace(h.Name, rootFolder, "", 1))
|
target := filepath.Join(d.releaseFolder, strings.Replace(h.Name, rootFolder, "", 1))
|
||||||
|
@ -124,7 +126,19 @@ func (d *Release) ExtractRelease() error {
|
||||||
case tar.TypeReg:
|
case tar.TypeReg:
|
||||||
file, err := os.OpenFile(target, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, h.FileInfo().Mode())
|
file, err := os.OpenFile(target, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, h.FileInfo().Mode())
|
||||||
if err != nil {
|
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 {
|
if _, err = io.Copy(file, tarReader); err != nil {
|
||||||
|
@ -152,6 +166,19 @@ func (d *Release) CheckReleaseExists() error {
|
||||||
return ErrReleaseNotFound
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ type Tags struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTags(release string, ctx context.Context) TagsAction {
|
func NewTags(release string, ctx context.Context) TagsAction {
|
||||||
return Tags{
|
return &Tags{
|
||||||
release: release,
|
release: release,
|
||||||
client: *github.NewClient(nil),
|
client: *github.NewClient(nil),
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
|
@ -34,7 +34,7 @@ func NewTags(release string, ctx context.Context) TagsAction {
|
||||||
// the given release exists in it
|
// the given release exists in it
|
||||||
//
|
//
|
||||||
// Returns the found release or an error
|
// 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 {
|
if t.release == LTS {
|
||||||
return t.getLatestTag(beta, rc)
|
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
|
// Returns a list of tags reference if there is as least one
|
||||||
// or an error otherwise.
|
// 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{
|
refs, response, err := t.client.Git.ListMatchingRefs(t.ctx, "golang", "go", &github.ReferenceListOptions{
|
||||||
Ref: "tags/go",
|
Ref: "tags/go",
|
||||||
})
|
})
|
||||||
|
@ -113,7 +113,7 @@ func (t Tags) GetTagsRef() ([]*github.Reference, error) {
|
||||||
// beta and rc version can be specified.
|
// beta and rc version can be specified.
|
||||||
//
|
//
|
||||||
// Returns the latest release or an error
|
// 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()
|
refs, err := t.GetTagsRef()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == ErrEmptyTags {
|
if err == ErrEmptyTags {
|
||||||
|
|
Reference in New Issue