name: Run Tests on: [push] jobs: test: services: postgres: image: postgres:16-alpine env: POSTGRES_DB: calminer_ci POSTGRES_USER: calminer POSTGRES_PASSWORD: secret ports: - 5432:5432 options: >- --health-cmd "pg_isready -U calminer -d calminer_ci" --health-interval 10s --health-timeout 5s --health-retries 10 runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.10" # - name: Cache pip # uses: actions/cache@v4 # with: # path: ~/.cache/pip # key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt', 'requirements-test.txt') }} # restore-keys: | # ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }} # ${{ runner.os }}-pip- - name: Install dependencies run: | pip install -r requirements.txt pip install -r requirements-test.txt - name: Wait for database service env: DATABASE_DRIVER: postgresql DATABASE_HOST: postgres DATABASE_PORT: "5432" DATABASE_NAME: calminer_ci DATABASE_USER: calminer DATABASE_PASSWORD: secret DATABASE_SCHEMA: public DATABASE_SUPERUSER: calminer DATABASE_SUPERUSER_PASSWORD: secret DATABASE_SUPERUSER_DB: calminer_ci run: | python - <<'PY' import os import time import psycopg2 dsn = ( f"dbname={os.environ['DATABASE_SUPERUSER_DB']} " f"user={os.environ['DATABASE_SUPERUSER']} " f"password={os.environ['DATABASE_SUPERUSER_PASSWORD']} " f"host={os.environ['DATABASE_HOST']} " f"port={os.environ['DATABASE_PORT']}" ) for attempt in range(30): try: with psycopg2.connect(dsn): break except psycopg2.OperationalError: time.sleep(2) else: raise SystemExit("Postgres service did not become available") PY - name: Run database setup (dry run) env: DATABASE_DRIVER: postgresql DATABASE_HOST: postgres DATABASE_PORT: "5432" DATABASE_NAME: calminer_ci DATABASE_USER: calminer DATABASE_PASSWORD: secret DATABASE_SCHEMA: public DATABASE_SUPERUSER: calminer DATABASE_SUPERUSER_PASSWORD: secret DATABASE_SUPERUSER_DB: calminer_ci run: python scripts/setup_database.py --ensure-database --ensure-role --ensure-schema --initialize-schema --run-migrations --seed-data --dry-run -v - name: Run database setup env: DATABASE_DRIVER: postgresql DATABASE_HOST: postgres DATABASE_PORT: "5432" DATABASE_NAME: calminer_ci DATABASE_USER: calminer DATABASE_PASSWORD: secret DATABASE_SCHEMA: public DATABASE_SUPERUSER: calminer DATABASE_SUPERUSER_PASSWORD: secret DATABASE_SUPERUSER_DB: calminer_ci run: python scripts/setup_database.py --ensure-database --ensure-role --ensure-schema --initialize-schema --run-migrations --seed-data -v - name: Run tests env: DATABASE_URL: postgresql+psycopg2://calminer:secret@postgres:5432/calminer_ci DATABASE_SCHEMA: public run: pytest