Skip to content

Chore/docker app image #24

Chore/docker app image

Chore/docker app image #24

Workflow file for this run

name: ci
on:
push:
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
lint-and-test:
name: ci (${{ matrix.python-version }})
runs-on: ubuntu-latest
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
python-version: [ "3.11", "3.12" ]
# Add all required database services
services:
postgres:
image: postgres:15
env:
POSTGRES_DB: chatbot_app
POSTGRES_USER: chatbot_user
POSTGRES_PASSWORD: secure_password
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
redis:
image: redis:6-alpine
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
mongodb:
image: mongo:6
env:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
ports:
- 27017:27017
options: >-
--health-cmd "echo 'db.runCommand(\"ping\").ok' | mongosh --quiet"
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: pip
cache-dependency-path: requirements.txt
# Start ScyllaDB manually since it's not available as a service
- name: Start ScyllaDB
run: |
docker run -d \
--name scylla-node1 \
-p 9042:9042 \
-p 10000:10000 \
scylladb/scylla \
--smp 1 --memory 750M --overprovisioned 1 --api-address 0.0.0.0
# Wait for ScyllaDB to be ready
- name: Wait for ScyllaDB
run: |
echo "Waiting for ScyllaDB to be ready..."
for i in {1..30}; do
if docker exec scylla-node1 nodetool status 2>/dev/null | grep -q "UN"; then
echo "ScyllaDB is ready!"
break
fi
echo "Attempt $i/30: ScyllaDB not ready yet..."
sleep 5
done
# Final check
docker exec scylla-node1 nodetool status
# Verify all services are accessible
- name: Verify services connectivity
run: |
echo "Checking Redis..."
nc -zv localhost 6379
echo "Checking MongoDB..."
nc -zv localhost 27017
echo "Checking PostgreSQL..."
nc -zv localhost 5432
echo "Checking ScyllaDB..."
nc -zv localhost 9042
echo "All services are accessible!"
- name: Install deps
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install ruff pytest
- name: Lint (ruff)
run: ruff check .
# Set environment variables for database connections
- name: Test (pytest)
env:
SKIP_INTEGRATION: "0" # Enable integration tests since we have databases
MONGODB_URI: "mongodb://root:example@localhost:27017/?directConnection=true"
REDIS_URL: "redis://localhost:6379/0"
POSTGRES_DSN: "postgresql+asyncpg://chatbot_user:secure_password@localhost:5432/chatbot_app"
SCYLLA_HOSTS: "localhost"
SCYLLA_PORT: "9042"
run: |
pytest -q || pytest -q -k "not slow"