From fe0aba79f4ee4c2e974a34b52f58234c462af0be Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Mon, 1 Dec 2025 20:20:06 -0800 Subject: [PATCH] test: add regression tests for building docker containers (#25210) --- dockerhub/distroless/Dockerfile | 1 + scripts/runner.node.mjs | 5 ++--- .../test/parallel/test-docker-build-alpine.ts | 17 +++++++++++++++++ .../parallel/test-docker-build-debian-slim.ts | 17 +++++++++++++++++ .../test/parallel/test-docker-build-debian.ts | 17 +++++++++++++++++ .../parallel/test-docker-build-distroless.ts | 17 +++++++++++++++++ 6 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 test/js/bun/test/parallel/test-docker-build-alpine.ts create mode 100644 test/js/bun/test/parallel/test-docker-build-debian-slim.ts create mode 100644 test/js/bun/test/parallel/test-docker-build-debian.ts create mode 100644 test/js/bun/test/parallel/test-docker-build-distroless.ts diff --git a/dockerhub/distroless/Dockerfile b/dockerhub/distroless/Dockerfile index cb5f9a7292..8d4e98d787 100644 --- a/dockerhub/distroless/Dockerfile +++ b/dockerhub/distroless/Dockerfile @@ -71,6 +71,7 @@ ENV PATH "${PATH}:/usr/local/bun-node-fallback-bin" # Temporarily use the `build`-stage image binaries to create a symlink: RUN --mount=type=bind,from=build,source=/usr/bin,target=/usr/bin \ + --mount=type=bind,from=build,source=/etc/alternatives/which,target=/etc/alternatives/which \ --mount=type=bind,from=build,source=/bin,target=/bin \ --mount=type=bind,from=build,source=/usr/lib,target=/usr/lib \ --mount=type=bind,from=build,source=/lib,target=/lib \ diff --git a/scripts/runner.node.mjs b/scripts/runner.node.mjs index bb8d98754a..451610a630 100755 --- a/scripts/runner.node.mjs +++ b/scripts/runner.node.mjs @@ -77,9 +77,8 @@ const testTimeout = 3 * 60_000; const integrationTimeout = 5 * 60_000; function getNodeParallelTestTimeout(testPath) { - if (testPath.includes("test-dns")) { - return 90_000; - } + if (testPath.includes("test-dns")) return 60_000; + if (testPath.includes("-docker-")) return 60_000; if (!isCI) return 60_000; // everything slower in debug mode if (options["step"]?.includes("-asan-")) return 60_000; return 20_000; diff --git a/test/js/bun/test/parallel/test-docker-build-alpine.ts b/test/js/bun/test/parallel/test-docker-build-alpine.ts new file mode 100644 index 0000000000..06a0a5dde9 --- /dev/null +++ b/test/js/bun/test/parallel/test-docker-build-alpine.ts @@ -0,0 +1,17 @@ +import { expect } from "bun:test"; +import { bunEnv, dockerExe, isDockerEnabled } from "harness"; +import { resolve } from "path"; + +if (isDockerEnabled()) { + const docker = dockerExe()!; + const cwd = resolve(import.meta.dir, "..", "..", "..", "..", "..", "dockerhub", "alpine"); + const proc = Bun.spawn({ + cmd: [docker, "build", "--progress=plain", "--no-cache", "--rm", "."], + stdio: ["ignore", "inherit", "inherit"], + cwd, + env: bunEnv, + }); + await proc.exited; + expect(proc.signalCode).toBeNull(); + expect(proc.exitCode).toBe(0); +} diff --git a/test/js/bun/test/parallel/test-docker-build-debian-slim.ts b/test/js/bun/test/parallel/test-docker-build-debian-slim.ts new file mode 100644 index 0000000000..d008150c7f --- /dev/null +++ b/test/js/bun/test/parallel/test-docker-build-debian-slim.ts @@ -0,0 +1,17 @@ +import { expect } from "bun:test"; +import { bunEnv, dockerExe, isDockerEnabled } from "harness"; +import { resolve } from "path"; + +if (isDockerEnabled()) { + const docker = dockerExe()!; + const cwd = resolve(import.meta.dir, "..", "..", "..", "..", "..", "dockerhub", "debian-slim"); + const proc = Bun.spawn({ + cmd: [docker, "build", "--progress=plain", "--no-cache", "--rm", "."], + stdio: ["ignore", "inherit", "inherit"], + cwd, + env: bunEnv, + }); + await proc.exited; + expect(proc.signalCode).toBeNull(); + expect(proc.exitCode).toBe(0); +} diff --git a/test/js/bun/test/parallel/test-docker-build-debian.ts b/test/js/bun/test/parallel/test-docker-build-debian.ts new file mode 100644 index 0000000000..3e5e64aed4 --- /dev/null +++ b/test/js/bun/test/parallel/test-docker-build-debian.ts @@ -0,0 +1,17 @@ +import { expect } from "bun:test"; +import { bunEnv, dockerExe, isDockerEnabled } from "harness"; +import { resolve } from "path"; + +if (isDockerEnabled()) { + const docker = dockerExe()!; + const cwd = resolve(import.meta.dir, "..", "..", "..", "..", "..", "dockerhub", "debian"); + const proc = Bun.spawn({ + cmd: [docker, "build", "--progress=plain", "--no-cache", "--rm", "."], + stdio: ["ignore", "inherit", "inherit"], + cwd, + env: bunEnv, + }); + await proc.exited; + expect(proc.signalCode).toBeNull(); + expect(proc.exitCode).toBe(0); +} diff --git a/test/js/bun/test/parallel/test-docker-build-distroless.ts b/test/js/bun/test/parallel/test-docker-build-distroless.ts new file mode 100644 index 0000000000..53f5b86b3b --- /dev/null +++ b/test/js/bun/test/parallel/test-docker-build-distroless.ts @@ -0,0 +1,17 @@ +import { expect } from "bun:test"; +import { bunEnv, dockerExe, isDockerEnabled } from "harness"; +import { resolve } from "path"; + +if (isDockerEnabled()) { + const docker = dockerExe()!; + const cwd = resolve(import.meta.dir, "..", "..", "..", "..", "..", "dockerhub", "distroless"); + const proc = Bun.spawn({ + cmd: [docker, "build", "--progress=plain", "--no-cache", "--rm", "."], + stdio: ["ignore", "inherit", "inherit"], + cwd, + env: bunEnv, + }); + await proc.exited; + expect(proc.signalCode).toBeNull(); + expect(proc.exitCode).toBe(0); +}