-
Notifications
You must be signed in to change notification settings - Fork 539
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat (jkube-kit/build/service/buildpacks) : Add BuildPackCliController (
#2453) Signed-off-by: Rohan Kumar <rohaan@redhat.com>
- Loading branch information
1 parent
609f31d
commit aa41f75
Showing
5 changed files
with
239 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
33 changes: 33 additions & 0 deletions
33
...ldpacks/src/main/java/org/eclipse/jkube/kit/service/buildpacks/BuildPackBuildOptions.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
/* | ||
* Copyright (c) 2019 Red Hat, Inc. | ||
* This program and the accompanying materials are made | ||
* available under the terms of the Eclipse Public License 2.0 | ||
* which is available at: | ||
* | ||
* https://www.eclipse.org/legal/epl-2.0/ | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
* | ||
* Contributors: | ||
* Red Hat, Inc. - initial API and implementation | ||
*/ | ||
package org.eclipse.jkube.kit.service.buildpacks; | ||
|
||
import lombok.AllArgsConstructor; | ||
import lombok.Builder; | ||
import lombok.EqualsAndHashCode; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import lombok.Setter; | ||
|
||
@Builder(toBuilder = true) | ||
@AllArgsConstructor | ||
@NoArgsConstructor | ||
@Getter | ||
@Setter | ||
@EqualsAndHashCode | ||
public class BuildPackBuildOptions { | ||
private String builderImage; | ||
private String imageName; | ||
private String creationTime; | ||
} |
73 changes: 73 additions & 0 deletions
73
...main/java/org/eclipse/jkube/kit/service/buildpacks/controller/BuildPackCliController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/* | ||
* Copyright (c) 2019 Red Hat, Inc. | ||
* This program and the accompanying materials are made | ||
* available under the terms of the Eclipse Public License 2.0 | ||
* which is available at: | ||
* | ||
* https://www.eclipse.org/legal/epl-2.0/ | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
* | ||
* Contributors: | ||
* Red Hat, Inc. - initial API and implementation | ||
*/ | ||
package org.eclipse.jkube.kit.service.buildpacks.controller; | ||
|
||
import org.apache.commons.lang3.StringUtils; | ||
import org.eclipse.jkube.kit.common.KitLogger; | ||
import org.eclipse.jkube.kit.service.buildpacks.BuildPackBuildOptions; | ||
import org.eclipse.jkube.kit.service.buildpacks.BuildPackCommand; | ||
|
||
import java.io.File; | ||
import java.io.IOException; | ||
import java.util.ArrayList; | ||
import java.util.Arrays; | ||
import java.util.Collections; | ||
import java.util.List; | ||
import java.util.concurrent.atomic.AtomicReference; | ||
|
||
public class BuildPackCliController implements BuildPackController { | ||
private final File pack; | ||
private final KitLogger kitLogger; | ||
|
||
public BuildPackCliController(File binaryFile, KitLogger kitLogger) { | ||
this.pack = binaryFile; | ||
this.kitLogger = kitLogger; | ||
} | ||
|
||
@Override | ||
public void build(BuildPackBuildOptions buildOptions) { | ||
BuildPackCommand buildPackCommand = new BuildPackCommand(kitLogger, pack, | ||
createBuildCommandArguments(buildOptions), | ||
l -> kitLogger.info("[[s]]%s", l)); | ||
try { | ||
buildPackCommand.execute(); | ||
} catch (IOException e) { | ||
throw new IllegalStateException("Process Existed With : " + buildPackCommand.getExitCode() + " [" + e.getMessage() + "]", e); | ||
} | ||
} | ||
|
||
@Override | ||
public String version() { | ||
AtomicReference<String> versionRef = new AtomicReference<>(); | ||
BuildPackCommand versionCommand = new BuildPackCommand(kitLogger, pack, Collections.singletonList("--version"), versionRef::set); | ||
try { | ||
versionCommand.execute(); | ||
} catch (IOException e) { | ||
kitLogger.warn(e.getMessage()); | ||
} | ||
if (StringUtils.isNotBlank(versionRef.get())) { | ||
return versionRef.get(); | ||
} | ||
return null; | ||
} | ||
|
||
private List<String> createBuildCommandArguments(BuildPackBuildOptions buildOptions) { | ||
List<String> buildArgs = new ArrayList<>(); | ||
buildArgs.add("build"); | ||
buildArgs.add(buildOptions.getImageName()); | ||
buildArgs.addAll(Arrays.asList("--builder", buildOptions.getBuilderImage())); | ||
buildArgs.addAll(Arrays.asList("--creation-time", buildOptions.getCreationTime())); | ||
return buildArgs; | ||
} | ||
} |
21 changes: 21 additions & 0 deletions
21
...rc/main/java/org/eclipse/jkube/kit/service/buildpacks/controller/BuildPackController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
/* | ||
* Copyright (c) 2019 Red Hat, Inc. | ||
* This program and the accompanying materials are made | ||
* available under the terms of the Eclipse Public License 2.0 | ||
* which is available at: | ||
* | ||
* https://www.eclipse.org/legal/epl-2.0/ | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
* | ||
* Contributors: | ||
* Red Hat, Inc. - initial API and implementation | ||
*/ | ||
package org.eclipse.jkube.kit.service.buildpacks.controller; | ||
|
||
import org.eclipse.jkube.kit.service.buildpacks.BuildPackBuildOptions; | ||
|
||
public interface BuildPackController { | ||
void build(BuildPackBuildOptions buildOptions); | ||
String version(); | ||
} |
104 changes: 104 additions & 0 deletions
104
...ks/src/test/java/org/eclipse/jkube/kit/service/buildpacks/BuildPackCliControllerTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
/* | ||
* Copyright (c) 2019 Red Hat, Inc. | ||
* This program and the accompanying materials are made | ||
* available under the terms of the Eclipse Public License 2.0 | ||
* which is available at: | ||
* | ||
* https://www.eclipse.org/legal/epl-2.0/ | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
* | ||
* Contributors: | ||
* Red Hat, Inc. - initial API and implementation | ||
*/ | ||
package org.eclipse.jkube.kit.service.buildpacks; | ||
|
||
import org.eclipse.jkube.kit.common.KitLogger; | ||
import org.eclipse.jkube.kit.common.util.EnvUtil; | ||
import org.eclipse.jkube.kit.service.buildpacks.controller.BuildPackCliController; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Nested; | ||
import org.junit.jupiter.api.Test; | ||
|
||
import java.io.File; | ||
import java.util.Objects; | ||
|
||
import static org.assertj.core.api.Assertions.assertThatIllegalStateException; | ||
import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; | ||
import static org.mockito.Mockito.spy; | ||
import static org.mockito.Mockito.verify; | ||
|
||
class BuildPackCliControllerTest { | ||
private KitLogger kitLogger; | ||
private BuildPackCliController buildPackCliController; | ||
private BuildPackBuildOptions buildOptions; | ||
private File pack; | ||
|
||
@BeforeEach | ||
void setUp() { | ||
kitLogger = spy(new KitLogger.SilentLogger()); | ||
String validPackBinary = EnvUtil.isWindows() ? "pack.bat" : "pack"; | ||
pack = new File(Objects.requireNonNull(getClass().getResource(String.format("/%s", validPackBinary))).getFile()); | ||
buildPackCliController = new BuildPackCliController(pack, kitLogger); | ||
buildOptions = BuildPackBuildOptions.builder() | ||
.imageName("foo/bar:latest") | ||
.builderImage("foo/builder:base") | ||
.creationTime("now") | ||
.build(); | ||
} | ||
|
||
@Nested | ||
@DisplayName("pack command succeeds") | ||
class CommandSucceeds { | ||
@Test | ||
@DisplayName("build, BuildPackBuildOptions passes as commandline arguments") | ||
void build_whenInvoked_thenBuildPackBuildOptionsPassedAsCommandLineArguments() { | ||
// When | ||
buildPackCliController.build(buildOptions); | ||
|
||
// Then | ||
verify(kitLogger).info("[[s]]%s", "build foo/bar:latest --builder foo/builder:base --creation-time now"); | ||
} | ||
|
||
@Test | ||
@DisplayName("version, should get pack version") | ||
void version() { | ||
// When | ||
String version = buildPackCliController.version(); | ||
|
||
// Then | ||
assertThat(version).isEqualTo("0.32.1+git-b14250b.build-5241"); | ||
} | ||
} | ||
|
||
@Nested | ||
@DisplayName("pack command fails") | ||
class CommandFails { | ||
@BeforeEach | ||
void setUp() { | ||
String invalidPackBinary = EnvUtil.isWindows() ? "invalid-pack.bat" : "invalid-pack"; | ||
pack = new File(Objects.requireNonNull(BuildPackCliControllerTest.class.getResource(String.format("/%s", invalidPackBinary))).getFile()); | ||
buildPackCliController = new BuildPackCliController(pack, kitLogger); | ||
} | ||
|
||
@Test | ||
@DisplayName("build, throws exception") | ||
void build_whenCommandFailed_thenThrowException() { | ||
// When + Then | ||
assertThatIllegalStateException() | ||
.isThrownBy(() -> buildPackCliController.build(buildOptions)) | ||
.withMessageContaining("Process Existed With : 1"); | ||
} | ||
|
||
@Test | ||
@DisplayName("version, returns null on failure") | ||
void version_whenCommandFailed_thenReturnNull() { | ||
// When | ||
String version = buildPackCliController.version(); | ||
|
||
// Then | ||
assertThat(version).isNull(); | ||
} | ||
} | ||
} |