Skip to content

Commit abd9226

Browse files
committed
feat (jkube-kit) : Initial draft for JKube Actions Summary (eclipse-jkube#1033)
Signed-off-by: Rohan Kumar <rohaan@redhat.com>
1 parent 65d37bf commit abd9226

File tree

14 files changed

+207
-3
lines changed

14 files changed

+207
-3
lines changed

jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.eclipse.jkube.kit.common.AssemblyMode;
4040
import org.eclipse.jkube.kit.common.JavaProject;
4141
import org.eclipse.jkube.kit.common.KitLogger;
42+
import org.eclipse.jkube.kit.common.Summary;
4243
import org.eclipse.jkube.kit.common.archive.ArchiveCompression;
4344
import org.eclipse.jkube.kit.common.archive.JKubeTarArchiver;
4445
import org.eclipse.jkube.kit.common.util.FileUtil;
@@ -109,6 +110,7 @@ public File createDockerTarArchive(
109110

110111
try {
111112
if (buildConfig.isDockerFileMode()) {
113+
Summary.getInstance().setDockerFileUsed(buildConfig.getDockerFileFile().getAbsolutePath());
112114
createDockerTarArchiveForDockerFile(buildConfig, assemblyConfig, configuration, buildDirs, log, archiveCustomizers);
113115
} else {
114116
createAssemblyArchive(assemblyConfig, configuration, buildDirs, buildConfig.getCompression(), layers);

jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/BuildService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.eclipse.jkube.kit.common.JKubeConfiguration;
3131
import org.eclipse.jkube.kit.build.api.helper.DockerFileUtil;
3232
import org.eclipse.jkube.kit.build.api.assembly.AssemblyManager;
33+
import org.eclipse.jkube.kit.common.Summary;
3334
import org.eclipse.jkube.kit.common.util.EnvUtil;
3435
import org.eclipse.jkube.kit.build.service.docker.access.BuildOptions;
3536
import org.eclipse.jkube.kit.build.service.docker.access.DockerAccess;
@@ -146,6 +147,7 @@ protected void buildImage(ImageConfiguration imageConfig, JKubeConfiguration par
146147
throw new IllegalStateException("Failure in building image, unable to find image built with name " + imageName);
147148
}
148149
log.info("%s: Built image %s", imageConfig.getDescription(), newImageId);
150+
Summary.getInstance().setTargetImageName(new ImageName(imageConfig.getName()).getFullName() + "(" + newImageId + ")");
149151

150152
if (oldImageId != null && !oldImageId.equals(newImageId)) {
151153
try {
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
/**
2+
* Copyright (c) 2019 Red Hat, Inc.
3+
* This program and the accompanying materials are made
4+
* available under the terms of the Eclipse Public License 2.0
5+
* which is available at:
6+
*
7+
* https://www.eclipse.org/legal/epl-2.0/
8+
*
9+
* SPDX-License-Identifier: EPL-2.0
10+
*
11+
* Contributors:
12+
* Red Hat, Inc. - initial API and implementation
13+
*/
14+
package org.eclipse.jkube.kit.common;
15+
16+
import java.util.ArrayList;
17+
import java.util.List;
18+
19+
public class Summary {
20+
private static Summary summaryInstance;
21+
private String buildStrategy;
22+
private String packagedFileLocation;
23+
private String generatorName;
24+
private String dockerFileUsed;
25+
private String targetImageName;
26+
private boolean successful;
27+
private String failureCause;
28+
private List<String> generatedResourceFiles;
29+
private String aggregateResourceFile;
30+
private List<String> appliedKubernetesResources;
31+
32+
private Summary() { }
33+
34+
public static Summary getInstance() {
35+
if (summaryInstance == null) {
36+
summaryInstance = new Summary();
37+
}
38+
return summaryInstance;
39+
}
40+
41+
public void setBuildStrategy(String buildStrategy) {
42+
this.buildStrategy = buildStrategy;
43+
}
44+
45+
public void setPackagedFileLocation(String packagedFileLocation) {
46+
this.packagedFileLocation = packagedFileLocation;
47+
}
48+
49+
public void setGeneratorName(String generatorName) {
50+
this.generatorName = generatorName;
51+
}
52+
53+
public void setDockerFileUsed(String dockerFileUsed) {
54+
this.dockerFileUsed = dockerFileUsed;
55+
}
56+
57+
public void setTargetImageName(String targetImageName) {
58+
this.targetImageName = targetImageName;
59+
}
60+
61+
public void setSuccessful(boolean successful) {
62+
this.successful = successful;
63+
}
64+
65+
public void setFailureCause(String failureCause) {
66+
this.failureCause = failureCause;
67+
}
68+
69+
public void setAggregateResourceFile(String aggregateResourceFile) {
70+
this.aggregateResourceFile = aggregateResourceFile;
71+
}
72+
73+
public void addGeneratedResourceFile(String resourceFilePath) {
74+
if (this.generatedResourceFiles == null) {
75+
this.generatedResourceFiles = new ArrayList<>();
76+
}
77+
this.generatedResourceFiles.add(resourceFilePath);
78+
}
79+
80+
public void addAppliedKubernetesResource(String kubernetesResource) {
81+
if (this.appliedKubernetesResources == null) {
82+
this.appliedKubernetesResources = new ArrayList<>();
83+
}
84+
this.appliedKubernetesResources.add(kubernetesResource);
85+
}
86+
87+
public void printSummary(KitLogger logger) {
88+
if (summaryInstance != null) {
89+
logSummary(logger, "------------------------------");
90+
logSummary(logger, " SUMMARY");
91+
logSummary(logger, "-------------------------------");
92+
logSummary(logger, " __ / / //_/ / / / _ )/ __/");
93+
logSummary(logger, "/ // / ,< / /_/ / _ / _/ ");
94+
logSummary(logger, "\\___/_/|_|\\____/____/___/ \n");
95+
printBuildSummary(logger);
96+
printResourceSummary(logger);
97+
printApplySummary(logger);
98+
if (successful) {
99+
logSummary(logger, "SUCCESS");
100+
} else {
101+
logSummary(logger, "FAILURE");
102+
logSummary(logger, "Failure cause " + failureCause);
103+
}
104+
logSummary(logger, "-------------------------------");
105+
}
106+
}
107+
108+
private void printBuildSummary(KitLogger logger) {
109+
if (buildStrategy != null) {
110+
logSummary(logger, "Build Strategy : " + buildStrategy);
111+
}
112+
if (packagedFileLocation != null) {
113+
logSummary(logger, "Packaged File Location : " + packagedFileLocation);
114+
}
115+
if (generatorName != null) {
116+
logSummary(logger, "Generator Name : " + generatorName);
117+
}
118+
if (dockerFileUsed != null) {
119+
logSummary(logger, "Dockerfile used : " + dockerFileUsed);
120+
}
121+
if (targetImageName != null) {
122+
logSummary(logger, "Target Image Name : " + targetImageName);
123+
}
124+
}
125+
126+
private void printResourceSummary(KitLogger logger) {
127+
if (generatedResourceFiles != null && !generatedResourceFiles.isEmpty()) {
128+
logSummary(logger, "Generated Resource Files:");
129+
logSummary(logger, "Individual \n");
130+
for (String generatedResourceFile : generatedResourceFiles) {
131+
logSummary(logger, " - " + generatedResourceFile);
132+
}
133+
logSummary(logger, "\n");
134+
logSummary(logger, "Aggregate : " + aggregateResourceFile);
135+
}
136+
}
137+
138+
private void printApplySummary(KitLogger logger) {
139+
if (appliedKubernetesResources != null && !appliedKubernetesResources.isEmpty()) {
140+
logSummary(logger, "Applied Resources: \n");
141+
for (String resource : appliedKubernetesResources) {
142+
logSummary(logger, " - " + resource);
143+
}
144+
}
145+
}
146+
147+
private void logSummary(KitLogger logger, String message) {
148+
logger.info("[[C]] " + message + " [[C]]");
149+
}
150+
}

jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/validator/ResourceValidator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import javax.validation.metadata.ConstraintDescriptor;
3131

3232
import org.eclipse.jkube.kit.common.KitLogger;
33+
import org.eclipse.jkube.kit.common.Summary;
3334
import org.eclipse.jkube.kit.common.util.ResourceClassifier;
3435

3536
import com.fasterxml.jackson.databind.JsonNode;
@@ -104,6 +105,7 @@ private void setupIgnoreRules(ResourceClassifier target) {
104105
public int validate() throws IOException {
105106
for(File resource: resources) {
106107
if (resource.isFile() && resource.exists()) {
108+
Summary.getInstance().addGeneratedResourceFile(resource.toString());
107109
log.info("validating %s resource", resource.toString());
108110
JsonNode inputSpecNode = geFileContent(resource);
109111
String kind = inputSpecNode.get("kind").toString();

jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/ApplyService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import io.fabric8.kubernetes.client.dsl.base.PatchContext;
3333
import io.fabric8.kubernetes.client.dsl.base.PatchType;
3434
import org.eclipse.jkube.kit.common.KitLogger;
35+
import org.eclipse.jkube.kit.common.Summary;
3536
import org.eclipse.jkube.kit.common.util.FileUtil;
3637
import org.eclipse.jkube.kit.common.util.KubernetesHelper;
3738
import org.eclipse.jkube.kit.common.util.OpenshiftHelper;
@@ -485,6 +486,7 @@ private void doCreateCustomResourceDefinition(CustomResourceDefinition entity, S
485486
log.info("Creating a Custom Resource Definition from " + sourceName + " name " + getName(entity));
486487
try {
487488
CustomResourceDefinition answer = kubernetesClient.apiextensions().v1().customResourceDefinitions().create(entity);
489+
Summary.getInstance().addAppliedKubernetesResource(answer.getApiVersion() + "/" + answer.getKind() + " " + answer.getMetadata().getNamespace() + "/" + answer.getMetadata().getName());
488490
log.info("Created Custom Resource Definition result: %s", answer.getMetadata().getName());
489491
} catch (Exception e) {
490492
onApplyError("Failed to create Custom Resource Definition from " + sourceName + ". " + e + ". " + entity, e);
@@ -502,6 +504,7 @@ protected void doCreatePersistentVolumeClaim(PersistentVolumeClaim entity, Strin
502504
try {
503505
Object answer;
504506
answer = kubernetesClient.persistentVolumeClaims().inNamespace(namespace).create(entity);
507+
Summary.getInstance().addAppliedKubernetesResource(entity.getApiVersion() + "/" + entity.getKind() + " " + entity.getMetadata().getNamespace() + "/" + entity.getMetadata().getName());
505508
logGeneratedEntity("Created PersistentVolumeClaim: ", namespace, entity, answer);
506509
} catch (Exception e) {
507510
onApplyError("Failed to create PersistentVolumeClaim from " + sourceName + ". " + e + ". " + entity, e);
@@ -545,6 +548,7 @@ protected void doCreateSecret(Secret secret, String namespace, String sourceName
545548
try {
546549
Object answer = kubernetesClient.secrets().inNamespace(namespace).create(secret);
547550
logGeneratedEntity("Created Secret: ", namespace, secret, answer);
551+
Summary.getInstance().addAppliedKubernetesResource(secret.getApiVersion() + "/" + secret.getKind() + " " + secret.getMetadata().getNamespace() + "/" + secret.getMetadata().getName());
548552
} catch (Exception e) {
549553
onApplyError("Failed to create Secret from " + sourceName + ". " + e + ". " + secret, e);
550554
}
@@ -903,6 +907,7 @@ protected <T extends HasMetadata, L> void doCreateResource(T resource, String na
903907
log.info("Creating a " + kind + " from " + sourceName + " namespace " + namespace + " name " + getName(resource));
904908
try {
905909
Object answer = resources.inNamespace(namespace).create(resource);
910+
Summary.getInstance().addAppliedKubernetesResource(resource.getApiVersion() + "/" + resource.getKind() + " " + resource.getMetadata().getNamespace() + "/" + resource.getMetadata().getName());
906911
logGeneratedEntity("Created " + kind + ": ", namespace, resource, answer);
907912
} catch (Exception e) {
908913
onApplyError("Failed to create " + kind + " from " + sourceName + ". " + e + ". " + resource, e);
@@ -924,6 +929,7 @@ protected void doCreateService(Service service, String namespace, String sourceN
924929
log.info("Creating a Service from " + sourceName + " namespace " + namespace + " name " + getName(service));
925930
try {
926931
Object answer = kubernetesClient.services().inNamespace(namespace).create(service);
932+
Summary.getInstance().addAppliedKubernetesResource(service.getApiVersion() + "/" + service.getKind() + " " + service.getMetadata().getNamespace() + "/" + service.getMetadata().getName());
927933
logGeneratedEntity("Created Service: ", namespace, service, answer);
928934
} catch (Exception e) {
929935
onApplyError("Failed to create Service from " + sourceName + ". " + e + ". " + service, e);

jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/DockerBuildService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import org.eclipse.jkube.kit.build.service.docker.DockerServiceHub;
2020
import org.eclipse.jkube.kit.common.JKubeConfiguration;
21+
import org.eclipse.jkube.kit.common.Summary;
2122
import org.eclipse.jkube.kit.config.image.ImageConfiguration;
2223
import org.eclipse.jkube.kit.common.RegistryConfig;
2324
import org.eclipse.jkube.kit.config.resource.RuntimeMode;
@@ -50,7 +51,11 @@ public DockerBuildService(JKubeServiceHub jKubeServiceHub) {
5051

5152
@Override
5253
public boolean isApplicable() {
53-
return runtimeMode == RuntimeMode.KUBERNETES;
54+
if (runtimeMode == RuntimeMode.KUBERNETES) {
55+
Summary.getInstance().setBuildStrategy("Docker");
56+
return true;
57+
}
58+
return false;
5459
}
5560

5661
@Override

jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/JibBuildService.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.eclipse.jkube.kit.common.Assembly;
2525
import org.eclipse.jkube.kit.common.AssemblyFileEntry;
2626
import org.eclipse.jkube.kit.common.KitLogger;
27+
import org.eclipse.jkube.kit.common.Summary;
2728
import org.eclipse.jkube.kit.common.archive.ArchiveCompression;
2829
import org.eclipse.jkube.kit.common.util.EnvUtil;
2930
import org.eclipse.jkube.kit.config.image.ImageConfiguration;
@@ -70,7 +71,11 @@ public JibBuildService(JKubeServiceHub jKubeServiceHub) {
7071

7172
@Override
7273
public boolean isApplicable() {
73-
return buildServiceConfig.getJKubeBuildStrategy() == JKubeBuildStrategy.jib;
74+
if (buildServiceConfig.getJKubeBuildStrategy() == JKubeBuildStrategy.jib) {
75+
Summary.getInstance().setBuildStrategy("JIB");
76+
return true;
77+
}
78+
return false;
7479
}
7580

7681
@Override
@@ -99,6 +104,7 @@ public void buildSingleImage(ImageConfiguration imageConfig) throws JKubeService
99104
File dockerTarArchive = getAssemblyTarArchive(imageConfig, configuration, log);
100105
JibServiceUtil.buildContainer(containerBuilder,
101106
TarImage.at(dockerTarArchive.toPath()).named(imageConfig.getName()), log);
107+
Summary.getInstance().setTargetImageName(new ImageName(imageConfig.getName()).getFullName());
102108
log.info(" %s successfully built", dockerTarArchive.getAbsolutePath());
103109
} catch (InterruptedException ex) {
104110
Thread.currentThread().interrupt();

jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildService.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.eclipse.jkube.kit.build.service.docker.auth.AuthConfigFactory;
3232
import org.eclipse.jkube.kit.common.KitLogger;
3333
import org.eclipse.jkube.kit.common.ResourceFileType;
34+
import org.eclipse.jkube.kit.common.Summary;
3435
import org.eclipse.jkube.kit.common.util.EnvUtil;
3536
import org.eclipse.jkube.kit.common.util.KubernetesHelper;
3637
import org.eclipse.jkube.kit.common.util.OpenshiftHelper;
@@ -122,7 +123,11 @@ public OpenshiftBuildService(JKubeServiceHub jKubeServiceHub) {
122123

123124
@Override
124125
public boolean isApplicable() {
125-
return jKubeServiceHub.getRuntimeMode() == RuntimeMode.OPENSHIFT;
126+
if (jKubeServiceHub.getRuntimeMode() == RuntimeMode.OPENSHIFT) {
127+
Summary.getInstance().setBuildStrategy("OpenShift S2I");
128+
return true;
129+
}
130+
return false;
126131
}
127132

128133
@Override
@@ -153,6 +158,7 @@ public void buildSingleImage(ImageConfiguration imageConfig) throws JKubeService
153158

154159
// Create a file with generated image streams
155160
addImageStreamToFile(getImageStreamFile(), imageName, client);
161+
Summary.getInstance().setTargetImageName("ImageStreamTag " + resolveImageStreamTagName(imageName));
156162

157163
createAdditionalTags(imageConfig, imageName);
158164
} else {

jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/GeneratorManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.List;
1717

1818
import org.eclipse.jkube.kit.common.KitLogger;
19+
import org.eclipse.jkube.kit.common.Summary;
1920
import org.eclipse.jkube.kit.common.util.ClassUtil;
2021
import org.eclipse.jkube.kit.common.util.PluginServiceFactory;
2122
import org.eclipse.jkube.kit.config.image.ImageConfiguration;
@@ -53,6 +54,7 @@ public static List<ImageConfiguration> generate(List<ImageConfiguration> imageCo
5354
log.verbose(" - %s", generator.getName());
5455
if (generator.isApplicable(ret)) {
5556
log.info("Running generator %s", generator.getName());
57+
Summary.getInstance().setGeneratorName(generator.getName());
5658
ret = generator.customize(ret, prePackagePhase);
5759
}
5860
}

jkube-kit/generator/java-exec/src/main/java/org/eclipse/jkube/generator/javaexec/JavaExecGenerator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import lombok.AllArgsConstructor;
2424
import lombok.Getter;
2525
import org.eclipse.jkube.kit.common.AssemblyConfiguration;
26+
import org.eclipse.jkube.kit.common.Summary;
2627
import org.eclipse.jkube.kit.config.image.build.Arguments;
2728
import org.eclipse.jkube.kit.config.image.build.BuildConfiguration;
2829
import org.eclipse.jkube.kit.config.image.ImageConfiguration;
@@ -36,6 +37,7 @@
3637
import org.eclipse.jkube.generator.api.support.BaseGenerator;
3738
import org.apache.commons.lang3.StringUtils;
3839

40+
import static org.eclipse.jkube.kit.common.util.FileUtil.getRelativeFilePath;
3941
import static org.eclipse.jkube.kit.common.util.FileUtil.getRelativePath;
4042

4143
/**
@@ -222,6 +224,7 @@ protected List<AssemblyFileSet> addAdditionalFiles() {
222224

223225
private static AssemblyFileSet getOutputDirectoryFileSet(FatJarDetector.Result fatJar, JavaProject project) {
224226
final File buildDirectory = project.getBuildPackageDirectory();
227+
Summary.getInstance().setPackagedFileLocation(getRelativePath(buildDirectory, fatJar.getArchiveFile()).getAbsolutePath());
225228
return AssemblyFileSet.builder()
226229
.directory(getRelativePath(project.getBaseDirectory(), buildDirectory))
227230
.include(getRelativePath(buildDirectory, fatJar.getArchiveFile()).getPath())

0 commit comments

Comments
 (0)