diff --git a/modules/migrations/github.go b/modules/migrations/github.go index 8d49f9308e8a..cb61086b2ad6 100644 --- a/modules/migrations/github.go +++ b/modules/migrations/github.go @@ -6,11 +6,9 @@ package migrations import ( - "bytes" "context" "fmt" "io" - "io/ioutil" "net/http" "net/url" "strings" @@ -292,6 +290,7 @@ func (g *GithubDownloaderV3) convertGithubRelease(rel *github.RepositoryRelease) } for _, asset := range rel.Assets { + var assetID = *asset.ID // Don't optimize this, for closure we need a local variable r.Assets = append(r.Assets, &base.ReleaseAsset{ ID: *asset.ID, Name: *asset.Name, @@ -302,7 +301,7 @@ func (g *GithubDownloaderV3) convertGithubRelease(rel *github.RepositoryRelease) Updated: asset.UpdatedAt.Time, DownloadFunc: func() (io.ReadCloser, error) { g.sleep() - asset, redir, err := g.client.Repositories.DownloadReleaseAsset(g.ctx, g.repoOwner, g.repoName, *asset.ID, http.DefaultClient) + asset, redir, err := g.client.Repositories.DownloadReleaseAsset(g.ctx, g.repoOwner, g.repoName, assetID, nil) if err != nil { return nil, err } @@ -311,7 +310,23 @@ func (g *GithubDownloaderV3) convertGithubRelease(rel *github.RepositoryRelease) log.Error("g.client.RateLimits: %s", err) } if asset == nil { - return ioutil.NopCloser(bytes.NewBufferString(redir)), nil + if redir != "" { + g.sleep() + req, err := http.NewRequestWithContext(g.ctx, "GET", redir, nil) + if err != nil { + return nil, err + } + resp, err := http.DefaultClient.Do(req) + err1 := g.RefreshRate() + if err1 != nil { + log.Error("g.client.RateLimits: %s", err1) + } + if err != nil { + return nil, err + } + return resp.Body, nil + } + return nil, fmt.Errorf("No release asset found for %d", assetID) } return asset, nil },