@Override
    public Integer call() throws Exception {
        if (!CommandUtil.isInputValid(this)) {
            return ToolConstants.INVALID_INPUT_ERROR_CODE;
        }

		WorkflowContext workflowContext = new WorkflowContextBuilder(appName).withNamespace(namespace).
				withAuthConfig(authConfigBuilder.getAuthConfig()).get();
        workflowContext.addAttribute(WorkflowConstants.CLEAN_UP_APP_DIR, true);

        if (!clusterValidator.validate(workflowContext)) {
            WorkflowLogger.logPersistedActivities();
            return ToolConstants.INVALID_INPUT_ERROR_CODE;
        }

        WorkflowLogger.header(ControllerActivity.APP_NAME, appName);
        try {
            undeployComponentInvoker.execute(workflowContext);
        } catch (HyscaleException e) {
            logger.error("Error while undeploying app: {}, in namespace: {}", appName, namespace, e);
            throw e;
        } finally {
            UndeployCommandUtil.logUndeployInfo();
        }
        return ToolConstants.HYSCALE_SUCCESS_CODE;
    }
This class executes 'hyscale undeploy app' command
 It is a sub-command of the 'hyscale undeploy' command
 @see HyscaleUndeployCommand
 Every command/sub-command has to implement the {@link Callable} so that
 whenever the command is executed the {@link #call()}
 method will be invoked

Options:
 namespace - name of the namespace from which the app has to be undeployed
 appName - name of the app to be undeployed

Eg: hyscale undeploy app -a sample -n dev

Undeploys the app from the given namespace in the
configured kubernetes cluster.
Undeploys all the resources except the pvcs from the cluster related 
to the app from the namespace.
Note: Undeploy does not clear the namespace
workflow-controller/controller-service/src/main/java/io/hyscale/controller/commands/undeploy/HyscaleUndeployAppCommand.java