Add smoke test workflow to check application stability and MongoDB readiness; update ESLint and test commands for better output
Some checks failed
Code Quality Checks / lint-and-typecheck (push) Successful in 10m46s
Code Quality Checks / smoke-test (push) Failing after 8m12s

This commit is contained in:
Primakov Alexandr Alexandrovich
2025-12-05 17:06:39 +03:00
parent 7066252bcb
commit 919714089a

View File

@@ -19,10 +19,120 @@ jobs:
run: npm ci
- name: Run ESLint
run: npm run eslint -- --quiet
run: npm run eslint
- name: Run TypeScript type check
run: npx tsc --noEmit
- name: Run tests
run: npm test -- --quiet
run: npm test
smoke-test:
runs-on: ubuntu-latest
needs: lint-and-typecheck
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Start MongoDB
run: |
docker run -d \
--name mongodb-smoke-test \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=password \
mongo:8.0.3
- name: Wait for MongoDB to be ready
run: |
timeout=30
elapsed=0
while ! docker exec mongodb-smoke-test mongosh --eval "db.adminCommand('ping')" --quiet > /dev/null 2>&1; do
if [ $elapsed -ge $timeout ]; then
echo "MongoDB не запустился за $timeout секунд"
exit 1
fi
echo "Ожидание запуска MongoDB... ($elapsed/$timeout)"
sleep 2
elapsed=$((elapsed + 2))
done
echo "MongoDB готов"
- name: Start application
env:
MONGO_ADDR: mongodb://admin:password@localhost:27017/test_db?authSource=admin
PORT: 8044
NODE_ENV: test
run: |
npm start > app.log 2>&1 &
echo $! > app.pid
echo "Приложение запущено с PID: $(cat app.pid)"
- name: Wait for application to start
run: |
timeout=30
elapsed=0
while ! node -e "require('http').get('http://localhost:8044', (r) => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))" 2>/dev/null; do
if [ $elapsed -ge $timeout ]; then
echo "Приложение не запустилось за $timeout секунд"
cat app.log
exit 1
fi
echo "Ожидание запуска приложения... ($elapsed/$timeout)"
sleep 2
elapsed=$((elapsed + 2))
done
echo "Приложение запущено"
- name: Check application stability (30 seconds)
run: |
duration=30
elapsed=0
while [ $elapsed -lt $duration ]; do
if ! kill -0 $(cat app.pid) 2>/dev/null; then
echo "❌ Приложение упало через $elapsed секунд"
cat app.log
exit 1
fi
if ! node -e "require('http').get('http://localhost:8044', (r) => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))" 2>/dev/null; then
echo "❌ Приложение не отвечает через $elapsed секунд"
cat app.log
exit 1
fi
echo "✓ Приложение работает ($elapsed/$duration секунд)"
sleep 5
elapsed=$((elapsed + 5))
done
echo "✅ Приложение стабильно работает в течение $duration секунд"
- name: Stop application
if: always()
run: |
if [ -f app.pid ]; then
pid=$(cat app.pid)
if kill -0 $pid 2>/dev/null; then
echo "Остановка приложения (PID: $pid)"
kill -TERM $pid || true
sleep 3
if kill -0 $pid 2>/dev/null; then
echo "Принудительная остановка приложения"
kill -9 $pid 2>/dev/null || true
fi
fi
rm -f app.pid
fi
- name: Stop MongoDB
if: always()
run: |
docker stop mongodb-smoke-test || true
docker rm mongodb-smoke-test || true