(command.CommandList children: [ (C {<Id.KW_Set set>} {<-euo>} {<pipefail>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Subshell command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {<grep>} {<-r>} {<KJ_DBG>} {<src/> <Id.Lit_Star '*'>}) (C {<egrep>} {<-v>} {(SQ <'/(debug(-test)?|exception)[.]'>)}) ] negated: F ) ] ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [{<echo>} {(SQ <'*** Error: There are instances of KJ_DBG in the code.'>)}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [11 35] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<egrep>} {<-r>} {(SQ <'TODO\\(now\\)'>)} {<src/> <Id.Lit_Star '*'>}) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [{<echo>} {(SQ <'*** Error: There are release-blocking TODOs in the code.'>)}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [55 69] ) ] ) (C {<make>} {<clean>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} { (DQ <x> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<git>} {<status>} {<--porcelain>})] ) ) ) } {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <x>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [{<echo>} {(DQ <'Please commit changes to git before releasing.'>)}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [94 119] ) ] ) (C {<.>} {<branch.conf>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<git>} {<rev-parse>} {<--abbrev-ref>} {<HEAD>})] ) ) } {<Id.Lit_Equals '='>} {<master>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CHANNEL) op: assign_op.Equal rhs: {<dev>} spids: [184] ) ] ) ] spids: [160 181] ) (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$IS_STABLE')} {<Id.Lit_Equals '='>} {<true>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CHANNEL) op: assign_op.Equal rhs: {<stable>} spids: [203] ) ] ) ] spids: [187 200] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CHANNEL) op: assign_op.Equal rhs: {<beta>} spids: [209] ) ] ) ] ) (C {<echo>} { (DQ <'**** Determining next build number for '> ($ Id.VSub_DollarName '$CHANNEL') <' channel ****'> ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LAST_BUILD) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<curl>} {<-fs>} {<https> <Id.Lit_Other ':'> <//install.sandstorm.io/> ($ Id.VSub_DollarName '$CHANNEL') } ) ] ) ) } spids: [224] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.Binary op_id: Id.Arith_Great left: (arith_expr.Binary op_id: Id.Arith_Slash left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike LAST_BUILD>) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1000>}) ) right: (arith_expr.VarRef token:<Id.Lit_ArithVarLike BRANCH_NUMBER>) ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [ {<echo>} { (DQ <'ERROR: '> ($ Id.VSub_DollarName '$CHANNEL') <' has already moved past this branch!'> ) } ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.Simple words: [{<echo>} {(DQ <' I refuse to replace it with an older branch.'>)}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [237 255] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BASE_BUILD) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Star left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike BRANCH_NUMBER>) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1000>}) ) ) } spids: [287] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BUILD) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.TernaryOp cond: (arith_expr.Binary op_id: Id.Arith_Great left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike BASE_BUILD>) right: (arith_expr.VarRef token:<Id.Lit_ArithVarLike LAST_BUILD>) ) true_expr: (arith_expr.VarRef token:<Id.Lit_ArithVarLike BASE_BUILD>) false_expr: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike LAST_BUILD>) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) } spids: [299] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BUILD_MINOR) op: assign_op.Equal rhs: { (DQ (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Percent left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$BUILD')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1000>}) ) ) ) } spids: [323] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DISPLAY_VERSION) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name BRANCH_NUMBER) <.> (${ Id.VSub_Name BUILD_MINOR))} spids: [337] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TAG_NAME) op: assign_op.Equal rhs: {(DQ <v> (${ Id.VSub_Name DISPLAY_VERSION))} spids: [348] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SIGNING_KEY_ID) op: assign_op.Equal rhs: {<160D2D577518B58D94C9800B63F227499DA8CCBD>} spids: [356] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:EXPECTED_CHANGELOG) op: assign_op.Equal rhs: { (DQ <'### '> ($ Id.VSub_DollarName '$TAG_NAME') <' ('> (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children:[(C {<date>} {(SQ <'+%Y-%m-%d'>)})]) ) <')'> ) } spids: [363] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<head>} {<-n>} {<1>} {<CHANGELOG.md>})] ) ) ) } right: {(DQ ($ Id.VSub_DollarName '$EXPECTED_CHANGELOG')) <Id.Lit_Other '*'>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [{<echo>} {(DQ <'Changelog not updated. First line should be:'>)}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_DollarName '$EXPECTED_CHANGELOG'))}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [378 404] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TARBALL) op: assign_op.Equal rhs: {<sandstorm-> ($ Id.VSub_DollarName '$BUILD') <.tar.xz>} spids: [446] ) ] ) (C {<echo>} {(DQ <'**** Building build '> ($ Id.VSub_DollarName '$BUILD') <' ****'>)}) (C {<make>} {<Id.Lit_VarLike 'BUILD='> ($ Id.VSub_DollarName '$BUILD')}) (C {<echo>} {(DQ <'**** Tagging this commit ****'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_REVISION) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Simple redirects: [ (redir.Redir op: <Id.Redir_Less '<'> fd: -1 arg_word: {<bundle/git-revision>} ) ] ) ] ) ) ) } spids: [484] ) ] ) (C {<git>} {<tag>} {<-u>} {($ Id.VSub_DollarName '$SIGNING_KEY_ID')} {(DQ ($ Id.VSub_DollarName '$TAG_NAME'))} {(DQ ($ Id.VSub_DollarName '$GIT_REVISION'))} {<-m>} {(DQ <'Release Sandstorm '> (${ Id.VSub_Name DISPLAY_VERSION))} ) (C {<git>} {<push>} {<origin>} {(DQ ($ Id.VSub_DollarName '$TAG_NAME'))}) (C {<echo>} {(DQ <'**** Pushing build '> ($ Id.VSub_DollarName '$BUILD') <' ****'>)}) (C {<rm>} {<-f>} {($ Id.VSub_DollarName '$TARBALL') <.sig>} {($ Id.VSub_DollarName '$TARBALL') <.update-sig>} {<install.sh.sig>} ) (C {<gpg>} {<-u>} {($ Id.VSub_DollarName '$SIGNING_KEY_ID')} {<--digest-algo>} {<SHA512>} {<--detach-sig>} {($ Id.VSub_DollarName '$TARBALL')} ) (C {<gpg>} {<-u>} {($ Id.VSub_DollarName '$SIGNING_KEY_ID')} {<--digest-algo>} {<SHA512>} {<--detach-sig>} {<install.sh>} ) (command.Simple words: [ {<tmp/sandstorm/update-tool>} {<sign>} {(word_part.TildeSub token:<Id.Lit_TildeLike '~'>) </.sandstorm-update-keyring>} {($ Id.VSub_DollarName '$TARBALL')} ] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$TARBALL') <.update-sig>} ) ] ) (command.Simple words: [{<echo>} {($ Id.VSub_DollarName '$BUILD')}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {<tmp/> ($ Id.VSub_DollarName '$CHANNEL')} ) ] ) (C {<gce-ss>} {<copy-files>} {($ Id.VSub_DollarName '$TARBALL')} {<fe> <Id.Lit_Other ':'> </var/www/dl.sandstorm.io>} ) (C {<gce-ss>} {<copy-files>} {($ Id.VSub_DollarName '$TARBALL') <.sig>} {<fe> <Id.Lit_Other ':'> </var/www/dl.sandstorm.io>} ) (C {<gce-ss>} {<copy-files>} {($ Id.VSub_DollarName '$TARBALL') <.update-sig>} {<fe> <Id.Lit_Other ':'> </var/www/dl.sandstorm.io>} ) (C {<gce-ss>} {<copy-files>} {<tmp/> ($ Id.VSub_DollarName '$CHANNEL')} {<fe> <Id.Lit_Other ':'> </var/www/install.sandstorm.io>} ) (C {<gce-ss>} {<copy-files>} {<install.sh>} {<fe> <Id.Lit_Other ':'> </var/www/install.sandstorm.io>}) (C {<gce-ss>} {<copy-files>} {<install.sh.sig>} {<fe> <Id.Lit_Other ':'> </var/www/install.sandstorm.io>} ) (C {<gce-ss>} {<ssh>} {<alpha>} {<--command>} {(SQ <'sudo service sandstorm update dev'>)}) ] )