Skip to content

Commit

Permalink
Adding annotation to index.yaml file
Browse files Browse the repository at this point in the history
Chart.yaml files have an annotation field that allow a chart to
have custom information similar to the way Kubernetes annotations
work.

In an index.yaml file each chart version can have annotations in
a similar manner to the Chart.yaml file. It is derived from the
same underlying struct.

These enable extension points where people can add their own info.

One thing missing is the ability to extend the top level of an
index file. This change adds annotations to the top level of an
index.yaml file. This would provide top level support for vendors
to extent index.yaml files.

Closes helm#8767

Signed-off-by: Matt Farina <matt@mattfarina.com>
  • Loading branch information
mattfarina authored and zak905 committed Jan 19, 2023
1 parent 423396c commit 90d079a
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 0 deletions.
4 changes: 4 additions & 0 deletions pkg/repo/index.go
Expand Up @@ -83,6 +83,10 @@ type IndexFile struct {
Generated time.Time `json:"generated"`
Entries map[string]ChartVersions `json:"entries"`
PublicKeys []string `json:"publicKeys,omitempty"`

// Annotations are additional mappings uninterpreted by Helm. They are made available for
// other applications to add information to the index file.
Annotations map[string]string `json:"annotations,omitempty"`
}

// NewIndexFile initializes an index.
Expand Down
16 changes: 16 additions & 0 deletions pkg/repo/index_test.go
Expand Up @@ -36,6 +36,7 @@ import (

const (
testfile = "testdata/local-index.yaml"
annotationstestfile = "testdata/local-index-annotations.yaml"
chartmuseumtestfile = "testdata/chartmuseum-index.yaml"
unorderedTestfile = "testdata/local-index-unordered.yaml"
testRepo = "test-repo"
Expand Down Expand Up @@ -153,6 +154,21 @@ func TestLoadIndexFile(t *testing.T) {
verifyLocalIndex(t, i)
}

func TestLoadIndexFileAnnotations(t *testing.T) {
i, err := LoadIndexFile(annotationstestfile)
if err != nil {
t.Fatal(err)
}
verifyLocalIndex(t, i)

if len(i.Annotations) != 1 {
t.Fatalf("Expected 1 annotation but got %d", len(i.Annotations))
}
if i.Annotations["helm.sh/test"] != "foo bar" {
t.Error("Did not get expected value for helm.sh/test annotation")
}
}

func TestLoadUnorderedIndex(t *testing.T) {
b, err := ioutil.ReadFile(unorderedTestfile)
if err != nil {
Expand Down
50 changes: 50 additions & 0 deletions pkg/repo/testdata/local-index-annotations.yaml
@@ -0,0 +1,50 @@
apiVersion: v1
entries:
nginx:
- urls:
- https://kubernetes-charts.storage.googleapis.com/nginx-0.2.0.tgz
name: nginx
description: string
version: 0.2.0
home: https://github.com/something/else
digest: "sha256:1234567890abcdef"
keywords:
- popular
- web server
- proxy
- urls:
- https://kubernetes-charts.storage.googleapis.com/nginx-0.1.0.tgz
name: nginx
description: string
version: 0.1.0
home: https://github.com/something
digest: "sha256:1234567890abcdef"
keywords:
- popular
- web server
- proxy
alpine:
- urls:
- https://kubernetes-charts.storage.googleapis.com/alpine-1.0.0.tgz
- http://storage2.googleapis.com/kubernetes-charts/alpine-1.0.0.tgz
name: alpine
description: string
version: 1.0.0
home: https://github.com/something
keywords:
- linux
- alpine
- small
- sumtin
digest: "sha256:1234567890abcdef"
chartWithNoURL:
- name: chartWithNoURL
description: string
version: 1.0.0
home: https://github.com/something
keywords:
- small
- sumtin
digest: "sha256:1234567890abcdef"
annotations:
helm.sh/test: foo bar

0 comments on commit 90d079a

Please sign in to comment.