remove `ChartPaths[]`

Signed-off-by: George Jenkins <gvjenkins@gmail.com>
pull/13578/head
George Jenkins 8 months ago
parent 17bc0b3845
commit 2caca2b167

@ -29,12 +29,9 @@ import (
"strings" "strings"
"github.com/pkg/errors" "github.com/pkg/errors"
"sigs.k8s.io/yaml"
"helm.sh/helm/v4/pkg/chart/loader"
"helm.sh/helm/v4/pkg/getter" "helm.sh/helm/v4/pkg/getter"
"helm.sh/helm/v4/pkg/helmpath" "helm.sh/helm/v4/pkg/helmpath"
"helm.sh/helm/v4/pkg/provenance"
) )
// Entry represents a collection of parameters for chart repository // Entry represents a collection of parameters for chart repository
@ -53,7 +50,6 @@ type Entry struct {
// ChartRepository represents a chart repository // ChartRepository represents a chart repository
type ChartRepository struct { type ChartRepository struct {
Config *Entry Config *Entry
ChartPaths []string
IndexFile *IndexFile IndexFile *IndexFile
Client getter.Getter Client getter.Getter
CachePath string CachePath string
@ -122,46 +118,6 @@ func (r *ChartRepository) DownloadIndexFile() (string, error) {
return fname, os.WriteFile(fname, index, 0644) return fname, os.WriteFile(fname, index, 0644)
} }
// Index generates an index for the chart repository and writes an index.yaml file.
func (r *ChartRepository) Index() error {
err := r.generateIndex()
if err != nil {
return err
}
return r.saveIndexFile()
}
func (r *ChartRepository) saveIndexFile() error {
index, err := yaml.Marshal(r.IndexFile)
if err != nil {
return err
}
return os.WriteFile(filepath.Join(r.Config.Name, indexPath), index, 0644)
}
func (r *ChartRepository) generateIndex() error {
for _, path := range r.ChartPaths {
ch, err := loader.Load(path)
if err != nil {
return err
}
digest, err := provenance.DigestFile(path)
if err != nil {
return err
}
if !r.IndexFile.Has(ch.Name(), ch.Metadata.Version) {
if err := r.IndexFile.MustAdd(ch.Metadata, path, r.Config.URL, digest); err != nil {
return errors.Wrapf(err, "failed adding to %s to index", path)
}
}
// TODO: If a chart exists, but has a different Digest, should we error?
}
r.IndexFile.SortEntries()
return nil
}
type findChartInRepoURLOptions struct { type findChartInRepoURLOptions struct {
Username string Username string
Password string Password string

@ -21,79 +21,17 @@ import (
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"os" "os"
"path/filepath"
"runtime" "runtime"
"strings" "strings"
"testing" "testing"
"time" "time"
"github.com/stretchr/testify/require"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
"helm.sh/helm/v4/pkg/chart"
"helm.sh/helm/v4/pkg/cli" "helm.sh/helm/v4/pkg/cli"
"helm.sh/helm/v4/pkg/getter" "helm.sh/helm/v4/pkg/getter"
) )
const (
testRepository = "testdata/repository"
testURL = "http://example-charts.com"
)
// loadFromDir a directory of charts archives (including sub-directories),
// appending to the repositores ChartPath
func loadFromDir(t *testing.T, r *ChartRepository, dir string) {
dirInfo, err := os.Stat(dir)
require.Nil(t, err)
require.True(t, dirInfo.IsDir())
globArchives := func(pattern string) []string {
archives, err := filepath.Glob(filepath.Join(dir, pattern))
require.Nil(t, err)
return archives
}
r.ChartPaths = append(r.ChartPaths, globArchives("*.tgz")...)
r.ChartPaths = append(r.ChartPaths, globArchives("**/*.tgz")...)
}
func TestIndex(t *testing.T) {
r, err := NewChartRepository(&Entry{
Name: testRepository,
URL: testURL,
}, getter.All(&cli.EnvSettings{}))
if err != nil {
t.Errorf("Problem creating chart repository from %s: %v", testRepository, err)
}
loadFromDir(t, r, testRepository)
err = r.Index()
if err != nil {
t.Errorf("Error performing index: %v\n", err)
}
tempIndexPath := filepath.Join(testRepository, indexPath)
actual, err := LoadIndexFile(tempIndexPath)
defer os.Remove(tempIndexPath) // clean up
if err != nil {
t.Errorf("Error loading index file %v", err)
}
verifyIndex(t, actual)
// Re-index and test again.
err = r.Index()
if err != nil {
t.Errorf("Error performing re-index: %s\n", err)
}
second, err := LoadIndexFile(tempIndexPath)
if err != nil {
t.Errorf("Error re-loading index file %v", err)
}
verifyIndex(t, second)
}
type CustomGetter struct { type CustomGetter struct {
repoUrls []string repoUrls []string
} }
@ -152,97 +90,6 @@ func TestIndexCustomSchemeDownload(t *testing.T) {
} }
} }
func verifyIndex(t *testing.T, actual *IndexFile) {
var empty time.Time
if actual.Generated.Equal(empty) {
t.Errorf("Generated should be greater than 0: %s", actual.Generated)
}
if actual.APIVersion != APIVersionV1 {
t.Error("Expected v1 API")
}
entries := actual.Entries
if numEntries := len(entries); numEntries != 3 {
t.Errorf("Expected 3 charts to be listed in index file but got %v", numEntries)
}
expects := map[string]ChartVersions{
"frobnitz": {
{
Metadata: &chart.Metadata{
Name: "frobnitz",
Version: "1.2.3",
},
},
},
"sprocket": {
{
Metadata: &chart.Metadata{
Name: "sprocket",
Version: "1.2.0",
},
},
{
Metadata: &chart.Metadata{
Name: "sprocket",
Version: "1.1.0",
},
},
},
"zarthal": {
{
Metadata: &chart.Metadata{
Name: "zarthal",
Version: "1.0.0",
},
},
},
}
for name, versions := range expects {
got, ok := entries[name]
if !ok {
t.Errorf("Could not find %q entry", name)
continue
}
if len(versions) != len(got) {
t.Errorf("Expected %d versions, got %d", len(versions), len(got))
continue
}
for i, e := range versions {
g := got[i]
if e.Name != g.Name {
t.Errorf("Expected %q, got %q", e.Name, g.Name)
}
if e.Version != g.Version {
t.Errorf("Expected %q, got %q", e.Version, g.Version)
}
if len(g.Keywords) != 3 {
t.Error("Expected 3 keywords.")
}
if len(g.Maintainers) != 2 {
t.Error("Expected 2 maintainers.")
}
if g.Created.Equal(empty) {
t.Error("Expected created to be non-empty")
}
if g.Description == "" {
t.Error("Expected description to be non-empty")
}
if g.Home == "" {
t.Error("Expected home to be non-empty")
}
if g.Digest == "" {
t.Error("Expected digest to be non-empty")
}
if len(g.URLs) != 1 {
t.Error("Expected exactly 1 URL")
}
}
}
}
// startLocalServerForTests Start the local helm server // startLocalServerForTests Start the local helm server
func startLocalServerForTests(handler http.Handler) (*httptest.Server, error) { func startLocalServerForTests(handler http.Handler) (*httptest.Server, error) {
if handler == nil { if handler == nil {

@ -38,8 +38,6 @@ import (
"helm.sh/helm/v4/pkg/provenance" "helm.sh/helm/v4/pkg/provenance"
) )
var indexPath = "index.yaml"
// APIVersionV1 is the v1 API version for index and repository files. // APIVersionV1 is the v1 API version for index and repository files.
const APIVersionV1 = "v1" const APIVersionV1 = "v1"

Loading…
Cancel
Save