name: API CI on: pull_request: branches: - develop paths: - 'epapi/**' - 'epdb/models.py' # API depends on models - 'epdb/logic.py' # API depends on business logic - 'tests/fixtures/**' # API tests use fixtures workflow_dispatch: jobs: api-tests: if: ${{ !contains(gitea.event.pull_request.title, 'WIP') }} runs-on: ubuntu-latest services: postgres: image: postgres:16 env: POSTGRES_USER: ${{ vars.POSTGRES_USER }} POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} POSTGRES_DB: ${{ vars.POSTGRES_DB }} ports: - ${{ vars.POSTGRES_PORT}}:5432 options: >- --health-cmd="pg_isready -U postgres" --health-interval=10s --health-timeout=5s --health-retries=5 env: RUNNER_TOOL_CACHE: /toolcache EP_DATA_DIR: /opt/enviPy/ ALLOWED_HOSTS: 127.0.0.1,localhost DEBUG: True LOG_LEVEL: INFO MODEL_BUILDING_ENABLED: True APPLICABILITY_DOMAIN_ENABLED: True ENVIFORMER_PRESENT: True ENVIFORMER_DEVICE: cpu FLAG_CELERY_PRESENT: False PLUGINS_ENABLED: True SERVER_URL: http://localhost:8000 ADMIN_APPROVAL_REQUIRED: True REGISTRATION_MANDATORY: True LOG_DIR: '' # DB POSTGRES_SERVICE_NAME: postgres POSTGRES_DB: ${{ vars.POSTGRES_DB }} POSTGRES_USER: ${{ vars.POSTGRES_USER }} POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} POSTGRES_PORT: 5432 # SENTRY SENTRY_ENABLED: False # MS ENTRA MS_ENTRA_ENABLED: False steps: - name: Checkout repository uses: actions/checkout@v4 # Use shared setup action - skips frontend builds for API-only tests - name: Setup enviPy Environment uses: ./.gitea/actions/setup-envipy with: skip-frontend: 'true' skip-playwright: 'true' ssh-private-key: ${{ secrets.ENVIPY_CI_PRIVATE_KEY }} run-migrations: 'true' - name: Run API tests run: | source .venv/bin/activate python manage.py test epapi -v 2 - name: Test API endpoints availability run: | source .venv/bin/activate python manage.py runserver 0.0.0.0:8000 & SERVER_PID=$! sleep 5 curl -f http://localhost:8000/api/v1/docs || echo "API docs not available" kill $SERVER_PID