From 214955399e358f236dcc9d12f8c2f6adefd3afc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=A1=D0=B0?= =?UTF-8?q?=D0=B1=D0=B8=D0=BB=D0=B8=D0=BD?= Date: Sat, 11 Jul 2026 12:41:06 +0300 Subject: [PATCH] CI: wait for Docker daemon before buildx on WSL runner. Co-authored-by: Cursor --- .gitea/workflows/ci.yml | 3 ++ .gitea/workflows/deploy-ift.yml | 3 ++ .gitea/workflows/deploy-stage.yml | 3 ++ scripts/ensure-docker-daemon.sh | 65 +++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 scripts/ensure-docker-daemon.sh diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 8a88dbe..32b9306 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -22,6 +22,9 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Wait for Docker daemon + run: bash scripts/ensure-docker-daemon.sh 240 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 diff --git a/.gitea/workflows/deploy-ift.yml b/.gitea/workflows/deploy-ift.yml index ec2f051..7eb0ce2 100644 --- a/.gitea/workflows/deploy-ift.yml +++ b/.gitea/workflows/deploy-ift.yml @@ -40,6 +40,9 @@ jobs: fi echo "tag=sha-${SHA:0:12}" >> "$GITHUB_OUTPUT" + - name: Wait for Docker daemon + run: bash scripts/ensure-docker-daemon.sh 240 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 diff --git a/.gitea/workflows/deploy-stage.yml b/.gitea/workflows/deploy-stage.yml index 167f41c..87ced93 100644 --- a/.gitea/workflows/deploy-stage.yml +++ b/.gitea/workflows/deploy-stage.yml @@ -21,6 +21,9 @@ jobs: echo "sha_tag=sha-${GITHUB_SHA::12}" >> "$GITHUB_OUTPUT" echo "release_tag=${GITHUB_REF_NAME}" >> "$GITHUB_OUTPUT" + - name: Wait for Docker daemon + run: bash scripts/ensure-docker-daemon.sh 240 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 diff --git a/scripts/ensure-docker-daemon.sh b/scripts/ensure-docker-daemon.sh new file mode 100644 index 0000000..51eb02c --- /dev/null +++ b/scripts/ensure-docker-daemon.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash +# Ensure Docker daemon is reachable on WSL host runner (Docker Desktop integration). +# Usage: ensure-docker-daemon.sh [max_wait_seconds] +set -euo pipefail + +MAX_WAIT="${1:-240}" +INTERVAL=5 +DEADLINE=$((SECONDS + MAX_WAIT)) + +docker_ok() { + timeout 8 docker info >/dev/null 2>&1 +} + +find_docker_host() { + local candidates=( + "${DOCKER_HOST:-}" + "unix:///var/run/docker.sock" + "unix:///mnt/wsl/docker-desktop/shared-sockets/guest-services/docker.sock" + "unix:///mnt/wsl/docker-desktop/shared-sockets/guest-services/docker.proxy.sock" + "unix:///mnt/wsl/docker-desktop/shared-sockets/guest-services/docker.container-proxy.sock" + ) + local host path + for host in "${candidates[@]}"; do + [[ -n "${host}" ]] || continue + path="${host#unix://}" + if [[ -S "${path}" ]] && DOCKER_HOST="${host}" docker_ok; then + export DOCKER_HOST="${host}" + echo "Docker ready (${host})" + return 0 + fi + done + if docker_ok; then + echo "Docker ready (default socket)" + return 0 + fi + return 1 +} + +start_docker_desktop() { + local exe="/mnt/c/Program Files/Docker/Docker/Docker Desktop.exe" + if [[ -f "${exe}" ]]; then + echo "Starting Docker Desktop..." + powershell.exe -NoProfile -Command "Start-Process 'C:\\Program Files\\Docker\\Docker\\Docker Desktop.exe'" >/dev/null 2>&1 || true + return 0 + fi + echo "Docker Desktop executable not found" + return 1 +} + +attempt=0 +while (( SECONDS < DEADLINE )); do + attempt=$((attempt + 1)) + if find_docker_host; then + exit 0 + fi + if (( attempt == 1 || attempt == 7 )); then + start_docker_desktop || true + fi + echo "waiting for docker (${attempt}, $((DEADLINE - SECONDS))s left)..." + sleep "${INTERVAL}" +done + +echo "Docker daemon not available after ${MAX_WAIT}s" +echo "Hint: start Docker Desktop on Windows and enable WSL integration." +exit 1