diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 2cabe00..a34ea1c 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -11,9 +11,20 @@ jobs: rust: name: Rust Checks runs-on: ubuntu-latest + services: + postgres: + image: postgres:16-alpine + env: + POSTGRES_DB: crank_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + options: >- + --health-cmd "pg_isready -U postgres -d crank_test" + --health-interval 10s + --health-timeout 5s + --health-retries 5 env: - TEST_DATABASE_URL: postgres://postgres:postgres@127.0.0.1:55432/crank_test - CRANK_CI_POSTGRES: crank-ci-postgres + TEST_DATABASE_URL: postgres://postgres:postgres@postgres:5432/crank_test steps: - name: Checkout @@ -27,20 +38,6 @@ jobs: cargo clippy --version docker --version - - name: Start test Postgres - run: | - docker rm -f "$CRANK_CI_POSTGRES" >/dev/null 2>&1 || true - docker run -d --rm \ - --name "$CRANK_CI_POSTGRES" \ - -e POSTGRES_DB=crank_test \ - -e POSTGRES_USER=postgres \ - -e POSTGRES_PASSWORD=postgres \ - -p 127.0.0.1:55432:5432 \ - postgres:16-alpine >/dev/null - until docker exec "$CRANK_CI_POSTGRES" pg_isready -U postgres -d crank_test >/dev/null 2>&1; do - sleep 1 - done - - name: Check formatting run: cargo fmt --all --check @@ -53,10 +50,6 @@ jobs: - name: Run tests run: cargo test --workspace --all-targets - - name: Stop test Postgres - if: always() - run: docker rm -f "$CRANK_CI_POSTGRES" >/dev/null 2>&1 || true - ui: name: UI Checks runs-on: ubuntu-latest @@ -85,6 +78,25 @@ jobs: frontend-e2e: name: Frontend E2E runs-on: ubuntu-latest + services: + postgres: + image: postgres:16-alpine + env: + POSTGRES_DB: crank + POSTGRES_USER: crank + POSTGRES_PASSWORD: crank + options: >- + --health-cmd "pg_isready -U crank -d crank" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + env: + CRANK_E2E_USE_EXTERNAL_POSTGRES: "1" + CRANK_E2E_POSTGRES_HOST: postgres + CRANK_E2E_POSTGRES_PORT: "5432" + CRANK_E2E_POSTGRES_DB: crank + CRANK_E2E_POSTGRES_USER: crank + CRANK_E2E_POSTGRES_PASSWORD: crank steps: - name: Checkout diff --git a/apps/ui/scripts/playwright-stack.sh b/apps/ui/scripts/playwright-stack.sh index d6e7b59..e088a53 100644 --- a/apps/ui/scripts/playwright-stack.sh +++ b/apps/ui/scripts/playwright-stack.sh @@ -14,6 +14,8 @@ GRPC_FIXTURE_BIND="${CRANK_E2E_GRPC_FIXTURE_BIND:-127.0.0.1:3311}" POSTGRES_DB="${CRANK_E2E_POSTGRES_DB:-crank}" POSTGRES_USER="${CRANK_E2E_POSTGRES_USER:-crank}" POSTGRES_PASSWORD="${CRANK_E2E_POSTGRES_PASSWORD:-crank}" +POSTGRES_HOST="${CRANK_E2E_POSTGRES_HOST:-127.0.0.1}" +USE_EXTERNAL_POSTGRES="${CRANK_E2E_USE_EXTERNAL_POSTGRES:-0}" ADMIN_EMAIL="${CRANK_E2E_ADMIN_EMAIL:-owner@crank.local}" ADMIN_PASSWORD="${CRANK_E2E_ADMIN_PASSWORD:-change-me-admin-password}" @@ -58,7 +60,9 @@ cleanup() { kill "$(cat "$TMP_DIR/ui-server.pid")" >/dev/null 2>&1 || true rm -f "$TMP_DIR/ui-server.pid" fi - docker rm -f "$POSTGRES_CONTAINER" >/dev/null 2>&1 || true + if [[ "$USE_EXTERNAL_POSTGRES" != "1" ]]; then + docker rm -f "$POSTGRES_CONTAINER" >/dev/null 2>&1 || true + fi kill_port_processes "$UI_PORT" kill_port_processes "$ADMIN_PORT" kill_port_processes "$MCP_PORT" @@ -87,19 +91,23 @@ PY done } -docker run -d --rm \ - --name "$POSTGRES_CONTAINER" \ - -e POSTGRES_DB="$POSTGRES_DB" \ - -e POSTGRES_USER="$POSTGRES_USER" \ - -e POSTGRES_PASSWORD="$POSTGRES_PASSWORD" \ - -p "$POSTGRES_PORT:5432" \ - postgres:16-alpine >/dev/null +if [[ "$USE_EXTERNAL_POSTGRES" = "1" ]]; then + wait_for_port "$POSTGRES_HOST" "$POSTGRES_PORT" +else + docker run -d --rm \ + --name "$POSTGRES_CONTAINER" \ + -e POSTGRES_DB="$POSTGRES_DB" \ + -e POSTGRES_USER="$POSTGRES_USER" \ + -e POSTGRES_PASSWORD="$POSTGRES_PASSWORD" \ + -p "$POSTGRES_PORT:5432" \ + postgres:16-alpine >/dev/null -until docker exec "$POSTGRES_CONTAINER" pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB" >/dev/null 2>&1; do - sleep 1 -done + until docker exec "$POSTGRES_CONTAINER" pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB" >/dev/null 2>&1; do + sleep 1 + done +fi -export POSTGRES_HOST="127.0.0.1" +export POSTGRES_HOST export POSTGRES_PORT="$POSTGRES_PORT" export POSTGRES_DB="$POSTGRES_DB" export POSTGRES_USER="$POSTGRES_USER"