-
Notifications
You must be signed in to change notification settings - Fork 0
/
registryv1.go
77 lines (68 loc) · 1.88 KB
/
registryv1.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package registryv1
import (
"errors"
"io/fs"
"github.com/Masterminds/semver/v3"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"sigs.k8s.io/yaml"
)
func GetVersion(manifestsFS fs.FS) (*semver.Version, error) {
manifestFiles, err := fs.ReadDir(manifestsFS, ".")
if err != nil {
return nil, err
}
var (
csvData []byte
errs []error
)
for _, manifestFile := range manifestFiles {
if manifestFile.IsDir() {
continue
}
manifestFileData, err := fs.ReadFile(manifestsFS, manifestFile.Name())
if err != nil {
errs = append(errs, err)
continue
}
var m metav1.PartialObjectMetadata
if err := yaml.Unmarshal(manifestFileData, &m); err != nil {
errs = append(errs, err)
continue
}
if m.Kind == "ClusterServiceVersion" {
csvData = manifestFileData
break
}
}
if len(errs) > 0 {
return nil, errors.Join(errs...)
}
if csvData == nil {
return nil, errors.New("no ClusterServiceVersion found in manifests")
}
var csv unstructured.Unstructured
if err := yaml.Unmarshal(csvData, &csv); err != nil {
return nil, err
}
versionStr, found, err := unstructured.NestedString(csv.Object, "spec", "version")
if err != nil || !found {
return nil, errors.New("no version found in ClusterServiceVersion")
}
return semver.NewVersion(versionStr)
}
func GetAnnotations(metadataFS fs.FS) (map[string]string, error) {
annotationsFile, err := fs.ReadFile(metadataFS, "annotations.yaml")
if err != nil {
return nil, err
}
var annotations struct {
Annotations map[string]string `yaml:"annotations"`
}
if err := yaml.Unmarshal(annotationsFile, &annotations); err != nil {
return nil, err
}
annotations.Annotations["operators.operatorframework.io.bundle.manifests.v1"] = "manifests/"
annotations.Annotations["operators.operatorframework.io.bundle.metadata.v1"] = "metadata/"
return annotations.Annotations, nil
}