Skip to content

Commit b0489e2

Browse files
committed
USE URL from API when private
Signed-off-by: Matt Clegg <[email protected]>
1 parent d83b45b commit b0489e2

File tree

3 files changed

+56
-13
lines changed

3 files changed

+56
-13
lines changed

pkg/github/github.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ import (
2929
"golang.org/x/oauth2"
3030
)
3131

32+
type Repository struct {
33+
*github.Repository
34+
}
35+
3236
type Release struct {
3337
Name string
3438
Description string
@@ -39,8 +43,9 @@ type Release struct {
3943
}
4044

4145
type Asset struct {
42-
Path string
43-
URL string
46+
Path string
47+
BrowserDownloadURL string
48+
URL string
4449
}
4550

4651
// Client is the client for interacting with the GitHub API
@@ -95,8 +100,13 @@ func (c *Client) GetRelease(_ context.Context, tag string) (*Release, error) {
95100
result := &Release{
96101
Assets: []*Asset{},
97102
}
98-
for _, ass := range release.Assets {
99-
asset := &Asset{*ass.Name, *ass.BrowserDownloadURL}
103+
104+
for _, releaseAsset := range release.Assets {
105+
asset := &Asset{
106+
*releaseAsset.Name,
107+
*releaseAsset.BrowserDownloadURL,
108+
*releaseAsset.URL,
109+
}
100110
result.Assets = append(result.Assets, asset)
101111
}
102112
return result, nil
@@ -126,6 +136,16 @@ func (c *Client) CreateRelease(_ context.Context, input *Release) error {
126136
return nil
127137
}
128138

139+
func (c *Client) GetRepository() (*Repository, error) {
140+
repository, _, err := c.Repositories.Get(context.TODO(), c.owner, c.repo)
141+
if err != nil {
142+
return nil, err
143+
}
144+
return &Repository{
145+
Repository: repository,
146+
}, nil
147+
}
148+
129149
// CreatePullRequest creates a pull request in the repository specified by repoURL.
130150
// The return value is the pull request URL.
131151
func (c *Client) CreatePullRequest(owner string, repo string, message string, head string, base string) (string, error) {

pkg/releaser/releaser.go

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ type GitHub interface {
5050
CreateRelease(ctx context.Context, input *github.Release) error
5151
GetRelease(ctx context.Context, tag string) (*github.Release, error)
5252
CreatePullRequest(owner string, repo string, message string, head string, base string) (string, error)
53+
GetRepository() (*github.Repository, error)
5354
}
5455

5556
type Git interface {
@@ -138,6 +139,12 @@ func (r *Releaser) UpdateIndexFile() (bool, error) {
138139
return false, err
139140
}
140141

142+
// GetRepository to confirm if it's Private
143+
repository, err := r.github.GetRepository()
144+
if err != nil {
145+
return false, err
146+
}
147+
141148
var update bool
142149
for _, chartPackage := range chartPackages {
143150
ch, err := loader.LoadFile(chartPackage)
@@ -162,8 +169,9 @@ func (r *Releaser) UpdateIndexFile() (bool, error) {
162169
}
163170

164171
for _, asset := range release.Assets {
165-
downloadURL, _ := url.Parse(asset.URL)
172+
downloadURL, _ := url.Parse(asset.BrowserDownloadURL)
166173
name := filepath.Base(downloadURL.Path)
174+
167175
// Ignore any other files added in the release by the users.
168176
if filepath.Ext(name) != chartAssetFileExtension {
169177
continue
@@ -173,7 +181,11 @@ func (r *Releaser) UpdateIndexFile() (bool, error) {
173181
packageName, packageVersion := tagParts[0], tagParts[1]
174182
fmt.Printf("Found %s-%s.tgz\n", packageName, packageVersion)
175183
if _, err := indexFile.Get(packageName, packageVersion); err != nil {
176-
if err := r.addToIndexFile(indexFile, downloadURL.String()); err != nil {
184+
overrideURL := ""
185+
if *repository.Private {
186+
overrideURL = asset.URL
187+
}
188+
if err := r.addToIndexFile(indexFile, downloadURL.String(), overrideURL); err != nil {
177189
return false, err
178190
}
179191
update = true
@@ -255,7 +267,7 @@ func (r *Releaser) splitPackageNameAndVersion(pkg string) []string {
255267
return []string{pkg[0:delimIndex], pkg[delimIndex+1:]}
256268
}
257269

258-
func (r *Releaser) addToIndexFile(indexFile *repo.IndexFile, url string) error {
270+
func (r *Releaser) addToIndexFile(indexFile *repo.IndexFile, url string, overrideURL string) error {
259271
arch := filepath.Join(r.config.PackagePath, filepath.Base(url))
260272

261273
// extract chart metadata
@@ -284,7 +296,18 @@ func (r *Releaser) addToIndexFile(indexFile *repo.IndexFile, url string) error {
284296
}
285297

286298
// Add to index
287-
return indexFile.MustAdd(c.Metadata, filepath.Base(arch), strings.Join(s, "/"), hash)
299+
addToIndex := indexFile.MustAdd(c.Metadata, filepath.Base(arch), strings.Join(s, "/"), hash)
300+
301+
// replace the URL for Private GitHub repos
302+
if overrideURL != "" {
303+
for _, entry := range indexFile.Entries[c.Metadata.Name] {
304+
if entry.Digest == hash {
305+
entry.URLs = []string{overrideURL}
306+
}
307+
}
308+
}
309+
310+
return addToIndex
288311
}
289312

290313
// CreateReleases finds and uploads Helm chart packages to GitHub

pkg/releaser/releaser_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,12 @@ func (f *FakeGitHub) GetRelease(ctx context.Context, tag string) (*github.Releas
9898
Description: "A Helm chart for Kubernetes",
9999
Assets: []*github.Asset{
100100
{
101-
Path: "testdata/release-packages/test-chart-0.1.0.tgz",
102-
URL: "https://myrepo/charts/test-chart-0.1.0.tgz",
101+
Path: "testdata/release-packages/test-chart-0.1.0.tgz",
102+
BrowserDownloadURL: "https://myrepo/charts/test-chart-0.1.0.tgz",
103103
},
104104
{
105-
Path: "testdata/release-packages/third-party-file-0.1.0.txt",
106-
URL: "https://myrepo/charts/third-party-file-0.1.0.txt",
105+
Path: "testdata/release-packages/third-party-file-0.1.0.txt",
106+
BrowserDownloadURL: "https://myrepo/charts/third-party-file-0.1.0.txt",
107107
},
108108
},
109109
}
@@ -336,7 +336,7 @@ func TestReleaser_addToIndexFile(t *testing.T) {
336336
t.Run(tt.name, func(t *testing.T) {
337337
indexFile := repo.NewIndexFile()
338338
url := fmt.Sprintf("https://myrepo/charts/%s-%s.tgz", tt.chart, tt.version)
339-
err := tt.releaser.addToIndexFile(indexFile, url)
339+
err := tt.releaser.addToIndexFile(indexFile, url, "")
340340
if tt.error {
341341
assert.Error(t, err)
342342
assert.False(t, indexFile.Has(tt.chart, tt.version))

0 commit comments

Comments
 (0)