#!/usr/bin/env bash set -eo pipefail global MODE := $1; global MODE := $(MODE:="testing") # shellcheck disable=SC2120 proc setup_circle { echo "=====> setup_circle on CIRCLE_NODE_INDEX: $CIRCLE_NODE_INDEX" sudo -E CI=true make -e sshcommand # need to add the dokku user to the docker group sudo usermod -G docker dokku #### circle does some weird *expletive* with regards to root and gh auth (needed for gitsubmodules test) sudo rsync -a ~ubuntu/.ssh/ ~root/.ssh/ sudo chown -R root:root ~root/.ssh/ sudo sed --in-place 's:/home/ubuntu:/root:g' ~root/.ssh/config #### [[ "$1" == "buildstack" ]] && env BUILD_STACK=true make -e stack sudo -E CI=true make -e install sudo -E make -e setup-deploy-tests make -e ci-dependencies # circleci runs Ubuntu 12.04 and thus a previous version of bash (4.2) than 14.04 # sudo apt-get install -y -q "bash=$(apt-cache show bash | egrep "^Version: 4.3" | head -1 | awk -F: '{ print $2 }' | xargs)" bash --version docker version lsb_release -a # setup .dokkurc sudo -E mkdir -p /home/dokku/.dokkurc sudo -E chown dokku:ubuntu /home/dokku/.dokkurc sudo -E chmod 775 /home/dokku/.dokkurc # pull node:4 image for testing sudo docker pull node:4 } if [[ -n "$CIRCLE_NODE_INDEX" ]] && [[ "$MODE" == "setup" ]] { # shellcheck disable=SC2119 setup_circle exit $Status # case "$CIRCLE_NODE_INDEX" in # 3) # setup_circle buildstack # exit $? # ;; # *) # setup_circle # exit $? # ;; # esac } global start := $[date +%s] matchstr $CIRCLE_NODE_INDEX { 0 { echo "=====> make unit-tests (1/4) on CIRCLE_NODE_INDEX: $CIRCLE_NODE_INDEX" sudo -E UNIT_TEST_BATCH=1 make -e unit-tests global RC := $Status if [[ $RC -ne 0 ]] { echo "exit status: $RC" exit $RC } } 1 { echo "=====> make unit-tests (2/4) on CIRCLE_NODE_INDEX: $CIRCLE_NODE_INDEX" sudo -E UNIT_TEST_BATCH=2 make -e unit-tests global RC := $Status if [[ $RC -ne 0 ]] { echo "exit status: $RC" exit $RC } } 2 { echo "=====> make unit-tests (3/4) on CIRCLE_NODE_INDEX: $CIRCLE_NODE_INDEX" sudo -E UNIT_TEST_BATCH=3 make -e unit-tests global RC := $Status if [[ $RC -ne 0 ]] { echo "exit status: $RC" exit $RC } echo "=====> make deploy tests" sudo -E make -e deploy-test-checks-root deploy-test-config deploy-test-multi global RC := $Status if [[ $RC -ne 0 ]] { echo "exit status: $RC" exit $RC } } 3 { echo "=====> make unit-tests (4/4) on CIRCLE_NODE_INDEX: $CIRCLE_NODE_INDEX" sudo -E UNIT_TEST_BATCH=4 make -e unit-tests global RC := $Status if [[ $RC -ne 0 ]] { echo "exit status: $RC" exit $RC } } } global end := $[date +%s] global runtime := $(end-start) echo "suite runtime: $[date -u -d @$(runtime) +"%T]" (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: ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:MODE) op: Equal rhs: { (BracedVarSub token: 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: ) ] 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: 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: ) ] 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: ) ] 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: ) ] 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: ) ] 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: ) ] 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: 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: spids: [707 723] ) ) } ) ] )