smoke tests
Some checks failed
Build & Deploy KLZ Cables / build-and-deploy (push) Failing after 4m17s
Some checks failed
Build & Deploy KLZ Cables / build-and-deploy (push) Failing after 4m17s
This commit is contained in:
@@ -228,7 +228,22 @@ jobs:
|
|||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
|
|
||||||
echo "⏳ Waiting for services to be healthy..."
|
echo "⏳ Waiting for services to be healthy..."
|
||||||
sleep 10
|
MAX_RETRIES=12
|
||||||
|
RETRY_COUNT=0
|
||||||
|
until curl -s -f http://localhost:3000/health > /dev/null || [ $RETRY_COUNT -eq $MAX_RETRIES ]; do
|
||||||
|
echo " • Waiting for health check... ($((RETRY_COUNT + 1))/$MAX_RETRIES)"
|
||||||
|
sleep 5
|
||||||
|
RETRY_COUNT=$((RETRY_COUNT + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $RETRY_COUNT -eq $MAX_RETRIES ]; then
|
||||||
|
echo "❌ Health check failed after $MAX_RETRIES retries"
|
||||||
|
echo "🔍 Container logs:"
|
||||||
|
docker-compose logs --tail=50
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Health check passed!"
|
||||||
|
|
||||||
echo "🔍 Checking service status..."
|
echo "🔍 Checking service status..."
|
||||||
docker-compose ps
|
docker-compose ps
|
||||||
|
|||||||
@@ -37,6 +37,13 @@ RUN npx tsx scripts/validate-env.ts
|
|||||||
|
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
|
# Smoke test during build to catch runtime errors early
|
||||||
|
# We start the app in the background, wait for it to be ready, and run the smoke test
|
||||||
|
RUN (node .next/standalone/server.js &) && \
|
||||||
|
npx wait-on -t 30000 http://localhost:3000/health && \
|
||||||
|
npx tsx scripts/smoke-test.ts http://localhost:3000/health && \
|
||||||
|
pkill -f "node .next/standalone/server.js"
|
||||||
|
|
||||||
# Production image, copy all the files and run next
|
# Production image, copy all the files and run next
|
||||||
FROM base AS runner
|
FROM base AS runner
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|||||||
36
scripts/smoke-test.ts
Normal file
36
scripts/smoke-test.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import * as http from 'http';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple smoke test to verify the application is running and healthy.
|
||||||
|
* This script is intended to be run against a local or remote instance.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const url = process.argv[2] || 'http://localhost:3000/health';
|
||||||
|
const timeout = 10000; // 10 seconds
|
||||||
|
|
||||||
|
console.log(`🔍 Running smoke test against: ${url}`);
|
||||||
|
|
||||||
|
const request = http.get(url, (res) => {
|
||||||
|
const { statusCode } = res;
|
||||||
|
|
||||||
|
if (statusCode === 200) {
|
||||||
|
console.log('✅ Smoke test passed: Application is healthy.');
|
||||||
|
process.exit(0);
|
||||||
|
} else {
|
||||||
|
console.error(`❌ Smoke test failed: Received status code ${statusCode}`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
request.on('error', (err) => {
|
||||||
|
console.error(`❌ Smoke test failed: ${err.message}`);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
request.on('timeout', () => {
|
||||||
|
console.error('❌ Smoke test failed: Request timed out');
|
||||||
|
request.destroy();
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
request.setTimeout(timeout);
|
||||||
Reference in New Issue
Block a user