Skip to content

Commit

Permalink
feat (jkube-kit) : Initial draft for JKube Actions Summary (eclipse-j…
Browse files Browse the repository at this point in the history
…kube#1033)

Signed-off-by: Rohan Kumar <rohaan@redhat.com>
  • Loading branch information
rohanKanojia committed Aug 1, 2022
1 parent 65d37bf commit 74f3f40
Show file tree
Hide file tree
Showing 25 changed files with 573 additions and 6 deletions.
Expand Up @@ -39,6 +39,15 @@ public void ocResource_whenRun_generatesOpenShiftManifestsWithExpectedTLSAnnotat
.contains("Adding a default Deployment")
.contains("Adding revision history limit to 2")
.contains("Using first mentioned service port")
.contains("validating");
.contains("validating")
.contains("SUMMARY")
.contains("Generated Resource Files:")
.contains("Individual :")
.contains("build/classes/java/main/META-INF/jkube/openshift/autotls-service.yml")
.contains("build/classes/java/main/META-INF/jkube/openshift/autotls-route.yml")
.contains("build/classes/java/main/META-INF/jkube/openshift/autotls-deploymentconfig.yml")
.contains("Aggregate : ")
.contains("build/classes/java/main/META-INF/jkube/openshift.yml")
.contains("SUCCESS");
}
}
Expand Up @@ -30,6 +30,7 @@
import org.eclipse.jkube.kit.common.JKubeConfiguration;
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.RegistryConfig;
import org.eclipse.jkube.kit.common.Summary;
import org.eclipse.jkube.kit.common.util.ResourceUtil;
import org.eclipse.jkube.kit.config.access.ClusterAccess;
import org.eclipse.jkube.kit.config.access.ClusterConfiguration;
Expand Down Expand Up @@ -72,6 +73,9 @@ public final void runTask() {
return;
}
run();
Summary.getInstance().setSuccessful(true);
Summary.getInstance().printSummary(kitLogger);
Summary.clear();
}

