Skip to content

fix(ci): replace curl with python request for webhook test and improv… #114

fix(ci): replace curl with python request for webhook test and improv…

fix(ci): replace curl with python request for webhook test and improv… #114

Workflow file for this run

# 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

Check failure on line 319 in .github/workflows/ci.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/ci.yml

Invalid workflow file

You have an error in your yaml syntax on line 319
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;
"