private void logWorkflowInfo(WorkflowContext workflowContext) {
        WorkflowLogger.header(ControllerActivity.INFORMATION);

        WorkflowLogger.logPersistedActivities();

        long startTime = (long) workflowContext.getAttribute(WorkflowConstants.DEPLOY_START_TIME);
        CommandUtil.logMetaInfo(String.valueOf((System.currentTimeMillis() - startTime) / 1000) + "s", ControllerActivity.TOTAL_TIME);
        CommandUtil.logMetaInfo(SetupConfig.getMountPathOf((String) workflowContext.getAttribute(WorkflowConstants.DOCKERFILE_INPUT)),
                ControllerActivity.DOCKERFILE_PATH);
        CommandUtil.logMetaInfo(SetupConfig.getMountPathOf((String) workflowContext.getAttribute(WorkflowConstants.BUILD_LOGS)),
                ControllerActivity.BUILD_LOGS);
        CommandUtil.logMetaInfo(SetupConfig.getMountPathOf((String) workflowContext.getAttribute(WorkflowConstants.PUSH_LOGS)),
                ControllerActivity.PUSH_LOGS);
        CommandUtil.logMetaInfo(SetupConfig.getMountPathOf((String) workflowContext.getAttribute(WorkflowConstants.MANIFESTS_PATH)),
                ControllerActivity.MANIFESTS_GENERATION_PATH);
        CommandUtil.logMetaInfo(SetupConfig.getMountPathOf((String) workflowContext.getAttribute(WorkflowConstants.DEPLOY_LOGS)),
                ControllerActivity.DEPLOY_LOGS_AT);
        WorkflowLogger.footer();
        CommandUtil.logMetaInfo((String) workflowContext.getAttribute(WorkflowConstants.SERVICE_IP),
                ControllerActivity.SERVICE_IP);
        if (workflowContext.getAttribute(WorkflowConstants.SERVICE_URL) != null) {
            CommandUtil.logMetaInfo((String) workflowContext.getAttribute(WorkflowConstants.SERVICE_URL),
                    ControllerActivity.SERVICE_URL);
        }
    }
This class executes 'hyscale deploy service' command
It is a sub-command of the 'hyscale deploy' command

 Options:
 namespace - name of the namespace in which the service to be deployed
 appName - name of the app to logically group your services
 serviceSpecs - list of service specs that are to be deployed
 profiles - list of profiles for services
 profile - profile name to look for. Profile file should be present for all services in service spec (profiles and profile are mutually exclusive)
 verbose - prints the verbose output of the deployment
<p>
Eg 1: hyscale deploy service -f svca.hspec -f svcb.hspec -p dev-svca.hprof -n dev -a sample
Eg 2: hyscale deploy service -f svca.hspec -f svcb.hspec -P dev -n dev -a sample
<p>
Responsible for deploying a service with the given 'hspec' to
the configured kubernetes cluster.
performs a validation of input before starting deployment.
Performs functions ranging from image building to manifest generation to deployment.
Creates a WorkflowContext to communicate across all deployment stages.
@see HyscaleDeployCommand
Every command/sub-command has to implement the {@link Callable} so that
whenever the command is executed the {@link #call()}
method will be invoked
workflow-controller/controller-service/src/main/java/io/hyscale/controller/commands/deploy/HyscaleDeployServiceCommand.java