sequence matters in return 1

This shows that the sequence of the return matters. In this demo, it returns a value to caller, the following change in callee to the same var will not be reflected to caller.

This is also an example to show that the return cmd returns the value instead of the pointer

Demo

source

Main task yaml file
    vars:
      tom: this is tom in global
      jerry: this is jerry in global
    tasks:
    - name: task
      desc: main entry
      task:
      - func: call
        desc: call subtask and exam the return value in following steps
        do: subtask1
      - func: cmd
        desc: |
          check value of tom
          in this case tom's value should come from subtask1
          tom's expected value:  tom created in subtask1
        do:
        - name: print
          cmd: 'in main task print3: {{.tom}}'
    - name: subtask1
      desc: subtask to test reg and return
      task:
      - func: cmd
        desc: check value of tom after it is registered in current task stack
        vars:
          john: john in sub_loop func1
        do:
        - name: reg
          desc: by default hitom is registered in to global context
          cmd:
            name: tom
            value: 'tom created in subtask1'
        - name: print
          cmd: 'in sub_loop print1: {{.tom}}'
      - func: cmd
        desc: check value of tom and it should be available in current stack
        vars:
          john: john in sub_loop func2
        do:
        - name: print
          cmd: 'in sub_loop print2: {{.tom}}'
        - name: return
          cmd:
          - tom
      - func: call
        desc: call subtask and exam the return value in following steps
        do: subtask2
    - name: subtask2
      desc: subtask to test reg and return
      task:
      - func: cmd
        desc: check value of tom after it is registered in current task stack
        vars:
          john: john in sub_loop func1
        do:
        - name: reg
          desc: by default hitom is registered in to global context
          cmd:
            name: tom
            value: 'tom2 created in subtask2'
        - name: print
          cmd: 'in sub_loop print1: {{.tom}}'
      - func: cmd
        desc: check value of tom and it should be available in current stack
        vars:
          john: john in sub_loop func2
        do:
        - name: print
          cmd: 'in sub_loop print2: {{.tom}}'
        - name: return
          cmd:
          - tom
    
Main log file
    loading [Config]:  ./tests/functests/upconfig.yml
    Main config:
                 Version -> 1.0.0
                  RefDir -> ./tests/functests
                 WorkDir -> cwd
              AbsWorkDir -> /up_project/up
                TaskFile -> c0114
                 Verbose -> vvv
              ModuleName -> self
               ShellType -> /bin/sh
           MaxCallLayers -> 8
                 Timeout -> 3600000
     MaxModuelCallLayers -> 256
               EntryTask -> task
      ModRepoUsernameRef -> 
      ModRepoPasswordRef -> 
    work dir: /up_project/up
    -exec task: task
    loading [Task]:  ./tests/functests/c0114
    module: [self], instance id: [dev], exec profile: []
    profile -  envVars:
    
    (*core.Cache)({
    })
    
    Task1: [task ==> task: main entry ]
    -Step1: [: call subtask and exam the return value in following steps ]
    self: final context exec vars:
    
    (*core.Cache)({
      "jerry": "this is jerry in global",
      "tom": "this is tom in global",
      "up_runtime_task_layer_number": 0
    })
    
    =Task2: [task ==> subtask1: subtask to test reg and return ]
    --Step1: [: check value of tom after it is registered in current task stack ]
    self: final context exec vars:
    
    (*core.Cache)({
      "john": "john in sub_loop func1",
      "jerry": "this is jerry in global",
      "tom": "this is tom in global",
      "up_runtime_task_layer_number": 1
    })
    
    ~~SubStep1: [reg: by default hitom is registered in to global context ]
    ~~SubStep2: [print:  ]
    in sub_loop print1: tom created in subtask1
    --Step2: [: check value of tom and it should be available in current stack ]
    self: final context exec vars:
    
    (*core.Cache)({
      "john": "john in sub_loop func2",
      "jerry": "this is jerry in global",
      "tom": "tom created in subtask1",
      "up_runtime_task_layer_number": 1
    })
    
    ~~SubStep1: [print:  ]
    in sub_loop print2: tom created in subtask1
    ~~SubStep2: [return:  ]
    --Step3: [: call subtask and exam the return value in following steps ]
    self: final context exec vars:
    
    (*core.Cache)({
      "up_runtime_task_layer_number": 1,
      "jerry": "this is jerry in global",
      "tom": "tom created in subtask1"
    })
    
    ==Task3: [task/subtask1 ==> subtask2: subtask to test reg and return ]
    ---Step1: [: check value of tom after it is registered in current task stack ]
    self: final context exec vars:
    
    (*core.Cache)({
      "john": "john in sub_loop func1",
      "jerry": "this is jerry in global",
      "tom": "tom created in subtask1",
      "up_runtime_task_layer_number": 2
    })
    
    ~~~SubStep1: [reg: by default hitom is registered in to global context ]
    ~~~SubStep2: [print:  ]
    in sub_loop print1: tom2 created in subtask2
    ---Step2: [: check value of tom and it should be available in current stack ]
    self: final context exec vars:
    
    (*core.Cache)({
      "john": "john in sub_loop func2",
      "up_runtime_task_layer_number": 2,
      "jerry": "this is jerry in global",
      "tom": "tom2 created in subtask2"
    })
    
    ~~~SubStep1: [print:  ]
    in sub_loop print2: tom2 created in subtask2
    ~~~SubStep2: [return:  ]
    -Step2: [
    check value of tom
    in this case tom's value should come from subtask1
    tom's expected value:  tom created in subtask1
    ]
    self: final context exec vars:
    
    (*core.Cache)({
      "jerry": "this is jerry in global",
      "tom": "tom created in subtask1",
      "up_runtime_task_layer_number": 2
    })
    
    ~SubStep1: [print:  ]
    in main task print3: tom created in subtask1
    
Logs with different verbose level
Raw logs with different verbose level