diff --git a/dist/index.js b/dist/index.js
index e69de29b..deb5b8f2 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -0,0 +1,390754 @@
+require('./sourcemap-register.js');/******/ (() => { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
+
+/***/ 94822:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const core = __importStar(__nccwpck_require__(42186));
+const model_1 = __nccwpck_require__(41359);
+const cli_1 = __nccwpck_require__(55651);
+const mac_builder_1 = __importDefault(__nccwpck_require__(39364));
+const platform_setup_1 = __importDefault(__nccwpck_require__(64423));
+function runMain() {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ if (cli_1.Cli.InitCliMode()) {
+ yield cli_1.Cli.RunCli();
+ return;
+ }
+ model_1.Action.checkCompatibility();
+ model_1.Cache.verify();
+ const { workspace, actionFolder } = model_1.Action;
+ const buildParameters = yield model_1.BuildParameters.create();
+ const baseImage = new model_1.ImageTag(buildParameters);
+ if (buildParameters.cloudRunnerCluster !== 'local') {
+ yield model_1.CloudRunner.run(buildParameters, baseImage.toString());
+ }
+ else {
+ core.info('Building locally');
+ yield platform_setup_1.default.setup(buildParameters, actionFolder);
+ if (process.platform === 'darwin') {
+ mac_builder_1.default.run(actionFolder, workspace, buildParameters);
+ }
+ else {
+ yield model_1.Docker.run(baseImage, Object.assign({ workspace, actionFolder }, buildParameters));
+ }
+ }
+ // Set output
+ yield model_1.Output.setBuildVersion(buildParameters.buildVersion);
+ }
+ catch (error) {
+ core.setFailed(error.message);
+ }
+ });
+}
+runMain();
+
+
+/***/ }),
+
+/***/ 89088:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const path_1 = __importDefault(__nccwpck_require__(71017));
+class Action {
+ static get supportedPlatforms() {
+ return ['linux', 'win32', 'darwin'];
+ }
+ static get isRunningLocally() {
+ return process.env.RUNNER_WORKSPACE === undefined;
+ }
+ static get isRunningFromSource() {
+ return path_1.default.basename(__dirname) === 'model';
+ }
+ static get canonicalName() {
+ return 'unity-builder';
+ }
+ static get rootFolder() {
+ if (Action.isRunningFromSource) {
+ return path_1.default.dirname(path_1.default.dirname(path_1.default.dirname(__filename)));
+ }
+ return path_1.default.dirname(path_1.default.dirname(__filename));
+ }
+ static get actionFolder() {
+ return `${Action.rootFolder}/dist`;
+ }
+ static get workspace() {
+ return process.env.GITHUB_WORKSPACE;
+ }
+ static checkCompatibility() {
+ const currentPlatform = process.platform;
+ if (!Action.supportedPlatforms.includes(currentPlatform)) {
+ throw new Error(`Currently ${currentPlatform}-platform is not supported`);
+ }
+ }
+}
+exports["default"] = Action;
+
+
+/***/ }),
+
+/***/ 43059:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const core = __importStar(__nccwpck_require__(42186));
+const semver = __importStar(__nccwpck_require__(11383));
+class AndroidVersioning {
+ static determineVersionCode(version, inputVersionCode) {
+ if (!inputVersionCode) {
+ return AndroidVersioning.versionToVersionCode(version);
+ }
+ return inputVersionCode;
+ }
+ static versionToVersionCode(version) {
+ if (version === 'none') {
+ core.info(`Versioning strategy is set to ${version}, so android version code should not be applied.`);
+ return 0;
+ }
+ const parsedVersion = semver.parse(version);
+ if (!parsedVersion) {
+ core.warning(`Could not parse "${version}" to semver, defaulting android version code to 1`);
+ return 1;
+ }
+ // The greatest value Google Plays allows is 2100000000.
+ // Allow for 3 patch digits, 3 minor digits and 3 major digits.
+ const versionCode = parsedVersion.major * 1000000 + parsedVersion.minor * 1000 + parsedVersion.patch;
+ if (versionCode >= 2050000000) {
+ throw new Error(`Generated versionCode ${versionCode} is dangerously close to the maximum allowed number 2100000000. Consider a different versioning scheme to be able to continue updating your application.`);
+ }
+ core.info(`Using android versionCode ${versionCode}`);
+ return versionCode;
+ }
+ static determineSdkManagerParameters(targetSdkVersion) {
+ const parsedVersion = Number.parseInt(targetSdkVersion.slice(-2), 10);
+ return Number.isNaN(parsedVersion) ? '' : `platforms;android-${parsedVersion}`;
+ }
+}
+exports["default"] = AndroidVersioning;
+
+
+/***/ }),
+
+/***/ 80787:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const nanoid_1 = __nccwpck_require__(17592);
+const android_versioning_1 = __importDefault(__nccwpck_require__(43059));
+const cloud_runner_constants_1 = __importDefault(__nccwpck_require__(91311));
+const cloud_runner_guid_1 = __importDefault(__nccwpck_require__(17963));
+const input_1 = __importDefault(__nccwpck_require__(91933));
+const platform_1 = __importDefault(__nccwpck_require__(9707));
+const unity_versioning_1 = __importDefault(__nccwpck_require__(17146));
+const versioning_1 = __importDefault(__nccwpck_require__(93901));
+const git_repo_1 = __nccwpck_require__(24271);
+const github_cli_1 = __nccwpck_require__(44990);
+const cli_1 = __nccwpck_require__(55651);
+const github_1 = __importDefault(__nccwpck_require__(83654));
+const cloud_runner_options_1 = __importDefault(__nccwpck_require__(96552));
+class BuildParameters {
+ static create() {
+ return __awaiter(this, void 0, void 0, function* () {
+ const buildFile = this.parseBuildFile(input_1.default.buildName, input_1.default.targetPlatform, input_1.default.androidAppBundle);
+ const editorVersion = unity_versioning_1.default.determineUnityVersion(input_1.default.projectPath, input_1.default.unityVersion);
+ const buildVersion = yield versioning_1.default.determineBuildVersion(input_1.default.versioningStrategy, input_1.default.specifiedVersion);
+ const androidVersionCode = android_versioning_1.default.determineVersionCode(buildVersion, input_1.default.androidVersionCode);
+ const androidSdkManagerParameters = android_versioning_1.default.determineSdkManagerParameters(input_1.default.androidTargetSdkVersion);
+ // Todo - Don't use process.env directly, that's what the input model class is for.
+ // ---
+ let unitySerial = '';
+ if (!process.env.UNITY_SERIAL && github_1.default.githubInputEnabled) {
+ // No serial was present, so it is a personal license that we need to convert
+ if (!process.env.UNITY_LICENSE) {
+ throw new Error(`Missing Unity License File and no Serial was found. If this
+ is a personal license, make sure to follow the activation
+ steps and set the UNITY_LICENSE GitHub secret or enter a Unity
+ serial number inside the UNITY_SERIAL GitHub secret.`);
+ }
+ unitySerial = this.getSerialFromLicenseFile(process.env.UNITY_LICENSE);
+ }
+ else {
+ unitySerial = process.env.UNITY_SERIAL;
+ }
+ return {
+ editorVersion,
+ customImage: input_1.default.customImage,
+ unitySerial,
+ runnerTempPath: process.env.RUNNER_TEMP,
+ targetPlatform: input_1.default.targetPlatform,
+ projectPath: input_1.default.projectPath,
+ buildName: input_1.default.buildName,
+ buildPath: `${input_1.default.buildsPath}/${input_1.default.targetPlatform}`,
+ buildFile,
+ buildMethod: input_1.default.buildMethod,
+ buildVersion,
+ androidVersionCode,
+ androidKeystoreName: input_1.default.androidKeystoreName,
+ androidKeystoreBase64: input_1.default.androidKeystoreBase64,
+ androidKeystorePass: input_1.default.androidKeystorePass,
+ androidKeyaliasName: input_1.default.androidKeyaliasName,
+ androidKeyaliasPass: input_1.default.androidKeyaliasPass,
+ androidTargetSdkVersion: input_1.default.androidTargetSdkVersion,
+ androidSdkManagerParameters,
+ customParameters: input_1.default.customParameters,
+ sshAgent: input_1.default.sshAgent,
+ gitPrivateToken: input_1.default.gitPrivateToken || (yield github_cli_1.GithubCliReader.GetGitHubAuthToken()),
+ chownFilesTo: input_1.default.chownFilesTo,
+ cloudRunnerCluster: cloud_runner_options_1.default.cloudRunnerCluster,
+ cloudRunnerBuilderPlatform: cloud_runner_options_1.default.cloudRunnerBuilderPlatform,
+ awsBaseStackName: cloud_runner_options_1.default.awsBaseStackName,
+ kubeConfig: cloud_runner_options_1.default.kubeConfig,
+ cloudRunnerMemory: cloud_runner_options_1.default.cloudRunnerMemory,
+ cloudRunnerCpu: cloud_runner_options_1.default.cloudRunnerCpu,
+ kubeVolumeSize: cloud_runner_options_1.default.kubeVolumeSize,
+ kubeVolume: cloud_runner_options_1.default.kubeVolume,
+ postBuildSteps: cloud_runner_options_1.default.postBuildSteps,
+ preBuildSteps: cloud_runner_options_1.default.preBuildSteps,
+ customStepFiles: cloud_runner_options_1.default.customStepFiles,
+ customHookFiles: cloud_runner_options_1.default.customHookFiles,
+ customJob: cloud_runner_options_1.default.customJob,
+ runNumber: input_1.default.runNumber,
+ branch: input_1.default.branch.replace('/head', '') || (yield git_repo_1.GitRepoReader.GetBranch()),
+ cloudRunnerBranch: cloud_runner_options_1.default.cloudRunnerBranch.split('/').reverse()[0],
+ cloudRunnerIntegrationTests: cloud_runner_options_1.default.cloudRunnerTests,
+ githubRepo: input_1.default.githubRepo || (yield git_repo_1.GitRepoReader.GetRemote()) || 'game-ci/unity-builder',
+ isCliMode: cli_1.Cli.isCliMode,
+ awsStackName: cloud_runner_options_1.default.awsBaseStackName,
+ gitSha: input_1.default.gitSha,
+ logId: nanoid_1.customAlphabet(cloud_runner_constants_1.default.alphabet, 9)(),
+ buildGuid: cloud_runner_guid_1.default.generateGuid(input_1.default.runNumber, input_1.default.targetPlatform),
+ customJobHooks: cloud_runner_options_1.default.customJobHooks(),
+ readInputOverrideCommand: cloud_runner_options_1.default.readInputOverrideCommand(),
+ readInputFromOverrideList: cloud_runner_options_1.default.readInputFromOverrideList(),
+ kubeStorageClass: cloud_runner_options_1.default.kubeStorageClass,
+ cacheKey: cloud_runner_options_1.default.cacheKey,
+ };
+ });
+ }
+ static parseBuildFile(filename, platform, androidAppBundle) {
+ if (platform_1.default.isWindows(platform)) {
+ return `${filename}.exe`;
+ }
+ if (platform_1.default.isAndroid(platform)) {
+ return androidAppBundle ? `${filename}.aab` : `${filename}.apk`;
+ }
+ return filename;
+ }
+ static getSerialFromLicenseFile(license) {
+ const startKey = ``;
+ const startIndex = license.indexOf(startKey) + startKey.length;
+ if (startIndex < 0) {
+ throw new Error(`License File was corrupted, unable to locate serial`);
+ }
+ const endIndex = license.indexOf(endKey, startIndex);
+ // Slice off the first 4 characters as they are garbage values
+ return Buffer.from(license.slice(startIndex, endIndex), 'base64').toString('binary').slice(4);
+ }
+}
+exports["default"] = BuildParameters;
+
+
+/***/ }),
+
+/***/ 97134:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const core = __importStar(__nccwpck_require__(42186));
+const fs_1 = __importDefault(__nccwpck_require__(57147));
+const action_1 = __importDefault(__nccwpck_require__(89088));
+const project_1 = __importDefault(__nccwpck_require__(88666));
+class Cache {
+ static verify() {
+ if (!fs_1.default.existsSync(project_1.default.libraryFolder)) {
+ this.notifyAboutCachingPossibility();
+ }
+ }
+ static notifyAboutCachingPossibility() {
+ if (action_1.default.isRunningLocally) {
+ return;
+ }
+ core.warning(`
+ Library folder does not exist.
+ Consider setting up caching to speed up your workflow,
+ if this is not your first build.
+ `);
+ }
+}
+exports["default"] = Cache;
+
+
+/***/ }),
+
+/***/ 85301:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.CliFunction = exports.CliFunctionsRepository = void 0;
+class CliFunctionsRepository {
+ static PushCliFunction(target, propertyKey, descriptor, key, description) {
+ CliFunctionsRepository.targets.push({
+ target,
+ propertyKey,
+ descriptor,
+ key,
+ description,
+ });
+ }
+ static GetCliFunctions(key) {
+ const results = CliFunctionsRepository.targets.find((x) => x.key === key);
+ if (results === undefined || results.length === 0) {
+ throw new Error(`no CLI mode found for ${key}`);
+ }
+ return results;
+ }
+ static GetAllCliModes() {
+ return CliFunctionsRepository.targets.map((x) => {
+ return {
+ key: x.key,
+ description: x.description,
+ };
+ });
+ }
+ // eslint-disable-next-line no-unused-vars
+ static PushCliFunctionSource(cliFunction) { }
+}
+exports.CliFunctionsRepository = CliFunctionsRepository;
+CliFunctionsRepository.targets = [];
+function CliFunction(key, description) {
+ return (target, propertyKey, descriptor) => {
+ CliFunctionsRepository.PushCliFunction(target, propertyKey, descriptor, key, description);
+ };
+}
+exports.CliFunction = CliFunction;
+
+
+/***/ }),
+
+/***/ 55651:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Cli = void 0;
+const commander_ts_1 = __nccwpck_require__(40451);
+const __1 = __nccwpck_require__(41359);
+const core = __importStar(__nccwpck_require__(42186));
+const action_yaml_1 = __nccwpck_require__(11091);
+const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
+const cloud_runner_query_override_1 = __importDefault(__nccwpck_require__(31011));
+const cli_functions_repository_1 = __nccwpck_require__(85301);
+const aws_cli_commands_1 = __nccwpck_require__(34340);
+const caching_1 = __nccwpck_require__(32885);
+const lfs_hashing_1 = __nccwpck_require__(8915);
+const remote_client_1 = __nccwpck_require__(48135);
+const cloud_runner_options_reader_1 = __importDefault(__nccwpck_require__(3343));
+const github_1 = __importDefault(__nccwpck_require__(83654));
+const task_parameter_serializer_1 = __nccwpck_require__(35346);
+class Cli {
+ static get isCliMode() {
+ return Cli.options !== undefined && Cli.options.mode !== undefined && Cli.options.mode !== '';
+ }
+ static query(key, alternativeKey) {
+ if (Cli.options && Cli.options[key] !== undefined) {
+ return Cli.options[key];
+ }
+ if (Cli.options && alternativeKey && Cli.options[alternativeKey] !== undefined) {
+ return Cli.options[alternativeKey];
+ }
+ return;
+ }
+ static InitCliMode() {
+ cli_functions_repository_1.CliFunctionsRepository.PushCliFunctionSource(aws_cli_commands_1.AwsCliCommands);
+ cli_functions_repository_1.CliFunctionsRepository.PushCliFunctionSource(caching_1.Caching);
+ cli_functions_repository_1.CliFunctionsRepository.PushCliFunctionSource(lfs_hashing_1.LfsHashing);
+ cli_functions_repository_1.CliFunctionsRepository.PushCliFunctionSource(remote_client_1.RemoteClient);
+ const program = new commander_ts_1.Command();
+ program.version('0.0.1');
+ const properties = cloud_runner_options_reader_1.default.GetProperties();
+ const actionYamlReader = new action_yaml_1.ActionYamlReader();
+ for (const element of properties) {
+ program.option(`--${element} <${element}>`, actionYamlReader.GetActionYamlValue(element));
+ }
+ program.option('-m, --mode ', cli_functions_repository_1.CliFunctionsRepository.GetAllCliModes()
+ .map((x) => `${x.key} (${x.description})`)
+ .join(` | `));
+ program.option('--populateOverride ', 'should use override query to pull input false by default');
+ program.option('--cachePushFrom ', 'cache push from source folder');
+ program.option('--cachePushTo ', 'cache push to caching folder');
+ program.option('--artifactName ', 'caching artifact name');
+ program.option('--select