yjp 1 year ago
parent
commit
f3acce5e57
4 changed files with 41 additions and 70 deletions
  1. 17 26
      approve_former/flow.go
  2. 3 3
      approve_former/node.go
  3. 20 40
      approve_former/sign.go
  4. 1 1
      test/approve_former_test.go

+ 17 - 26
approve_former/flow.go

@@ -24,18 +24,17 @@ spec:
     - name: approval
       suspend: {}
       inputs:
-          parameters:
-            - name: approve
-              default: '通过'
-              enum:
-                  - '通过'
-                  - '拒绝'
+        parameters:
+          - name: approve
+            default: '通过'
+            enum:
+              - '通过'
+              - '拒绝'
       outputs:
-          parameters:
-            - name: approve
-              valueFrom:
-                  supplied: {}
-`
+        parameters:
+          - name: approve
+            valueFrom:
+              supplied: {}`
 
 type Flow struct {
 	Name       string
@@ -49,36 +48,28 @@ func NewFlow(name string, childNodes ...Node) *Flow {
 	}
 }
 
-func (flow *Flow) GetName() string {
-	return flow.Name
+func (flow *Flow) GetDepends() string {
+	return ""
 }
 
-func (flow *Flow) GetChildNodes() []Node {
-	return flow.ChildNodes
+func (flow *Flow) GetWhen() string {
+	return ""
 }
 
-func (flow *Flow) Render(_ ...Node) (string, error) {
+func (flow *Flow) Render(_ Node) (string, error) {
 	childNodesContents := make([]string, 0)
 	for i, childNode := range flow.ChildNodes {
 		var childNodeContent string
 
 		if i == 0 {
-			content, err := childNode.Render()
+			content, err := childNode.Render(nil)
 			if err != nil {
 				return "", err
 			}
 
 			childNodeContent = content
 		} else {
-			upperNodes := make([]Node, 0)
-			upperChildNodes := flow.ChildNodes[i-1].GetChildNodes()
-			if len(upperChildNodes) == 0 {
-				upperNodes = append(upperNodes, flow.ChildNodes[i-1])
-			} else {
-				upperNodes = append(upperNodes, upperChildNodes...)
-			}
-
-			content, err := childNode.Render(upperNodes...)
+			content, err := childNode.Render(flow.ChildNodes[i-1])
 			if err != nil {
 				return "", err
 			}

+ 3 - 3
approve_former/node.go

@@ -7,9 +7,9 @@ import (
 )
 
 type Node interface {
-	GetName() string
-	GetChildNodes() []Node
-	Render(upperNodes ...Node) (string, error)
+	GetDepends() string
+	GetWhen() string
+	Render(upperNode Node) (string, error)
 }
 
 func render(name string, templateStr string, templateParams map[string]any) (string, error) {

+ 20 - 40
approve_former/sign.go

@@ -1,37 +1,15 @@
 package approve_former
 
-const signTemplate = `
-[[- $name := .name -]]
-[[- $upperNodeNames := .upper_node_names -]]
+import "fmt"
 
-- name: [[ $name ]]
+const signTemplate = `- name: [[ .name ]]
   template: approval
-  [[- if $upperNodeNames ]]
-  [[- if eq (len $upperNodeNames) 1 ]]
-  depends: "[[ index $upperNodeNames 0 ]].Succeeded"
-  when: "{{ tasks.[[- index $upperNodeNames 0 -]].outputs.parameters.approve }} == 通过"
-  [[- else -]]
-  depends: "
-  [[- range $index, $upper_node_name := $upperNodeNames -]]
-  [[- if eq $index 0 -]]
-  [[ $upper_node_name ]].Succeeded
-  [[- else ]]
-   && [[ $upper_node_name ]].Succeeded
-  [[- end -]]
-  [[- end -]]
-  "
-  when: "
-  [[- range $index, $upper_node_name := $upperNodeNames -]]
-  [[- if eq $index 0 -]]
-  {{ tasks.[[ $upper_node_name ]].outputs.parameters.approve }} == 通过
-  [[- else -]]
-   && {{ tasks.[[ $upper_node_name ]].outputs.parameters.approve }} == 通过
-  [[- end -]]
-  [[- end -]]
-  "
-  [[- end -]]
-  [[- end -]]
-`
+  [[- if .depends ]]
+  depends: "[[ .depends ]]"
+  [[- end ]] 
+  [[- if .when ]]
+  when: "[[ .when ]]"
+  [[- end -]]`
 
 type Sign struct {
 	Name string
@@ -43,22 +21,24 @@ func NewSign(name string) *Sign {
 	}
 }
 
-func (sign *Sign) GetName() string {
-	return sign.Name
+func (sign *Sign) GetDepends() string {
+	return fmt.Sprintf("%s.Succeeded", sign.Name)
 }
 
-func (sign *Sign) GetChildNodes() []Node {
-	return make([]Node, 0)
+func (sign *Sign) GetWhen() string {
+	return fmt.Sprintf(`{{ tasks.%s.outputs.parameters.approve }} == 通过`, sign.Name)
 }
 
-func (sign *Sign) Render(upperNodes ...Node) (string, error) {
-	upperNodeNames := make([]string, 0)
-	for _, upperNode := range upperNodes {
-		upperNodeNames = append(upperNodeNames, upperNode.GetName())
+func (sign *Sign) Render(upperNode Node) (string, error) {
+	if upperNode == nil {
+		return render("sign", signTemplate, map[string]any{
+			"name": sign.Name,
+		})
 	}
 
 	return render("sign", signTemplate, map[string]any{
-		"name":             sign.Name,
-		"upper_node_names": upperNodeNames,
+		"name":    sign.Name,
+		"depends": upperNode.GetDepends(),
+		"when":    upperNode.GetWhen(),
 	})
 }

+ 1 - 1
test/approve_former_test.go

@@ -11,7 +11,7 @@ func TestApproveFormer(t *testing.T) {
 		approve_former.NewSign("sign1"),
 		approve_former.NewSign("sign2"))
 
-	flowDefinition, err := flow.Render()
+	flowDefinition, err := flow.Render(nil)
 	if err != nil {
 		t.Fatalf("%+v\n", err)
 	}