Compare commits
1 Commits
feature/wo
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| e4a7b47ab5 |
@@ -19,120 +19,10 @@ jobs:
|
|||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Run ESLint
|
- name: Run ESLint
|
||||||
run: npm run eslint
|
run: npm run eslint -- --quiet
|
||||||
|
|
||||||
- name: Run TypeScript type check
|
- name: Run TypeScript type check
|
||||||
run: npx tsc --noEmit
|
run: npx tsc --noEmit
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: npm test
|
run: npm test -- --quiet
|
||||||
|
|
||||||
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
|
|
||||||
Reference in New Issue
Block a user