Files
multy-stub/.gitea/workflows/check.yaml
Primakov Alexandr Alexandrovich 919714089a
Some checks failed
Code Quality Checks / lint-and-typecheck (push) Successful in 10m46s
Code Quality Checks / smoke-test (push) Failing after 8m12s
Add smoke test workflow to check application stability and MongoDB readiness; update ESLint and test commands for better output
2025-12-05 17:06:39 +03:00

138 lines
4.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Code Quality Checks
run-name: Проверка кода (lint & typecheck) от ${{ gitea.actor }}
on: [push]
jobs:
lint-and-typecheck:
runs-on: ubuntu-latest
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: Run ESLint
run: npm run eslint
- name: Run TypeScript type check
run: npx tsc --noEmit
- name: Run tests
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