Skip to content

Commit e4b467b

Browse files
authored
Merge pull request #52 from syntasso/build_comtainer_cmd
Build container cmd
2 parents 7317a3f + d0a2810 commit e4b467b

14 files changed

+805
-107
lines changed

.circleci/config.yml

+4-2
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@ jobs:
1616
run-tests:
1717
docker:
1818
- image: cimg/go:1.22
19-
resource_class: small
19+
resource_class: medium
2020
steps:
2121
- attach_workspace:
2222
at: .
23-
- run: make test
23+
- run:
24+
command: make test
25+
no_output_timeout: 2m
2426

2527
workflows:
2628
test:

cmd/add_container.go

+24-27
Original file line numberDiff line numberDiff line change
@@ -51,35 +51,32 @@ func AddContainer(cmd *cobra.Command, args []string) error {
5151
}
5252

5353
pipelineInput := args[0]
54-
pipelineParts := strings.Split(pipelineInput, "/")
55-
56-
if len(pipelineParts) != 3 {
57-
return fmt.Errorf("invalid pipeline format: %s, expected format: LIFECYCLE/ACTION/PIPELINE-NAME", pipelineInput)
54+
containerArgs, err := ParseContainerCmdArgs(pipelineInput)
55+
if err != nil {
56+
return err
5857
}
5958

60-
lifecycle, action, pipelineName := pipelineParts[0], pipelineParts[1], pipelineParts[2]
61-
62-
if err := generateWorkflow(lifecycle, action, pipelineName, containerName, image, false); err != nil {
59+
if err := generateWorkflow(containerArgs, containerName, image, false); err != nil {
6360
return err
6461
}
6562

6663
pipelineScriptFilename := "pipeline.sh"
67-
scriptsPath := filepath.Join("workflows", lifecycle, action, pipelineName, containerName, "scripts", pipelineScriptFilename)
64+
scriptsPath := filepath.Join("workflows", containerArgs.Lifecycle, containerArgs.Action, containerArgs.Pipeline, containerName, "scripts", pipelineScriptFilename)
6865
fmt.Printf("Customise your container by editing %s \n", scriptsPath)
6966
fmt.Println("Don't forget to build and push your image!")
7067
return nil
7168
}
7269

73-
func generateWorkflow(lifecycle, action, pipelineName, containerName, image string, overwrite bool) error {
74-
if lifecycle != "promise" && lifecycle != "resource" {
75-
return fmt.Errorf("invalid lifecycle: %s, expected one of: promise, resource", lifecycle)
70+
func generateWorkflow(c *ContainerCmdArgs, containerName, image string, overwrite bool) error {
71+
if c.Lifecycle != "promise" && c.Lifecycle != "resource" {
72+
return fmt.Errorf("invalid lifecycle: %s, expected one of: promise, resource", c.Lifecycle)
7673
}
7774

78-
if action != "configure" && action != "delete" {
79-
return fmt.Errorf("invalid action: %s, expected one of: configure, delete", action)
75+
if c.Action != "configure" && c.Action != "delete" {
76+
return fmt.Errorf("invalid action: %s, expected one of: configure, delete", c.Action)
8077
}
8178

82-
if pipelineName == "" {
79+
if c.Pipeline == "" {
8380
return fmt.Errorf("pipeline name cannot be empty")
8481
}
8582

@@ -88,7 +85,7 @@ func generateWorkflow(lifecycle, action, pipelineName, containerName, image stri
8885
Image: image,
8986
}
9087

91-
workflowPath := filepath.Join("workflows", lifecycle, action)
88+
workflowPath := filepath.Join("workflows", c.Lifecycle, c.Action)
9289
var promise v1alpha1.Promise
9390

9491
splitFiles := filesGeneratedWithSplit(dir)
@@ -111,7 +108,7 @@ func generateWorkflow(lifecycle, action, pipelineName, containerName, image stri
111108
}
112109
yaml.Unmarshal(fileBytes, &pipelines)
113110

114-
pipelineIdx, err = getPipelineIdx(pipelines, pipelineName)
111+
pipelineIdx, err = getPipelineIdx(pipelines, c.Pipeline)
115112
if err != nil {
116113
return err
117114
}
@@ -133,7 +130,7 @@ func generateWorkflow(lifecycle, action, pipelineName, containerName, image stri
133130
return err
134131
}
135132

136-
pipelines, pipelineIdx, err = findPipelinesForLifecycleAction(lifecycle, action, pipelineName, allPipelines)
133+
pipelines, pipelineIdx, err = findPipelinesForLifecycleAction(c, allPipelines)
137134
if err != nil {
138135
return err
139136
}
@@ -146,7 +143,7 @@ func generateWorkflow(lifecycle, action, pipelineName, containerName, image stri
146143
pipelines[pipelineIdx].Spec.Containers = append(pipelines[pipelineIdx].Spec.Containers, container)
147144
} else {
148145
if !overwrite {
149-
return fmt.Errorf("image '%s' already exists in Pipeline '%s'", container.Name, pipelineName)
146+
return fmt.Errorf("image '%s' already exists in Pipeline '%s'", container.Name, c.Pipeline)
150147
}
151148
pipelines[pipelineIdx].Spec.Containers[containerIdx] = container
152149
}
@@ -161,7 +158,7 @@ func generateWorkflow(lifecycle, action, pipelineName, containerName, image stri
161158
"apiVersion": "platform.kratix.io/v1alpha1",
162159
"kind": "Pipeline",
163160
"metadata": map[string]interface{}{
164-
"name": pipelineName,
161+
"name": c.Pipeline,
165162
},
166163
"spec": map[string]interface{}{
167164
"containers": []interface{}{container},
@@ -182,21 +179,21 @@ func generateWorkflow(lifecycle, action, pipelineName, containerName, image stri
182179
return err
183180
}
184181
} else {
185-
updatePipeline(lifecycle, action, pipelinesUnstructured, &promise)
182+
updatePipeline(c.Lifecycle, c.Action, pipelinesUnstructured, &promise)
186183

187184
fileBytes, err = yaml.Marshal(promise)
188185
if err != nil {
189186
return err
190187
}
191188
}
192-
if err := generatePipelineDirFiles(dir, workflowPath, pipelineName, containerName); err != nil {
189+
if err := generatePipelineDirFiles(dir, workflowPath, c.Pipeline, containerName); err != nil {
193190
return err
194191
}
195192

196193
if err := os.WriteFile(filePath, fileBytes, filePerm); err != nil {
197194
return err
198195
}
199-
fmt.Printf("generated the %s/%s/%s/%s in %s \n", lifecycle, action, pipelineName, containerName, filePath)
196+
fmt.Printf("generated the %s/%s/%s/%s in %s \n", c.Lifecycle, c.Action, c.Pipeline, containerName, filePath)
200197

201198
return nil
202199
}
@@ -206,26 +203,26 @@ func generateContainerName(image string) string {
206203
return strings.Split(nameAndVersion, ":")[0]
207204
}
208205

209-
func findPipelinesForLifecycleAction(lifecycle, action, pipelineName string, allPipelines map[v1alpha1.Type]map[v1alpha1.Action][]v1alpha1.Pipeline) ([]v1alpha1.Pipeline, int, error) {
206+
func findPipelinesForLifecycleAction(c *ContainerCmdArgs, allPipelines map[v1alpha1.Type]map[v1alpha1.Action][]v1alpha1.Pipeline) ([]v1alpha1.Pipeline, int, error) {
210207
var pipelines []v1alpha1.Pipeline
211-
switch lifecycle {
208+
switch c.Lifecycle {
212209
case "promise":
213-
switch action {
210+
switch c.Action {
214211
case "configure":
215212
pipelines = allPipelines[v1alpha1.WorkflowTypePromise][v1alpha1.WorkflowActionConfigure]
216213
case "delete":
217214
pipelines = allPipelines[v1alpha1.WorkflowTypePromise][v1alpha1.WorkflowActionDelete]
218215
}
219216
case "resource":
220-
switch action {
217+
switch c.Action {
221218
case "configure":
222219
pipelines = allPipelines[v1alpha1.WorkflowTypeResource][v1alpha1.WorkflowActionConfigure]
223220
case "delete":
224221
pipelines = allPipelines[v1alpha1.WorkflowTypeResource][v1alpha1.WorkflowActionDelete]
225222
}
226223
}
227224

228-
idx, err := getPipelineIdx(pipelines, pipelineName)
225+
idx, err := getPipelineIdx(pipelines, c.Pipeline)
229226
if err != nil {
230227
return nil, -1, err
231228
}

0 commit comments

Comments
 (0)