diff --git a/.gitea/workflows/cd.yaml b/.gitea/workflows/cd.yaml index 457f3e09..a0f6bc45 100644 --- a/.gitea/workflows/cd.yaml +++ b/.gitea/workflows/cd.yaml @@ -147,6 +147,10 @@ jobs: # B5: Gitea act runner 的 services: 實作與 GitHub Actions 不同 # service container 啟動後需直連,但 act 的 container name 可能為空 # 2026-04-10 ogt: 改用 docker run 本地啟動取代 services: 宣告 + # 2026-04-19 ogt + Claude Opus 4.7: cd 連續 2 次 fail (run 984/985) + # 真因: act runner 把 ci-runner 跑在獨立 user-defined network, + # pg-test-b5 預設用 host bridge → 兩邊隔離無法連 (172.17.0.2 timeout) + # 修法: 把 pg-test-b5 加入 act task 的 network,用 container name 連線 - name: Integration Tests (B5 — 真實 DB) run: | cd apps/api @@ -154,29 +158,29 @@ jobs: if ! command -v psql &>/dev/null; then apt-get install -y -q postgresql-client fi - # 啟動測試 DB — 用 container IP 直連,避免 DinD port mapping 問題 - # 2026-04-10 Claude Sonnet 4.6: -p 15433:5432 在 act runner 內 localhost 不通 + # 找 act runner 為本 task 創的 network (Gitea act 命名: GITEA-ACTIONS-TASK-XXX_*-network) + ACT_NET=$(docker network ls --format '{{.Name}}' | grep -E '^GITEA-ACTIONS-TASK-[0-9]+_WORKFLOW-.*-network$' | head -1) + echo "Detected act task network: ${ACT_NET:-}" + # 啟動測試 DB — 加入 act network,後續用 container name 'pg-test-b5' 連線 docker rm -f pg-test-b5 2>/dev/null || true docker run -d --name pg-test-b5 \ + ${ACT_NET:+--network=$ACT_NET} \ -e POSTGRES_DB=awoooi_test \ -e POSTGRES_USER=awoooi \ -e POSTGRES_PASSWORD=awoooi_test_2026 \ pgvector/pgvector:pg16 - # 取得 container IP - PG_IP=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pg-test-b5) - echo "PG container IP: $PG_IP" - # 等待就緒(用 container IP,最多 60 秒) + # 等待就緒(用 container name,最多 60 秒) for i in $(seq 1 30); do - PGPASSWORD=awoooi_test_2026 pg_isready -h "$PG_IP" -p 5432 -U awoooi && break || sleep 2 + PGPASSWORD=awoooi_test_2026 pg_isready -h pg-test-b5 -p 5432 -U awoooi && break || sleep 2 done # 初始化 schema PGPASSWORD=awoooi_test_2026 psql \ - -h "$PG_IP" -p 5432 -U awoooi -d awoooi_test \ + -h pg-test-b5 -p 5432 -U awoooi -d awoooi_test \ -f tests/integration/setup_test_schema.sql # 跑測試 # B5 整合測試嚴格模式 (2026-04-13 ogt: 恢復 Break-Glass 移除) # -m integration: override pyproject.toml addopts "-m 'not integration'",讓標記測試可執行 - TEST_DATABASE_URL="postgresql+asyncpg://awoooi:awoooi_test_2026@${PG_IP}:5432/awoooi_test?ssl=disable" \ + TEST_DATABASE_URL="postgresql+asyncpg://awoooi:awoooi_test_2026@pg-test-b5:5432/awoooi_test?ssl=disable" \ /opt/api-venv/bin/pytest tests/integration/test_b5_core_flows.py -v --tb=short -m integration # 清理 docker rm -f pg-test-b5 || true