|
|
package org.implab.gradle.containers.tasks;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import org.gradle.api.Action;
|
|
|
import org.gradle.api.provider.ListProperty;
|
|
|
import org.gradle.api.provider.Property;
|
|
|
import org.gradle.api.tasks.Input;
|
|
|
import org.gradle.api.tasks.Optional;
|
|
|
import org.gradle.api.tasks.TaskAction;
|
|
|
import org.implab.gradle.containers.dsl.OptionsMixin;
|
|
|
import org.implab.gradle.containers.dsl.VolumeSpec;
|
|
|
|
|
|
public abstract class RunImage extends DockerCliTask implements OptionsMixin {
|
|
|
|
|
|
@Input
|
|
|
public abstract Property<String> getImageName();
|
|
|
|
|
|
@Input
|
|
|
@Optional
|
|
|
public abstract ListProperty<String> getCommandLine();
|
|
|
|
|
|
|
|
|
public void volume(Action<VolumeSpec> configure) {
|
|
|
getOptions().add("-v");
|
|
|
getOptions().add(provider(() -> {
|
|
|
var volumeSpec = getObjectFactory().newInstance(VolumeSpec.class);
|
|
|
configure.execute(volumeSpec);
|
|
|
return volumeSpec.resolveSpec();
|
|
|
}));
|
|
|
}
|
|
|
|
|
|
void commandLine(String ...args) {
|
|
|
getCommandLine().addAll(args);
|
|
|
}
|
|
|
|
|
|
@TaskAction
|
|
|
public void run() throws InterruptedException, IOException {
|
|
|
docker().runImage(
|
|
|
getImageName().get(),
|
|
|
getOptions().get(),
|
|
|
getCommandLine().get());
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|