1+ #! /bin/bash
2+
3+ echo " 🧪 NETLIFY BUILD TEST SCRIPT"
4+ echo " ============================="
5+ echo " Branch: ${BRANCH:- unknown} "
6+ echo " Context: ${CONTEXT:- unknown} "
7+ echo " Build ID: ${BUILD_ID:- unknown} "
8+ echo " Test Mode: ${NETLIFY_RETRY_TEST:- false} ${NETLIFY_STRESS_TEST:- false} "
9+ echo " Timestamp: $( date) "
10+ echo " "
11+
12+ # Test environment detection
13+ if [[ " $NETLIFY_RETRY_TEST " = " true" ]]; then
14+ echo " 🔄 RETRY TESTING MODE ENABLED"
15+ TEST_TYPE=" retry"
16+ MAX_RETRIES=${MAX_RETRIES:- 3}
17+ RETRY_DELAY=${RETRY_DELAY:- 30}
18+ elif [[ " $NETLIFY_STRESS_TEST " = " true" ]]; then
19+ echo " 💥 STRESS TESTING MODE ENABLED"
20+ TEST_TYPE=" stress"
21+ MAX_RETRIES=${MAX_RETRIES:- 5}
22+ RETRY_DELAY=${RETRY_DELAY:- 15}
23+ else
24+ echo " 📋 STANDARD BUILD MODE"
25+ TEST_TYPE=" standard"
26+ MAX_RETRIES=1
27+ RETRY_DELAY=0
28+ fi
29+
30+ echo " Max retries: ${MAX_RETRIES} "
31+ echo " Retry delay: ${RETRY_DELAY} s"
32+ echo " "
33+
34+ # Build monitoring variables
35+ BUILD_START_TIME=$( date +%s)
36+ ATTEMPT_COUNT=0
37+ TOTAL_NETWORK_CALLS=0
38+
39+ # Populate the site_url to be used by Jekyll for generating sidebar and search links
40+ site_url=" ${DEPLOY_PRIME_URL} "
41+ JEKYLL_ENV=" preview"
42+ echo " Netlify has passed context $CONTEXT "
43+ if [[ " $CONTEXT " = " production" ]]; then
44+ site_url=" https://www.cockroachlabs.com"
45+ JEKYLL_ENV=" production"
46+ echo " Setting site domain to cockroachlabs.com and JEKYLL_ENV to production"
47+ # For deploy previews and branch deploys, use Netlify-provided domain
48+ # and leave JEKYLL_ENV set to "preview" for more efficient builds
49+ elif [[ " $CONTEXT " = " deploy-preview" ]]; then
50+ echo " Using Netlify-provided deploy preview domain and setting JEKYLL_ENV to preview"
51+ elif [[ " $CONTEXT " = " branch-deploy" ]]; then
52+ echo " Using Netlify-provided branch deploy domain and setting JEKYLL_ENV to preview"
53+ fi
54+
55+ echo " url: ${site_url} " > _config_url.yml
56+
57+ function log_attempt() {
58+ local attempt=$1
59+ local total=$2
60+ echo " "
61+ echo " 🔄 BUILD ATTEMPT ${attempt} /${total} "
62+ echo " ================================"
63+ echo " Time: $( date) "
64+ if [[ $attempt -gt 1 ]]; then
65+ echo " Previous attempts failed - retrying..."
66+ echo " Delay before retry: ${RETRY_DELAY} s"
67+ sleep ${RETRY_DELAY}
68+ fi
69+ echo " "
70+ }
71+
72+ function build_with_monitoring {
73+ local config=$1
74+ echo " 📝 Starting Jekyll build with config: $config "
75+ echo " ⏰ Build start: $( date) "
76+
77+ # Run Jekyll build with network monitoring
78+ bundle exec jekyll build --trace --config _config_base.yml,$config
79+ local build_result=$?
80+
81+ echo " ⏰ Build end: $( date) "
82+ echo " 📊 Build result: $build_result "
83+
84+ if [[ $build_result != 0 ]]; then
85+ echo " ❌ Jekyll build failed with exit code: $build_result "
86+ return $build_result
87+ else
88+ echo " ✅ Jekyll build completed successfully"
89+ return 0
90+ fi
91+ }
92+
93+ function build_with_retries {
94+ local config=$1
95+ local success=false
96+
97+ for (( attempt= 1 ; attempt<= MAX_RETRIES; attempt++ )) ; do
98+ log_attempt $attempt $MAX_RETRIES
99+ ATTEMPT_COUNT=$attempt
100+
101+ if build_with_monitoring " $config " ; then
102+ echo " ✅ Build succeeded on attempt ${attempt} /${MAX_RETRIES} "
103+ success=true
104+ break
105+ else
106+ echo " ❌ Build failed on attempt ${attempt} /${MAX_RETRIES} "
107+ if [[ $attempt -lt $MAX_RETRIES ]]; then
108+ echo " 🔄 Will retry in ${RETRY_DELAY} seconds..."
109+ else
110+ echo " 💀 All retry attempts exhausted"
111+ fi
112+ fi
113+ done
114+
115+ if [[ " $success " = true ]]; then
116+ return 0
117+ else
118+ return 1
119+ fi
120+ }
121+
122+ echo " 📦 Installing dependencies..."
123+ gem install bundler --silent
124+ bundle install --quiet
125+
126+ echo " "
127+ echo " 🚀 Starting build process..."
128+ echo " =============================="
129+
130+ # Main build with retry logic
131+ if build_with_retries " _config_cockroachdb.yml,_config_url.yml" ; then
132+ echo " "
133+ echo " ✅ MAIN BUILD COMPLETED SUCCESSFULLY"
134+ else
135+ echo " "
136+ echo " ❌ MAIN BUILD FAILED AFTER ALL RETRIES"
137+ echo " "
138+ echo " 📊 FINAL BUILD STATISTICS:"
139+ echo " =========================="
140+ echo " Total attempts: ${ATTEMPT_COUNT} /${MAX_RETRIES} "
141+ echo " Test type: ${TEST_TYPE} "
142+ echo " Build duration: $(( $(date +% s) - BUILD_START_TIME)) s"
143+ echo " Branch: ${BRANCH:- unknown} "
144+ echo " Context: ${CONTEXT:- unknown} "
145+ exit 1
146+ fi
147+
148+ echo " "
149+ echo " 📂 Setting up site files..."
150+ cp _site/docs/_redirects _site/_redirects
151+ cp _site/docs/404.html _site/404.html
152+
153+ echo " "
154+ echo " 🔧 Installing htmltest..."
155+ curl -s https://htmltest.wjdp.uk | bash
156+ if [[ $? != 0 ]]; then
157+ echo " ❌ Failed to install htmltest"
158+ exit 1
159+ fi
160+
161+ ./bin/build.sh> /dev/null 2>&1
162+
163+ # Run htmltest to check external links on scheduled nightly runs
164+ if [[ " $INCOMING_HOOK_TITLE " = " nightly" ]]; then
165+ echo " 🔍 Running full htmltest (nightly)..."
166+ ./bin/htmltest
167+ if [[ $? != 0 ]]; then
168+ exit 1
169+ fi
170+ fi
171+
172+ # Skip Algolia for testing
173+ if [ " $CONTEXT " == " production" ]; then
174+ echo " Temporarily skipping the Algolia index build"
175+ else
176+ echo " Not building Algolia index for context $CONTEXT "
177+ fi
178+
179+ # Run htmltest, but skip checking external links to speed things up
180+ echo " "
181+ echo " 🔍 Running htmltest (skip external)..."
182+ ./bin/htmltest --skip-external
183+ if [[ $? != 0 ]]; then
184+ echo " ❌ htmltest failed"
185+ exit 1
186+ fi
187+
188+ # Run tests defined in __tests__
189+ echo " "
190+ echo " 🧪 Running Jest tests..."
191+ ./node_modules/.bin/jest
192+ test_result=$?
193+
194+ # Final summary
195+ echo " "
196+ echo " 🎯 BUILD SUMMARY"
197+ echo " ================"
198+ echo " ✅ Build completed successfully!"
199+ echo " 📊 Build statistics:"
200+ echo " - Total attempts: ${ATTEMPT_COUNT} /${MAX_RETRIES} "
201+ echo " - Test type: ${TEST_TYPE} "
202+ echo " - Build duration: $(( $(date +% s) - BUILD_START_TIME)) s"
203+ echo " - Branch: ${BRANCH:- unknown} "
204+ echo " - Context: ${CONTEXT:- unknown} "
205+ echo " - Jest result: ${test_result} "
206+
207+ if [[ " $TEST_TYPE " != " standard" ]]; then
208+ echo " "
209+ echo " 🧪 TEST ANALYSIS:"
210+ echo " - This was a ${TEST_TYPE} test build"
211+ echo " - Check logs above for retry patterns and failure handling"
212+ echo " - Expected some failures in test pages"
213+ fi
214+
215+ exit $test_result
0 commit comments