refactor: remove rendering from Docker (#7439)

rendering is done in the CommandsWrapper so no need to render again in the task runner
This commit is contained in:
Mathieu Gabelle
2025-02-18 11:15:14 +01:00
committed by GitHub
parent 11f3629f38
commit 5ced9b6c4f
3 changed files with 2 additions and 68 deletions

View File

@@ -131,24 +131,6 @@ public abstract class TaskRunner<T extends TaskRunnerDetailResult> implements Pl
return windowsToUnixPath(workingDir + "/" + relativePath);
}
public List<String> renderCommands(RunContext runContext, TaskCommands taskCommands) throws IllegalVariableEvaluationException, IOException {
List<String> renderedCommands = this.renderCommandsFromList(runContext, taskCommands, taskCommands.getCommands());
List<String> renderedBeforeCommands = this.renderCommandsFromList(runContext, taskCommands, taskCommands.getBeforeCommands());
List<String> renderedInterpreter = this.renderCommandsFromList(runContext, taskCommands, taskCommands.getInterpreter());
return Stream.of(renderedInterpreter, renderedBeforeCommands, renderedCommands)
.flatMap(Collection::stream).toList();
}
private List<String> renderCommandsFromList(RunContext runContext, TaskCommands taskCommands, Property<List<String>> commands) throws IllegalVariableEvaluationException, IOException {
return ScriptService.replaceInternalStorage(
runContext,
this.additionalVars(runContext, taskCommands),
commands,
this instanceof RemoteRunnerInterface
);
}
/** {@inheritDoc} **/
@Override
public void kill() {

View File

@@ -428,7 +428,7 @@ public class Docker extends TaskRunner<Docker.DockerTaskRunnerDetailResult> {
// start container
dockerClient.startContainerCmd(exec.getId()).exec();
List<String> renderedCommands = this.renderCommands(runContext, taskCommands);
List<String> renderedCommands = runContext.render(taskCommands.getCommands()).asList(String.class);
if (logger.isDebugEnabled()) {
logger.debug(
@@ -780,7 +780,7 @@ public class Docker extends TaskRunner<Docker.DockerTaskRunnerDetailResult> {
return container
.withHostConfig(hostConfig)
.withCmd(this.renderCommands(runContext, taskCommands))
.withCmd(runContext.render(taskCommands.getCommands()).asList(String.class))
.withAttachStderr(true)
.withAttachStdout(true);
}

View File

@@ -124,52 +124,4 @@ class LogConsumerTest {
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.TRACE)).filter(m -> m.getMessage().contains("Trace 2")).count(), is(1L));
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.TRACE)).count(), greaterThanOrEqualTo(5L));
}
@Test
void logs_dynamicProperties() throws Exception {
List<LogEntry> logs = new ArrayList<>();
Flux<LogEntry> receive = TestsUtils.receive(logQueue, l -> logs.add(l.getLeft()));
RunContext runContext = TestsUtils.mockRunContext(runContextFactory, TASK, Map.of(
"text", "World",
"error", "Error",
"trace", "Trace 2",
"interpreter", "sh"
));
TaskCommands taskCommands = new CommandsWrapper(runContext)
.withInterpreter(propertyFromList(List.of("/bin/{{ inputs.interpreter }}", "-c")))
.withCommands(propertyFromList(List.of(
"""
echo '::{"logs": [{"level":"INFO","message":"Hello World"}]}::'
echo '::{"logs": [{"level":"ERROR","message":"Hello {{ inputs.error }}"}]}::'
echo '::{"logs": [{"level":"TRACE","message":"Hello Trace workdir:{{workingDir}}"}, {"level":"TRACE","message":"Hello {{ inputs.trace }}"}]}::'
""")
)
);
Docker.from(DockerOptions.builder().image("alpine").build()).run(
runContext,
taskCommands,
Collections.emptyList()
);
receive.blockLast();
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.INFO)).count(), is(1L));
String beforeLogMessage = logs.stream().filter(m -> m.getLevel().equals(Level.INFO)).findFirst().orElseThrow().getMessage();
assertThat(beforeLogMessage, is("Hello World"));
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.ERROR)).count(), is(1L));
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.TRACE)).filter(m -> m.getMessage().contains("Trace 2")).count(), is(1L));
Optional<String> logWithWorkingDir = logs.stream().filter(m -> m.getLevel().equals(Level.TRACE))
.map(LogEntry::getMessage)
.filter(message -> message.contains("Hello Trace workdir")).findFirst();
assertThat(logWithWorkingDir.isPresent(), is(true));
String workingDir = logWithWorkingDir.get().split(":")[1];
assertThat(workingDir, containsString("/tmp/"));
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.TRACE)).count(), greaterThanOrEqualTo(5L));
}
}