OCR working good. NER model training ready #18
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Quality Gate | |
on: | |
push: | |
branches: [ main ] | |
pull_request: | |
branches: [ main ] | |
jobs: | |
lint-and-static-checks: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
check: [lint, format-check, type-check, security] | |
fail-fast: false | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python 3.12 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.12' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install -r requirements.txt | |
- name: Set up environment variables | |
run: | | |
cat > .env << EOF | |
DJANGO_SECRET_KEY=test-secret-key-for-ci | |
DEBUG=False | |
DB_HOST=localhost | |
DB_NAME=genealogy_extractor | |
DB_USER=postgres | |
DB_PASSWORD=postgres | |
DB_PORT=5432 | |
REDIS_HOST=localhost | |
REDIS_PORT=6379 | |
DJANGO_SUPERUSER_USERNAME=admin | |
DJANGO_SUPERUSER_PASSWORD=admin | |
DJANGO_SUPERUSER_EMAIL=admin@localhost | |
EOF | |
export $(cat .env | xargs) | |
- name: Run ${{ matrix.check }} | |
run: | | |
if [ "${{ matrix.check }}" = "lint" ]; then | |
ruff check . | |
elif [ "${{ matrix.check }}" = "format-check" ]; then | |
ruff format --check . | |
elif [ "${{ matrix.check }}" = "type-check" ]; then | |
export $(cat .env | xargs) | |
mypy genealogy genealogy_extractor --config-file pyproject.toml | |
elif [ "${{ matrix.check }}" = "security" ]; then | |
bandit -r genealogy genealogy_extractor -f txt -c .bandit | |
fi | |
django-tests: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up environment variables | |
run: | | |
cat > .env << EOF | |
DJANGO_SECRET_KEY=test-secret-key-for-ci | |
DEBUG=False | |
DB_HOST=db | |
DB_NAME=genealogy_extractor | |
DB_USER=postgres | |
DB_PASSWORD=postgres | |
DB_PORT=5432 | |
REDIS_HOST=redis | |
REDIS_PORT=6379 | |
DJANGO_SUPERUSER_USERNAME=admin | |
DJANGO_SUPERUSER_PASSWORD=admin | |
DJANGO_SUPERUSER_EMAIL=admin@localhost | |
EOF | |
- name: Debug .env file | |
run: | | |
echo "Current directory:" | |
pwd | |
echo ".env file exists:" | |
ls -la .env | |
echo ".env file contents:" | |
cat .env | |
- name: Clean up any existing containers | |
run: | | |
docker compose down -v || true | |
docker system prune -f || true | |
- name: Start database first | |
run: docker compose up -d db redis | |
- name: Wait for database to be ready | |
run: | | |
echo "Waiting for database to be ready..." | |
timeout 60 bash -c 'until docker compose exec db pg_isready -U postgres; do sleep 2; done' | |
echo "Database is ready!" | |
- name: Start remaining services | |
run: docker compose up -d --build | |
- name: Check container status immediately | |
run: | | |
echo "Status immediately after startup:" | |
docker compose ps | |
echo "Web container logs:" | |
docker compose logs web | |
echo "Database container logs:" | |
docker compose logs db | |
- name: Wait for services to be ready | |
run: | | |
echo "Waiting for services to be ready..." | |
for i in {1..30}; do | |
echo "--- Check $i ($(date)) ---" | |
docker compose ps | |
if docker compose ps | grep -q "web.*Up"; then | |
echo "Web service is up! Waiting 5 more seconds for full initialization..." | |
sleep 5 | |
echo "Final check:" | |
docker compose ps | |
echo "Web container logs after waiting:" | |
docker compose logs web | |
break | |
else | |
echo "Web service not up yet, checking logs:" | |
docker compose logs web | |
echo "Waiting 2 seconds..." | |
sleep 2 | |
fi | |
done | |
- name: Run django-check | |
run: docker compose exec web python manage.py check | |
- name: Run tests | |
run: docker compose exec web python manage.py test genealogy.tests |