name: Test on: push: branches: [main, develop] pull_request: branches: [main, develop] jobs: unit-tests: name: Unit Tests runs-on: ubuntu-latest services: postgres: image: postgres:15 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: testdb options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 redis: image: redis:7-alpine ports: - 6379:6379 options: --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5 steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version: "1.25" cache: true - name: Install dependencies run: go mod download - name: Run tests with coverage run: | go test -v -race -coverprofile=coverage.out -covermode=atomic ./... go tool cover -html=coverage.out -o coverage.html - name: Upload coverage reports uses: actions/upload-artifact@v4 with: name: coverage-reports path: | coverage.out coverage.html retention-days: 30 integration-tests: name: Integration Tests runs-on: ubuntu-latest services: postgres: image: postgres:15 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: testdb options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 redis: image: redis:7-alpine ports: - 6379:6379 steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version: "1.25" cache: true - name: Install dependencies run: go mod download - name: Run integration tests run: make test-integration || echo "No integration tests target" env: DATABASE_URL: postgres://postgres:postgres@localhost:5432/testdb REDIS_URL: redis://localhost:6379