diff --git a/scripts/src/hwlab-node/web-probe.ts b/scripts/src/hwlab-node/web-probe.ts index cac71219..9edc6cac 100644 --- a/scripts/src/hwlab-node/web-probe.ts +++ b/scripts/src/hwlab-node/web-probe.ts @@ -972,6 +972,31 @@ export function ensureNodeBaseImage(spec: HwlabRuntimeLaneSpec, dryRun: boolean, "build_http_proxy=$(resolve_host_proxy_url \"$build_http_proxy\")", "build_https_proxy=$(resolve_host_proxy_url \"$build_https_proxy\")", "build_all_proxy=$(resolve_host_proxy_url \"$build_all_proxy\")", + "build_container_proxy_url() {", + " raw_url=\"$1\"", + " if [ -z \"$raw_url\" ]; then printf '\\n'; return 0; fi", + " python3 - \"$raw_url\" <<'PY'", + "from urllib.parse import urlparse, urlunparse", + "import sys", + "url = sys.argv[1]", + "parsed = urlparse(url)", + "host = parsed.hostname or ''", + "if host in {'127.0.0.1', 'localhost'}:", + " netloc = 'host.docker.internal'", + " if parsed.port is not None:", + " netloc = f'{netloc}:{parsed.port}'", + " print(urlunparse(parsed._replace(netloc=netloc)))", + "else:", + " print(url)", + "PY", + "}", + "build_container_http_proxy=$(build_container_proxy_url \"$build_http_proxy\")", + "build_container_https_proxy=$(build_container_proxy_url \"$build_https_proxy\")", + "build_container_all_proxy=$(build_container_proxy_url \"$build_all_proxy\")", + "docker_build_add_host_args=\"\"", + "case \"$build_container_http_proxy $build_container_https_proxy $build_container_all_proxy\" in", + " *host.docker.internal*) docker_build_add_host_args=\"--add-host host.docker.internal:host-gateway\" ;;", + "esac", "failed=false", "ensure_image() {", " id=\"$1\"; target=\"$2\"; source=\"$3\"; mode=\"$4\"; source_repo=\"$5\"; source_ref=\"$6\"; builder_image=\"$7\"; go_proxy=\"$8\"; docker_network_mode=\"$9\"", @@ -1000,7 +1025,19 @@ export function ensureNodeBaseImage(spec: HwlabRuntimeLaneSpec, dryRun: boolean, "ARG MOONBRIDGE_REPO", "ARG MOONBRIDGE_REF", "ARG GOPROXY_VALUE", + "ARG HTTP_PROXY", + "ARG HTTPS_PROXY", + "ARG ALL_PROXY", + "ARG NO_PROXY", "ENV GOPROXY=${GOPROXY_VALUE}", + "ENV HTTP_PROXY=${HTTP_PROXY}", + "ENV HTTPS_PROXY=${HTTPS_PROXY}", + "ENV ALL_PROXY=${ALL_PROXY}", + "ENV NO_PROXY=${NO_PROXY}", + "ENV http_proxy=${HTTP_PROXY}", + "ENV https_proxy=${HTTPS_PROXY}", + "ENV all_proxy=${ALL_PROXY}", + "ENV no_proxy=${NO_PROXY}", "WORKDIR /src", "RUN git clone --filter=blob:none \"${MOONBRIDGE_REPO}\" moon-bridge", "WORKDIR /src/moon-bridge", @@ -1015,7 +1052,7 @@ export function ensureNodeBaseImage(spec: HwlabRuntimeLaneSpec, dryRun: boolean, "USER 65532:65532", "ENTRYPOINT [\"/app/moonbridge\"]", "DOCKERFILE", - " if env HTTP_PROXY=\"$build_http_proxy\" HTTPS_PROXY=\"$build_https_proxy\" ALL_PROXY=\"$build_all_proxy\" NO_PROXY=\"$build_no_proxy\" http_proxy=\"$build_http_proxy\" https_proxy=\"$build_https_proxy\" all_proxy=\"$build_all_proxy\" no_proxy=\"$build_no_proxy\" docker build --network \"$docker_network_mode\" --build-arg BUILDER_IMAGE=\"$builder_image\" --build-arg MOONBRIDGE_REPO=\"$source_repo\" --build-arg MOONBRIDGE_REF=\"$source_ref\" --build-arg GOPROXY_VALUE=\"$go_proxy\" --build-arg HTTP_PROXY=\"$build_http_proxy\" --build-arg HTTPS_PROXY=\"$build_https_proxy\" --build-arg ALL_PROXY=\"$build_all_proxy\" --build-arg NO_PROXY=\"$build_no_proxy\" -t \"$target\" -f \"$dockerfile\" \"$tmpdir\" >/tmp/hwlab-node-runtime-image-$id-build.out 2>&1; then", + " if env HTTP_PROXY=\"$build_http_proxy\" HTTPS_PROXY=\"$build_https_proxy\" ALL_PROXY=\"$build_all_proxy\" NO_PROXY=\"$build_no_proxy\" http_proxy=\"$build_http_proxy\" https_proxy=\"$build_https_proxy\" all_proxy=\"$build_all_proxy\" no_proxy=\"$build_no_proxy\" docker build $docker_build_add_host_args --network \"$docker_network_mode\" --build-arg BUILDER_IMAGE=\"$builder_image\" --build-arg MOONBRIDGE_REPO=\"$source_repo\" --build-arg MOONBRIDGE_REF=\"$source_ref\" --build-arg GOPROXY_VALUE=\"$go_proxy\" --build-arg HTTP_PROXY=\"$build_container_http_proxy\" --build-arg HTTPS_PROXY=\"$build_container_https_proxy\" --build-arg ALL_PROXY=\"$build_container_all_proxy\" --build-arg NO_PROXY=\"$build_no_proxy\" --build-arg http_proxy=\"$build_container_http_proxy\" --build-arg https_proxy=\"$build_container_https_proxy\" --build-arg all_proxy=\"$build_container_all_proxy\" --build-arg no_proxy=\"$build_no_proxy\" -t \"$target\" -f \"$dockerfile\" \"$tmpdir\" >/tmp/hwlab-node-runtime-image-$id-build.out 2>&1; then", " docker push \"$target\" >/tmp/hwlab-node-runtime-image-$id-push.out 2>&1 || { cat /tmp/hwlab-node-runtime-image-$id-push.out >&2 2>/dev/null || true; failed=true; }", " else", " cat /tmp/hwlab-node-runtime-image-$id-build.out >&2 2>/dev/null || true",