Skip to content

Commit 129275f

Browse files
committed
fix: safer JSON parsing for cache key
1 parent c01c75c commit 129275f

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

src/main/groovy/com/avast/gradle/dockercompose/tasks/ComposeUp.groovy

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.avast.gradle.dockercompose.DockerExecutor
66
import com.avast.gradle.dockercompose.ServiceHost
77
import com.avast.gradle.dockercompose.ServiceInfo
88
import com.avast.gradle.dockercompose.ServiceInfoCache
9+
import groovy.json.JsonSlurper
910
import org.gradle.api.DefaultTask
1011
import org.gradle.api.file.DirectoryProperty
1112
import org.gradle.api.file.RegularFileProperty
@@ -14,7 +15,6 @@ import org.gradle.api.provider.MapProperty
1415
import org.gradle.api.provider.Property
1516
import org.gradle.api.tasks.Internal
1617
import org.gradle.api.tasks.TaskAction
17-
import org.yaml.snakeyaml.Yaml
1818

1919
import java.time.Duration
2020
import java.time.Instant
@@ -212,13 +212,19 @@ abstract class ComposeUp extends DefaultTask {
212212
@Internal
213213
protected def getStateForCache() {
214214
String processesAsString = composeExecutor.get().execute('ps', '--format', 'json')
215-
// Status field contains something like "Up 8 seconds", so we have to strip the duration.
216-
Object[] processes = new Yaml().load(processesAsString)
217-
List<Object> transformed = processes.collect {
218-
if (it.Status.startsWith('Up ')) it.Status = 'Up'
219-
it
215+
String processesState = processesAsString
216+
try {
217+
// Status field contains something like "Up 8 seconds", so we have to strip the duration.
218+
Object[] processes = new JsonSlurper().parseText(processesAsString)
219+
List<Object> transformed = processes.collect {
220+
if (it.Status.startsWith('Up ')) it.Status = 'Up'
221+
it
222+
}
223+
processesState = transformed.join('\t')
224+
} catch (Exception e) {
225+
logger.warn("Cannot process JSON returned from 'docker compose ps --format json'", e)
220226
}
221-
transformed.join('\t') + composeExecutor.get().execute('config') + startedServices.get().join(',')
227+
processesState + composeExecutor.get().execute('config') + startedServices.get().join(',')
222228
}
223229

224230
protected Iterable<ServiceInfo> loadServicesInfo(Iterable<String> servicesNames) {

0 commit comments

Comments
 (0)