(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: [68 76]
              ) (/..)
            }
          spids: [67]
        )
      ]
      spids: [67]
    )
    (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:API_REFERENCE_DOCS_ROOT)
          op: Equal
          rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/federation/docs/api-reference))}
          spids: [98]
        )
      ]
      spids: [98]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:OUTPUT_DIR)
          op: Equal
          rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/_tmp_federation/api-reference))}
          spids: [106]
        )
      ]
      spids: [106]
    )
    (C {(mkdir)} {(-p)} {(${ VSub_Name OUTPUT_DIR)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TMP_ROOT)
          op: Equal
          rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/_tmp_federation))}
          spids: [122]
        )
      ]
      spids: [122]
    )
    (C {(trap)} {(DQ ("rm -rf ") (${ VSub_Name TMP_ROOT))} {(EXIT)} {(SIGINT)})
    (C {(DQ (./hack/update-federation-api-reference-docs.sh))} {(DQ (${ VSub_Name OUTPUT_DIR))})
    (C {(echo)} 
      {(DQ ("diffing ") (${ VSub_Name API_REFERENCE_DOCS_ROOT) (" against freshly generated docs"))}
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ret) op:Equal rhs:{(0)} spids:[168])]
      spids: [168]
    )
    (AndOr
      children: [
        (C {(diff)} {(-NauprB)} {(-I)} {(SQ <"Last update">)} 
          {(--exclude) (Lit_Other "=") (Lit_Other "*") (.md)} {(DQ (${ VSub_Name API_REFERENCE_DOCS_ROOT))} {(DQ (${ VSub_Name OUTPUT_DIR))}
        )
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:ret) op:Equal rhs:{($ VSub_QMark "$?")} spids:[200])]
          spids: [200]
        )
      ]
      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 API_REFERENCE_DOCS_ROOT) (" up to date."))})]
          spids: [-1 215]
        )
      ]
      else_action: [
        (C {(echo)} 
          {
            (DQ (${ VSub_Name API_REFERENCE_DOCS_ROOT) 
              (" is out of date. Please run hack/update-federation-api-reference-docs.sh")
            )
          }
        )
        (C {(exit)} {(1)})
      ]
      spids: [227 244]
    )
  ]
)