@@ -15,6 +15,7 @@ import (
1515 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1616 corev1alpha1 "kubesphere.io/api/core/v1alpha1"
1717 runtimeclient "sigs.k8s.io/controller-runtime/pkg/client"
18+ "sigs.k8s.io/yaml"
1819
1920 "github.com/kubesphere/ksbuilder/pkg/iso639"
2021)
@@ -57,8 +58,19 @@ type Metadata struct {
5758 Namespace string `json:"namespace,omitempty"`
5859 Images []string `json:"images,omitempty"`
5960 ExternalDependencies []corev1alpha1.ExternalDependency `json:"externalDependencies,omitempty"`
61+ }
62+
63+ func ParseMetadata (data []byte ) (* Metadata , error ) {
64+ metadata := new (Metadata )
65+ if err := yaml .Unmarshal (data , metadata ); err != nil {
66+ return nil , err
67+ }
6068
61- base64EncodedIcon string
69+ // set default value for necessary fields
70+ if metadata .InstallationMode == "" {
71+ metadata .InstallationMode = corev1alpha1 .InstallationModeHostOnly
72+ }
73+ return metadata , nil
6274}
6375
6476func validateLanguageCode (code corev1alpha1.LanguageCode ) error {
@@ -94,19 +106,6 @@ func (md *Metadata) Validate() error {
94106 return md .validateLanguageCode ()
95107}
96108
97- func (md * Metadata ) Init (root string ) error {
98- if md .InstallationMode == "" {
99- md .InstallationMode = corev1alpha1 .InstallationModeHostOnly
100- }
101-
102- icon , err := encodeIcon (root , md .Icon )
103- if err != nil {
104- return err
105- }
106- md .base64EncodedIcon = icon
107- return nil
108- }
109-
110109func (md * Metadata ) ToChartYaml () (* chart.Metadata , error ) {
111110 var c = chart.Metadata {
112111 APIVersion : chart .APIVersionV2 ,
@@ -118,21 +117,23 @@ func (md *Metadata) ToChartYaml() (*chart.Metadata, error) {
118117 Home : md .Home ,
119118 Dependencies : md .Dependencies ,
120119 Description : string (md .Description [corev1alpha1 .DefaultLanguageCode ]),
121- Icon : md .base64EncodedIcon ,
120+ Icon : md .Icon ,
122121 Maintainers : md .Maintainers ,
123122 }
124123 return & c , nil
125124}
126125
127- func encodeIcon (root , iconPath string ) (string , error ) {
128- // If the icon is url or base64, you can use it directly.
129- // Otherwise, load the file encoding as base64
130- if strings .HasPrefix (iconPath , "http://" ) ||
131- strings .HasPrefix (iconPath , "https://" ) ||
132- strings .HasPrefix (iconPath , "data:image" ) {
133- return iconPath , nil
126+ func IsLocalFile (path string ) bool {
127+ if strings .HasPrefix (path , "http://" ) ||
128+ strings .HasPrefix (path , "https://" ) ||
129+ strings .HasPrefix (path , "data:image" ) {
130+ return false
134131 }
135- content , err := os .ReadFile (path .Join (root , iconPath ))
132+ return true
133+ }
134+
135+ func encodeIcon (iconPath string ) (string , error ) {
136+ content , err := os .ReadFile (iconPath )
136137 if err != nil {
137138 return "" , err
138139 }
@@ -192,7 +193,7 @@ func (ext *Extension) ToKubernetesResources() []runtimeclient.Object {
192193 ExtensionInfo : corev1alpha1.ExtensionInfo {
193194 Description : ext .Metadata .Description ,
194195 DisplayName : ext .Metadata .DisplayName ,
195- Icon : ext .Metadata .base64EncodedIcon ,
196+ Icon : ext .Metadata .Icon ,
196197 Provider : ext .Metadata .Provider ,
197198 Created : metav1 .Now (),
198199 },
@@ -218,7 +219,7 @@ func (ext *Extension) ToKubernetesResources() []runtimeclient.Object {
218219 ExtensionInfo : corev1alpha1.ExtensionInfo {
219220 Description : ext .Metadata .Description ,
220221 DisplayName : ext .Metadata .DisplayName ,
221- Icon : ext .Metadata .base64EncodedIcon ,
222+ Icon : ext .Metadata .Icon ,
222223 Provider : ext .Metadata .Provider ,
223224 Created : metav1 .Now (),
224225 },
0 commit comments