Exit result per step

note that for one step, there will be only one return, which will be the last line in do cmd in this case. Since the step3 exit code is 0 the whole step will have the return code of 0 if you need to use the exit code of the step you need to consider to reduce the number of do cmds or put it to last step, this is not a bug this is a feature

Demo

source

Main task yaml file
    tasks:
    - name: task
      task:
      - func: shell
        desc: do step1 in shell func
        do:
        - echo "hello"
        - echo "world"|grep non-exist
        - echo "world"
    
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 -> c0068
                 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/c0068
    module: [self], instance id: [dev], exec profile: []
    profile -  envVars:
    
    (*core.Cache)({
    })
    
    Task1: [task ==> task:  ]
    -Step1: [: do step1 in shell func ]
    self: final context exec vars:
    
    (*core.Cache)({
      "up_runtime_task_layer_number": 0
    })
    
    cmd( 1):
    echo "hello"
    
    -
    hello
    
    -
     .. ok
    cmd( 2):
    echo "world"|grep non-exist
    
    -
    
    -
     .. failed(suppressed if it is not the last step)
    cmd( 3):
    echo "world"
    
    -
    world
    
    -
     .. ok
    . ok
    
Logs with different verbose level
Raw logs with different verbose level