(CommandList
  children: [
    (C {(set)} {(-eo)} {(pipefail)})
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:MODE)
              op: Equal
              rhs: {(DQ ($ VSub_Number "$1"))}
              spids: [11]
            )
          ]
          spids: [11]
        )
      terminator: <Op_Semi ";">
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:MODE)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name MODE>
                suffix_op: (StringUnary op_id:VTest_ColonEquals arg_word:{(DQ (testing))})
                spids: [18 24]
              )
            }
          spids: [17]
        )
      ]
      spids: [17]
    )
    (FuncDef
      name: setup_circle
      body: 
        (BraceGroup
          children: [
            (C {(echo)} 
              {
                (DQ ("=====> setup_circle on CIRCLE_NODE_INDEX: ") ($ VSub_Name "$CIRCLE_NODE_INDEX"))
              }
            )
            (C {(sudo)} {(-E)} {(Lit_VarLike "CI=") (true)} {(make)} {(-e)} {(sshcommand)})
            (C {(sudo)} {(usermod)} {(-G)} {(docker)} {(dokku)})
            (C {(sudo)} {(rsync)} {(-a)} {(TildeSubPart prefix:ubuntu) (/.ssh/)} 
              {(TildeSubPart prefix:root) (/.ssh/)}
            )
            (C {(sudo)} {(chown)} {(-R)} {(root) (Lit_Other ":") (root)} 
              {(TildeSubPart prefix:root) (/.ssh/)}
            )
            (C {(sudo)} {(sed)} {(--in-place)} {(SQ <"s:/home/ubuntu:/root:g">)} 
              {(TildeSubPart prefix:root) (/.ssh/config)}
            )
            (AndOr
              children: [
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {(DQ ($ VSub_Number "$1"))}
                      right: {(DQ (buildstack))}
                    )
                )
                (SimpleCommand
                  words: [{(make)} {(-e)} {(stack)}]
                  more_env: [(env_pair name:BUILD_STACK val:{(true)} spids:[139])]
                )
              ]
              op_id: Op_DAmp
            )
            (C {(sudo)} {(-E)} {(Lit_VarLike "CI=") (true)} {(make)} {(-e)} {(install)})
            (C {(sudo)} {(-E)} {(make)} {(-e)} {(setup-deploy-tests)})
            (C {(make)} {(-e)} {(ci-dependencies)})
            (C {(bash)} {(--version)})
            (C {(docker)} {(version)})
            (C {(lsb_release)} {(-a)})
            (C {(sudo)} {(-E)} {(mkdir)} {(-p)} {(/home/dokku/.dokkurc)})
            (C {(sudo)} {(-E)} {(chown)} {(dokku) (Lit_Other ":") (ubuntu)} {(/home/dokku/.dokkurc)})
            (C {(sudo)} {(-E)} {(chmod)} {(775)} {(/home/dokku/.dokkurc)})
            (C {(sudo)} {(docker)} {(pull)} {(node) (Lit_Other ":") (4)})
          ]
          spids: [34]
        )
      spids: [30 33]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (AndOr
                  children: [
                    (DBracket
                      expr: 
                        (BoolUnary
                          op_id: BoolUnary_n
                          child: {(DQ ($ VSub_Name "$CIRCLE_NODE_INDEX"))}
                        )
                    )
                    (DBracket
                      expr: 
                        (BoolBinary
                          op_id: BoolBinary_GlobDEqual
                          left: {(DQ ($ VSub_Name "$MODE"))}
                          right: {(DQ (setup))}
                        )
                    )
                  ]
                  op_id: Op_DAmp
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(setup_circle)}) (C {(exit)} {($ VSub_QMark "$?")})]
          spids: [-1 289]
        )
      ]
      spids: [-1 343]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:start)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(date)} {(Lit_Other "+") (Lit_Other "%") (s)})]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [347 353]
              )
            }
          spids: [346]
        )
      ]
      spids: [346]
    )
    (Case
      to_match: {(DQ ($ VSub_Name "$CIRCLE_NODE_INDEX"))}
      arms: [
        (case_arm
          pat_list: [{(0)}]
          action: [
            (C {(echo)} 
              {
                (DQ ("=====> make unit-tests (1/4) on CIRCLE_NODE_INDEX: ") 
                  ($ VSub_Name "$CIRCLE_NODE_INDEX")
                )
              }
            )
            (C {(sudo)} {(-E)} {(Lit_VarLike "UNIT_TEST_BATCH=") (1)} {(make)} {(-e)} {(unit-tests)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:RC)
                  op: Equal
                  rhs: {($ VSub_QMark "$?")}
                  spids: [390]
                )
              ]
              spids: [390]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: (BoolBinary op_id:BoolBinary_ne left:{($ VSub_Name "$RC")} right:{(0)})
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ("exit status: ") ($ VSub_Name "$RC"))})
                    (C {(exit)} {($ VSub_Name "$RC")})
                  ]
                  spids: [-1 407]
                )
              ]
              spids: [-1 423]
            )
          ]
          spids: [364 365 426 -1]
        )
        (case_arm
          pat_list: [{(1)}]
          action: [
            (C {(echo)} 
              {
                (DQ ("=====> make unit-tests (2/4) on CIRCLE_NODE_INDEX: ") 
                  ($ VSub_Name "$CIRCLE_NODE_INDEX")
                )
              }
            )
            (C {(sudo)} {(-E)} {(Lit_VarLike "UNIT_TEST_BATCH=") (2)} {(make)} {(-e)} {(unit-tests)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:RC)
                  op: Equal
                  rhs: {($ VSub_QMark "$?")}
                  spids: [456]
                )
              ]
              spids: [456]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: (BoolBinary op_id:BoolBinary_ne left:{($ VSub_Name "$RC")} right:{(0)})
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ("exit status: ") ($ VSub_Name "$RC"))})
                    (C {(exit)} {($ VSub_Name "$RC")})
                  ]
                  spids: [-1 473]
                )
              ]
              spids: [-1 489]
            )
          ]
          spids: [430 431 492 -1]
        )
        (case_arm
          pat_list: [{(2)}]
          action: [
            (C {(echo)} 
              {
                (DQ ("=====> make unit-tests (3/4) on CIRCLE_NODE_INDEX: ") 
                  ($ VSub_Name "$CIRCLE_NODE_INDEX")
                )
              }
            )
            (C {(sudo)} {(-E)} {(Lit_VarLike "UNIT_TEST_BATCH=") (3)} {(make)} {(-e)} {(unit-tests)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:RC)
                  op: Equal
                  rhs: {($ VSub_QMark "$?")}
                  spids: [522]
                )
              ]
              spids: [522]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: (BoolBinary op_id:BoolBinary_ne left:{($ VSub_Name "$RC")} right:{(0)})
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ("exit status: ") ($ VSub_Name "$RC"))})
                    (C {(exit)} {($ VSub_Name "$RC")})
                  ]
                  spids: [-1 539]
                )
              ]
              spids: [-1 555]
            )
            (C {(echo)} {(DQ ("=====> make deploy tests"))})
            (C {(sudo)} {(-E)} {(make)} {(-e)} {(deploy-test-checks-root)} {(deploy-test-config)} 
              {(deploy-test-multi)}
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:RC)
                  op: Equal
                  rhs: {($ VSub_QMark "$?")}
                  spids: [580]
                )
              ]
              spids: [580]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: (BoolBinary op_id:BoolBinary_ne left:{($ VSub_Name "$RC")} right:{(0)})
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ("exit status: ") ($ VSub_Name "$RC"))})
                    (C {(exit)} {($ VSub_Name "$RC")})
                  ]
                  spids: [-1 597]
                )
              ]
              spids: [-1 613]
            )
          ]
          spids: [496 497 616 -1]
        )
        (case_arm
          pat_list: [{(3)}]
          action: [
            (C {(echo)} 
              {
                (DQ ("=====> make unit-tests (4/4) on CIRCLE_NODE_INDEX: ") 
                  ($ VSub_Name "$CIRCLE_NODE_INDEX")
                )
              }
            )
            (C {(sudo)} {(-E)} {(Lit_VarLike "UNIT_TEST_BATCH=") (4)} {(make)} {(-e)} {(unit-tests)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:RC)
                  op: Equal
                  rhs: {($ VSub_QMark "$?")}
                  spids: [646]
                )
              ]
              spids: [646]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: (BoolBinary op_id:BoolBinary_ne left:{($ VSub_Name "$RC")} right:{(0)})
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ("exit status: ") ($ VSub_Name "$RC"))})
                    (C {(exit)} {($ VSub_Name "$RC")})
                  ]
                  spids: [-1 663]
                )
              ]
              spids: [-1 679]
            )
          ]
          spids: [620 621 682 -1]
        )
      ]
      spids: [355 361 684]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:end)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(date)} {(Lit_Other "+") (Lit_Other "%") (s)})]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [687 693]
              )
            }
          spids: [686]
        )
      ]
      spids: [686]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:runtime)
          op: Equal
          rhs: 
            {
              (ArithSubPart
                anode: 
                  (ArithBinary
                    op_id: Arith_Minus
                    left: (ArithVarRef name:end)
                    right: (ArithVarRef name:start)
                  )
                spids: [696 701]
              )
            }
          spids: [695]
        )
      ]
      spids: [695]
    )
    (C {(echo)} 
      {
        (DQ ("suite runtime: ") 
          (CommandSubPart
            command_list: 
              (CommandList
                children: [
                  (C {(date)} {(-u)} {(-d)} {(Lit_Other "@") (${ VSub_Name runtime)} 
                    {(Lit_Other "+") (DQ ("%T"))}
                  )
                ]
              )
            left_token: <Left_CommandSub "$(">
            spids: [707 723]
          )
        )
      }
    )
  ]
)