diff --git a/generators/artifacthub/package.go b/generators/artifacthub/package.go index 39b82eeb..57ef7bb0 100644 --- a/generators/artifacthub/package.go +++ b/generators/artifacthub/package.go @@ -11,7 +11,7 @@ import ( "github.com/meshery/meshkit/utils/component" "github.com/meshery/meshkit/utils/manifests" "github.com/meshery/schemas/models/v1beta1/category" - "github.com/meshery/schemas/models/v1beta1/model" + "github.com/meshery/schemas/models/v1beta2/model" _component "github.com/meshery/schemas/models/v1beta3/component" "gopkg.in/yaml.v2" ) diff --git a/generators/github/package.go b/generators/github/package.go index 101782a5..7c3e4a7e 100644 --- a/generators/github/package.go +++ b/generators/github/package.go @@ -10,7 +10,7 @@ import ( "github.com/meshery/meshkit/utils/kubernetes" "github.com/meshery/meshkit/utils/manifests" "github.com/meshery/schemas/models/v1beta1/category" - "github.com/meshery/schemas/models/v1beta1/model" + "github.com/meshery/schemas/models/v1beta2/model" _component "github.com/meshery/schemas/models/v1beta3/component" "gopkg.in/yaml.v3" ) diff --git a/models/meshmodel/registry/v1beta1/component_filter.go b/models/meshmodel/registry/v1beta1/component_filter.go index 59e869bf..cc8eac76 100644 --- a/models/meshmodel/registry/v1beta1/component_filter.go +++ b/models/meshmodel/registry/v1beta1/component_filter.go @@ -5,8 +5,8 @@ import ( "github.com/meshery/meshkit/models/meshmodel/entity" "github.com/meshery/meshkit/models/meshmodel/registry" "github.com/meshery/schemas/models/v1beta1/category" - "github.com/meshery/schemas/models/v1beta1/connection" - "github.com/meshery/schemas/models/v1beta1/model" + connectionv1beta3 "github.com/meshery/schemas/models/v1beta3/connection" + "github.com/meshery/schemas/models/v1beta2/model" "github.com/meshery/schemas/models/v1beta3/component" "gorm.io/gorm/clause" ) @@ -33,7 +33,7 @@ type componentDefinitionWithModel struct { ComponentDefinitionDB component.ComponentDefinition `gorm:"embedded"` ModelDB model.ModelDefinition `gorm:"embedded"` CategoryDB category.CategoryDefinition `gorm:"embedded"` - ConnectionDB connection.Connection `gorm:"embedded"` + ConnectionDB connectionv1beta3.Connection `gorm:"embedded"` } func (cf *ComponentFilter) GetById(db *database.Handler) (entity.Entity, error) { @@ -148,12 +148,14 @@ func (componentFilter *ComponentFilter) Get(db *database.Handler) ([]entity.Enti cm.ComponentDefinitionDB.Component.Schema = "" } - reg := cm.ConnectionDB cd := cm.ComponentDefinitionDB cd.Model = &cm.ModelDB if cd.Model != nil { cd.Model.Category = cm.CategoryDB - cd.Model.Registrant = reg + // ConnectionDB is now typed as v1beta3.Connection — assign directly. + // GORM reads all columns (description, url, sub_type, etc.) correctly + // since db: tags are identical to the connections table columns. + cd.Model.Registrant = cm.ConnectionDB } defs = append(defs, &cd) } diff --git a/models/meshmodel/registry/v1beta1/model_filter.go b/models/meshmodel/registry/v1beta1/model_filter.go index 7025f780..90013d8d 100644 --- a/models/meshmodel/registry/v1beta1/model_filter.go +++ b/models/meshmodel/registry/v1beta1/model_filter.go @@ -5,7 +5,7 @@ import ( "github.com/meshery/meshkit/models/meshmodel/entity" "github.com/meshery/meshkit/models/meshmodel/registry" "github.com/meshery/schemas/models/v1alpha3/relationship" - "github.com/meshery/schemas/models/v1beta1/model" + "github.com/meshery/schemas/models/v1beta2/model" "github.com/meshery/schemas/models/v1beta3/component" "gorm.io/gorm/clause" diff --git a/models/registration/dir.go b/models/registration/dir.go index c69c603d..ae30f805 100644 --- a/models/registration/dir.go +++ b/models/registration/dir.go @@ -13,7 +13,7 @@ import ( "github.com/meshery/meshkit/utils" "github.com/meshery/schemas/models/v1alpha3/relationship" - "github.com/meshery/schemas/models/v1beta1/model" + "github.com/meshery/schemas/models/v1beta2/model" "github.com/meshery/schemas/models/v1beta3/component" ) diff --git a/models/registration/register.go b/models/registration/register.go index 2b6bad17..23f9a913 100644 --- a/models/registration/register.go +++ b/models/registration/register.go @@ -5,8 +5,10 @@ import ( "github.com/meshery/meshkit/models/meshmodel/entity" meshmodel "github.com/meshery/meshkit/models/meshmodel/registry" "github.com/meshery/schemas/models/v1alpha3/relationship" - "github.com/meshery/schemas/models/v1beta1/connection" - "github.com/meshery/schemas/models/v1beta1/model" + connectionv1beta1 "github.com/meshery/schemas/models/v1beta1/connection" + "github.com/meshery/schemas/models/v1beta3/connection" + modelv1beta1 "github.com/meshery/schemas/models/v1beta1/model" + "github.com/meshery/schemas/models/v1beta2/model" "github.com/meshery/schemas/models/v1beta3/component" ) @@ -18,6 +20,22 @@ type PackagingUnit struct { _ []v1beta1.PolicyDefinition } +// connV3ToV1 field-copies a v1beta3 Connection to v1beta1 Connection. +// Required at the RegisterEntity boundary: the RegistryManager signature +// expects v1beta1.Connection (stable internal API) while ModelDefinition.Registrant +// is now v1beta3.Connection (canonical wire format). DB column tags are +// identical in both versions so no data is lost or altered. +func connV3ToV1(c connection.Connection) connectionv1beta1.Connection { + return connectionv1beta1.Connection{ + ID: c.ID, + Name: c.Name, + Kind: c.Kind, + Type: c.Type, + SubType: c.SubType, + Status: connectionv1beta1.ConnectionStatus(c.Status), + } +} + type RegistrationHelper struct { regManager *meshmodel.RegistryManager regErrStore RegistrationErrorStore @@ -89,7 +107,7 @@ func (rh *RegistrationHelper) register(pkg PackagingUnit) { } model.Registrant.Status = connection.ConnectionStatusRegistered - _, _, err := rh.regManager.RegisterEntity(model.Registrant, &model) + _, _, err := rh.regManager.RegisterEntity(connV3ToV1(model.Registrant), &model) // If model cannot be registered, don't register anything else if err != nil { @@ -125,7 +143,7 @@ func (rh *RegistrationHelper) register(pkg PackagingUnit) { ) } - _, _, err := rh.regManager.RegisterEntity(model.Registrant, &comp) + _, _, err := rh.regManager.RegisterEntity(connV3ToV1(model.Registrant), &comp) if err != nil { err = ErrRegisterEntity(err, string(comp.Type()), comp.DisplayName) rh.regErrStore.InsertEntityRegError(hostname, model.DisplayName, entity.ComponentDefinition, comp.DisplayName, err) @@ -137,9 +155,20 @@ func (rh *RegistrationHelper) register(pkg PackagingUnit) { // 3. Register relationships for _, rel := range pkg.Relationships { - rel.Model = model.ToReference() + // Convert v1beta2.ModelReference to v1beta1.ModelReference at the + // v1alpha3/relationship boundary. Both structs have identical fields + // (same names and types); only their package paths differ. + v2ref := model.ToReference() + rel.Model = modelv1beta1.ModelReference{ + DisplayName: v2ref.DisplayName, + ID: v2ref.ID, + Model: modelv1beta1.Model{Version: v2ref.Model.Version}, + Name: v2ref.Name, + Registrant: modelv1beta1.RegistrantReference{Kind: v2ref.Registrant.Kind}, + Version: v2ref.Version, + } rel.ModelId = &model.ID - _, _, err := rh.regManager.RegisterEntity(model.Registrant, &rel) + _, _, err := rh.regManager.RegisterEntity(connV3ToV1(model.Registrant), &rel) if err != nil { err = ErrRegisterEntity(err, string(rel.Type()), string(rel.Kind)) rh.regErrStore.InsertEntityRegError(hostname, model.DisplayName, entity.RelationshipDefinition, rel.ID.String(), err) diff --git a/models/registration/utils.go b/models/registration/utils.go index 86dadac4..6c510232 100644 --- a/models/registration/utils.go +++ b/models/registration/utils.go @@ -9,7 +9,7 @@ import ( "github.com/meshery/schemas/models/v1alpha3" "github.com/meshery/schemas/models/v1alpha3/relationship" "github.com/meshery/schemas/models/v1beta1" - "github.com/meshery/schemas/models/v1beta1/model" + "github.com/meshery/schemas/models/v1beta2/model" "github.com/meshery/schemas/models/v1beta3" "github.com/meshery/schemas/models/v1beta3/component" ) diff --git a/registry/model.go b/registry/model.go index dea008e7..16bfe1d4 100644 --- a/registry/model.go +++ b/registry/model.go @@ -24,8 +24,8 @@ import ( "github.com/meshery/meshkit/utils/store" "github.com/meshery/schemas/models/v1beta1/capability" "github.com/meshery/schemas/models/v1beta1/category" - "github.com/meshery/schemas/models/v1beta1/connection" - _model "github.com/meshery/schemas/models/v1beta1/model" + connectionv1beta3 "github.com/meshery/schemas/models/v1beta3/connection" + _model "github.com/meshery/schemas/models/v1beta2/model" "github.com/meshery/schemas/models/v1beta1/subcategory" "github.com/meshery/schemas/models/v1beta3" "github.com/meshery/schemas/models/v1beta3/component" @@ -374,7 +374,7 @@ published: %s markdown = strings.ReplaceAll(markdown, "\r", "\n") return markdown } -func createNewRegistrant(registrantName string) connection.Connection { +func createNewRegistrant(registrantName string) connectionv1beta3.Connection { kind := utils.ReplaceSpacesAndConvertToLowercase(registrantName) switch kind { case "artifacthub": @@ -386,9 +386,9 @@ func createNewRegistrant(registrantName string) connection.Connection { case "kubernetes": registrantName = "Kubernetes" } - newRegistrant := connection.Connection{ + newRegistrant := connectionv1beta3.Connection{ Name: registrantName, - Status: connection.ConnectionStatusDiscovered, + Status: connectionv1beta3.ConnectionStatusDiscovered, Type: "registry", Kind: kind, } diff --git a/registry/relationship.go b/registry/relationship.go index 07a4840d..8d55352c 100644 --- a/registry/relationship.go +++ b/registry/relationship.go @@ -151,7 +151,7 @@ func ProcessRelationships(relationshipCSVHelper *RelationshipCSVHelper, spreadsh } var rel _rel.RelationshipDefinition - rel.SchemaVersion = schema.RelationshipSchemaVersionV1Beta2 + rel.SchemaVersion = schema.RelationshipSchemaVersionV1Beta3 rel.Kind = _rel.RelationshipDefinitionKind(utils.ReplaceSpacesWithHyphenAndConvertToLowercase(relationship.KIND)) rel.RelationshipType = utils.ReplaceSpacesWithHyphenAndConvertToLowercase(relationship.Type) rel.SubType = utils.ReplaceSpacesWithHyphenAndConvertToLowercase(relationship.SubType) diff --git a/schema/validator.go b/schema/validator.go index f8af4a6b..fe2b994d 100644 --- a/schema/validator.go +++ b/schema/validator.go @@ -33,6 +33,11 @@ const ( // the string to keep all packages in sync. const RelationshipSchemaVersionV1Beta2 = "relationships.meshery.io/v1beta2" +// RelationshipSchemaVersionV1Beta3 is the canonical schema version string for +// v1beta3 relationship definitions. model generate uses this version to align +// with the templates used by model init. +const RelationshipSchemaVersionV1Beta3 = "relationships.meshery.io/v1beta3" + // Ref identifies which schema should be used to validate a document. type Ref struct { SchemaVersion string `json:"schemaVersion,omitempty" yaml:"schemaVersion,omitempty"` diff --git a/utils/component/openapi_generator.go b/utils/component/openapi_generator.go index d0807fa8..612bcbf2 100644 --- a/utils/component/openapi_generator.go +++ b/utils/component/openapi_generator.go @@ -16,7 +16,7 @@ import ( "gopkg.in/yaml.v3" - "github.com/meshery/schemas/models/v1beta1/model" + "github.com/meshery/schemas/models/v1beta2/model" "github.com/meshery/schemas/models/v1beta3" "github.com/meshery/schemas/models/v1beta3/component" )