Skip to content

Commit 0ea624e

Browse files
committed
Updating Component CR according new model
STONEBLD-3899 Signed-off-by: Robert Cerven <rcerven@redhat.com>
1 parent 5a9670b commit 0ea624e

File tree

1 file changed

+254
-22
lines changed

1 file changed

+254
-22
lines changed

api/v1alpha1/component_types.go

Lines changed: 254 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,7 @@ import (
2121
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2222
)
2323

24-
// ComponentSrcType describes the type of
25-
// the src for the Component.
26-
// Only one of the following location type may be specified.
27-
// +kubebuilder:validation:Enum=Git;Image
28-
type ComponentSrcType string
29-
30-
const (
31-
GitComponentSrcType ComponentSrcType = "Git"
32-
ImageComponentSrcType ComponentSrcType = "Image"
33-
)
34-
24+
// !!! Will be removed when we remove old model
3525
type GitSource struct {
3626
// An HTTPS URL representing the git repository to create the component from.
3727
URL string `json:"url"`
@@ -65,7 +55,164 @@ type ComponentSource struct {
6555
type ComponentSourceUnion struct {
6656
// Git Source for a Component.
6757
// Optional.
58+
// !!! Will be removed when we remove old model
6859
GitSource *GitSource `json:"git,omitempty"`
60+
61+
// Git repository URL for the component.
62+
// Optional.
63+
// !!! Will be required when we remove old model
64+
GitURL string `json:"url,omitempty"`
65+
66+
// Dockerfile path for all versions, unless explicitly specified for a version.
67+
// Used only when sending a PR with build pipeline configuration was requested via 'spec.actions.create-pipeline-configuration-pr'.
68+
// Default: "Dockerfile"
69+
// Optional.
70+
DockerfileURI string `json:"dockerfileUri,omitempty"`
71+
72+
// List of all versions for this component.
73+
// Optional.
74+
// !!! Will be required when we remove old model
75+
Versions []ComponentVersion `json:"versions,omitempty"`
76+
}
77+
78+
type ComponentActions struct {
79+
// Send a PR with build pipeline configuration proposal for Component version(s).
80+
// If not set, version onboarding will be done without pipeline configuration PR.
81+
// Could be used after onboarding to create / renew build pipeline definition.
82+
// Optional.
83+
CreateConfiguration ComponentCreatePipelineConfiguration `json:"create-pipeline-configuration-pr,omitempty"`
84+
85+
// Specify name of component version to restart the push build for.
86+
// Can be specified together with 'trigger-push-builds' and any duplicates will be removed.
87+
// Optional.
88+
TriggerBuild string `json:"trigger-push-build,omitempty"`
89+
90+
// Specify names of component versions to restart the push build for.
91+
// Can be specified together with 'trigger-push-build' and any duplicates will be removed.
92+
// Optional.
93+
TriggerBuilds []string `json:"trigger-push-builds,omitempty"`
94+
}
95+
96+
type ComponentCreatePipelineConfiguration struct {
97+
// When specified it will send a PR with build pipeline configuration proposal for all Component versions.
98+
// Has precedence over 'version' and 'versions'.
99+
// Optional.
100+
AllVersions bool `json:"all-versions,omitempty"`
101+
102+
// When specified it will send a PR with build pipeline configuration proposal for the Component version.
103+
// Can be specified together with 'versions' and any duplicates will be removed.
104+
// Optional.
105+
Version string `json:"version,omitempty"`
106+
107+
// When specified it will send a PR with build pipeline configuration proposal for Component versions.
108+
// Can be specified together with 'version' and any duplicates will be removed.
109+
// Optional.
110+
Versions []string `json:"versions,omitempty"`
111+
}
112+
113+
type ComponentBuildPipeline struct {
114+
// Pipeline used for pull and push pipeline runs.
115+
// Can specify just one of: pipelinespec-from-bundle, pipelineref-by-name, pipelineref-by-git-resolver.
116+
// Optional.
117+
PullAndPush PipelineDefinition `json:"pull-and-push,omitempty"`
118+
119+
// Pipeline used for pull pipeline run.
120+
// Can specify just one of: pipelinespec-from-bundle, pipelineref-by-name, pipelineref-by-git-resolver.
121+
// Optional.
122+
Pull PipelineDefinition `json:"pull,omitempty"`
123+
124+
// Pipeline used for push pipeline run.
125+
// Can specify just one of: pipelinespec-from-bundle, pipelineref-by-name, pipelineref-by-git-resolver.
126+
// Optional.
127+
Push PipelineDefinition `json:"push,omitempty"`
128+
}
129+
130+
type PipelineDefinition struct {
131+
// Will be used to fill out PipelineRef in pipeline runs to user specific pipeline via git resolver,
132+
// specifying repository with a pipeline definition.
133+
// Optional.
134+
PipelineRefGit PipelineRefGitSpec `json:"pipelineref-by-git-resolver,omitempty"`
135+
136+
// Will be used to fill out PipelineRef in pipeline runs to user specific pipeline.
137+
// Such pipeline definition has to be in .tekton.
138+
// Optional.
139+
PipelineRefName string `json:"pipelineref-by-name,omitempty"`
140+
141+
// Will be used to fetch bundle and fill out PipelineSpec in pipeline runs.
142+
// Pipeline name is based on build-pipeline-config CM in build-service NS.
143+
// When 'latest' bundle is specified, bundle image will be used from CM.
144+
// When bundle is specified to specific image bundle, then that one will be used
145+
// and pipeline name will be used to fetch pipeline from that bundle.
146+
// Optional.
147+
PipelineSpecFromBundle PipelineSpecFromBundleSpec `json:"pipelinespec-from-bundle,omitempty"`
148+
}
149+
150+
type PipelineSpecFromBundleSpec struct {
151+
// Bundle image reference. Use 'latest' to get bundle from build-pipeline-config CM,
152+
// or specify a specific bundle image.
153+
// Required.
154+
// +required
155+
Bundle string `json:"bundle"`
156+
157+
// Pipeline name to fetch from the bundle, or from build-pipeline-config CM.
158+
// Required.
159+
// +required
160+
Name string `json:"name"`
161+
}
162+
163+
type PipelineRefGitSpec struct {
164+
// Path to the pipeline definition file within the repository.
165+
// Example: pipeline/push.yaml
166+
// Required.
167+
// +required
168+
PathInRepo string `json:"pathInRepo"`
169+
170+
// Git revision (branch, tag, or commit) to use.
171+
// Example: main
172+
// Required.
173+
// +required
174+
Revision string `json:"revision"`
175+
176+
// Git repository URL containing the pipeline definition.
177+
// Example: https://github.com/custom-pipelines/pipelines.git
178+
// Required.
179+
// +required
180+
Url string `json:"url"`
181+
}
182+
183+
type ComponentVersion struct {
184+
// Used only when sending a PR with build pipeline configuration was requested via 'spec.actions.create-pipeline-configuration-pr'.
185+
// Pipeline used for the version; when omitted, the default pipeline will be used from 'spec.default-build-pipeline'.
186+
// Optional.
187+
BuildPipeline ComponentBuildPipeline `json:"build-pipeline,omitempty"`
188+
189+
// Context directory for the version.
190+
// Used only when sending a PR with build pipeline configuration was requested via 'spec.actions.create-pipeline-configuration-pr'.
191+
// Default: "" (empty string, root of repository).
192+
// Optional.
193+
Context string `json:"context,omitempty"`
194+
195+
// Dockerfile path for the version.
196+
// Used only when sending a PR with build pipeline configuration was requested via 'spec.actions.create-pipeline-configuration-pr'.
197+
// Default: "Dockerfile".
198+
// Optional.
199+
DockerfileURI string `json:"dockerfileUri,omitempty"`
200+
201+
// User defined name for the version.
202+
// After sanitization (lower case, removing spaces, etc) all version names must be unique.
203+
// Required.
204+
// +required
205+
Name string `json:"name"`
206+
207+
// Git branch to use for the version.
208+
// Required.
209+
// +required
210+
Revision string `json:"revision"`
211+
212+
// When 'true' it will disable builds for a revision in the version.
213+
// Default: false.
214+
// Optional.
215+
SkipBuilds bool `json:"skip-builds,omitempty"`
69216
}
70217

71218
// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
@@ -77,27 +224,30 @@ type ComponentSpec struct {
77224
// +kubebuilder:validation:Pattern=^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
78225
// +kubebuilder:validation:MaxLength=63
79226
// ComponentName is name of the component to be added to the Application. The name must adhere to DNS-1123 validation.
80-
// Required.
81-
// +required
82-
ComponentName string `json:"componentName"`
227+
// Optional.
228+
// +optional
229+
// !!! Will be removed when we remove old model
230+
ComponentName string `json:"componentName,omitempty"`
83231

84232
// +kubebuilder:validation:Pattern=^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
85233
// Application is the name of the application resource that the component belongs to.
86-
// Required.
87-
// +required
88-
Application string `json:"application"`
234+
// Optional.
235+
// +optional
236+
// !!! Will be removed when we remove old model
237+
Application string `json:"application,omitempty"`
89238

90239
// Secret describes the name of a Kubernetes secret containing either:
91240
// 1. A Personal Access Token to access the Component's git repostiory (if using a Git-source component) or
92241
// 2. An Image Pull Secret to access the Component's container image (if using an Image-source component).
93242
// Optional.
94243
// +optional
244+
// !!! Will be removed when we remove old model
95245
Secret string `json:"secret,omitempty"`
96246

97247
// Source describes the Component source.
98-
// Optional.
99-
// +optional
100-
Source ComponentSource `json:"source,omitempty"`
248+
// Required.
249+
// +required
250+
Source ComponentSource `json:"source"`
101251

102252
// Compute Resources required by this component.
103253
// Optional.
@@ -107,38 +257,71 @@ type ComponentSpec struct {
107257
// The number of replicas to deploy the component with.
108258
// Optional.
109259
// +optional
260+
// !!! Will be removed when we remove old model
110261
Replicas *int `json:"replicas,omitempty"`
111262

112263
// The port to expose the component over.
113264
// Optional.
114265
// +optional
266+
// !!! Will be removed when we remove old model
115267
TargetPort int `json:"targetPort,omitempty"`
116268

117269
// The route to expose the component with.
118270
// Optional.
119271
// +optional
272+
// !!! Will be removed when we remove old model
120273
Route string `json:"route,omitempty"`
121274

122275
// An array of environment variables to add to the component (ValueFrom not currently supported)
123276
// Optional
124277
// +optional
125278
Env []corev1.EnvVar `json:"env,omitempty"`
126279

127-
// The container image to build or create the component from
128-
// Example: quay.io/someorg/somerepository:latest.
280+
// The container image repository to use for this component (without tag).
281+
// Either will be set by Image Repository, or explicitly specified with custom repo.
282+
// All versions of this component will use this single image repository.
283+
// Example: quay.io/org/tenant/component
129284
// Optional.
130285
// +optional
131286
ContainerImage string `json:"containerImage,omitempty"`
132287

133288
// Whether or not to bypass the generation of GitOps resources for the Component. Defaults to false.
134289
// Optional.
135290
// +optional
291+
// !!! Will be removed when we remove old model
136292
SkipGitOpsResourceGeneration bool `json:"skipGitOpsResourceGeneration,omitempty"`
137293

138294
// The list of components to be nudged by this components build upon a successful result.
139295
// Optional.
140296
// +optional
297+
// !!! Will be removed when we remove old model
141298
BuildNudgesRef []string `json:"build-nudges-ref,omitempty"`
299+
300+
// Specific actions that will be processed by the controller and then removed from 'spec.actions'.
301+
// Used for triggering builds or creating pipeline configuration PRs.
302+
// Optional.
303+
// +optional
304+
Actions ComponentActions `json:"actions,omitempty"`
305+
306+
// When 'true', during offboarding a cleaning PR won't be created.
307+
// Default: false.
308+
// Optional.
309+
// +optional
310+
SkipOffboardingPr bool `json:"skip-offboarding-pr,omitempty"`
311+
312+
// When 'true', will set comment_strategy: "disable_all" in the Repository CR (either in gitlab or github section in spec.settings).
313+
// Default: false.
314+
// Optional.
315+
// +optional
316+
DisablePrComments bool `json:"disable-pr-comments,omitempty"`
317+
318+
// Used only when sending a PR with build pipeline configuration was requested via 'spec.actions.create-pipeline-configuration-pr'.
319+
// Pipeline used for all versions, unless explicitly specified for a specific version.
320+
// When omitted it has to be specified in all versions.
321+
// Optional.
322+
// +optional
323+
DefaultBuildPipeline ComponentBuildPipeline `json:"default-build-pipeline,omitempty"`
324+
142325
}
143326

144327
// ComponentStatus defines the observed state of Component
@@ -150,30 +333,51 @@ type ComponentStatus struct {
150333
Conditions []metav1.Condition `json:"conditions,omitempty"`
151334

152335
// Webhook URL generated by Builds
336+
// !!! Will be removed when we remove old model
153337
Webhook string `json:"webhook,omitempty"`
154338

155339
// ContainerImage stores the associated built container image for the component
156340
ContainerImage string `json:"containerImage,omitempty"`
157341

158342
// The devfile model for the Component CR
343+
// !!! Will be removed when we remove old model
159344
Devfile string `json:"devfile,omitempty"`
160345

161346
// GitOps specific status for the Component CR
347+
// !!! Will be removed when we remove old model
162348
GitOps GitOpsStatus `json:"gitops,omitempty"`
163349

164350
// The last built commit id (SHA-1 checksum) from the latest component build.
165351
// Example: 41fbdb124775323f58fd5ce93c70bb7d79c20650.
352+
// !!! Will be removed when we remove old model SHOULD this be in version specific section??
166353
LastBuiltCommit string `json:"lastBuiltCommit,omitempty"`
167354

168355
// The last digest image component promoted with.
169356
// Example: quay.io/someorg/somerepository@sha256:5ca85b7f7b9da18a9c4101e81ee1d9bac35ac2b0b0221908ff7389204660a262.
357+
// !!! Will be removed when we remove old model SHOULD this be in version specific section??
170358
LastPromotedImage string `json:"lastPromotedImage,omitempty"`
171359

172360
// The list of names of Components whose builds nudge this resource (their spec.build-nudges-ref[] references this component)
361+
// !!! Will be removed when we remove old model
173362
BuildNudgedBy []string `json:"build-nudged-by,omitempty"`
363+
364+
// Identifies that PR comments are disabled in the Repository CR.
365+
DisablePrComments bool `json:"disable-pr-comments,omitempty"`
366+
367+
// General error message, not specific to any version (version-specific errors are in versions[].message).
368+
// Example: "Spec.ContainerImage is not set" or "GitHub App is not installed".
369+
Message string `json:"message,omitempty`
370+
371+
// Name of Repository CR for the component.
372+
PacRepository string `json:"pac-repository,omitempty`
373+
374+
// All versions which were processed by onboarding.
375+
// When version is removed from the spec, offboarding will remove it from the status.
376+
Versions []ComponentVersionStatus `json:"versions,omitempty"`
174377
}
175378

176379
// GitOpsStatus contains GitOps repository-specific status for the component
380+
// !!! Will be removed when we remove old model
177381
type GitOpsStatus struct {
178382
// RepositoryURL is the gitops repository URL for the component
179383
RepositoryURL string `json:"repositoryURL,omitempty"`
@@ -191,6 +395,34 @@ type GitOpsStatus struct {
191395
CommitID string `json:"commitID,omitempty"`
192396
}
193397

398+
type ComponentVersionStatus struct {
399+
// Link with onboarding PR if requested by 'spec.actions.create-pipeline-configuration-pr'.
400+
// Only present if onboarding was successful.
401+
// Example: https://github.com/user/repo/pull/1
402+
ConfigurationMergeURL string `json:"configuration-merge-url,omitempty"`
403+
404+
// Version specific error message.
405+
// Example: "pipeline for this version doesn't exist"
406+
Message string `json:"message,omitempty"`
407+
408+
// Name for the version.
409+
Name string `json:"name,omitempty"`
410+
411+
// Onboarding status will be either 'succeeded' or 'failed' ('disabled' won't be there because we will just remove specific version section).
412+
OnboardingStatus string `json:"onboarding-status,omitempty"`
413+
414+
// Timestamp for when onboarding happened.
415+
// Only present if onboarding was successful.
416+
// Example: "29 May 2024 15:11:16 UTC"
417+
OnboardingTime string `json:"onboarding-time,omitempty"`
418+
419+
// Git revision (branch) for the version.
420+
Revision string `json:"revision,omitempty"`
421+
422+
// Identifies that builds for the revision in the version are disabled.
423+
SkipBuilds bool `json:"skip-builds,omitempty"`
424+
}
425+
194426
//+kubebuilder:object:root=true
195427
//+kubebuilder:subresource:status
196428

0 commit comments

Comments
 (0)