(List (Com {[LIT_CHARS set]} {[LIT_CHARS -euo]} {[LIT_CHARS pipefail]} ) (= scope= flags=0 words=[] bindings=[('XVFB_PID', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('RUN_SELENIUM', {[DQ [VarSub RUN_SELENIUM test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS true]}]]})]) (= scope= flags=0 words=[] bindings=[('BUNDLE_PATH', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('THIS_DIR', {[ComSub (Com {[LIT_CHARS dirname]} {[DQ [ComSub (Com {[LIT_CHARS readlink]} {[LIT_CHARS -f]} {[DQ [VarSub BASH_SOURCE bracket_op=(Index {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 0]}})]]})]]})]})]) (= scope= flags=0 words=[] bindings=[('METEOR_DEV_BUNDLE', {[ComSub (Com {[DQ [VarSub THIS_DIR][LIT_CHARS /../find-meteor-dev-bundle.sh]]})]})]) (= scope= flags=0 words=[] bindings=[('NODEJS', {[DQ [VarSub METEOR_DEV_BUNDLE][LIT_CHARS /bin/node]]})]) (= scope= flags=0 words=[] bindings=[('NPM', {[DQ [VarSub METEOR_DEV_BUNDLE][LIT_CHARS /bin/npm]]})]) (= scope= flags=0 words=[] bindings=[('SELENIUM_JAR', {[DQ [LIT_CHARS selenium-server-standalone-2.53.0.jar]]})]) (= scope= flags=0 words=[] bindings=[('SELENIUM_JAR_SHA256', {[DQ [LIT_CHARS 67b88cbfd3b130de6ff3770948f56cc485fd1abb5b7a769397d9050a59b1e036]]})]) (= scope= flags=0 words=[] bindings=[('SELENIUM_DOWNLOAD_URL', {[DQ [LIT_CHARS "https://selenium-release.storage.googleapis.com/2.53/"][VarSub SELENIUM_JAR]]})]) (FunctionDef cleanExit [] (List (= scope= flags=0 words=[] bindings=[('rc', {[VarSub 1]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub rc]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Log output: "]]} ) (Com {[LIT_CHARS cat]} {[DQ [VarSub SANDSTORM_DIR][LIT_CHARS /var/log/sandstorm.log]]} ) ) ) (Com {[DQ [VarSub SANDSTORM_DIR][LIT_CHARS /sandstorm]]} {[LIT_CHARS stop]} ) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 1]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub rc]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[DQ [VarSub SANDSTORM_DIR]]} ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -n]} {[DQ [VarSub XVFB_PID]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS kill]} {[ComSub (Com {[LIT_CHARS pgrep]} {[LIT_CHARS --parent]} {[VarSub XVFB_PID]} {[LIT_CHARS java]})]} ) (Com {[LIT_CHARS wait]} {[VarSub XVFB_PID]} ) ) ) (Com {[LIT_CHARS exit]} {[VarSub rc]} ) ) ) (FunctionDef cacheSeleniumJar [] (If (DBracket {B! {B1 UNARY_FILE_e {[LIT_CHARS ./] [VarSub SELENIUM_JAR]}}}) (List (= scope= flags=0 words=[] bindings=[('DOWNLOAD', {[ComSub (Com {[LIT_CHARS mktemp]} {[LIT_CHARS selenium-download.XXXXXX]})]})]) (Com {[LIT_CHARS curl]} {[LIT_CHARS -o]} {[VarSub DOWNLOAD]} {[VarSub SELENIUM_DOWNLOAD_URL]} ) (= scope= flags=0 words=[] bindings=[('DOWNLOAD_SHASUM', {[ComSub (Pipeline (Com {[LIT_CHARS sha256sum]} {[VarSub DOWNLOAD]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -f]} {[LIT_CHARS 1]} {[LIT_CHARS -d]} {[SQ ]}) )]})]) (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub DOWNLOAD_SHASUM]]} {[DQ [VarSub SELENIUM_JAR_SHA256]]}}) (Com {[LIT_CHARS mv]} {[VarSub DOWNLOAD]} {[LIT_CHARS ./] [VarSub SELENIUM_JAR]} ) (ElseTrue) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Selenium jar download didn't match expected checksum. Discarding."]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) ) ) ) (FunctionDef checkInstalled [] (If (Pipeline! (Com {[ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1) (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS which]} {[VarSub 1]})]} ) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Couldn't find executable '"][VarSub 1][LIT_CHARS "' - try installing the "][VarSub 2][LIT_CHARS " package?"]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) ) (While (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -gt]} {[LIT_CHARS 0]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Case to_match={[VarSub 1]}, pat_word_list=[[{[LIT_CHARS --no-selenium]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('RUN_SELENIUM', {[DQ [LIT_CHARS false]]})]) (List (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -n]} {[DQ [VarSub BUNDLE_PATH]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Multiple bundle paths specified, please name only one."]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (= scope= flags=0 words=[] bindings=[('BUNDLE_PATH', {[ComSub (Com {[LIT_CHARS readlink]} {[LIT_CHARS -f]} {[DQ [VarSub 1]]})]})]) ) ) (Com {[LIT_CHARS shift]} ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -z]} {[DQ [VarSub BUNDLE_PATH]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "No bundle path specified; perhaps you meant to write '"][VarSub 0][LIT_CHARS " sandstorm-0-fast.tar.xz'?"]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS cd]} {[DQ [VarSub THIS_DIR]]} ) (Com {[LIT_CHARS checkInstalled]} {[LIT_CHARS firefox]} {[LIT_CHARS firefox]} ) (Com {[DQ [VarSub NPM]]} {[LIT_CHARS install]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub RUN_SELENIUM]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS false]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS checkInstalled]} {[LIT_CHARS java]} {[LIT_CHARS default-jre-headless]} ) (Com {[LIT_CHARS checkInstalled]} {[LIT_CHARS xvfb-run]} {[LIT_CHARS Xvfb]} ) (Com {[LIT_CHARS checkInstalled]} {[LIT_CHARS pgrep]} {[LIT_CHARS procps]} ) (Com {[LIT_CHARS cacheSeleniumJar]} ) (Fork (Com {[LIT_CHARS xvfb-run]} {[LIT_CHARS --server-args] [LIT_DBRACKET_LIKE "="] [DQ [LIT_CHARS "-screen 0, 1280x1024x24"]]} {[LIT_CHARS java]} {[LIT_CHARS -jar]} {[LIT_CHARS ./] [VarSub SELENIUM_JAR]} ) ) (= scope= flags=0 words=[] bindings=[('XVFB_PID', {[VarSub !]})]) ) ) (= scope= flags=1 words=[] bindings=[('SANDSTORM_DIR', {[VarSub THIS_DIR] [LIT_CHARS /tmp-sandstorm]})]) (= scope= flags=1 words=[] bindings=[('OVERRIDE_SANDSTORM_DEFAULT_DIR', {[VarSub SANDSTORM_DIR]})]) (= scope= flags=1 words=[] bindings=[('PORT', {[LIT_CHARS 9000]})]) (= scope= flags=1 words=[] bindings=[('MONGO_PORT', {[LIT_CHARS 9001]})]) (= scope= flags=1 words=[] bindings=[('SMTP_LISTEN_PORT', {[LIT_CHARS 9002]})]) (= scope= flags=1 words=[] bindings=[('SMTP_OUTGOING_PORT', {[LIT_CHARS 9003]})]) (= scope= flags=1 words=[] bindings=[('IP_INTERFACE_TEST_PORT', {[LIT_CHARS 9004]})]) (= scope= flags=1 words=[] bindings=[('LAUNCH_URL', {[DQ [LIT_CHARS "http://local.sandstorm.io:"][VarSub PORT]]})]) (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[DQ [VarSub SANDSTORM_DIR]]} ) (Com {[LIT_CHARS ../install.sh]} {[LIT_CHARS -d]} {[LIT_CHARS -u]} {[DQ [VarSub BUNDLE_PATH]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "IS_TESTING=true\n"][LIT_CHARS "ALLOW_DEMO_ACCOUNTS=true\n"][LIT_CHARS "BASE_URL=http://local.sandstorm.io:"][VarSub PORT][LIT_CHARS "\n"][LIT_CHARS "WILDCARD_HOST=*.local.sandstorm.io:"][VarSub PORT][LIT_CHARS "\n"][LIT_CHARS "PORT="][VarSub PORT][LIT_CHARS "\n"][LIT_CHARS "MONGO_PORT="][VarSub MONGO_PORT][LIT_CHARS "\n"][LIT_CHARS "SMTP_LISTEN_PORT="][VarSub SMTP_LISTEN_PORT][LIT_CHARS "\n"][LIT_CHARS "MAIL_URL=smtp://127.0.0.1:"][VarSub SMTP_OUTGOING_PORT][LIT_CHARS "\n"][LIT_CHARS "UPDATE_CHANNEL=none\n"]]} < (FilenameRedirectNode filename={[DQ [VarSub SANDSTORM_DIR][LIT_CHARS /sandstorm.conf]]} >"> 1), > ) (Com {[DQ [VarSub SANDSTORM_DIR][LIT_CHARS /sandstorm]]} {[LIT_CHARS start]} ) (Com {[LIT_CHARS echo]} {[LIT_CHARS -n]} {[DQ [LIT_CHARS "Waiting for sandstorm to start."]]} ) (= scope= flags=0 words=[] bindings=[('COUNT', {[LIT_CHARS 0]})]) (While (Pipeline! (Com {[LIT_CHARS curl]} {[LIT_CHARS -s]} {[LIT_CHARS localhost] [LIT_OTHER ":"] [VarSub PORT]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) ) (List (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub COUNT]]} {[LIT_CHARS -gt]} {[LIT_CHARS 600]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Sandstorm failed to start"]]} ) (Com {[LIT_CHARS cleanExit]} {[LIT_CHARS 1]} ) ) ) (= scope= flags=0 words=[] bindings=[('COUNT', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub COUNT]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) (Com {[LIT_CHARS echo]} {[LIT_CHARS -n]} {[LIT_CHARS .]} ) (Com {[LIT_CHARS sleep]} {[LIT_CHARS .1]} ) ) ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS set]} {[LIT_OTHER "+"] [LIT_CHARS e]} ) (= scope= flags=1 words=[] bindings=[('DISABLE_DEMO', {[LIT_CHARS true]})]) (Com {[DQ [VarSub NPM]]} {[LIT_CHARS test]} ) (Com {[LIT_CHARS cleanExit]} {[VarSub ?]} ) )