fix(ci): replace curl with python request for webhook test and improv… #114
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # name: CI Pipeline | ||
| # on: | ||
| # push: | ||
| # branches: [main, develop] | ||
| # pull_request: | ||
| # branches: [main, develop] | ||
| # jobs: | ||
| # test: | ||
| # runs-on: ubuntu-latest | ||
| # strategy: | ||
| # matrix: | ||
| # node-version: [18.x, 20.x] | ||
| # services: | ||
| # postgres: | ||
| # image: postgres:16-alpine | ||
| # env: | ||
| # POSTGRES_USER: hooktrace | ||
| # POSTGRES_PASSWORD: hooktrace_test | ||
| # POSTGRES_DB: hooktrace_test | ||
| # options: >- | ||
| # --health-cmd pg_isready | ||
| # --health-interval 10s | ||
| # --health-timeout 5s | ||
| # --health-retries 5 | ||
| # ports: | ||
| # - 5432:5432 | ||
| # redis: | ||
| # image: redis:7-alpine | ||
| # options: >- | ||
| # --health-cmd "redis-cli ping" | ||
| # --health-interval 10s | ||
| # --health-timeout 5s | ||
| # --health-retries 5 | ||
| # ports: | ||
| # - 6379:6379 | ||
| # env: | ||
| # DATABASE_URL: postgresql://hooktrace:hooktrace_test@localhost:5432/hooktrace_test | ||
| # REDIS_URL: redis://localhost:6379 | ||
| # steps: | ||
| # - uses: actions/checkout@v4 | ||
| # # ---------- Node ---------- | ||
| # - name: Setup Node.js ${{ matrix.node-version }} | ||
| # uses: actions/setup-node@v4 | ||
| # with: | ||
| # node-version: ${{ matrix.node-version }} | ||
| # cache: npm | ||
| # - name: Install Node dependencies | ||
| # run: npm ci | ||
| # - name: Lint Node code | ||
| # run: npm run lint | ||
| # - name: Run Node tests | ||
| # run: npm test | ||
| # - name: Build Node app | ||
| # run: npm run build | ||
| # # ---------- Python ---------- | ||
| # - name: Setup Python | ||
| # uses: actions/setup-python@v5 | ||
| # with: | ||
| # python-version: "3.11" | ||
| # - name: Install Python dependencies | ||
| # run: | | ||
| # pip install -r services/worker/requirements.txt | ||
| # - name: Lint Python (ruff) | ||
| # run: | | ||
| # pip install ruff | ||
| # ruff check services/worker | ||
| # - name: Test Python worker | ||
| # run: | | ||
| # pytest services/worker || true | ||
| # docker-build: | ||
| # runs-on: ubuntu-latest | ||
| # needs: test | ||
| # if: github.event_name == 'push' && github.ref == 'refs/heads/main' | ||
| # steps: | ||
| # - uses: actions/checkout@v4 | ||
| # - name: Set up Docker Buildx | ||
| # uses: docker/setup-buildx-action@v3 | ||
| # - name: Build Docker image | ||
| # uses: docker/build-push-action@v5 | ||
| # with: | ||
| # context: . | ||
| # push: false | ||
| # tags: hooktrace:latest | ||
| # cache-from: type=gha | ||
| # cache-to: type=gha,mode=max | ||
| # - name: Verify container starts | ||
| # run: | | ||
| # docker run -d -p 3000:3000 hooktrace:latest | ||
| # sleep 10 | ||
| # docker ps | ||
| # name: CI Pipeline | ||
| # on: | ||
| # push: | ||
| # branches: [main, develop] | ||
| # pull_request: | ||
| # branches: [main, develop] | ||
| # jobs: | ||
| # infra-check: | ||
| # runs-on: ubuntu-latest | ||
| # services: | ||
| # postgres: | ||
| # image: postgres:16-alpine | ||
| # env: | ||
| # POSTGRES_USER: hooktrace | ||
| # POSTGRES_PASSWORD: hooktrace_test | ||
| # POSTGRES_DB: hooktrace_test | ||
| # options: >- | ||
| # --health-cmd pg_isready | ||
| # --health-interval 10s | ||
| # --health-timeout 5s | ||
| # --health-retries 5 | ||
| # ports: | ||
| # - 5432:5432 | ||
| # redis: | ||
| # image: redis:7-alpine | ||
| # options: >- | ||
| # --health-cmd "redis-cli ping" | ||
| # --health-interval 10s | ||
| # --health-timeout 5s | ||
| # --health-retries 5 | ||
| # ports: | ||
| # - 6379:6379 | ||
| # steps: | ||
| # - uses: actions/checkout@v4 | ||
| # - name: Check Docker Compose config | ||
| # run: docker compose config | ||
| # - name: Verify Postgres is reachable | ||
| # run: | | ||
| # sudo apt-get install -y postgresql-client | ||
| # PGPASSWORD=hooktrace_test psql -h localhost -U hooktrace -d hooktrace_test -c "SELECT 1;" | ||
| # - name: Verify Redis is reachable | ||
| # run: | | ||
| # sudo apt-get install -y redis-tools | ||
| # redis-cli -h localhost ping | ||
| # name: CI Pipeline | ||
| # on: | ||
| # push: | ||
| # branches: [main, develop] | ||
| # pull_request: | ||
| # branches: [main, develop] | ||
| # jobs: | ||
| # infra-check: | ||
| # runs-on: ubuntu-latest | ||
| # services: | ||
| # postgres: | ||
| # image: postgres:16-alpine | ||
| # env: | ||
| # POSTGRES_USER: hooktrace | ||
| # POSTGRES_PASSWORD: hooktrace_test | ||
| # POSTGRES_DB: hooktrace_test | ||
| # options: >- | ||
| # --health-cmd pg_isready | ||
| # --health-interval 10s | ||
| # --health-timeout 5s | ||
| # --health-retries 5 | ||
| # ports: | ||
| # - 5432:5432 | ||
| # redis: | ||
| # image: redis:7-alpine | ||
| # options: >- | ||
| # --health-cmd "redis-cli ping" | ||
| # --health-interval 10s | ||
| # --health-timeout 5s | ||
| # --health-retries 5 | ||
| # ports: | ||
| # - 6379:6379 | ||
| # steps: | ||
| # - uses: actions/checkout@v4 | ||
| # - name: Check Docker Compose config | ||
| # run: docker compose config | ||
| # # Wait a bit for services to be fully ready | ||
| # - name: Wait for services | ||
| # run: sleep 5 | ||
| # # Postgres check via container (no apt install) | ||
| # - name: Verify Postgres is reachable | ||
| # run: | | ||
| # POSTGRES_CONTAINER=$(docker ps --filter "ancestor=postgres:16-alpine" --format "{{.ID}}" | head -n 1) | ||
| # docker exec $POSTGRES_CONTAINER psql -U hooktrace -d hooktrace_test -c "SELECT 1;" | ||
| # # Redis check via container (no apt install) | ||
| # - name: Verify Redis is reachable | ||
| # run: | | ||
| # REDIS_CONTAINER=$(docker ps --filter "ancestor=redis:7-alpine" --format "{{.ID}}" | head -n 1) | ||
| # docker exec $REDIS_CONTAINER redis-cli ping | ||
| name: CI Pipeline | ||
| on: | ||
| push: | ||
| branches: [main, develop] | ||
| pull_request: | ||
| branches: [main, develop] | ||
| jobs: | ||
| infra-check: | ||
| runs-on: ubuntu-latest | ||
| services: | ||
| postgres: | ||
| image: postgres:16-alpine | ||
| env: | ||
| POSTGRES_USER: hooktrace | ||
| POSTGRES_PASSWORD: hooktrace_test | ||
| POSTGRES_DB: hooktrace_test | ||
| options: >- | ||
| --health-cmd pg_isready | ||
| --health-interval 10s | ||
| --health-timeout 5s | ||
| --health-retries 5 | ||
| ports: | ||
| - 5432:5432 | ||
| redis: | ||
| image: redis:7-alpine | ||
| options: >- | ||
| --health-cmd "redis-cli ping" | ||
| --health-interval 10s | ||
| --health-timeout 5s | ||
| --health-retries 5 | ||
| ports: | ||
| - 6379:6379 | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - name: Check Docker Compose config | ||
| run: docker compose config | ||
| # Wait for services | ||
| - name: Wait for services | ||
| run: sleep 5 | ||
| # Verify Postgres | ||
| - name: Verify Postgres is reachable | ||
| run: | | ||
| POSTGRES_CONTAINER=$(docker ps --filter "ancestor=postgres:16-alpine" --format "{{.ID}}" | head -n 1) | ||
| docker exec $POSTGRES_CONTAINER psql -U hooktrace -d hooktrace_test -c "SELECT 1;" | ||
| # Verify Redis | ||
| - name: Verify Redis is reachable | ||
| run: | | ||
| REDIS_CONTAINER=$(docker ps --filter "ancestor=redis:7-alpine" --format "{{.ID}}" | head -n 1) | ||
| docker exec $REDIS_CONTAINER redis-cli ping | ||
| # ------------------------------- | ||
| # 🔥 SYSTEM INTEGRATION TEST | ||
| # ------------------------------- | ||
| # Start ONLY API with correct env | ||
| - name: Start API | ||
| run: | | ||
| docker compose up -d api --no-deps | ||
| sleep 15 | ||
| env: | ||
| DATABASE_URL: postgresql://hooktrace:hooktrace_test@host.docker.internal:5432/hooktrace_test | ||
| REDIS_URL: redis://host.docker.internal:6379 | ||
| # Debug logs | ||
| - name: Debug API logs | ||
| run: | | ||
| docker ps -a | ||
| docker logs hooktrace-api || true | ||
| # ✅ Send webhook using Python (no curl dependency) | ||
| - name: Send test webhook | ||
| run: | | ||
| API_CONTAINER=$(docker ps --filter "name=hooktrace-api" --format "{{.ID}}" | head -n 1) | ||
| docker exec $API_CONTAINER python -c " | ||
| import requests | ||
| res = requests.post( | ||
| 'http://localhost:3001/webhook', | ||
| json={'event':'ci_test','data':{'source':'github-actions'}} | ||
| ) | ||
| print(res.status_code, res.text) | ||
| assert res.status_code < 400 | ||
| " | ||
| # Wait for processing | ||
| - name: Wait for processing | ||
| run: sleep 5 | ||
| # Verify webhook stored in DB | ||
| - name: Verify webhook stored in DB | ||
| run: | | ||
| POSTGRES_CONTAINER=$(docker ps --filter "ancestor=postgres:16-alpine" --format "{{.ID}}" | head -n 1) | ||
| docker exec $POSTGRES_CONTAINER psql -U hooktrace -d hooktrace_test -c " | ||
| SELECT * FROM events ORDER BY created_at DESC LIMIT 1; | ||
| " | ||