name: Contract Testing (Schemathesis) on: pull_request: paths: - "veza-backend-api/**.go" - "veza-backend-api/openapi.yaml" env: GIT_SSL_NO_VERIFY: "true" NODE_TLS_REJECT_UNAUTHORIZED: "0" jobs: contract-test: runs-on: ubuntu-latest timeout-minutes: 20 services: postgres: image: postgres:16-alpine env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: veza_test ports: - 5432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 redis: image: redis:7-alpine ports: - 6379:6379 options: >- --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5 env: DATABASE_URL: postgresql://postgres:postgres@localhost:5432/veza_test?sslmode=disable REDIS_URL: redis://localhost:6379 JWT_SECRET: test-jwt-secret-for-ci APP_ENV: test steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set up Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: go-version: "1.24" cache: true - name: Set up Python uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 with: python-version: "3.12" - name: Install schemathesis run: pip install schemathesis - name: Download Go deps run: cd veza-backend-api && go mod download - name: Run migrations run: cd veza-backend-api && go run cmd/migrate_tool/main.go continue-on-error: true - name: Start backend API run: | cd veza-backend-api && go run cmd/api/main.go & # Wait for API to be ready for i in $(seq 1 30); do if curl -sf http://localhost:18080/api/v1/health > /dev/null 2>&1; then echo "API is ready" break fi echo "Waiting for API... ($i/30)" sleep 2 done - name: Run schemathesis contract tests run: > st run --checks all veza-backend-api/openapi.yaml --base-url http://localhost:18080 --hypothesis-max-examples=50 --request-timeout=10000 continue-on-error: true - name: Upload schemathesis report if: always() uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: schemathesis-report path: .schemathesis/ retention-days: 14