Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,12 @@ public interface BuildImageCmd extends AsyncDockerCmd<BuildImageCmd, BuildRespon
@CheckForNull
Long getShmsize();

/**
* @since {@link RemoteApiVersion#VERSION_1_23}
*/
@CheckForNull
Map<String, String> getLabels();

// setters

BuildImageCmd withTag(String tag);
Expand Down Expand Up @@ -145,6 +151,11 @@ public interface BuildImageCmd extends AsyncDockerCmd<BuildImageCmd, BuildRespon
*/
BuildImageCmd withShmsize(Long shmsize);

/**
*@since {@link RemoteApiVersion#VERSION_1_23}
*/
BuildImageCmd withLabels(Map<String, String> labels);

interface Exec extends DockerCmdAsyncExec<BuildImageCmd, BuildResponseItem> {
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ public class BuildImageCmdImpl extends AbstrAsyncDockerCmd<BuildImageCmd, BuildR

private Map<String, String> buildArgs;

private Map<String, String> labels;

public BuildImageCmdImpl(BuildImageCmd.Exec exec) {
super(exec);
}
Expand Down Expand Up @@ -149,6 +151,11 @@ public Map<String, String> getBuildArgs() {
return buildArgs;
}

@Override
public Map<String, String> getLabels() {
return labels;
}

// getter lib specific

@Override
Expand Down Expand Up @@ -303,6 +310,15 @@ public BuildImageCmd withShmsize(Long shmsize) {
return this;
}

/**
* @see #labels
*/
@Override
public BuildImageCmd withLabels(Map<String, String> labels) {
this.labels = labels;
return this;
}

@Override
public void close() {
super.close();
Expand Down
25 changes: 17 additions & 8 deletions src/main/java/com/github/dockerjava/jaxrs/BuildImageCmdExec.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

import java.io.IOException;
import java.net.URLEncoder;
import java.util.Map;

public class BuildImageCmdExec extends AbstrAsyncDockerCmdExec<BuildImageCmd, BuildResponseItem> implements
BuildImageCmd.Exec {
Expand Down Expand Up @@ -99,19 +100,14 @@ protected AbstractCallbackNotifier<BuildResponseItem> callbackNotifier(BuildImag
webTarget = webTarget.queryParam("rm", "false");
}

if (command.getBuildArgs() != null && !command.getBuildArgs().isEmpty()) {
try {
webTarget = webTarget.queryParam("buildargs",
URLEncoder.encode(MAPPER.writeValueAsString(command.getBuildArgs()), "UTF-8"));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
webTarget = writeMap(webTarget, "buildargs", command.getBuildArgs());

if (command.getShmsize() != null) {
webTarget = webTarget.queryParam("shmsize", command.getShmsize());
}

webTarget = writeMap(webTarget, "labels", command.getLabels());

webTarget.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.CHUNKED);
webTarget.property(ClientProperties.CHUNKED_ENCODING_SIZE, 1024 * 1024);

Expand All @@ -123,4 +119,17 @@ protected AbstractCallbackNotifier<BuildResponseItem> callbackNotifier(BuildImag
entity(command.getTarInputStream(), "application/tar")
);
}

private WebTarget writeMap(WebTarget webTarget, String name, Map<String, String> value) {
if (value != null && !value.isEmpty()) {
try {
return webTarget.queryParam(name,
URLEncoder.encode(MAPPER.writeValueAsString(value), "UTF-8"));
} catch (IOException e) {
throw new RuntimeException(e);
}
} else {
return webTarget;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.github.dockerjava.netty.WebTarget;

import java.io.IOException;
import java.util.Map;

public class BuildImageCmdExec extends AbstrAsyncDockerCmdExec<BuildImageCmd, BuildResponseItem> implements
BuildImageCmd.Exec {
Expand Down Expand Up @@ -85,18 +86,14 @@ protected Void execute0(BuildImageCmd command, ResultCallback<BuildResponseItem>
webTarget = webTarget.queryParam("cpusetcpus", command.getCpusetcpus());
}

if (command.getBuildArgs() != null && !command.getBuildArgs().isEmpty()) {
try {
webTarget = webTarget.queryParam("buildargs", MAPPER.writeValueAsString(command.getBuildArgs()));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
webTarget = writeMap(webTarget, "buildargs", command.getBuildArgs());

if (command.getShmsize() != null) {
webTarget = webTarget.queryParam("shmsize", command.getShmsize());
}

webTarget = writeMap(webTarget, "labels", command.getLabels());

LOGGER.trace("POST: {}", webTarget);

InvocationBuilder builder = resourceWithOptionalAuthConfig(command, webTarget.request())
Expand All @@ -109,4 +106,16 @@ protected Void execute0(BuildImageCmd command, ResultCallback<BuildResponseItem>

return null;
}

private WebTarget writeMap(WebTarget webTarget, String name, Map<String, String> value) {
if (value != null && !value.isEmpty()) {
try {
return webTarget.queryParam(name, MAPPER.writeValueAsString(value));
} catch (IOException e) {
throw new RuntimeException(e);
}
} else {
return webTarget;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.github.dockerjava.core.command;

import static com.github.dockerjava.utils.TestUtils.getVersion;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo;
Expand All @@ -12,11 +13,13 @@
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Collections;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.testng.ITestResult;
import org.testng.SkipException;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeMethod;
Expand All @@ -33,6 +36,7 @@
import com.github.dockerjava.api.model.PortBinding;
import com.github.dockerjava.api.model.Ports.Binding;
import com.github.dockerjava.client.AbstractDockerClientTest;
import com.github.dockerjava.core.RemoteApiVersion;
import com.github.dockerjava.core.util.CompressArchiveUtil;

@Test(groups = "integration")
Expand Down Expand Up @@ -250,6 +254,26 @@ public void buildArgs() throws Exception {
assertThat(inspectImageResponse.getConfig().getLabels().get("test"), equalTo("abc"));
}

@Test
public void labels() throws Exception {
if (!getVersion(dockerClient).isGreaterOrEqual(RemoteApiVersion.VERSION_1_23)) {
throw new SkipException("API version should be >= 1.23");
}

File baseDir = fileFromBuildTestResource("labels");

String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true)
.withLabels(Collections.singletonMap("test", "abc"))
.exec(new BuildImageResultCallback())
.awaitImageId();

InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec();
assertThat(inspectImageResponse, not(nullValue()));
LOG.info("Image Inspect: {}", inspectImageResponse.toString());

assertThat(inspectImageResponse.getConfig().getLabels().get("test"), equalTo("abc"));
}

public void dockerfileNotInBaseDirectory() throws Exception {
File baseDirectory = fileFromBuildTestResource("dockerfileNotInBaseDirectory");
File dockerfile = fileFromBuildTestResource("dockerfileNotInBaseDirectory/dockerfileFolder/Dockerfile");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.github.dockerjava.netty.exec;

import static com.github.dockerjava.utils.TestUtils.getVersion;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo;
Expand All @@ -12,11 +13,13 @@
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Collections;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.testng.ITestResult;
import org.testng.SkipException;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeMethod;
Expand All @@ -34,6 +37,7 @@
import com.github.dockerjava.api.model.PortBinding;
import com.github.dockerjava.api.model.Ports;
import com.github.dockerjava.api.model.Ports.Binding;
import com.github.dockerjava.core.RemoteApiVersion;
import com.github.dockerjava.core.command.BuildImageResultCallback;
import com.github.dockerjava.core.command.PushImageResultCallback;
import com.github.dockerjava.core.command.WaitContainerResultCallback;
Expand Down Expand Up @@ -255,6 +259,26 @@ public void buildArgs() throws Exception {
assertThat(inspectImageResponse.getConfig().getLabels().get("test"), equalTo("abc"));
}

@Test
public void labels() throws Exception {
if (!getVersion(dockerClient).isGreaterOrEqual(RemoteApiVersion.VERSION_1_23)) {
throw new SkipException("API version should be >= 1.23");
}

File baseDir = fileFromBuildTestResource("labels");

String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true)
.withLabels(Collections.singletonMap("test", "abc"))
.exec(new BuildImageResultCallback())
.awaitImageId();

InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec();
assertThat(inspectImageResponse, not(nullValue()));
LOG.info("Image Inspect: {}", inspectImageResponse.toString());

assertThat(inspectImageResponse.getConfig().getLabels().get("test"), equalTo("abc"));
}

public void dockerfileNotInBaseDirectory() throws Exception {
File baseDirectory = fileFromBuildTestResource("dockerfileNotInBaseDirectory");
File dockerfile = fileFromBuildTestResource("dockerfileNotInBaseDirectory/dockerfileFolder/Dockerfile");
Expand Down
3 changes: 3 additions & 0 deletions src/test/resources/buildTests/labels/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
FROM ubuntu:latest

CMD ["echo", "Success"]