(CommandList
  children: [
    (C {(set)} {(-o)} {(errexit)})
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_ROOT)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(dirname)} {(DQ (${ VSub_Name BASH_SOURCE))})]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [64 72]
              ) (/..)
            }
          spids: [63]
        )
      ]
      spids: [63]
    )
    (C {(source)} {(DQ (${ VSub_Name KUBE_ROOT) (/hack/lib/init.sh))})
    (C {(kube) (Lit_Other ':') (Lit_Other ':') (golang) (Lit_Other ':') (Lit_Other ':') (setup_env)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SPECROOT)
          op: Equal
          rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/federation/apis/openapi-spec))}
          spids: [94]
        )
      ]
      spids: [94]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TMP_SPECROOT)
          op: Equal
          rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/_tmp_federation/openapi-spec))}
          spids: [102]
        )
      ]
      spids: [102]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:_tmp)
          op: Equal
          rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/_tmp_federation))}
          spids: [110]
        )
      ]
      spids: [110]
    )
    (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name _tmp))})
    (C {(cp)} {(-a)} {(DQ (${ VSub_Name SPECROOT))} {(DQ (${ VSub_Name TMP_SPECROOT))})
    (C {(trap)} 
      {
        (DQ ('cp -a ') (${ VSub_Name TMP_SPECROOT) (' ') (${ VSub_Name SPECROOT) ('/..; rm -rf ') 
          (${ VSub_Name _tmp)
        )
      } {(EXIT)} {(SIGINT)}
    )
    (C {(rm)} {(${ VSub_Name SPECROOT) (/) (Lit_Other '*')})
    (C {(DQ (${ VSub_Name KUBE_ROOT) (/hack/update-federation-openapi-spec.sh))})
    (C {(echo)} 
      {
        (DQ ('diffing ') (${ VSub_Name SPECROOT) (' against freshly generated federation openapi spec'))
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ret) op:Equal rhs:{(0)} spids:[192])]
      spids: [192]
    )
    (AndOr
      children: [
        (C {(diff)} {(-Naupr)} {(-I)} {(SQ <'Auto generated by'>)} {(DQ (${ VSub_Name SPECROOT))} 
          {(DQ (${ VSub_Name TMP_SPECROOT))}
        )
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:ret) op:Equal rhs:{($ VSub_QMark '$?')} spids:[219])]
          spids: [219]
        )
      ]
      op_id: Op_DPipe
    )
    (If
      arms: [
        (if_arm
          cond: [
            (DBracket
              expr: (BoolBinary op_id:BoolBinary_eq left:{($ VSub_Name '$ret')} right:{(0)})
            )
          ]
          action: [(C {(echo)} {(DQ (${ VSub_Name SPECROOT) (' up to date.'))})]
          spids: [16777215 234]
        )
      ]
      else_action: [
        (C {(echo)} 
          {
            (DQ (${ VSub_Name SPECROOT) 
              (' is out of date. Please run hack/update-federation-openapi-spec.sh')
            )
          }
        )
        (C {(exit)} {(1)})
      ]
      spids: [246 263]
    )
  ]
)