name: Integration Tests run-name: "Integration Tests" on: push: branches: [ master ] pull_request: branches: [ master ] jobs: integration-tests: name: Integration Tests runs-on: ubuntu-latest services: postgres: image: postgres:16-alpine env: POSTGRES_USER: relspec POSTGRES_PASSWORD: relspec_test_password POSTGRES_DB: relspec_test options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.25' - name: Cache Go modules uses: actions/cache@v4 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Download dependencies run: go mod download - name: Initialize test database env: PGPASSWORD: relspec_test_password run: | # Services are accessible via hostname matching the service name psql -h postgres -U relspec -d relspec_test -f tests/postgres/init.sql - name: Verify database setup env: PGPASSWORD: relspec_test_password run: | echo "Verifying database initialization..." psql -h postgres -U relspec -d relspec_test -c " SELECT (SELECT COUNT(*) FROM pg_namespace WHERE nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast') AND nspname NOT LIKE 'pg_%') as schemas, (SELECT COUNT(*) FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema')) as tables, (SELECT COUNT(*) FROM pg_views WHERE schemaname NOT IN ('pg_catalog', 'information_schema')) as views, (SELECT COUNT(*) FROM pg_sequences WHERE schemaname NOT IN ('pg_catalog', 'information_schema')) as sequences; " - name: Run integration tests env: RELSPEC_TEST_PG_CONN: postgres://relspec:relspec_test_password@postgres:5432/relspec_test run: make test-integration