From b018a1241f669c0f3d686714bf43eda17bda46df Mon Sep 17 00:00:00 2001 From: Mike Wacker <11431865+mikewacker@users.noreply.github.com> Date: Thu, 16 Oct 2025 17:00:15 -0600 Subject: [PATCH] configuration cache: exposeAsEnvironment/SystemProperties() --- .../gradle/dockercompose/ComposeSettings.groovy | 12 +++++++++++- .../gradle/dockercompose/TasksConfigurator.groovy | 5 ----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/groovy/com/avast/gradle/dockercompose/ComposeSettings.groovy b/src/main/groovy/com/avast/gradle/dockercompose/ComposeSettings.groovy index ad44a6d..e26dfd8 100644 --- a/src/main/groovy/com/avast/gradle/dockercompose/ComposeSettings.groovy +++ b/src/main/groovy/com/avast/gradle/dockercompose/ComposeSettings.groovy @@ -1,10 +1,13 @@ package com.avast.gradle.dockercompose +import com.fasterxml.jackson.core.type.TypeReference +import com.fasterxml.jackson.databind.ObjectMapper import groovy.transform.CompileStatic import groovy.transform.PackageScope import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.RegularFile import org.gradle.api.file.RegularFileProperty import org.gradle.api.provider.ListProperty import org.gradle.api.provider.MapProperty @@ -89,6 +92,8 @@ abstract class ComposeSettings { abstract DirectoryProperty getDockerComposeWorkingDirectory() abstract Property getDockerComposeStopTimeout() + private final Provider servicesInfosFile + @Inject ComposeSettings(Project project, String name = '', String parentName = '') { this.nestedName = parentName + name @@ -157,6 +162,7 @@ abstract class ComposeSettings { this.dockerExecutor = project.objects.newInstance(DockerExecutor, this) this.tasksConfigurator = new TasksConfigurator(this, project, name) + servicesInfosFile = tasksConfigurator.upTask.flatMap { it.servicesInfosFile } } private static String generateSafeProjectNamePrefix(Project project) { @@ -223,7 +229,11 @@ abstract class ComposeSettings { } Map getServicesInfos() { - tasksConfigurator.getServicesInfos() + // Preserve the legacy behavior of returning an empty map if this is called before composeUp succeeds. + // composeUp.servicesInfosFile.map { ... }.get() will fail if called before composeUp completes. + // composeUp.servicesInfosFile.get() will work if called before composeUp completes. + def f = servicesInfosFile.get().asFile + f.exists() ? new ObjectMapper().readValue(f, new TypeReference>() {}) : [:] } void exposeAsEnvironment(ProcessForkOptions task) { diff --git a/src/main/groovy/com/avast/gradle/dockercompose/TasksConfigurator.groovy b/src/main/groovy/com/avast/gradle/dockercompose/TasksConfigurator.groovy index 61543b1..cb67e9d 100644 --- a/src/main/groovy/com/avast/gradle/dockercompose/TasksConfigurator.groovy +++ b/src/main/groovy/com/avast/gradle/dockercompose/TasksConfigurator.groovy @@ -158,11 +158,6 @@ class TasksConfigurator { } } - @PackageScope - Map getServicesInfos() { - upTask.get().servicesInfos - } - @PackageScope void setupMissingRequiredBy(String taskName, ComposeSettings settings) { project.tasks