@contrail/cli 3.1.2 → 3.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/commands/app/delete.js +1 -1
- package/dist/commands/app/extension/deploy.js +4 -3
- package/dist/commands/app/extension/deployment/list.js +1 -1
- package/dist/commands/app/install.js +5 -5
- package/dist/commands/app/publish.js +2 -2
- package/dist/commands/app/uninstall.js +2 -2
- package/dist/commands/app/upgrade.js +3 -3
- package/dist/commands/file/upload.js +5 -4
- package/dist/commands/groups/export.js +5 -4
- package/dist/commands/groups/import.js +5 -5
- package/dist/commands/projects/export.js +5 -5
- package/dist/commands/projects/list.js +5 -5
- package/dist/commands/projects/load.js +5 -5
- package/dist/commands/types/getOptionSets.js +4 -4
- package/dist/commands/types/mergeOptionSets.js +4 -4
- package/dist/commands/types/mergeTypeProperties.js +4 -4
- package/dist/commands/types/parseOptionSetsHierarchyValuesToKeysLocalFile.js +2 -2
- package/dist/commands/types/parseOptionSetsLocalFiles.js +6 -6
- package/dist/commands/types/parseOptionSetsToFolderStructure.js +2 -2
- package/dist/commands/types/parseTypesFromFiles.js +2 -2
- package/dist/commands/types/parseTypesFromLocalFiles.js +2 -2
- package/dist/commands/types/parseTypesFromTemplateAndDataFromLocalFiles.js +2 -2
- package/dist/commands/types/parseTypesFromTemplateFromLocalFiles.js +2 -2
- package/dist/commands/types/uploadOptionSetsHierarchyLocalFile.js +1 -1
- package/dist/commands/types/uploadTypePropertyPolicies.js +1 -1
- package/dist/commands/users/export.js +4 -4
- package/dist/commands/users/import.js +5 -5
- package/dist/commands/workflow-templates/export.js +4 -4
- package/dist/helpers/app/extension-package.js +1 -1
- package/dist/helpers/app/extensions-deployer.js +1 -1
- package/dist/helpers/workflow-templates/helper.js +5 -5
- package/oclif.manifest.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ $ npm install -g @contrail/cli
|
|
|
17
17
|
$ contrail COMMAND
|
|
18
18
|
running command...
|
|
19
19
|
$ contrail (--version)
|
|
20
|
-
@contrail/cli/3.1.
|
|
20
|
+
@contrail/cli/3.1.4 darwin-x64 node-v22.12.0
|
|
21
21
|
$ contrail --help [COMMAND]
|
|
22
22
|
USAGE
|
|
23
23
|
$ contrail COMMAND
|
|
@@ -23,7 +23,7 @@ class DeleteApp extends basecommand_1.BaseCommand {
|
|
|
23
23
|
appDeclaration = (0, load_app_config_1.loadAppConfig)();
|
|
24
24
|
}
|
|
25
25
|
catch (e) {
|
|
26
|
-
logger_1.default.error(
|
|
26
|
+
logger_1.default.error(`${e} Application Removal Failed.`);
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
29
29
|
logger_1.default.info(`Removing Application. ${appDeclaration.appIdentifier}`);
|
|
@@ -100,8 +100,8 @@ class DeployExtension extends basecommand_1.BaseCommand {
|
|
|
100
100
|
throw new Error('No extensions defined in app.yml.');
|
|
101
101
|
}
|
|
102
102
|
const extensionDecl = extensions.find((ext) => ext.identifier === extensionIdentifier);
|
|
103
|
-
const message = `Extension '${extensionIdentifier}' not found in app.yml.`;
|
|
104
103
|
if (!extensionDecl) {
|
|
104
|
+
const message = `Extension '${extensionIdentifier}' not found in app.yml.`;
|
|
105
105
|
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} ${message}`);
|
|
106
106
|
throw new Error(message);
|
|
107
107
|
}
|
|
@@ -110,8 +110,9 @@ class DeployExtension extends basecommand_1.BaseCommand {
|
|
|
110
110
|
getExtensionDirectory(extensionIdentifier) {
|
|
111
111
|
const extensionDir = path.resolve(process.cwd(), 'extensions', extensionIdentifier);
|
|
112
112
|
if (!fs.existsSync(extensionDir)) {
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
const message = `Extension directory '${extensionDir}' does not exist.`;
|
|
114
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} ${message}`);
|
|
115
|
+
throw new Error(message);
|
|
115
116
|
}
|
|
116
117
|
return extensionDir;
|
|
117
118
|
}
|
|
@@ -24,7 +24,7 @@ class ListExtensionDeployments extends basecommand_1.BaseCommand {
|
|
|
24
24
|
};
|
|
25
25
|
async run() {
|
|
26
26
|
await (0, login_1.authUser)();
|
|
27
|
-
logger_1.default.info(
|
|
27
|
+
logger_1.default.info(`${chalk_1.default.blue.bold('START')} Listing extension deployments.`);
|
|
28
28
|
const appDeclaration = (0, load_app_config_1.loadAppConfig)();
|
|
29
29
|
const app = await (0, extension_package_1.getExistingApp)(appDeclaration);
|
|
30
30
|
const packages = this.flags.all
|
|
@@ -65,7 +65,7 @@ class InstallApp extends basecommand_1.BaseCommand {
|
|
|
65
65
|
if (app.configProperties) {
|
|
66
66
|
configProperties = await getConfigProperties(app);
|
|
67
67
|
}
|
|
68
|
-
logger_1.default.info(
|
|
68
|
+
logger_1.default.info(`${chalk_1.default.green.bold('APP INSTALLATION')} Installing app`);
|
|
69
69
|
const appOrg = await (0, apps_1.installAppToOrg)(app, configProperties);
|
|
70
70
|
// eslint-disable-next-line no-constant-condition
|
|
71
71
|
while (true) {
|
|
@@ -73,17 +73,17 @@ class InstallApp extends basecommand_1.BaseCommand {
|
|
|
73
73
|
try {
|
|
74
74
|
const installingApp = await new sdk_1.Entities().get({ entityName: 'app-org', id: appOrg.id });
|
|
75
75
|
if (installingApp.status === 'READY') {
|
|
76
|
-
logger_1.default.info(
|
|
76
|
+
logger_1.default.info(`${chalk_1.default.green.bold('APP INSTALLATION')} App installed`);
|
|
77
77
|
break;
|
|
78
78
|
}
|
|
79
79
|
if (installingApp.status === 'FAILED_INSTALLING') {
|
|
80
|
-
logger_1.default.info(
|
|
80
|
+
logger_1.default.info(`${chalk_1.default.red.bold('APP INSTALLATION')} App installation failed`);
|
|
81
81
|
return;
|
|
82
82
|
}
|
|
83
83
|
process.stdout.write('.');
|
|
84
84
|
}
|
|
85
85
|
catch (e) {
|
|
86
|
-
logger_1.default.info(
|
|
86
|
+
logger_1.default.info(`${chalk_1.default.red.bold('APP INSTALLATION')} App installation failed`);
|
|
87
87
|
logger_1.default.info('Error is:', e);
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
@@ -98,7 +98,7 @@ class InstallApp extends basecommand_1.BaseCommand {
|
|
|
98
98
|
},
|
|
99
99
|
]);
|
|
100
100
|
if (!answers.shouldInstallWorkflows) {
|
|
101
|
-
logger_1.default.info(
|
|
101
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('APP INSTALLATION')} Not installing associated app workflows`);
|
|
102
102
|
this.flags.installWorkflowTemplates = false;
|
|
103
103
|
}
|
|
104
104
|
else {
|
|
@@ -45,7 +45,7 @@ class PublishApp extends basecommand_1.BaseCommand {
|
|
|
45
45
|
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Application Deployment Failed . ${e}`);
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
|
-
logger_1.default.info(
|
|
48
|
+
logger_1.default.info(`${chalk_1.default.blue.bold('START')} Deploying Application. ${appDeclaration.appIdentifier}`);
|
|
49
49
|
try {
|
|
50
50
|
await (0, login_1.authUser)();
|
|
51
51
|
const app = await new app_deployer_1.AppDeployer(this.flags.verbose, this.flags.dryRun).deploy(appDeclaration);
|
|
@@ -57,7 +57,7 @@ class PublishApp extends basecommand_1.BaseCommand {
|
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
59
59
|
await (0, upgrade_1.upgradeAndWait)(installedAppOrg, app.latestAppVersionId);
|
|
60
|
-
logger_1.default.info(
|
|
60
|
+
logger_1.default.info(`${chalk_1.default.green.bold('UPGRADED')} App upgraded.`);
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
catch (e) {
|
|
@@ -43,7 +43,7 @@ class UninstallApp extends basecommand_1.BaseCommand {
|
|
|
43
43
|
if (!appToDelete) {
|
|
44
44
|
throw new Error(`App ${this.flags.appIdentifier} not found`);
|
|
45
45
|
}
|
|
46
|
-
this.log(
|
|
46
|
+
this.log(`${chalk_1.default.green.bold('APP UNINSTALLATION')} Uninstalling app`);
|
|
47
47
|
await (0, apps_1.deleteAppOrg)(appToDelete.id);
|
|
48
48
|
// eslint-disable-next-line no-constant-condition
|
|
49
49
|
while (true) {
|
|
@@ -63,7 +63,7 @@ class UninstallApp extends basecommand_1.BaseCommand {
|
|
|
63
63
|
break;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
-
this.log(
|
|
66
|
+
this.log(`${chalk_1.default.green.bold('APP UNINSTALLATION')} App Uninstalled`);
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
exports.default = UninstallApp;
|
|
@@ -81,7 +81,7 @@ class UpgradeApp extends basecommand_1.BaseCommand {
|
|
|
81
81
|
]);
|
|
82
82
|
versionToUpgrade = answers.appVersion;
|
|
83
83
|
}
|
|
84
|
-
this.log(
|
|
84
|
+
this.log(`${chalk_1.default.green.bold('APP UPGRADE')} Upgrading app to version ${versionToUpgrade}`);
|
|
85
85
|
await upgradeAndWait(appOrgToUpgrade, versionToUpgrade);
|
|
86
86
|
}
|
|
87
87
|
}
|
|
@@ -96,11 +96,11 @@ async function upgradeAndWait(appOrgToUpgrade, versionToUpgrade) {
|
|
|
96
96
|
id: appOrgToUpgrade.id,
|
|
97
97
|
});
|
|
98
98
|
if (appStillUpgrading.status === 'READY') {
|
|
99
|
-
logger_1.default.info(
|
|
99
|
+
logger_1.default.info(`${chalk_1.default.green.bold('APP UPGRADE')} App Upgraded`);
|
|
100
100
|
return;
|
|
101
101
|
}
|
|
102
102
|
if (appStillUpgrading.status === 'FAILED_INSTALLING') {
|
|
103
|
-
logger_1.default.info(
|
|
103
|
+
logger_1.default.info(`${chalk_1.default.red.bold('APP UPGRADE')} App Upgrade FAILED!`);
|
|
104
104
|
return;
|
|
105
105
|
}
|
|
106
106
|
logger_1.default.info('checking app status...');
|
|
@@ -32,15 +32,16 @@ class UploadFile extends basecommand_1.BaseCommand {
|
|
|
32
32
|
async run() {
|
|
33
33
|
try {
|
|
34
34
|
await (0, login_1.authUser)();
|
|
35
|
-
this.log(
|
|
35
|
+
this.log(`${chalk_1.default.blue.bold('START')} Uploading File.`);
|
|
36
|
+
this.log(`${chalk_1.default.yellow.bold('FILE')} Uploading`);
|
|
36
37
|
await uploadFile(this.args.fileLocation, this.args.contentType);
|
|
37
|
-
this.log(
|
|
38
|
+
this.log(`${chalk_1.default.yellow.bold('FILE')} Uploaded`);
|
|
38
39
|
}
|
|
39
40
|
catch (e) {
|
|
40
|
-
this.log(
|
|
41
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} User Upload Failed. ${e}`);
|
|
41
42
|
return;
|
|
42
43
|
}
|
|
43
|
-
this.log(
|
|
44
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} User Upload Complete.`);
|
|
44
45
|
}
|
|
45
46
|
}
|
|
46
47
|
exports.default = UploadFile;
|
|
@@ -36,15 +36,16 @@ class ExportGroups extends basecommand_1.BaseCommand {
|
|
|
36
36
|
async run() {
|
|
37
37
|
try {
|
|
38
38
|
await (0, login_1.authUser)();
|
|
39
|
-
this.log(
|
|
39
|
+
this.log(`${chalk_1.default.blue.bold('START')} Getting Groups.`);
|
|
40
|
+
this.log(`${chalk_1.default.yellow.bold('GROUPS')} Exporting`);
|
|
40
41
|
await exportGroups(this.flags.outFile ?? exports.DEFAULT_FILE_LOCATION, this.flags.overwrite);
|
|
41
|
-
this.log(
|
|
42
|
+
this.log(`${chalk_1.default.yellow.bold('GROUPS')} Exported`);
|
|
42
43
|
}
|
|
43
44
|
catch (e) {
|
|
44
|
-
this.log(
|
|
45
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} Groups download Failed. ${e}`);
|
|
45
46
|
return;
|
|
46
47
|
}
|
|
47
|
-
this.log(
|
|
48
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} Groups download Complete.`);
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
51
|
exports.default = ExportGroups;
|
|
@@ -26,16 +26,16 @@ class ImportGroups extends basecommand_1.BaseCommand {
|
|
|
26
26
|
async run() {
|
|
27
27
|
try {
|
|
28
28
|
await (0, login_1.authUser)();
|
|
29
|
-
this.log(
|
|
30
|
-
this.log(
|
|
29
|
+
this.log(`${chalk_1.default.blue.bold('START')} Uploading Groups.`);
|
|
30
|
+
this.log(`${chalk_1.default.yellow.bold('GROUP')} Uploading`);
|
|
31
31
|
await uploadGroups(this.args.groupsFile);
|
|
32
|
-
this.log(
|
|
32
|
+
this.log(`${chalk_1.default.yellow.bold('GROUP')} Uploaded`);
|
|
33
33
|
}
|
|
34
34
|
catch (e) {
|
|
35
|
-
this.log(
|
|
35
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} Group Upload Failed. ${e}`);
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
|
-
this.log(
|
|
38
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} Group Upload Complete.`);
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
exports.default = ImportGroups;
|
|
@@ -21,16 +21,16 @@ class ExportProjects extends basecommand_1.BaseCommand {
|
|
|
21
21
|
async run() {
|
|
22
22
|
try {
|
|
23
23
|
await (0, login_1.authUser)();
|
|
24
|
-
this.log(
|
|
25
|
-
this.log(
|
|
24
|
+
this.log(`${chalk_1.default.blue.bold('START')} Exporting Project.`);
|
|
25
|
+
this.log(`${chalk_1.default.yellow.bold('PROJECT')} Exporting`);
|
|
26
26
|
await (0, helpers_1.exportProject)(this.args.projectName);
|
|
27
|
-
this.log(
|
|
27
|
+
this.log(`${chalk_1.default.yellow.bold('PROJECT')} Exported`);
|
|
28
28
|
}
|
|
29
29
|
catch (e) {
|
|
30
|
-
this.log(
|
|
30
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} Project Export Failed. ${e}`);
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
|
-
this.log(
|
|
33
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} Project Export Complete.`);
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
exports.default = ExportProjects;
|
|
@@ -17,21 +17,21 @@ class ListProjects extends basecommand_1.BaseCommand {
|
|
|
17
17
|
async run() {
|
|
18
18
|
try {
|
|
19
19
|
await (0, login_1.authUser)();
|
|
20
|
-
this.log(
|
|
20
|
+
this.log(`${chalk_1.default.blue.bold('START')} Getting Projects.`);
|
|
21
21
|
const allWorkspaces = await new sdk_1.Entities().get({
|
|
22
22
|
entityName: 'workspace',
|
|
23
23
|
criteria: { isArchived: false },
|
|
24
24
|
});
|
|
25
|
-
this.log(
|
|
25
|
+
this.log(`${chalk_1.default.green.bold('PROJECTS:')}`);
|
|
26
26
|
//this.log(allWorkspaces.map(w => Object.assign({}, {name: w.name, id: w.id}))); // if we want ids
|
|
27
27
|
this.log(allWorkspaces.map((w) => w.name));
|
|
28
|
-
this.log(
|
|
28
|
+
this.log(`${chalk_1.default.yellow.bold('PROJECTS')} Done`);
|
|
29
29
|
}
|
|
30
30
|
catch (e) {
|
|
31
|
-
this.log(
|
|
31
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} Project download Failed. ${e}`);
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
this.log(
|
|
34
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} Project download Complete.`);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
exports.default = ListProjects;
|
|
@@ -27,18 +27,18 @@ class LoadProject extends basecommand_1.BaseCommand {
|
|
|
27
27
|
async run() {
|
|
28
28
|
try {
|
|
29
29
|
await (0, login_1.authUser)();
|
|
30
|
-
this.log(
|
|
31
|
-
this.log(
|
|
30
|
+
this.log(`${chalk_1.default.blue.bold('START')} Parsing Template.`);
|
|
31
|
+
this.log(`${chalk_1.default.yellow.bold('PROJECT')} Uploading`);
|
|
32
32
|
const templateFileLocation = this.args.templateFileLocation;
|
|
33
33
|
this.log('Using Template File Location: ', this.args.templateFileLocation);
|
|
34
34
|
await uploadProject(templateFileLocation);
|
|
35
|
-
this.log(
|
|
35
|
+
this.log(`${chalk_1.default.yellow.bold('PROJECT')} Uploaded`);
|
|
36
36
|
}
|
|
37
37
|
catch (e) {
|
|
38
|
-
this.log(
|
|
38
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} Project Upload Failed. ${e}`);
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
41
|
-
this.log(
|
|
41
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} Project Upload Complete.`);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
exports.default = LoadProject;
|
|
@@ -44,7 +44,7 @@ exports.default = GetOptionSets;
|
|
|
44
44
|
async function getAllOptionSets(outDir, overwrite, format) {
|
|
45
45
|
try {
|
|
46
46
|
const userConfig = await (0, login_1.authUser)();
|
|
47
|
-
logger_1.default.info(
|
|
47
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('START')} Getting all Option Sets for orgId: ${userConfig.orgId}`);
|
|
48
48
|
// make directory to house exports
|
|
49
49
|
if (!fs_1.default.existsSync(path.resolve(outDir))) {
|
|
50
50
|
fs_1.default.mkdirSync(path.resolve(outDir));
|
|
@@ -54,13 +54,13 @@ async function getAllOptionSets(outDir, overwrite, format) {
|
|
|
54
54
|
};
|
|
55
55
|
const reducedData = await reduceData(data);
|
|
56
56
|
await saveData(reducedData, outDir, overwrite, format);
|
|
57
|
-
logger_1.default.info(
|
|
57
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SETS')} Retrieved`);
|
|
58
58
|
}
|
|
59
59
|
catch (e) {
|
|
60
|
-
logger_1.default.info(
|
|
60
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Option Sets Retrieval Failed. ${e}`);
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
63
|
-
logger_1.default.info(
|
|
63
|
+
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} Option Sets Retrieval Complete.`);
|
|
64
64
|
}
|
|
65
65
|
exports.getAllOptionSets = getAllOptionSets;
|
|
66
66
|
async function reduceData(data) {
|
|
@@ -24,16 +24,16 @@ class MergeOptionSets extends basecommand_1.BaseCommand {
|
|
|
24
24
|
};
|
|
25
25
|
async run() {
|
|
26
26
|
try {
|
|
27
|
-
this.log(
|
|
27
|
+
this.log(`${chalk_1.default.yellow.bold('OPTION SET MERGE')} Importing local file`);
|
|
28
28
|
this.log('Using File: ', this.args.file);
|
|
29
29
|
await mergeOptionSets(this.args.file);
|
|
30
|
-
this.log(
|
|
30
|
+
this.log(`${chalk_1.default.yellow.bold('OPTION SET MERGE')} Merged`);
|
|
31
31
|
}
|
|
32
32
|
catch (e) {
|
|
33
|
-
this.log(
|
|
33
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} Merge Failed. ${e}`);
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
|
-
this.log(
|
|
36
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} Merge Complete.`);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
exports.default = MergeOptionSets;
|
|
@@ -29,19 +29,19 @@ class MergeTypeProperties extends basecommand_1.BaseCommand {
|
|
|
29
29
|
};
|
|
30
30
|
async run() {
|
|
31
31
|
try {
|
|
32
|
-
this.log(
|
|
32
|
+
this.log(`${chalk_1.default.yellow.bold('TYPE PROPERTIES MERGE')} Importing local file`);
|
|
33
33
|
this.log('Using File: ', this.args.file);
|
|
34
34
|
logger_1.default.info(`argv: ${JSON.stringify(this.argv)}`);
|
|
35
35
|
const typePaths = this.argv.slice(1);
|
|
36
36
|
this.log('Using TypePaths: ', typePaths);
|
|
37
37
|
await mergeTypeProperties(this.args.file, typePaths);
|
|
38
|
-
this.log(
|
|
38
|
+
this.log(`${chalk_1.default.yellow.bold('TYPE PROPERTIES MERGE')} Merged`);
|
|
39
39
|
}
|
|
40
40
|
catch (e) {
|
|
41
|
-
this.log(
|
|
41
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} Merge Failed. ${e}`);
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
|
-
this.log(
|
|
44
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} Merge Complete.`);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
exports.default = MergeTypeProperties;
|
|
@@ -33,13 +33,13 @@ exports.default = ParseOptionSetsHierarchyValuesToKeysLocalFile;
|
|
|
33
33
|
async function parseOptionSetsHierarchyValuesToKeysLocalFile(fileLocation) {
|
|
34
34
|
try {
|
|
35
35
|
await (0, login_1.authUser)();
|
|
36
|
-
logger_1.default.info(
|
|
36
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SET HIERARCHY PARSE')} Importing local file`);
|
|
37
37
|
logger_1.default.info('Using File: ', fileLocation);
|
|
38
38
|
const { keysInOrder, uploadedOptionHierarchyData } = await parseOptionSetHierarchiesLocalFile(fileLocation);
|
|
39
39
|
const parser = new json2csv_1.Parser(keysInOrder);
|
|
40
40
|
const csv = parser.parse(uploadedOptionHierarchyData);
|
|
41
41
|
saveData(csv);
|
|
42
|
-
logger_1.default.info(
|
|
42
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SET HIERARCHY PARSE')} Parsed`);
|
|
43
43
|
}
|
|
44
44
|
catch (e) {
|
|
45
45
|
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} PARSE Failed . ${e}`);
|
|
@@ -50,17 +50,17 @@ Countries, co_egypt, Egypt
|
|
|
50
50
|
};
|
|
51
51
|
async run() {
|
|
52
52
|
try {
|
|
53
|
-
this.log(
|
|
53
|
+
this.log(`${chalk_1.default.yellow.bold('OPTION SET PARSE')} Importing local file`);
|
|
54
54
|
this.log('Using File: ', this.args.file);
|
|
55
55
|
await parseOptionSetsLocalFiles(this.args.file, this.flags.csvStyle);
|
|
56
|
-
this.log(
|
|
56
|
+
this.log(`${chalk_1.default.yellow.bold('OPTION SET PARSE')} Parsed`);
|
|
57
57
|
}
|
|
58
58
|
catch (e) {
|
|
59
|
-
this.log(
|
|
59
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} PARSE Failed . ${e}`);
|
|
60
60
|
console.error(e);
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
63
|
-
this.log(
|
|
63
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} PARSE Complete.`);
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
exports.default = ParseOptionSetsLocalFiles;
|
|
@@ -69,11 +69,11 @@ async function ParseOptionSetsToFolderStructure(args) {
|
|
|
69
69
|
if (args?.length < 4) {
|
|
70
70
|
throw new Error('File name must be included.');
|
|
71
71
|
}
|
|
72
|
-
logger_1.default.info(
|
|
72
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SET PARSE')} Importing local file`);
|
|
73
73
|
const fileLocation = this.args.file;
|
|
74
74
|
logger_1.default.info('Using File: ', fileLocation);
|
|
75
75
|
await parseOptionSetsToFolderStructure(fileLocation);
|
|
76
|
-
logger_1.default.info(
|
|
76
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SET PARSE')} Parsed`);
|
|
77
77
|
}
|
|
78
78
|
catch (e) {
|
|
79
79
|
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} PARSE Failed . ${e}`);
|
|
@@ -20,10 +20,10 @@ class ParseOptionSetsToFolderStructure extends basecommand_1.BaseCommand {
|
|
|
20
20
|
};
|
|
21
21
|
async run() {
|
|
22
22
|
try {
|
|
23
|
-
logger_1.default.info(
|
|
23
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SET PARSE')} Importing local file`);
|
|
24
24
|
logger_1.default.info('Using File: ', this.args.file);
|
|
25
25
|
await parseOptionSetsToFolderStructure(this.args.file);
|
|
26
|
-
logger_1.default.info(
|
|
26
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SET PARSE')} Parsed`);
|
|
27
27
|
}
|
|
28
28
|
catch (e) {
|
|
29
29
|
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} PARSE Failed . ${e}`);
|
|
@@ -25,11 +25,11 @@ class ParseTypesFromFiles extends basecommand_1.BaseCommand {
|
|
|
25
25
|
};
|
|
26
26
|
async run() {
|
|
27
27
|
try {
|
|
28
|
-
logger_1.default.info(
|
|
28
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('TYPES AND OPTION SETS')} Parsing`);
|
|
29
29
|
const fileIds = this.argv;
|
|
30
30
|
logger_1.default.info('Using FileId(s): ', fileIds);
|
|
31
31
|
await (0, type_parser_1.parseTypesFromFiles)(fileIds);
|
|
32
|
-
logger_1.default.info(
|
|
32
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('TYPES AND OPTION SETS')} Parsed`);
|
|
33
33
|
}
|
|
34
34
|
catch (e) {
|
|
35
35
|
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Parsing Failed . ${e}`);
|
|
@@ -22,11 +22,11 @@ class ParseTypesFromLocalFiles extends basecommand_1.BaseCommand {
|
|
|
22
22
|
};
|
|
23
23
|
async run() {
|
|
24
24
|
try {
|
|
25
|
-
logger_1.default.info(
|
|
25
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('TYPES AND OPTION SETS')} Parsing`);
|
|
26
26
|
const fileLocations = this.argv;
|
|
27
27
|
logger_1.default.info('Using File Location(s): ', fileLocations);
|
|
28
28
|
await (0, type_parser_1.parseTypesFromLocalFiles)(fileLocations);
|
|
29
|
-
logger_1.default.info(
|
|
29
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('TYPES AND OPTION SETS')} Parsed`);
|
|
30
30
|
}
|
|
31
31
|
catch (e) {
|
|
32
32
|
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Parsing Failed . ${e}`);
|
|
@@ -22,13 +22,13 @@ class ParseTypesFromTemplateAndDataFromLocalFiles extends basecommand_1.BaseComm
|
|
|
22
22
|
};
|
|
23
23
|
async run() {
|
|
24
24
|
try {
|
|
25
|
-
logger_1.default.info(
|
|
25
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('TYPES AND OPTION SETS')} Parsing`);
|
|
26
26
|
const templateFileLocation = this.args.templateFile;
|
|
27
27
|
const dataFileLocations = this.argv.slice(1);
|
|
28
28
|
logger_1.default.info('Using Template File Location: ', templateFileLocation);
|
|
29
29
|
logger_1.default.info('Using Data File Location: ', dataFileLocations);
|
|
30
30
|
await (0, type_parser_1.parseTypesFromTemplateAndDataFromLocalFiles)(templateFileLocation, dataFileLocations);
|
|
31
|
-
logger_1.default.info(
|
|
31
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('TYPES AND OPTION SETS')} Parsed`);
|
|
32
32
|
}
|
|
33
33
|
catch (e) {
|
|
34
34
|
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Parsing Failed . ${e}`);
|
|
@@ -21,13 +21,13 @@ class ParseTypesFromTemplateFromLocalFiles extends basecommand_1.BaseCommand {
|
|
|
21
21
|
};
|
|
22
22
|
async run() {
|
|
23
23
|
try {
|
|
24
|
-
logger_1.default.info(
|
|
24
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('TYPES AND OPTION SETS')} Parsing`);
|
|
25
25
|
const templateFileLocation = this.args.templateFile;
|
|
26
26
|
const dataFileLocation = this.args.filePath;
|
|
27
27
|
logger_1.default.info('Using Template File Location: ', templateFileLocation);
|
|
28
28
|
logger_1.default.info('Using Data File Location: ', dataFileLocation);
|
|
29
29
|
await (0, type_parser_1.parseTypesFromTemplateFromLocalFiles)(templateFileLocation, dataFileLocation);
|
|
30
|
-
logger_1.default.info(
|
|
30
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('TYPES AND OPTION SETS')} Parsed`);
|
|
31
31
|
}
|
|
32
32
|
catch (e) {
|
|
33
33
|
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Parsing Failed . ${e}`);
|
|
@@ -35,7 +35,7 @@ exports.default = UploadOptionSetsHierarchyLocalFile;
|
|
|
35
35
|
async function uploadOptionSetsHierarchyLocalFile(fileLocation, name) {
|
|
36
36
|
try {
|
|
37
37
|
await (0, login_1.authUser)();
|
|
38
|
-
logger_1.default.info(
|
|
38
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SET HIERARCHY UPLOAD')} Importing local file`);
|
|
39
39
|
logger_1.default.info('Using File: ', fileLocation);
|
|
40
40
|
logger_1.default.info('Using Name: ', name);
|
|
41
41
|
await uploadOptionSetHierarchiesLocalFile(fileLocation, name);
|
|
@@ -37,7 +37,7 @@ exports.default = UploadTypePropertyPolicies;
|
|
|
37
37
|
async function uploadTypePropertyPolicies(dir) {
|
|
38
38
|
try {
|
|
39
39
|
await (0, login_1.authUser)();
|
|
40
|
-
logger_1.default.info(
|
|
40
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('TYPE PROPERTY POLICY')} Uploading`);
|
|
41
41
|
const [reducedTypePropertyPolicies, reducedTypePropertyPolicyLinks] = await loadTPPolicies(dir);
|
|
42
42
|
await uploadTPPolicyObjects(reducedTypePropertyPolicies);
|
|
43
43
|
await uploadTypePropertyPolicyLinks(reducedTypePropertyPolicyLinks);
|
|
@@ -35,15 +35,15 @@ class ExportUsers extends basecommand_1.BaseCommand {
|
|
|
35
35
|
async run() {
|
|
36
36
|
try {
|
|
37
37
|
await (0, login_1.authUser)();
|
|
38
|
-
this.log(
|
|
38
|
+
this.log(`${chalk_1.default.blue.bold('START')} Getting Users.`);
|
|
39
39
|
await exportUsers(this.flags.outFile ?? exports.DEFAULT_FILE_LOCATION, this.flags.overwrite);
|
|
40
|
-
this.log(
|
|
40
|
+
this.log(`${chalk_1.default.yellow.bold('USERS')} Done`);
|
|
41
41
|
}
|
|
42
42
|
catch (e) {
|
|
43
|
-
this.log(
|
|
43
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} Users download Failed. ${e}`);
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
46
|
-
this.log(
|
|
46
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} Users download Complete.`);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
exports.default = ExportUsers;
|
|
@@ -25,16 +25,16 @@ class ImportUsers extends basecommand_1.BaseCommand {
|
|
|
25
25
|
async run() {
|
|
26
26
|
try {
|
|
27
27
|
await (0, login_1.authUser)();
|
|
28
|
-
this.log(
|
|
29
|
-
this.log(
|
|
28
|
+
this.log(`${chalk_1.default.blue.bold('START')} Uploading Users.`);
|
|
29
|
+
this.log(`${chalk_1.default.yellow.bold('USER')} Uploading`);
|
|
30
30
|
await uploadUsers(this.args.usersFile);
|
|
31
|
-
this.log(
|
|
31
|
+
this.log(`${chalk_1.default.yellow.bold('USER')} Uploaded`);
|
|
32
32
|
}
|
|
33
33
|
catch (e) {
|
|
34
|
-
this.log(
|
|
34
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} User Upload Failed. ${e}`);
|
|
35
35
|
return;
|
|
36
36
|
}
|
|
37
|
-
this.log(
|
|
37
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} User Upload Complete.`);
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
exports.default = ImportUsers;
|
|
@@ -37,15 +37,15 @@ class ExportWorkflows extends basecommand_1.BaseCommand {
|
|
|
37
37
|
async run() {
|
|
38
38
|
try {
|
|
39
39
|
await (0, login_1.authUser)();
|
|
40
|
-
this.log(
|
|
40
|
+
this.log(`${chalk_1.default.blue.bold('START')} Getting Workflows.`);
|
|
41
41
|
await exportWorkflows(this.flags.outFile ?? exports.DEFAULT_FILE_LOCATION, this.flags.overwrite);
|
|
42
|
-
this.log(
|
|
42
|
+
this.log(`${chalk_1.default.yellow.bold('WORKFLOWS')} Done`);
|
|
43
43
|
}
|
|
44
44
|
catch (e) {
|
|
45
|
-
this.log(
|
|
45
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} Workflows download Failed. ${e}`);
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
|
-
this.log(
|
|
48
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} Workflows download Complete.`);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
exports.default = ExportWorkflows;
|
|
@@ -115,7 +115,7 @@ async function uploadExtensionPackage(appExtensionPackage, tmpDir) {
|
|
|
115
115
|
}
|
|
116
116
|
async function createExtensionPackage(appId, extensionDir) {
|
|
117
117
|
const tmpDir = createTmpDir(extensionDir);
|
|
118
|
-
logger_1.default.info(
|
|
118
|
+
logger_1.default.info(`${chalk_1.default.blue.bold('START')} Creating extension package at ${tmpDir}`);
|
|
119
119
|
cleanAndPrepareTmpDir(extensionDir, tmpDir);
|
|
120
120
|
installDependenciesInExtensionDirectory(extensionDir);
|
|
121
121
|
installDependenciesInTmpDir(tmpDir);
|
|
@@ -21,7 +21,7 @@ class ExtensionsDeployer {
|
|
|
21
21
|
return;
|
|
22
22
|
}
|
|
23
23
|
// UPSERT / DELETE BASED ON EXTENSION IDENTIFIER
|
|
24
|
-
logger_1.default.info(
|
|
24
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('EXTENSION')} Deploying extensions.`);
|
|
25
25
|
const existingExtensions = await getExtensionDefinitionsForAppVersion(app);
|
|
26
26
|
logger_1.default.debug(appDeclaration.extensions);
|
|
27
27
|
if (appDeclaration.extensions) {
|
|
@@ -19,7 +19,7 @@ class LocalWorkflowTemplateDeployer {
|
|
|
19
19
|
// FETCH ALL WORKFLOWS FROM THE API.
|
|
20
20
|
const existingWorkflows = await (0, event_workflow_templates_1.getExistingWorkflowTemplates)();
|
|
21
21
|
// UPSERT / DELETE BASED ON WORKFLOW TEMPLATES IDENTIFIER
|
|
22
|
-
logger_1.default.info(
|
|
22
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('WORKFLOW TEMPLATES')} Deploying workflow templates.`);
|
|
23
23
|
logger_1.default.info(wtDeclaration);
|
|
24
24
|
for (const workflowKey of Object.keys(wtDeclaration.workflows)) {
|
|
25
25
|
await this.deployWorkflowTemplate(wtDeclaration.workflows[workflowKey], existingWorkflows, wtDeclaration.appIdentifier);
|
|
@@ -50,7 +50,7 @@ class LocalWorkflowTemplateDeployer {
|
|
|
50
50
|
if (workflowTemplate.crons) {
|
|
51
51
|
await this.createWorkflowSchedule(workflowTemplate, newWorkflowTemplate.id);
|
|
52
52
|
}
|
|
53
|
-
logger_1.default.info(
|
|
53
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('WORKFLOW TEMPLATES')} Creating new workflow template: ${workflowKey}`);
|
|
54
54
|
return newWorkflowTemplate;
|
|
55
55
|
}
|
|
56
56
|
async populateActionIds(workflowTemplate, workflowKey, appIdentifier) {
|
|
@@ -115,7 +115,7 @@ class LocalWorkflowTemplateDeployer {
|
|
|
115
115
|
const cronsToRemove = existingSchedules.filter((x) => !newCronNames.includes(x.name));
|
|
116
116
|
const cronsToEdit = existingSchedules.filter((x) => newCronNames.includes(x.name));
|
|
117
117
|
for (const cron of cronsToAdd) {
|
|
118
|
-
logger_1.default.info(
|
|
118
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('WORKFLOW TEMPLATES')} Adding new schedule: ${cron.name}`);
|
|
119
119
|
await (0, schedules_1.createSchedule)({
|
|
120
120
|
cron: cron.cron,
|
|
121
121
|
entityReference: `event-workflow-template:${workflowId}`,
|
|
@@ -130,11 +130,11 @@ class LocalWorkflowTemplateDeployer {
|
|
|
130
130
|
});
|
|
131
131
|
}
|
|
132
132
|
for (const cron of cronsToRemove) {
|
|
133
|
-
logger_1.default.info(
|
|
133
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('WORKFLOW TEMPLATES')} Removing schedule: ${cron.name}`);
|
|
134
134
|
await (0, schedules_1.deleteSchedule)(cron.id);
|
|
135
135
|
}
|
|
136
136
|
for (const cron of cronsToEdit) {
|
|
137
|
-
logger_1.default.info(
|
|
137
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('WORKFLOW TEMPLATES')} Updating schedule: ${cron.name}`);
|
|
138
138
|
const newCron = workflowTemplate.crons.find((x) => x.name === cron.name);
|
|
139
139
|
await (0, schedules_1.updateSchedule)({
|
|
140
140
|
id: cron.id,
|
package/oclif.manifest.json
CHANGED