Skip to content

Commit 40c12ed

Browse files
authored
chore(workflows): deprecate nodes create --before-node-id in favor of --to-node-id (#101)
1 parent 3e43cba commit 40c12ed

2 files changed

Lines changed: 47 additions & 11 deletions

File tree

cmd/workflows.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -622,9 +622,8 @@ var workflowsChangeMailingListCmd = &cobra.Command{
622622
// parseCreateWorkflowNodeFlags reads and validates the `workflows nodes create`
623623
// flags and builds a CreateWorkflowNodeRequest. Placement depends on insert
624624
// mode: "between" needs --from-node-id and --to-node-id; "before" inserts
625-
// before --before-node-id; "after" inserts after --from-node-id (valid only
626-
// when that node has exactly one outgoing connection). "before" is sent as
627-
// toNodeId because the API's beforeNodeId field is deprecated.
625+
// before --to-node-id; "after" inserts after --from-node-id (valid only when
626+
// that node has exactly one outgoing connection).
628627
func parseCreateWorkflowNodeFlags(cmd *cobra.Command) (loops.CreateWorkflowNodeRequest, error) {
629628
nodeType, _ := cmd.Flags().GetString("node-type")
630629
insertMode, _ := cmd.Flags().GetString("insert-mode")
@@ -650,10 +649,14 @@ func parseCreateWorkflowNodeFlags(cmd *cobra.Command) (loops.CreateWorkflowNodeR
650649
req.FromNodeID = fromNodeID
651650
req.ToNodeID = toNodeID
652651
case loops.WorkflowInsertModeBefore:
653-
if beforeNodeID == "" {
654-
return loops.CreateWorkflowNodeRequest{}, fmt.Errorf("--insert-mode before requires --before-node-id")
652+
target := toNodeID
653+
if target == "" {
654+
target = beforeNodeID
655655
}
656-
req.ToNodeID = beforeNodeID
656+
if target == "" {
657+
return loops.CreateWorkflowNodeRequest{}, fmt.Errorf("--insert-mode before requires --to-node-id")
658+
}
659+
req.ToNodeID = target
657660
case loops.WorkflowInsertModeAfter:
658661
if fromNodeID == "" {
659662
return loops.CreateWorkflowNodeRequest{}, fmt.Errorf("--insert-mode after requires --from-node-id")
@@ -910,8 +913,9 @@ func init() {
910913
workflowsNodesCreateCmd.Flags().String("node-type", "", fmt.Sprintf("Node type: %s", strings.Join(createWorkflowNodeTypes, ", ")))
911914
workflowsNodesCreateCmd.Flags().String("insert-mode", "", "Insert mode: between, before, or after")
912915
workflowsNodesCreateCmd.Flags().String("from-node-id", "", "Source node ID (insert-mode between or after)")
913-
workflowsNodesCreateCmd.Flags().String("to-node-id", "", "Target node ID (insert-mode between)")
916+
workflowsNodesCreateCmd.Flags().String("to-node-id", "", "Target node ID (insert-mode between or before)")
914917
workflowsNodesCreateCmd.Flags().String("before-node-id", "", "Node ID to insert before (insert-mode before)")
918+
workflowsNodesCreateCmd.Flags().MarkDeprecated("before-node-id", "use --to-node-id instead")
915919
workflowsNodesCreateCmd.Flags().String("expected-revision-id", "", "Expected workflow revision ID (optimistic concurrency)")
916920
workflowsNodesCreateCmd.MarkFlagRequired("node-type")
917921
workflowsNodesCreateCmd.MarkFlagRequired("insert-mode")

cmd/workflows_nodes_write_test.go

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,27 @@ func TestParseCreateWorkflowNodeFlags(t *testing.T) {
4747
}
4848
})
4949

50-
t.Run("before maps before-node-id to ToNodeID (not BeforeNodeID)", func(t *testing.T) {
50+
t.Run("before maps to-node-id to ToNodeID (not BeforeNodeID)", func(t *testing.T) {
51+
req, err := parseCreateWorkflowNodeFlags(newCreateNodeFlagsCmd(t, map[string]string{
52+
"node-type": loops.CreateWorkflowNodeTypeTimerAction,
53+
"insert-mode": loops.WorkflowInsertModeBefore,
54+
"to-node-id": "n3",
55+
}))
56+
if err != nil {
57+
t.Fatalf("unexpected error: %v", err)
58+
}
59+
if req.ToNodeID != "n3" {
60+
t.Errorf("ToNodeID = %q, want n3", req.ToNodeID)
61+
}
62+
if req.BeforeNodeID != "" {
63+
t.Errorf("BeforeNodeID = %q, want empty (deprecated field must not be sent)", req.BeforeNodeID)
64+
}
65+
if req.FromNodeID != "" {
66+
t.Errorf("FromNodeID = %q, want empty", req.FromNodeID)
67+
}
68+
})
69+
70+
t.Run("before accepts deprecated before-node-id alias as ToNodeID", func(t *testing.T) {
5171
req, err := parseCreateWorkflowNodeFlags(newCreateNodeFlagsCmd(t, map[string]string{
5272
"node-type": loops.CreateWorkflowNodeTypeTimerAction,
5373
"insert-mode": loops.WorkflowInsertModeBefore,
@@ -62,8 +82,20 @@ func TestParseCreateWorkflowNodeFlags(t *testing.T) {
6282
if req.BeforeNodeID != "" {
6383
t.Errorf("BeforeNodeID = %q, want empty (deprecated field must not be sent)", req.BeforeNodeID)
6484
}
65-
if req.FromNodeID != "" {
66-
t.Errorf("FromNodeID = %q, want empty", req.FromNodeID)
85+
})
86+
87+
t.Run("before prefers to-node-id over deprecated before-node-id", func(t *testing.T) {
88+
req, err := parseCreateWorkflowNodeFlags(newCreateNodeFlagsCmd(t, map[string]string{
89+
"node-type": loops.CreateWorkflowNodeTypeTimerAction,
90+
"insert-mode": loops.WorkflowInsertModeBefore,
91+
"to-node-id": "n_new",
92+
"before-node-id": "n_old",
93+
}))
94+
if err != nil {
95+
t.Fatalf("unexpected error: %v", err)
96+
}
97+
if req.ToNodeID != "n_new" {
98+
t.Errorf("ToNodeID = %q, want n_new", req.ToNodeID)
6799
}
68100
})
69101

@@ -109,7 +141,7 @@ func TestParseCreateWorkflowNodeFlags(t *testing.T) {
109141
{"unknown node-type", map[string]string{"node-type": "Nonsense", "insert-mode": loops.WorkflowInsertModeAfter, "from-node-id": "n1"}},
110142
{"unknown insert-mode", map[string]string{"node-type": loops.CreateWorkflowNodeTypeTimerAction, "insert-mode": "sideways", "from-node-id": "n1"}},
111143
{"between missing to", map[string]string{"node-type": loops.CreateWorkflowNodeTypeTimerAction, "insert-mode": loops.WorkflowInsertModeBetween, "from-node-id": "n1"}},
112-
{"before missing before-node-id", map[string]string{"node-type": loops.CreateWorkflowNodeTypeTimerAction, "insert-mode": loops.WorkflowInsertModeBefore}},
144+
{"before missing to-node-id", map[string]string{"node-type": loops.CreateWorkflowNodeTypeTimerAction, "insert-mode": loops.WorkflowInsertModeBefore}},
113145
{"after missing from-node-id", map[string]string{"node-type": loops.CreateWorkflowNodeTypeTimerAction, "insert-mode": loops.WorkflowInsertModeAfter}},
114146
}
115147
for _, tc := range errCases {

0 commit comments

Comments
 (0)