|
4 | 4 |
|
5 | 5 |
|
6 | 6 |
|
7 | | -BUILD_ID=${CIRCLE_BUILD_NUM:-${TRAVIS_JOB_NUMBER}} |
| 7 | +BUILD_ID=${CIRCLE_BUILD_NUM:-local} |
8 | 8 | echo "$BUILD_ID" |
9 | 9 | TEST_EXITCODE=0 |
10 | | -npx ganache & |
11 | | -npx http-server -p 9090 --cors='*' ./node_modules & |
12 | | -yarn run serve:production & |
| 10 | +npx ganache > /dev/null 2>&1 & |
| 11 | +npx http-server -p 9090 --cors='*' ./node_modules > /dev/null 2>&1 & |
| 12 | +yarn run serve:production > /dev/null 2>&1 & |
13 | 13 | sleep 5 |
14 | 14 |
|
15 | | -# grep -IRiL "@disabled" "dist/apps/remix-ide-e2e/src/tests" | grep "\.spec\|\.test" | xargs -I {} basename {} .test.js | grep -E "\b[${2}]" |
16 | | -# TESTFILES=$(grep -IRiL "@disabled" "dist/apps/remix-ide-e2e/src/tests" | grep "\.spec\|\.test" | xargs -I {} basename {} .test.js | grep -E "\b[$2]" | circleci tests split --split-by=timings ) |
17 | | -node apps/remix-ide/ci/splice_tests.js $2 $3 |
18 | | -TESTFILES=$(node apps/remix-ide/ci/splice_tests.js $2 $3 | grep -v 'metamask' | circleci tests split --split-by=timings) |
| 15 | +PARALLEL_TOTAL=${CIRCLE_NODE_TOTAL:-1} |
| 16 | +PARALLEL_INDEX=${CIRCLE_NODE_INDEX:-0} |
| 17 | +SELF_SPLIT=${SELF_SPLIT:-0} |
| 18 | +TIMINGS_JSON=${TIMINGS_JSON:-timings-current.json} |
| 19 | +E2E_RETRIES=${E2E_RETRIES:-0} # number of retries on failure per test (0 = no retry) |
| 20 | + |
| 21 | +# Build the list of enabled test files |
| 22 | +BASE_FILES=$(find dist/apps/remix-ide-e2e/src/tests -type f \( -name "*.test.js" -o -name "*.spec.js" \) -print0 \ |
| 23 | + | xargs -0 grep -IL "@disabled" \ |
| 24 | + | xargs -I {} basename {} \ |
| 25 | + | sed 's/\.js$//' \ |
| 26 | + | grep -v 'metamask') |
| 27 | + |
| 28 | +if [ "$SELF_SPLIT" = "1" ]; then |
| 29 | + echo "==> Using self shard planner (shards=$PARALLEL_TOTAL index=$PARALLEL_INDEX)" |
| 30 | + echo "ENV: CIRCLE_BRANCH=${CIRCLE_BRANCH:-local} CIRCLE_NODE_TOTAL=$PARALLEL_TOTAL CIRCLE_NODE_INDEX=$PARALLEL_INDEX E2E_RETRIES=$E2E_RETRIES" |
| 31 | + mkdir -p reports/shards |
| 32 | + TESTFILES=$(printf '%s\n' "$BASE_FILES" | node scripts/plan-shards.js --shards "$PARALLEL_TOTAL" --index "$PARALLEL_INDEX" --timings "$TIMINGS_JSON" --verbose --manifest-out reports/shards/manifest-$PARALLEL_INDEX.json) |
| 33 | +else |
| 34 | + echo "==> Using CircleCI timings split" |
| 35 | + mkdir -p reports/shards |
| 36 | + TESTFILES=$(printf '%s\n' "$BASE_FILES" | circleci tests split --split-by=timings) |
| 37 | +fi |
| 38 | + |
| 39 | +printf '%s\n' "$TESTFILES" > reports/shards/files-$PARALLEL_INDEX.txt |
| 40 | +COUNT=$(printf '%s\n' "$TESTFILES" | wc -l | awk '{print $1}') |
| 41 | +echo "==> Shard $PARALLEL_INDEX selected $COUNT test files" |
| 42 | +echo "==> Preview (first 20):" |
| 43 | +printf '%s\n' "$TESTFILES" | head -n 20 |
| 44 | +echo "==> Preview (last 10):" |
| 45 | +printf '%s\n' "$TESTFILES" | tail -n 10 |
| 46 | +echo "==> Full list (for grepability):" |
| 47 | +printf '%s\n' "$TESTFILES" |
| 48 | + |
| 49 | +# If this batch includes remixd (slither) tests, prepare pip3/slither toolchain on-demand |
| 50 | +printf '%s\n' "$TESTFILES" | ./apps/remix-ide/ci/setup_slither_if_needed.sh |
19 | 51 | for TESTFILE in $TESTFILES; do |
20 | | - if ! npx nightwatch --config dist/apps/remix-ide-e2e/nightwatch-${1}.js dist/apps/remix-ide-e2e/src/tests/${TESTFILE}.js --env=$1; then |
21 | | - if ! npx nightwatch --config dist/apps/remix-ide-e2e/nightwatch-${1}.js dist/apps/remix-ide-e2e/src/tests/${TESTFILE}.js --env=$1; then |
| 52 | + echo "Running test: ${TESTFILE}.js (retries on fail: $E2E_RETRIES)" |
| 53 | + attempt=0 |
| 54 | + while true; do |
| 55 | + if npx nightwatch --config dist/apps/remix-ide-e2e/nightwatch-${1}.js dist/apps/remix-ide-e2e/src/tests/${TESTFILE}.js --env=$1; then |
| 56 | + # success |
| 57 | + break |
| 58 | + fi |
| 59 | + # failure |
| 60 | + if [ "$attempt" -lt "$E2E_RETRIES" ]; then |
| 61 | + attempt=$((attempt+1)) |
| 62 | + echo "Retrying ${TESTFILE}.js (attempt $attempt of $E2E_RETRIES)" |
| 63 | + continue |
| 64 | + else |
22 | 65 | TEST_EXITCODE=1 |
23 | 66 | break |
24 | 67 | fi |
| 68 | + done |
| 69 | + # Stop the shard loop on permanent failure |
| 70 | + if [ "$TEST_EXITCODE" -eq 1 ]; then |
| 71 | + break |
25 | 72 | fi |
26 | 73 | done |
27 | 74 |
|
|
0 commit comments