Skip to content

Commit 9f1c5d9

Browse files
committed
add more option for release creation
1 parent b227934 commit 9f1c5d9

File tree

5 files changed

+81
-43
lines changed

5 files changed

+81
-43
lines changed

.goreleaser.yaml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
# This is an example .goreleaser.yml file with some sensible defaults.
2-
# Make sure to check the documentation at https://goreleaser.com
3-
4-
# The lines below are called `modelines`. See `:help modeline`
5-
# Feel free to remove those if you don't want/need to use them.
61
# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
72
# vim: set ts=2 sw=2 tw=0 fo=cnqoj
83

cmd/ctrlc/root/api/create/release/release.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package release
22

33
import (
44
"fmt"
5+
"time"
56

67
"github.com/MakeNowJust/heredoc/v2"
78
"github.com/ctrlplanedev/cli/internal/api"
@@ -14,7 +15,9 @@ func NewReleaseCmd() *cobra.Command {
1415
var versionFlag string
1516
var deploymentID string
1617
var metadata map[string]string
17-
18+
var configArray map[string]string
19+
var createdAt string
20+
var name string
1821
cmd := &cobra.Command{
1922
Use: "release [flags]",
2023
Short: "Create a new release",
@@ -34,10 +37,23 @@ func NewReleaseCmd() *cobra.Command {
3437
return fmt.Errorf("failed to create API client: %w", err)
3538
}
3639

40+
var parsedTime *time.Time
41+
if createdAt != "" {
42+
t, err := time.Parse(time.RFC3339, createdAt)
43+
if err != nil {
44+
return fmt.Errorf("failed to parse created_at time: %w", err)
45+
}
46+
parsedTime = &t
47+
}
48+
49+
config := cliutil.ConvertConfigArrayToNestedMap(configArray)
3750
resp, err := client.CreateRelease(cmd.Context(), api.CreateReleaseJSONRequestBody{
3851
Version: versionFlag,
3952
DeploymentId: deploymentID,
4053
Metadata: &metadata,
54+
CreatedAt: parsedTime,
55+
Config: &config,
56+
Name: &name,
4157
})
4258
if err != nil {
4359
return fmt.Errorf("failed to create release: %w", err)
@@ -49,8 +65,12 @@ func NewReleaseCmd() *cobra.Command {
4965

5066
// Add flags
5167
cmd.Flags().StringVar(&versionFlag, "version", "", "Version of the release (required)")
52-
cmd.Flags().StringVar(&deploymentID, "deployment-id", "", "ID of the deployment (required)")
68+
cmd.Flags().StringVar(&deploymentID, "deployment", "", "ID of the deployment (required)")
5369
cmd.Flags().StringToStringVar(&metadata, "metadata", make(map[string]string), "Metadata key-value pairs (e.g. --metadata key=value)")
70+
cmd.Flags().StringToStringVar(&configArray, "config", make(map[string]string), "Config key-value pairs with nested values (can be specified multiple times)")
71+
cmd.Flags().StringVar(&createdAt, "created-at", "", "Created at timestamp (e.g. --created-at 2024-01-01T00:00:00Z) for the release channel")
72+
cmd.Flags().StringVar(&name, "name", "", "Name of the release channel")
73+
5474
cmd.MarkFlagRequired("version")
5575
cmd.MarkFlagRequired("deployment-id")
5676

cmd/ctrlc/root/api/create/resources/resources.go

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package resources
22

33
import (
44
"fmt"
5-
"strconv"
6-
"strings"
75

86
"github.com/MakeNowJust/heredoc/v2"
97
"github.com/ctrlplanedev/cli/internal/api"
@@ -42,37 +40,7 @@ func NewResourcesCmd() *cobra.Command {
4240
}
4341

4442
// Convert configArray into a nested map[string]interface{}
45-
config := make(map[string]interface{})
46-
for path, value := range configArray {
47-
// Split path into segments
48-
segments := strings.Split(path, ".")
49-
50-
// Start at the root map
51-
current := config
52-
53-
// Navigate through segments
54-
for i, segment := range segments {
55-
if i == len(segments)-1 {
56-
// Last segment - try to convert string to number or boolean if possible
57-
if num, err := strconv.ParseFloat(value, 64); err == nil {
58-
current[segment] = num
59-
} else if value == "true" {
60-
current[segment] = true
61-
} else if value == "false" {
62-
current[segment] = false
63-
} else {
64-
current[segment] = value
65-
}
66-
} else {
67-
// Create nested map if it doesn't exist
68-
if _, exists := current[segment]; !exists {
69-
current[segment] = make(map[string]interface{})
70-
}
71-
// Move to next level
72-
current = current[segment].(map[string]interface{})
73-
}
74-
}
75-
}
43+
config := cliutil.ConvertConfigArrayToNestedMap(configArray)
7644

7745
// Extrat into vars
7846
resp, err := client.UpsertTargets(cmd.Context(), api.UpsertTargetsJSONRequestBody{

internal/api/client.gen.go

Lines changed: 20 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/cliutil/flags.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package cliutil
2+
3+
import (
4+
"strconv"
5+
"strings"
6+
)
7+
8+
// ConvertConfigArrayToNestedMap converts a flat key-value map with dot notation
9+
// paths into a nested map[string]interface{} structure. It handles conversion
10+
// of string values to numbers and booleans where appropriate.
11+
func ConvertConfigArrayToNestedMap(configArray map[string]string) map[string]interface{} {
12+
config := make(map[string]interface{})
13+
for path, value := range configArray {
14+
segments := strings.Split(path, ".")
15+
current := config
16+
for i, segment := range segments {
17+
if i == len(segments)-1 {
18+
if num, err := strconv.ParseFloat(value, 64); err == nil {
19+
current[segment] = num
20+
} else if value == "true" {
21+
current[segment] = true
22+
} else if value == "false" {
23+
current[segment] = false
24+
} else {
25+
current[segment] = value
26+
}
27+
} else {
28+
// Create nested map if it doesn't exist
29+
if _, exists := current[segment]; !exists {
30+
current[segment] = make(map[string]interface{})
31+
}
32+
// Move to next level
33+
current = current[segment].(map[string]interface{})
34+
}
35+
}
36+
}
37+
return config
38+
}

0 commit comments

Comments
 (0)