private void init() {
Expand Down
Expand Up @@ -39,6 +39,7 @@
import org.eclipse.jkube.kit.common.AssemblyMode;
import org.eclipse.jkube.kit.common.JavaProject;
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.Summary;
import org.eclipse.jkube.kit.common.archive.ArchiveCompression;
import org.eclipse.jkube.kit.common.archive.JKubeTarArchiver;
import org.eclipse.jkube.kit.common.util.FileUtil;
Expand Down Expand Up @@ -109,6 +110,7 @@ public File createDockerTarArchive(

try {
if (buildConfig.isDockerFileMode()) {
Summary.getInstance().setDockerFileUsed(buildConfig.getDockerFileFile().getAbsolutePath());
createDockerTarArchiveForDockerFile(buildConfig, assemblyConfig, configuration, buildDirs, log, archiveCustomizers);
} else {
createAssemblyArchive(assemblyConfig, configuration, buildDirs, buildConfig.getCompression(), layers);
Expand Down
Expand Up @@ -30,6 +30,7 @@
import org.eclipse.jkube.kit.common.JKubeConfiguration;
import org.eclipse.jkube.kit.build.api.helper.DockerFileUtil;
import org.eclipse.jkube.kit.build.api.assembly.AssemblyManager;
import org.eclipse.jkube.kit.common.Summary;
import org.eclipse.jkube.kit.common.util.EnvUtil;
import org.eclipse.jkube.kit.build.service.docker.access.BuildOptions;
import org.eclipse.jkube.kit.build.service.docker.access.DockerAccess;
Expand Down Expand Up @@ -146,6 +147,7 @@ protected void buildImage(ImageConfiguration imageConfig, JKubeConfiguration par
throw new IllegalStateException("Failure in building image, unable to find image built with name " + imageName);
}
log.info("%s: Built image %s", imageConfig.getDescription(), newImageId);
Summary.getInstance().setTargetImageName(new ImageName(imageConfig.getName()).getFullName() + "(" + newImageId + ")");

if (oldImageId != null && !oldImageId.equals(newImageId)) {
try {
Expand Down
Expand Up @@ -14,12 +14,14 @@
package org.eclipse.jkube.kit.build.service.docker;

import java.io.IOException;
import java.util.Optional;

import org.eclipse.jkube.kit.build.api.auth.AuthConfig;
import org.eclipse.jkube.kit.build.service.docker.access.CreateImageOptions;
import org.eclipse.jkube.kit.build.service.docker.access.DockerAccess;
import org.eclipse.jkube.kit.build.service.docker.auth.AuthConfigFactory;
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.Summary;
import org.eclipse.jkube.kit.common.util.EnvUtil;
import org.eclipse.jkube.kit.config.image.ImageConfiguration;
import org.eclipse.jkube.kit.config.image.ImageName;
Expand Down Expand Up @@ -56,16 +58,20 @@ public void pushImage(ImageConfiguration imageConfig,
BuildConfiguration buildConfig = imageConfig.getBuildConfiguration();
String name = imageConfig.getName();
if (buildConfig != null) {
ImageName imageName = new ImageName(imageConfig.getName());
String configuredRegistry = EnvUtil.firstRegistryOf(
new ImageName(imageConfig.getName()).getRegistry(),
imageName.getRegistry(),
imageConfig.getRegistry(),
registryConfig.getRegistry());


Summary.getInstance().setPushRegistry(Optional.ofNullable(configuredRegistry).orElse("docker.io"));
AuthConfig authConfig = createAuthConfig(true, new ImageName(name).getUser(), configuredRegistry, registryConfig);

long start = System.currentTimeMillis();
docker.pushImage(name, authConfig, configuredRegistry, retries);
Summary.getInstance().setPushRegistryUser(imageName.getUser());
Summary.getInstance().setPushedImage(imageName.getFullName(configuredRegistry));
log.info("Pushed %s in %s", name, EnvUtil.formatDurationTill(start));

if (!skipTag) {
Expand Down
Expand Up @@ -35,6 +35,7 @@
import org.eclipse.jkube.kit.common.Assembly;
import org.eclipse.jkube.kit.common.AssemblyFileEntry;
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.Summary;
import org.eclipse.jkube.kit.config.image.ImageConfiguration;
import org.eclipse.jkube.kit.config.image.ImageName;
import org.eclipse.jkube.kit.config.image.build.Arguments;
Expand Down Expand Up @@ -129,6 +130,9 @@ public static String getFullImageName(ImageConfiguration imageConfiguration, Str
} else {
imageName = new ImageName(imageConfiguration.getName());
}
Summary.getInstance().setPushRegistry(Optional.ofNullable(imageName.getRegistry()).orElse("docker.io"));
Summary.getInstance().setPushRegistryUser(imageName.getUser());
Summary.getInstance().setPushedImage(imageName.getFullName());
return imageName.getFullName();
}

Expand Down
@@ -0,0 +1,268 @@
/**
* 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.common;

import java.util.ArrayList;
import java.util.List;

public class Summary {
private static final String DASHED_LINE = "-------------------------------";
private static Summary summaryInstance;
private String buildStrategy;
private String packagedFileLocation;
private String generatorName;
private String dockerFileUsed;
private String targetImageName;
private boolean successful;
private String failureCause;
private List<String> generatedResourceFiles;
private String aggregateResourceFile;
private String targetClusterUrl;
private List<String> createdKubernetesResources;
private List<String> updatedKubernetesResources;

private List<String> deletedKubernetesResources;

private String pushRegistry;
private String pushRegistryUser;
private String pushedImage;
private String helmChartName;
private String helmChartCompressedLocation;
private String helmChartLocation;
private String helmRepository;
private boolean printed;

private Summary() { }

public static Summary getInstance() {
if (summaryInstance == null) {
summaryInstance = new Summary();
summaryInstance.printed = false;
}
return summaryInstance;
}

public void setBuildStrategy(String buildStrategy) {
this.buildStrategy = buildStrategy;
}

public void setPackagedFileLocation(String packagedFileLocation) {
this.packagedFileLocation = packagedFileLocation;
}

public void setGeneratorName(String generatorName) {
this.generatorName = generatorName;
}

public void setDockerFileUsed(String dockerFileUsed) {
this.dockerFileUsed = dockerFileUsed;
}

public void setTargetImageName(String targetImageName) {
this.targetImageName = targetImageName;
}

public void setSuccessful(boolean successful) {
this.successful = successful;
}

public void setFailureCause(String failureCause) {
this.failureCause = failureCause;
}

public void setAggregateResourceFile(String aggregateResourceFile) {
this.aggregateResourceFile = aggregateResourceFile;
}

public void addGeneratedResourceFile(String resourceFilePath) {
if (this.generatedResourceFiles == null) {
this.generatedResourceFiles = new ArrayList<>();
}
this.generatedResourceFiles.add(resourceFilePath);
}

public void addCreatedKubernetesResource(String kubernetesResource) {
if (this.createdKubernetesResources == null) {
this.createdKubernetesResources = new ArrayList<>();
}
this.createdKubernetesResources.add(kubernetesResource);
}

public void addDeletedKubernetesResource(String kubernetesResource) {
if (this.deletedKubernetesResources == null) {
this.deletedKubernetesResources = new ArrayList<>();
}
this.deletedKubernetesResources.add(kubernetesResource);
}

public void setTargetClusterUrl(String clusterUrl) {
this.targetClusterUrl = clusterUrl;
}

public void addUpdatedKubernetesResource(String kubernetesResource) {
if (this.updatedKubernetesResources == null) {
this.updatedKubernetesResources = new ArrayList<>();
}
this.updatedKubernetesResources.add(kubernetesResource);
}

public void setPushRegistry(String pushRegistry) {
this.pushRegistry = pushRegistry;
}

public void setPushRegistryUser(String pushRegistryUser) {
this.pushRegistryUser = pushRegistryUser;
}

public void setPushedImage(String pushedImage) {
this.pushedImage = pushedImage;
}

public void setHelmChartLocation(String helmChartLocation) {
this.helmChartLocation = helmChartLocation;
}

public void setHelmChartCompressedLocation(String helmChartCompressedLocation) {
this.helmChartCompressedLocation = helmChartCompressedLocation;
}

public void setHelmRepository(String helmRepository) {
this.helmRepository = helmRepository;
}

public void setHelmChartName(String helmChartName) {
this.helmChartName = helmChartName;
}

public synchronized void printSummary(KitLogger logger) {
if (summaryInstance != null && !printed) {
printBanner(logger);
printBuildSummary(logger);
printResourceSummary(logger);
printApplySummary(logger);
printUndeploySummary(logger);
printPushSummary(logger);
printHelmSummary(logger);
printHelmPushSummary(logger);
if (successful) {
logSummary(logger, "SUCCESS");
} else {
logSummary(logger, "FAILURE");
logSummary(logger, "Failure cause : " + failureCause);
}
logSummary(logger, DASHED_LINE);
printed = true;
}
}

public static void clear() {
summaryInstance = null;
}

private void printBanner(KitLogger logger) {
logSummary(logger, DASHED_LINE);
logSummary(logger, " SUMMARY");
logSummary(logger, DASHED_LINE);
logSummary(logger, " __ / / //_/ / / / _ )/ __/");
logSummary(logger, "/ // / ,< / /_/ / _ / _/ ");
logSummary(logger, "\\___/_/|_|\\____/____/___/ \n");
}

private void printBuildSummary(KitLogger logger) {
if (buildStrategy != null) {
logSummary(logger, "Build Strategy : " + buildStrategy);
}
if (packagedFileLocation != null) {
logSummary(logger, "Packaged File Location : " + packagedFileLocation);
}
if (generatorName != null) {
logSummary(logger, "Generator Name : " + generatorName);
}
if (dockerFileUsed != null) {
logSummary(logger, "Dockerfile used : " + dockerFileUsed);
}
if (targetImageName != null) {
logSummary(logger, "Target Image Name : " + targetImageName);
}
}

private void printResourceSummary(KitLogger logger) {
if (generatedResourceFiles != null && !generatedResourceFiles.isEmpty()) {
logSummary(logger, "Generated Resource Files:\n");
logList(logger, "Individual :\n", generatedResourceFiles);
logSummary(logger, "\n");
logSummary(logger, "Aggregate : " + aggregateResourceFile);
}
}

private void printApplySummary(KitLogger logger) {
if (targetClusterUrl != null) {
logSummary(logger, "Cluster URL : " + targetClusterUrl);
}
if (createdKubernetesResources != null && !createdKubernetesResources.isEmpty()) {
logList(logger, "Created Resources: \n", createdKubernetesResources);
}
if (updatedKubernetesResources != null && !updatedKubernetesResources.isEmpty()) {
logList(logger, "Updated Resources: \n", updatedKubernetesResources);
}
}

private void printUndeploySummary(KitLogger logger) {
if (deletedKubernetesResources != null && !deletedKubernetesResources.isEmpty()) {
logList(logger, "Deleted Resources: \n", deletedKubernetesResources);
}
}


private void printPushSummary(KitLogger logger) {
if (pushRegistry!= null) {
logSummary(logger, "Pushed to Image Registry: " + pushRegistry);
}
if (pushRegistryUser != null) {
logSummary(logger, "Username : " + pushRegistryUser);
}
if (pushedImage != null) {
logSummary(logger, "Pushed Image URL : " + pushedImage);
}
}

private void printHelmSummary(KitLogger logger) {
if (helmChartName != null) {
logSummary(logger, "Helm Chart Name : " + helmChartName);
}
if (helmChartCompressedLocation != null) {
logSummary(logger, "Helm Chart (Compressed) : " + helmChartCompressedLocation);
}
if (helmChartLocation != null) {
logSummary(logger, "Helm Chart Directory : " + helmChartLocation);
}
}

private void printHelmPushSummary(KitLogger logger) {
if (helmRepository != null) {
logSummary(logger, "Helm Repository : " + helmRepository);
}
}

private void logList(KitLogger logger, String title, List<String> list) {
logSummary(logger, title);
for (String item : list) {
logSummary(logger, " - " + item);
}
}

private void logSummary(KitLogger logger, String message) {
logger.info("[[C]] " + message + " [[C]]");
}
}

0 comments on commit 74f3f40

Please sign in to comment.