Skip to content
This repository was archived by the owner on Jan 30, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions internal/discovery/discovery.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,8 @@ func ComponentsFromDiscoveryManifest(manifest discovery.Manifest) ([]*resource.C
OSContentType: resource.ContentTypeUBI,
Type: resource.ContainerTypeContainer,
},
Name: mostCommonContainerName,
ProjectStatus: resource.ProjectStatusActive,
Type: resource.ComponentTypeContainer,
Name: mostCommonContainerName,
Type: resource.ComponentTypeContainer,
}

components = append(components, &c)
Expand Down
3 changes: 3 additions & 0 deletions internal/genpyxis/fragments.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ fragment ComponentSupportedFields on CertificationProject {
long_description
github_usernames
distribution_method
application_categories
}
container {
isv_pid
Expand All @@ -78,6 +79,8 @@ fragment ComponentSupportedFields on CertificationProject {
distribution_method
hosted_registry
os_content_type
application_categories
build_categories
}
contacts {
email_address
Expand Down
33 changes: 33 additions & 0 deletions internal/genpyxis/generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 15 additions & 24 deletions internal/resource/component.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,25 @@ package resource
import "time"

type Component struct {
ID string `json:"_id,omitempty"`
CertificationDate *time.Time `json:"certification_date,omitempty"`
CertificationLevel string `json:"certification_level,omitempty"`
CertificationStatus string `json:"certification_status,omitempty"`
Contacts []ComponentContacts `json:"contacts,omitempty"`
Container *ContainerComponent `json:"container,omitempty"`
Name string `json:"name,omitempty"`
OperatorDistribution string `json:"operator_distribution,omitempty"`
OrgID int `json:"org_id,omitempty"`
ProjectStatus ComponentProjectStatus `json:"project_status,omitempty" jsonschema:"enum=active,enum=archive"`
PublishedBy string `json:"published_by,omitempty"`
Badges []string `json:"badges,omitempty"`
Type ComponentType `json:"type,omitempty" jsonschema:"enum=Containers,enum=Helm Chart,enum=OpenShift-cnf"`
CreationDate *time.Time `json:"creation_date,omitempty"`
HelmChart *HelmChartComponent `json:"helm_chart,omitempty"`
LastUpdateDate *time.Time `json:"last_update_date,omitempty"`
ID string `json:"_id,omitempty"`
CertificationDate *time.Time `json:"certification_date,omitempty"`
CertificationLevel string `json:"certification_level,omitempty"`
Contacts []ComponentContacts `json:"contacts,omitempty"`
Container *ContainerComponent `json:"container,omitempty"`
Name string `json:"name,omitempty"`
OperatorDistribution string `json:"operator_distribution,omitempty"`
OrgID int `json:"org_id,omitempty"`
PublishedBy string `json:"published_by,omitempty"`
Badges []string `json:"badges,omitempty"`
Type ComponentType `json:"type,omitempty" jsonschema:"enum=Containers,enum=Helm Chart,enum=OpenShift-cnf"`
CreationDate *time.Time `json:"creation_date,omitempty"`
HelmChart *HelmChartComponent `json:"helm_chart,omitempty"`
LastUpdateDate *time.Time `json:"last_update_date,omitempty"`
}

type ComponentContacts struct {
EmailAddress string `json:"email_address,omitempty"`
Type string `json:"type,omitempty"`
Type string `json:"type,omitempty" jsonschema:"enum=Technical contact"`
}

type ComponentType = string
Expand All @@ -39,10 +37,3 @@ const (
// ComponentTypeOpenStackAppContainer ComponentType = "OpenStack-app-container"
// ComponentTypeRHEL ComponentType = "RHEL"
)

type ComponentProjectStatus = string

const (
ProjectStatusActive ComponentProjectStatus = "active"
ProjectStatusArchived ComponentProjectStatus = "archived"
)
67 changes: 67 additions & 0 deletions internal/resource/component_container.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
package resource

type BuildCategory string

const (
BuildCategoryStandaloneImage BuildCategory = "Standalone image"
BuildCategoryComponentImage BuildCategory = "Component image"
BuildCategoryOperatorImage BuildCategory = "Operator image"
BuildCategoryOperatorBundle BuildCategory = "Operator bundle"
)

type ContainerComponent struct {
ApplicationCategories []ApplicationCategory `json:"application_categories,omitempty" jsonschema:"maxItems=3,enum=Accounting,enum=AI / Machine learning,enum=API Management,enum=Application Delivery,enum=Application Server,enum=Automation,enum=Backup & Recovery,enum=Business Intelligence,enum=Business Process Management,enum=Capacity Management,enum=Cloud Management,enum=Collaboration/Groupware/Messaging,enum=Configuration Management,enum=Console,enum=Container Platform / Management,enum=Content Management/Authoring,enum=Customer Relationship Management,enum=Dashboard,enum=Database & Data Management,enum=Data Store,enum=Developer Tools,enum=Enterprise Resource Planning,enum=Identity Management,enum=Integration,enum=Logging,enum=Logging & Metrics,enum=Management,enum=Messaging,enum=Metrics,enum=Migration,enum=Middleware,enum=Mobile Application Development Platform (MADP),enum=Monitoring,enum=Network Management,enum=Networking,enum=Observability,enum=Other,enum=Operating System,enum=Performance Management,enum=Plugin,enum=Policy Enforcement,enum=Programming Languages & Runtimes,enum=Scheduling,enum=Search,enum=Security,enum=Storage,enum=Tracing,enum=Virtualization Platform,enum=Web Services"`
// NOTE: this is plural in the json and in the API spec, but doesn't
// actually contain multiple values.
BuildCategory BuildCategory `json:"build_categories,omitempty" jsonschema:"enum=Standalone image,enum=Component image,enum=Operator image,enum=Operator bundle"`
DistributionMethod ContainerDistributionMethod `json:"distribution_method,omitempty" jsonschema:"enum=rhcc,enum=external,enum=non_registry,enum=marketplace_only"`
PID string `json:"isv_pid,omitempty"`
OSContentType ContainerComponentContentType `json:"os_content_type,omitempty" jsonschema:"enum=Red Hat Enterprise Linux,enum=Red Hat Universal Base Image (UBI),enum=Operator Bundle Image,enum=Scratch Image"`
Expand Down Expand Up @@ -48,3 +61,57 @@ const (
ReleaseCategoryGA ReleaseCategory = "Generally Available"
ReleaseCategoryBeta ReleaseCategory = "Beta"
)

type ApplicationCategory = string

const (
ApplicationCategoryAccounting ApplicationCategory = "Accounting"
ApplicationCategoryAIML ApplicationCategory = "AI / Machine learning"
ApplicationCategoryAPIManagement ApplicationCategory = "API Management"
ApplicationCategoryApplicationDelivery ApplicationCategory = "Application Delivery"
ApplicationCategoryApplicationServer ApplicationCategory = "Application Server"
ApplicationCategoryAutomation ApplicationCategory = "Automation"
ApplicationCategoryBackupRecovery ApplicationCategory = "Backup & Recovery"
ApplicationCategoryBusinessIntelligence ApplicationCategory = "Business Intelligence"
ApplicationCategoryBusinessProcessManagement ApplicationCategory = "Business Process Management"
ApplicationCategoryCapacityManagement ApplicationCategory = "Capacity Management"
ApplicationCategoryCloudManagement ApplicationCategory = "Cloud Management"
ApplicationCategoryCollaborationGroupwareMessaging ApplicationCategory = "Collaboration/Groupware/Messaging"
ApplicationCategoryConfigurationManagement ApplicationCategory = "Configuration Management"
ApplicationCategoryConsole ApplicationCategory = "Console"
ApplicationCategoryContainerPlatformManagement ApplicationCategory = "Container Platform / Management"
ApplicationCategoryContentManagementAuthoring ApplicationCategory = "Content Management/Authoring"
ApplicationCategoryCRM ApplicationCategory = "Customer Relationship Management"
ApplicationCategoryDashboard ApplicationCategory = "Dashboard"
ApplicationCategoryDatabaseDataManagement ApplicationCategory = "Database & Data Management"
ApplicationCategoryDataStore ApplicationCategory = "Data Store"
ApplicationCategoryDeveloperTools ApplicationCategory = "Developer Tools"
ApplicationCategoryERP ApplicationCategory = "Enterprise Resource Planning"
ApplicationCategoryIdentityManagement ApplicationCategory = "Identity Management"
ApplicationCategoryIntegration ApplicationCategory = "Integration"
ApplicationCategoryLogging ApplicationCategory = "Logging"
ApplicationCategoryLoggingMetrics ApplicationCategory = "Logging & Metrics"
ApplicationCategoryManagement ApplicationCategory = "Management"
ApplicationCategoryMessaging ApplicationCategory = "Messaging"
ApplicationCategoryMetrics ApplicationCategory = "Metrics"
ApplicationCategoryMigration ApplicationCategory = "Migration"
ApplicationCategoryMiddleware ApplicationCategory = "Middleware"
ApplicationCategoryMADP ApplicationCategory = "Mobile Application Development Platform (MADP)"
ApplicationCategoryMonitoring ApplicationCategory = "Monitoring"
ApplicationCategoryNetworkManagement ApplicationCategory = "Network Management"
ApplicationCategoryNetworking ApplicationCategory = "Networking"
ApplicationCategoryObservability ApplicationCategory = "Observability"
ApplicationCategoryOther ApplicationCategory = "Other"
ApplicationCategoryOS ApplicationCategory = "Operating System"
ApplicationCategoryPerformanceManagement ApplicationCategory = "Performance Management"
ApplicationCategoryPlugin ApplicationCategory = "Plugin"
ApplicationCategoryPolicyEnforcement ApplicationCategory = "Policy Enforcement"
ApplicationCategoryProgLangsRuntimes ApplicationCategory = "Programming Languages & Runtimes"
ApplicationCategoryScheduling ApplicationCategory = "Scheduling"
ApplicationCategorySearch ApplicationCategory = "Search"
ApplicationCategorySecurity ApplicationCategory = "Security"
ApplicationCategoryStorage ApplicationCategory = "Storage"
ApplicationCategoryTracing ApplicationCategory = "Tracing"
ApplicationCategoryVirtualizationPlatform ApplicationCategory = "Virtualization Platform"
ApplicationCategoryWebServices ApplicationCategory = "Web Services"
)
24 changes: 16 additions & 8 deletions internal/resource/component_helmchart.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
package resource

type HelmChartDistributionMethod = string

type HelmChartComponent struct {
ChartName string `json:"chart_name,omitempty"`
Repository string `json:"repository,omitempty"`
ShortDescription string `json:"short_description,omitempty"`
LongDescription string `json:"long_description,omitempty"`
GitHubUsernames []string `json:"github_usernames,omitempty"`
DistributionMethod string `json:"distribution_method,omitempty"`
ApplicationCategories []ApplicationCategory `json:"application_categories,omitempty" jsonschema:"maxItems=3,enum=Accounting,enum=AI / Machine learning,enum=API Management,enum=Application Delivery,enum=Application Server,enum=Automation,enum=Backup & Recovery,enum=Business Intelligence,enum=Business Process Management,enum=Capacity Management,enum=Cloud Management,enum=Collaboration/Groupware/Messaging,enum=Configuration Management,enum=Console,enum=Container Platform / Management,enum=Content Management/Authoring,enum=Customer Relationship Management,enum=Dashboard,enum=Database & Data Management,enum=Data Store,enum=Developer Tools,enum=Enterprise Resource Planning,enum=Identity Management,enum=Integration,enum=Logging,enum=Logging & Metrics,enum=Management,enum=Messaging,enum=Metrics,enum=Migration,enum=Middleware,enum=Mobile Application Development Platform (MADP),enum=Monitoring,enum=Network Management,enum=Networking,enum=Observability,enum=Other,enum=Operating System,enum=Performance Management,enum=Plugin,enum=Policy Enforcement,enum=Programming Languages & Runtimes,enum=Scheduling,enum=Search,enum=Security,enum=Storage,enum=Tracing,enum=Virtualization Platform,enum=Web Services"`
ChartName string `json:"chart_name,omitempty"`
Repository string `json:"repository,omitempty"`
ShortDescription string `json:"short_description,omitempty"`
LongDescription string `json:"long_description,omitempty"`
GitHubUsernames []string `json:"github_usernames,omitempty"`
DistributionMethod HelmChartDistributionMethod `json:"distribution_method,omitempty" jsonschema:"enum=redhat,enum=external,enum=undistributed"`
}

// HelmChartDistributionMethod is a string alias for the distribution method of a Helm chart.
type HelmChartDistributionMethod = string

const (
HelmChartDistributionMethodRedHat HelmChartDistributionMethod = "redhat"
HelmChartDistributionMethodExternal HelmChartDistributionMethod = "external"
HelmChartDistributionMethodUndistributed HelmChartDistributionMethod = "undistributed"
)
1 change: 0 additions & 1 deletion internal/resource/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ func (d *ProductListingDeclaration) Sanitize() {
if c := d.With.Components[i].Container; c != nil {
c.PID = ""
}
d.With.Components[i].ProjectStatus = "active"
d.With.Components[i].CreationDate = nil
d.With.Components[i].LastUpdateDate = nil
d.With.Components[i].CertificationDate = nil
Expand Down
6 changes: 0 additions & 6 deletions internal/resource/resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ var _ = Describe("Resource", func() {
CertificationDate: &time.Time{},
Name: "cname",
OrgID: 1234,
ProjectStatus: "unset",
Type: resource.ComponentTypeContainer,
CreationDate: &time.Time{},
LastUpdateDate: &time.Time{},
Expand Down Expand Up @@ -61,11 +60,6 @@ var _ = Describe("Resource", func() {
Expect(c.OrgID).To(BeZero())
}
})
It("should reset the component statuses", func() {
for _, c := range declaration.With.Components {
Expect(c.ProjectStatus).To(Equal(resource.ProjectStatusActive))
}
})
It("should leave component information intact", func() {
Expect(declaration.Spec.Name).To(Equal("test-fixture"))
Expect(declaration.Spec.Type).To(Equal(resource.ProductListingTypeContainerStack))
Expand Down