diff --git a/gradle/docker.gradle b/gradle/docker.gradle index ee677569b83..7871e118ce8 100644 --- a/gradle/docker.gradle +++ b/gradle/docker.gradle @@ -2,6 +2,22 @@ ext { dockerPath = buildDir.absolutePath + "/docker" } +// `--cache-from type=registry,...` is BuildKit syntax. The legacy builder parses it as an +// image reference and fails the build, so the flag may only be passed when buildx is installed. +def buildxProbeResult = null +def buildxAvailable = { + if (buildxProbeResult == null) { + try { + def proc = ["docker", "buildx", "version"].execute() + proc.consumeProcessOutput(new StringBuilder(), new StringBuilder()) + buildxProbeResult = proc.waitFor() == 0 + } catch (Exception ignored) { + buildxProbeResult = false + } + } + return buildxProbeResult +} + tasks.register('dockerPrepare') { doLast { delete(dockerPath) @@ -23,10 +39,19 @@ tasks.register('dockerPrepare') { tasks.register('docker', Exec) { dependsOn("dockerPrepare") workingDir dockerPath - commandLine "docker", "build", ".", - "-t", "tolgee/tolgee", - "--build-arg", "OTEL_AGENT_VERSION=${opentelemetryJavaagentVersion}", - "--cache-from", "type=registry,ref=tolgee/tolgee:latest" + doFirst { + def params = ["docker", "build", ".", + "-t", "tolgee/tolgee", + "--build-arg", "OTEL_AGENT_VERSION=${opentelemetryJavaagentVersion}"] + + if (buildxAvailable()) { + params += ["--cache-from", "type=registry,ref=tolgee/tolgee:latest"] + } else { + logger.lifecycle("docker buildx not found, building without the registry cache") + } + + commandLine params + } } // Builds the slim Docker image, tagged as tolgee/tolgee:slim.