@@ -2,6 +2,7 @@ package apischema
22
33import (
44 "encoding/json"
5+ "errors"
56 "fmt"
67 "k8s.io/apimachinery/pkg/api/meta"
78 "maps"
@@ -19,6 +20,17 @@ import (
1920 "k8s.io/kube-openapi/pkg/validation/spec"
2021)
2122
23+ var (
24+ ErrGetOpenAPIPaths = errors .New ("failed to get OpenAPI paths" )
25+ ErrGetCRDGVK = errors .New ("failed to get CRD GVK" )
26+ ErrParseGroupVersion = errors .New ("failed to parse groupVersion" )
27+ ErrMarshalOpenAPISchema = errors .New ("failed to marshal openAPI v3 runtimeSchema" )
28+ ErrConvertOpenAPISchema = errors .New ("failed to convert openAPI v3 runtimeSchema to v2" )
29+ ErrCRDNoVersions = errors .New ("CRD has no versions defined" )
30+ ErrMarshalGVK = errors .New ("failed to marshal GVK extension" )
31+ ErrUnmarshalGVK = errors .New ("failed to unmarshal GVK extension" )
32+ )
33+
2234// SchemaBuilder helps construct GraphQL field config arguments
2335type SchemaBuilder struct {
2436 schemas map [string ]* spec.Schema
@@ -32,7 +44,7 @@ func NewSchemaBuilder(oc openapi.Client, preferredApiGroups []string) *SchemaBui
3244
3345 apiv3Paths , err := oc .Paths ()
3446 if err != nil {
35- b .err = multierror .Append (b .err , fmt . Errorf ( "failed to get OpenAPI paths: %w" , err ))
47+ b .err = multierror .Append (b .err , errors . Join ( ErrGetOpenAPIPaths , err ))
3648 return b
3749 }
3850
@@ -66,14 +78,14 @@ func (b *SchemaBuilder) WithScope(rm meta.RESTMapper) *SchemaBuilder {
6678 if gvksVal , ok = schema .VendorExtensible .Extensions [common .GVKExtensionKey ]; ! ok {
6779 continue
6880 }
69- b , err := json .Marshal (gvksVal )
81+ jsonBytes , err := json .Marshal (gvksVal )
7082 if err != nil {
71- //TODO: debug log?
83+ b . err = multierror . Append ( b . err , errors . Join ( ErrMarshalGVK , err ))
7284 continue
7385 }
7486 gvks := make ([]* GroupVersionKind , 0 , 1 )
75- if err := json .Unmarshal (b , & gvks ); err != nil {
76- //TODO: debug log?
87+ if err := json .Unmarshal (jsonBytes , & gvks ); err != nil {
88+ b . err = multierror . Append ( b . err , errors . Join ( ErrUnmarshalGVK , err ))
7789 continue
7890 }
7991
@@ -111,7 +123,7 @@ func (b *SchemaBuilder) WithCRDCategories(crd *apiextensionsv1.CustomResourceDef
111123 }
112124 gvk , err := getCRDGroupVersionKind (crd .Spec )
113125 if err != nil {
114- b .err = multierror .Append (b .err , fmt . Errorf ( "failed to get CRD GVK: %w" , err ))
126+ b .err = multierror .Append (b .err , errors . Join ( ErrGetCRDGVK , err ))
115127 return b
116128 }
117129
@@ -134,7 +146,7 @@ func (b *SchemaBuilder) WithApiResourceCategories(list []*metav1.APIResourceList
134146
135147 gv , err := runtimeSchema .ParseGroupVersion (apiResourceList .GroupVersion )
136148 if err != nil {
137- b .err = multierror .Append (b .err , fmt . Errorf ( "failed to parse groupVersion: %w" , err ))
149+ b .err = multierror .Append (b .err , errors . Join ( ErrParseGroupVersion , err ))
138150 continue
139151 }
140152 gvk := metav1.GroupVersionKind {
@@ -162,12 +174,12 @@ func (b *SchemaBuilder) Complete() ([]byte, error) {
162174 },
163175 })
164176 if err != nil {
165- b .err = multierror .Append (b .err , fmt . Errorf ( "failed to marshal openAPI v3 runtimeSchema: %w" , err ))
177+ b .err = multierror .Append (b .err , errors . Join ( ErrMarshalOpenAPISchema , err ))
166178 return nil , b .err
167179 }
168180 v2JSON , err := ConvertJSON (v3JSON )
169181 if err != nil {
170- b .err = multierror .Append (b .err , fmt . Errorf ( "failed to convert openAPI v3 runtimeSchema to v2: %w" , err ))
182+ b .err = multierror .Append (b .err , errors . Join ( ErrConvertOpenAPISchema , err ))
171183 return nil , b .err
172184 }
173185
@@ -185,7 +197,7 @@ func getOpenAPISchemaKey(gvk metav1.GroupVersionKind) string {
185197
186198func getCRDGroupVersionKind (spec apiextensionsv1.CustomResourceDefinitionSpec ) (* metav1.GroupVersionKind , error ) {
187199 if len (spec .Versions ) == 0 {
188- return nil , fmt . Errorf ( "CRD has no versions defined" )
200+ return nil , ErrCRDNoVersions
189201 }
190202
191203 // Use the first stored version as the preferred one
0 commit comments