@phystack/cli 4.4.29
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/LICENSE.md +19 -0
- package/README.md +24 -0
- package/bin/index.js +2 -0
- package/dist/commands/app/build-apps.js +66 -0
- package/dist/commands/app/build-apps.js.map +1 -0
- package/dist/commands/app/build-container-remote.js +171 -0
- package/dist/commands/app/build-container-remote.js.map +1 -0
- package/dist/commands/app/build-container.js +322 -0
- package/dist/commands/app/build-container.js.map +1 -0
- package/dist/commands/app/build.js +375 -0
- package/dist/commands/app/build.js.map +1 -0
- package/dist/commands/app/create.js +409 -0
- package/dist/commands/app/create.js.map +1 -0
- package/dist/commands/app/deploy.js +176 -0
- package/dist/commands/app/deploy.js.map +1 -0
- package/dist/commands/app/device-picker.js +150 -0
- package/dist/commands/app/device-picker.js.map +1 -0
- package/dist/commands/app/import.js +303 -0
- package/dist/commands/app/import.js.map +1 -0
- package/dist/commands/app/list.js +26 -0
- package/dist/commands/app/list.js.map +1 -0
- package/dist/commands/app/publish.js +327 -0
- package/dist/commands/app/publish.js.map +1 -0
- package/dist/commands/app/settings.js +129 -0
- package/dist/commands/app/settings.js.map +1 -0
- package/dist/commands/app/types.js +13 -0
- package/dist/commands/app/types.js.map +1 -0
- package/dist/commands/app/upload-description.js +139 -0
- package/dist/commands/app/upload-description.js.map +1 -0
- package/dist/commands/app/upload-settings.js +29 -0
- package/dist/commands/app/upload-settings.js.map +1 -0
- package/dist/commands/app/utils.js +86 -0
- package/dist/commands/app/utils.js.map +1 -0
- package/dist/commands/auth/login.js +111 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.js +19 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/descriptor/create.js +143 -0
- package/dist/commands/descriptor/create.js.map +1 -0
- package/dist/commands/descriptor/index.js +36 -0
- package/dist/commands/descriptor/index.js.map +1 -0
- package/dist/commands/descriptor/publish.js +163 -0
- package/dist/commands/descriptor/publish.js.map +1 -0
- package/dist/commands/descriptor/show.js +68 -0
- package/dist/commands/descriptor/show.js.map +1 -0
- package/dist/commands/dev/develop.js +175 -0
- package/dist/commands/dev/develop.js.map +1 -0
- package/dist/commands/dev/forward.js +118 -0
- package/dist/commands/dev/forward.js.map +1 -0
- package/dist/commands/dev/index.js +66 -0
- package/dist/commands/dev/index.js.map +1 -0
- package/dist/commands/dev/list.js +96 -0
- package/dist/commands/dev/list.js.map +1 -0
- package/dist/commands/dev/screen-devtools.js +156 -0
- package/dist/commands/dev/screen-devtools.js.map +1 -0
- package/dist/commands/dev/select.js +118 -0
- package/dist/commands/dev/select.js.map +1 -0
- package/dist/commands/dev/shell.js +171 -0
- package/dist/commands/dev/shell.js.map +1 -0
- package/dist/commands/dev/vnc.js +75 -0
- package/dist/commands/dev/vnc.js.map +1 -0
- package/dist/commands/device/select.js +118 -0
- package/dist/commands/device/select.js.map +1 -0
- package/dist/commands/flash.js +1120 -0
- package/dist/commands/flash.js.map +1 -0
- package/dist/commands/inst/create.js +55 -0
- package/dist/commands/inst/create.js.map +1 -0
- package/dist/commands/inst/index.js +15 -0
- package/dist/commands/inst/index.js.map +1 -0
- package/dist/commands/inst/list.js +26 -0
- package/dist/commands/inst/list.js.map +1 -0
- package/dist/commands/legacydev/debug.js +11 -0
- package/dist/commands/legacydev/debug.js.map +1 -0
- package/dist/commands/legacydev/deploy.js +15 -0
- package/dist/commands/legacydev/deploy.js.map +1 -0
- package/dist/commands/legacydev/dumpTwin.js +27 -0
- package/dist/commands/legacydev/dumpTwin.js.map +1 -0
- package/dist/commands/legacydev/forward.js +104 -0
- package/dist/commands/legacydev/forward.js.map +1 -0
- package/dist/commands/legacydev/index.js +188 -0
- package/dist/commands/legacydev/index.js.map +1 -0
- package/dist/commands/legacydev/invoke.js +29 -0
- package/dist/commands/legacydev/invoke.js.map +1 -0
- package/dist/commands/legacydev/js.js +69 -0
- package/dist/commands/legacydev/js.js.map +1 -0
- package/dist/commands/legacydev/list.js +196 -0
- package/dist/commands/legacydev/list.js.map +1 -0
- package/dist/commands/legacydev/logs.js +60 -0
- package/dist/commands/legacydev/logs.js.map +1 -0
- package/dist/commands/legacydev/modules.js +50 -0
- package/dist/commands/legacydev/modules.js.map +1 -0
- package/dist/commands/legacydev/move.js +23 -0
- package/dist/commands/legacydev/move.js.map +1 -0
- package/dist/commands/legacydev/ota.js +88 -0
- package/dist/commands/legacydev/ota.js.map +1 -0
- package/dist/commands/legacydev/patchTwin.js +21 -0
- package/dist/commands/legacydev/patchTwin.js.map +1 -0
- package/dist/commands/legacydev/pin.js +23 -0
- package/dist/commands/legacydev/pin.js.map +1 -0
- package/dist/commands/legacydev/pub.js +25 -0
- package/dist/commands/legacydev/pub.js.map +1 -0
- package/dist/commands/legacydev/rdp.js +64 -0
- package/dist/commands/legacydev/rdp.js.map +1 -0
- package/dist/commands/legacydev/screen-devtools.js +142 -0
- package/dist/commands/legacydev/screen-devtools.js.map +1 -0
- package/dist/commands/legacydev/settingsShow.js +89 -0
- package/dist/commands/legacydev/settingsShow.js.map +1 -0
- package/dist/commands/legacydev/settingsUpdate.js +114 -0
- package/dist/commands/legacydev/settingsUpdate.js.map +1 -0
- package/dist/commands/legacydev/shell.js +167 -0
- package/dist/commands/legacydev/shell.js.map +1 -0
- package/dist/commands/legacydev/showTwin.js +9 -0
- package/dist/commands/legacydev/showTwin.js.map +1 -0
- package/dist/commands/legacydev/statusLog.js +56 -0
- package/dist/commands/legacydev/statusLog.js.map +1 -0
- package/dist/commands/legacydev/sub.js +39 -0
- package/dist/commands/legacydev/sub.js.map +1 -0
- package/dist/commands/legacydev/vnc.js +61 -0
- package/dist/commands/legacydev/vnc.js.map +1 -0
- package/dist/commands/tenant/index.js +21 -0
- package/dist/commands/tenant/index.js.map +1 -0
- package/dist/commands/tenant/list.js +14 -0
- package/dist/commands/tenant/list.js.map +1 -0
- package/dist/commands/tenant/select.js +87 -0
- package/dist/commands/tenant/select.js.map +1 -0
- package/dist/commands/vm/create.js +718 -0
- package/dist/commands/vm/create.js.map +1 -0
- package/dist/commands/vm/index.js +130 -0
- package/dist/commands/vm/index.js.map +1 -0
- package/dist/commands/vm/list.js +124 -0
- package/dist/commands/vm/list.js.map +1 -0
- package/dist/commands/vm/logs.js +66 -0
- package/dist/commands/vm/logs.js.map +1 -0
- package/dist/commands/vm/remove.js +180 -0
- package/dist/commands/vm/remove.js.map +1 -0
- package/dist/commands/vm/shell.js +400 -0
- package/dist/commands/vm/shell.js.map +1 -0
- package/dist/commands/vm/start.js +861 -0
- package/dist/commands/vm/start.js.map +1 -0
- package/dist/commands/vm/stop.js +232 -0
- package/dist/commands/vm/stop.js.map +1 -0
- package/dist/index.js +158 -0
- package/dist/index.js.map +1 -0
- package/dist/services/admin-api/admin-api.types.js +3 -0
- package/dist/services/admin-api/admin-api.types.js.map +1 -0
- package/dist/services/admin-api/device-modules.admin-api.service.js +58 -0
- package/dist/services/admin-api/device-modules.admin-api.service.js.map +1 -0
- package/dist/services/admin-api/devices-admin-api.service.js +213 -0
- package/dist/services/admin-api/devices-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/gridapps-admin-api.service.js +59 -0
- package/dist/services/admin-api/gridapps-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/index.js +157 -0
- package/dist/services/admin-api/index.js.map +1 -0
- package/dist/services/admin-api/installations-admin-api.service.js +29 -0
- package/dist/services/admin-api/installations-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/organizations-admin-api.service.js +53 -0
- package/dist/services/admin-api/organizations-admin-api.service.js.map +1 -0
- package/dist/services/auth/device-grant-auth.service.js +224 -0
- package/dist/services/auth/device-grant-auth.service.js.map +1 -0
- package/dist/services/phyhub/index.js +200 -0
- package/dist/services/phyhub/index.js.map +1 -0
- package/dist/services/phyhub/phyhub.types.js +3 -0
- package/dist/services/phyhub/phyhub.types.js.map +1 -0
- package/dist/utils/device-fetcher.js +92 -0
- package/dist/utils/device-fetcher.js.map +1 -0
- package/dist/utils/devices.js +41 -0
- package/dist/utils/devices.js.map +1 -0
- package/dist/utils/docker-credentials.js +546 -0
- package/dist/utils/docker-credentials.js.map +1 -0
- package/dist/utils/emulated-device.js +91 -0
- package/dist/utils/emulated-device.js.map +1 -0
- package/dist/utils/index.js +180 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/modules.js +36 -0
- package/dist/utils/modules.js.map +1 -0
- package/dist/utils/org-selector.js +108 -0
- package/dist/utils/org-selector.js.map +1 -0
- package/dist/utils/proxy.js +31 -0
- package/dist/utils/proxy.js.map +1 -0
- package/dist/utils/registry-credentials.js +113 -0
- package/dist/utils/registry-credentials.js.map +1 -0
- package/dist/utils/statuses.js +124 -0
- package/dist/utils/statuses.js.map +1 -0
- package/dist/utils/templates.js +189 -0
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/tenant-storage.js +88 -0
- package/dist/utils/tenant-storage.js.map +1 -0
- package/dist/utils/vm.js +434 -0
- package/dist/utils/vm.js.map +1 -0
- package/dist/utils/with-spinner.js +20 -0
- package/dist/utils/with-spinner.js.map +1 -0
- package/package.json +103 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getGridAppFileInfo = exports.getOutputFileInfo = void 0;
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const tar_1 = __importDefault(require("tar"));
|
|
12
|
+
const ajv_1 = __importDefault(require("ajv"));
|
|
13
|
+
const child_process_1 = __importDefault(require("child_process"));
|
|
14
|
+
const with_spinner_1 = __importDefault(require("../../utils/with-spinner"));
|
|
15
|
+
const build_container_1 = require("./build-container");
|
|
16
|
+
var TemplateFileEnums;
|
|
17
|
+
(function (TemplateFileEnums) {
|
|
18
|
+
TemplateFileEnums["SCHEMA"] = "schema.json";
|
|
19
|
+
TemplateFileEnums["META_SCHEMA"] = "meta-schema.json";
|
|
20
|
+
TemplateFileEnums["PACKAGE"] = "package.json";
|
|
21
|
+
TemplateFileEnums["INDEX"] = "index.html";
|
|
22
|
+
TemplateFileEnums["CONTAINER_SETTINGS"] = "settings.json";
|
|
23
|
+
TemplateFileEnums["ANALYTICS_SCHEMA"] = "analytics-schema.json";
|
|
24
|
+
})(TemplateFileEnums || (TemplateFileEnums = {}));
|
|
25
|
+
const defaultBuildFolder = 'build';
|
|
26
|
+
const defaultSchema = {
|
|
27
|
+
type: 'object',
|
|
28
|
+
title: 'Application Settings',
|
|
29
|
+
properties: {},
|
|
30
|
+
};
|
|
31
|
+
const DEFAULT_META_SCHEMA = {};
|
|
32
|
+
const DEFAULT_ANALYTICS_SCHEMA = [];
|
|
33
|
+
const archiveExcludedFiles = [
|
|
34
|
+
TemplateFileEnums.SCHEMA,
|
|
35
|
+
TemplateFileEnums.PACKAGE,
|
|
36
|
+
TemplateFileEnums.META_SCHEMA,
|
|
37
|
+
TemplateFileEnums.ANALYTICS_SCHEMA,
|
|
38
|
+
defaultBuildFolder,
|
|
39
|
+
];
|
|
40
|
+
const validateAndGetSchema = async (templatePath, requireIndex = true) => {
|
|
41
|
+
try {
|
|
42
|
+
if (requireIndex) {
|
|
43
|
+
const indexPath = path_1.default.join(templatePath, TemplateFileEnums.INDEX);
|
|
44
|
+
if (!fs_extra_1.default.existsSync(indexPath)) {
|
|
45
|
+
throw new Error(`Missing required file: ${TemplateFileEnums.INDEX}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
let schema = defaultSchema;
|
|
49
|
+
const schemaPath = path_1.default.join(templatePath, TemplateFileEnums.SCHEMA);
|
|
50
|
+
if (fs_extra_1.default.existsSync(schemaPath)) {
|
|
51
|
+
schema = JSON.parse(await fs_extra_1.default.readFile(schemaPath, 'utf8'));
|
|
52
|
+
}
|
|
53
|
+
const metaSchemaPath = path_1.default.join(templatePath, TemplateFileEnums.META_SCHEMA);
|
|
54
|
+
let metaSchema = DEFAULT_META_SCHEMA;
|
|
55
|
+
if (fs_extra_1.default.existsSync(metaSchemaPath)) {
|
|
56
|
+
metaSchema = JSON.parse(await fs_extra_1.default.readFile(metaSchemaPath, 'utf8'));
|
|
57
|
+
}
|
|
58
|
+
const validator = new ajv_1.default();
|
|
59
|
+
if (!validator.validateSchema(schema)) {
|
|
60
|
+
throw new Error(`${TemplateFileEnums.SCHEMA} is not valid JSON schema file!`);
|
|
61
|
+
}
|
|
62
|
+
const analyticsSchemaPath = path_1.default.join(templatePath, TemplateFileEnums.ANALYTICS_SCHEMA);
|
|
63
|
+
let analyticsSchema = DEFAULT_ANALYTICS_SCHEMA;
|
|
64
|
+
if (fs_extra_1.default.existsSync(analyticsSchemaPath)) {
|
|
65
|
+
analyticsSchema = JSON.parse(await fs_extra_1.default.readFile(analyticsSchemaPath, 'utf8'));
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
schema: JSON.stringify(schema),
|
|
69
|
+
metaSchema: JSON.stringify(metaSchema),
|
|
70
|
+
analyticsSchema,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
throw new Error(`Error during template files validation: ${err.message}`);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const readPackageJson = async (templatePath) => {
|
|
78
|
+
const packageJsonPath = path_1.default.join(templatePath, TemplateFileEnums.PACKAGE);
|
|
79
|
+
if (fs_extra_1.default.existsSync(packageJsonPath)) {
|
|
80
|
+
const packageJson = await fs_extra_1.default.promises.readFile(packageJsonPath, 'utf8');
|
|
81
|
+
return JSON.parse(packageJson);
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
};
|
|
85
|
+
const build = async ({ templatePath, schema, metaSchema, analyticsSchema, outputFilePath, appInfo, }) => {
|
|
86
|
+
const outputPath = path_1.default.dirname(outputFilePath);
|
|
87
|
+
await fs_extra_1.default.emptyDir(outputPath);
|
|
88
|
+
const files = fs_extra_1.default.readdirSync(templatePath);
|
|
89
|
+
// check for icon presence
|
|
90
|
+
let iconPath;
|
|
91
|
+
const manifestJsonPath = path_1.default.join(templatePath, 'manifest.json');
|
|
92
|
+
if (fs_extra_1.default.existsSync(manifestJsonPath)) {
|
|
93
|
+
const manifestJson = await fs_extra_1.default.readFile(manifestJsonPath, 'utf8');
|
|
94
|
+
const manifestObject = JSON.parse(manifestJson);
|
|
95
|
+
// try and find matching icon
|
|
96
|
+
iconPath = manifestObject?.icons?.find((icon) => icon.type === 'image/png' && icon.sizes?.includes('192x192'))?.src;
|
|
97
|
+
}
|
|
98
|
+
const info = {
|
|
99
|
+
...appInfo,
|
|
100
|
+
analyticsSchema,
|
|
101
|
+
createdAt: Math.floor(Date.now() / 1000),
|
|
102
|
+
iconPath,
|
|
103
|
+
};
|
|
104
|
+
await fs_extra_1.default.promises.writeFile(path_1.default.join(templatePath, '_info.json'), JSON.stringify(info));
|
|
105
|
+
await fs_extra_1.default.promises.writeFile(path_1.default.join(templatePath, '_schema.json'), schema);
|
|
106
|
+
await fs_extra_1.default.promises.writeFile(path_1.default.join(templatePath, '_meta-schema.json'), metaSchema);
|
|
107
|
+
files.push('_info.json', '_schema.json', '_meta-schema.json');
|
|
108
|
+
const outputFileStream = fs_extra_1.default.createWriteStream(outputFilePath);
|
|
109
|
+
const filesToAdd = files.filter((file) => !archiveExcludedFiles.includes(file));
|
|
110
|
+
if (filesToAdd.length === 0) {
|
|
111
|
+
// cannot create tar with no files, so create a stub file - only important for edge apps
|
|
112
|
+
await fs_extra_1.default.promises.writeFile(path_1.default.join(templatePath, 'index.html'), '');
|
|
113
|
+
filesToAdd.push('index.html');
|
|
114
|
+
}
|
|
115
|
+
const archiveReadable = await tar_1.default.create({
|
|
116
|
+
gzip: true,
|
|
117
|
+
cwd: templatePath,
|
|
118
|
+
}, filesToAdd);
|
|
119
|
+
await new Promise((resolve) => archiveReadable.pipe(outputFileStream).on('finish', resolve));
|
|
120
|
+
};
|
|
121
|
+
const getOutputFileInfo = async ({ buildPath, tag, arch, }) => {
|
|
122
|
+
// Fallback values
|
|
123
|
+
let version = '1.0.0';
|
|
124
|
+
let name = path_1.default.basename(process.cwd());
|
|
125
|
+
let license = 'UNLICENSED';
|
|
126
|
+
let tagName;
|
|
127
|
+
let tagVersion;
|
|
128
|
+
if (tag) {
|
|
129
|
+
const fileAndVersionArr = tag.split(':');
|
|
130
|
+
if (fileAndVersionArr.length < 2) {
|
|
131
|
+
throw new Error('Invalid tag option, --tag <filename:version>');
|
|
132
|
+
}
|
|
133
|
+
[tagName, tagVersion] = fileAndVersionArr;
|
|
134
|
+
}
|
|
135
|
+
let applicationType = 'screen';
|
|
136
|
+
let iotOptions = {};
|
|
137
|
+
// if app name and version are known, use them
|
|
138
|
+
const packageObject = await readPackageJson(process.cwd());
|
|
139
|
+
if (packageObject) {
|
|
140
|
+
name = tagName || packageObject.name || name;
|
|
141
|
+
license = packageObject.license || license;
|
|
142
|
+
version = tagVersion || packageObject.version || version;
|
|
143
|
+
if (packageObject['application-type'] === 'iot' ||
|
|
144
|
+
packageObject['application-type'] === 'module' ||
|
|
145
|
+
packageObject['application-type'] === 'edge') {
|
|
146
|
+
applicationType = 'module';
|
|
147
|
+
if (!fs_extra_1.default.existsSync(TemplateFileEnums.CONTAINER_SETTINGS))
|
|
148
|
+
throw new Error(`${TemplateFileEnums.CONTAINER_SETTINGS} is required for Edge apps`);
|
|
149
|
+
console.log('Container Settings:', TemplateFileEnums.CONTAINER_SETTINGS);
|
|
150
|
+
const continerOpttions = JSON.parse(fs_extra_1.default.readFileSync(TemplateFileEnums.CONTAINER_SETTINGS).toString());
|
|
151
|
+
const registry = packageObject['docker-credentials']?.registry ||
|
|
152
|
+
packageObject['container-registry'];
|
|
153
|
+
if (!registry)
|
|
154
|
+
throw new Error('package.json should contain "container-registry" entry or "docker-credentials.registry" entry');
|
|
155
|
+
const dir = process.cwd();
|
|
156
|
+
const archs = arch ? [arch] : Object.keys((0, build_container_1.findArchs)(dir, 'all'));
|
|
157
|
+
console.log(chalk_1.default.dim('Reading container registry credentials from package.json'));
|
|
158
|
+
const dockerCredentials = packageObject['docker-credentials'];
|
|
159
|
+
if (!dockerCredentials?.pull?.username || !dockerCredentials?.pull?.password) {
|
|
160
|
+
throw new Error('Docker credentials not found in package.json. Please run create command again.');
|
|
161
|
+
}
|
|
162
|
+
// Check if a custom image name is specified in docker-credentials
|
|
163
|
+
let image;
|
|
164
|
+
if (dockerCredentials.image) {
|
|
165
|
+
image = dockerCredentials.image;
|
|
166
|
+
console.log(chalk_1.default.dim(`Using custom image name from docker-credentials: ${chalk_1.default.blue(image)}`));
|
|
167
|
+
// Ensure the custom image has a version tag
|
|
168
|
+
if (!image.includes(':')) {
|
|
169
|
+
image = `${image}:${version}`;
|
|
170
|
+
console.log(chalk_1.default.dim(`Adding version tag to custom image: ${chalk_1.default.blue(image)}`));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
image = `${registry}/${name}:${version}`;
|
|
175
|
+
}
|
|
176
|
+
let credentials = null;
|
|
177
|
+
const pullUsername = dockerCredentials.pull.username;
|
|
178
|
+
const pullPassword = dockerCredentials.pull.password;
|
|
179
|
+
const pushUsername = dockerCredentials.push?.username;
|
|
180
|
+
const pushPassword = dockerCredentials.push?.password;
|
|
181
|
+
credentials = { username: pullUsername, password: pullPassword };
|
|
182
|
+
if (pushUsername && pushPassword) {
|
|
183
|
+
try {
|
|
184
|
+
child_process_1.default.execSync(`docker login ${registry} -u ${pushUsername} -p ${pushPassword}`, {
|
|
185
|
+
stdio: 'inherit',
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
console.log(chalk_1.default.yellow('Warning: Failed to store push credentials locally'));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
console.log(chalk_1.default.dim(`Image found ${chalk_1.default.blue(image)}`));
|
|
193
|
+
// Update createOptions with pull credentials for the container
|
|
194
|
+
const updatedCreateOptions = {
|
|
195
|
+
...continerOpttions,
|
|
196
|
+
RegistryCredentials: {
|
|
197
|
+
[registry]: {
|
|
198
|
+
username: pullUsername,
|
|
199
|
+
password: pullPassword,
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
iotOptions = {
|
|
204
|
+
image,
|
|
205
|
+
createOptions: JSON.stringify(updatedCreateOptions),
|
|
206
|
+
platforms: archs,
|
|
207
|
+
credentials,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const outputFileName = `${name}-${version}.gridapp`;
|
|
212
|
+
return {
|
|
213
|
+
outputFilePath: path_1.default.join(buildPath, outputFileName),
|
|
214
|
+
appInfo: {
|
|
215
|
+
name,
|
|
216
|
+
license,
|
|
217
|
+
version,
|
|
218
|
+
...iotOptions,
|
|
219
|
+
applicationType,
|
|
220
|
+
// TODO: credentials, platforms, createOptions
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
exports.getOutputFileInfo = getOutputFileInfo;
|
|
225
|
+
// Alt version of getOutputFileInfo
|
|
226
|
+
const getGridAppFileInfo = async (appRootDir, tag) => {
|
|
227
|
+
const currentDir = appRootDir || process.cwd();
|
|
228
|
+
// Fallback values
|
|
229
|
+
let version = '1.0.0';
|
|
230
|
+
let name = path_1.default.basename(currentDir);
|
|
231
|
+
let license = 'UNLICENSED';
|
|
232
|
+
if (tag) {
|
|
233
|
+
const fileAndVersionArr = tag.split(':');
|
|
234
|
+
if (fileAndVersionArr.length < 2) {
|
|
235
|
+
throw new Error('Invalid tag option, --tag <filename:version>');
|
|
236
|
+
}
|
|
237
|
+
[name, version] = fileAndVersionArr;
|
|
238
|
+
}
|
|
239
|
+
let applicationType = 'screen';
|
|
240
|
+
let iotOptions = {};
|
|
241
|
+
// if app name and version are known, use them
|
|
242
|
+
const packageObject = await readPackageJson(appRootDir || process.cwd());
|
|
243
|
+
if (packageObject) {
|
|
244
|
+
name = packageObject.name || name;
|
|
245
|
+
license = packageObject.license || license;
|
|
246
|
+
version = packageObject.version || version;
|
|
247
|
+
if (packageObject['application-type'] === 'iot' ||
|
|
248
|
+
packageObject['application-type'] === 'module' ||
|
|
249
|
+
packageObject['application-type'] === 'edge') {
|
|
250
|
+
applicationType = 'module';
|
|
251
|
+
const settingsFilePath = `${currentDir}/${TemplateFileEnums.CONTAINER_SETTINGS}`;
|
|
252
|
+
if (!fs_extra_1.default.existsSync(settingsFilePath))
|
|
253
|
+
throw new Error(`${TemplateFileEnums.CONTAINER_SETTINGS} is required for Edge apps`);
|
|
254
|
+
const createOptions = JSON.parse(fs_extra_1.default.readFileSync(settingsFilePath).toString());
|
|
255
|
+
const registry = packageObject['docker-credentials']?.registry ||
|
|
256
|
+
packageObject['container-registry'];
|
|
257
|
+
if (!registry)
|
|
258
|
+
throw new Error('package.json should contain "container-registry" entry or "docker-credentials.registry" entry');
|
|
259
|
+
const archs = Object.keys((0, build_container_1.findArchs)(currentDir, 'all'));
|
|
260
|
+
console.log(chalk_1.default.dim('Reading container registry credentials from package.json'));
|
|
261
|
+
const dockerCredentials = packageObject['docker-credentials'];
|
|
262
|
+
if (!dockerCredentials?.pull?.username || !dockerCredentials?.pull?.password) {
|
|
263
|
+
throw new Error('Docker credentials not found in package.json. Please run create command again.');
|
|
264
|
+
}
|
|
265
|
+
// Check if a custom image name is specified in docker-credentials
|
|
266
|
+
let image;
|
|
267
|
+
if (dockerCredentials.image) {
|
|
268
|
+
image = dockerCredentials.image;
|
|
269
|
+
console.log(chalk_1.default.dim(`Using custom image name from docker-credentials: ${chalk_1.default.blue(image)}`));
|
|
270
|
+
// Ensure the custom image has a version tag
|
|
271
|
+
if (!image.includes(':')) {
|
|
272
|
+
image = `${image}:${version}`;
|
|
273
|
+
console.log(chalk_1.default.dim(`Adding version tag to custom image: ${chalk_1.default.blue(image)}`));
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
image = `${registry}/${name}:${version}`;
|
|
278
|
+
}
|
|
279
|
+
let credentials = null;
|
|
280
|
+
const pullUsername = dockerCredentials.pull.username;
|
|
281
|
+
const pullPassword = dockerCredentials.pull.password;
|
|
282
|
+
const pushUsername = dockerCredentials.push?.username;
|
|
283
|
+
const pushPassword = dockerCredentials.push?.password;
|
|
284
|
+
credentials = { username: pullUsername, password: pullPassword };
|
|
285
|
+
if (pushUsername && pushPassword) {
|
|
286
|
+
try {
|
|
287
|
+
child_process_1.default.execSync(`docker login ${registry} -u ${pushUsername} -p ${pushPassword}`, {
|
|
288
|
+
stdio: 'inherit',
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
console.log(chalk_1.default.yellow('Warning: Failed to store push credentials locally'));
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
console.log(chalk_1.default.dim(`Image found ${chalk_1.default.blue(image)}`));
|
|
296
|
+
// Update createOptions with pull credentials for the container
|
|
297
|
+
const updatedCreateOptions = {
|
|
298
|
+
...createOptions,
|
|
299
|
+
RegistryCredentials: {
|
|
300
|
+
[registry]: {
|
|
301
|
+
username: pullUsername,
|
|
302
|
+
password: pullPassword,
|
|
303
|
+
},
|
|
304
|
+
},
|
|
305
|
+
};
|
|
306
|
+
iotOptions = {
|
|
307
|
+
image,
|
|
308
|
+
createOptions: JSON.stringify(updatedCreateOptions),
|
|
309
|
+
platforms: archs,
|
|
310
|
+
credentials,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
const buildPath = `${currentDir}/build/build`;
|
|
315
|
+
const outputFileName = `${name}-${version}.gridapp`;
|
|
316
|
+
return {
|
|
317
|
+
outputFilePath: path_1.default.join(buildPath, outputFileName),
|
|
318
|
+
appInfo: {
|
|
319
|
+
name,
|
|
320
|
+
license,
|
|
321
|
+
version,
|
|
322
|
+
...iotOptions,
|
|
323
|
+
applicationType,
|
|
324
|
+
// TODO: credentials, platforms, createOptions
|
|
325
|
+
},
|
|
326
|
+
};
|
|
327
|
+
};
|
|
328
|
+
exports.getGridAppFileInfo = getGridAppFileInfo;
|
|
329
|
+
exports.default = async (moduleName, options = {}) => {
|
|
330
|
+
try {
|
|
331
|
+
// Extract options with defaults to avoid undefined destructuring errors
|
|
332
|
+
const { arch } = options;
|
|
333
|
+
const tagArg = options.tag;
|
|
334
|
+
let templatePathArg = options.templatePath;
|
|
335
|
+
const buildPathArg = options.buildPath;
|
|
336
|
+
let tag = null;
|
|
337
|
+
// TRICKY: if this is an iot app build via yarn deploy
|
|
338
|
+
if (templatePathArg && templatePathArg.indexOf('@') >= 0) {
|
|
339
|
+
tag = templatePathArg.replace('@', ':');
|
|
340
|
+
templatePathArg = null; // Reset templatePathArg to null after extracting the tag
|
|
341
|
+
}
|
|
342
|
+
const templatePath = templatePathArg
|
|
343
|
+
? path_1.default.resolve(templatePathArg)
|
|
344
|
+
: path_1.default.resolve('build');
|
|
345
|
+
const buildPath = buildPathArg
|
|
346
|
+
? path_1.default.resolve(buildPathArg)
|
|
347
|
+
: path_1.default.resolve('build/build');
|
|
348
|
+
console.log(chalk_1.default.dim(`Reading package information`));
|
|
349
|
+
const outputFileInfo = await (0, exports.getOutputFileInfo)({ tag, moduleName, buildPath, arch });
|
|
350
|
+
const isIotApp = outputFileInfo.appInfo.applicationType === 'module';
|
|
351
|
+
if (isIotApp) {
|
|
352
|
+
// For IoT/Edge apps, just verify that Docker configuration is present
|
|
353
|
+
// The actual Docker build will happen during publish
|
|
354
|
+
const { image } = outputFileInfo.appInfo;
|
|
355
|
+
console.log(chalk_1.default.dim('Edge application detected'));
|
|
356
|
+
console.log(chalk_1.default.dim(`Docker image will be built during publish: ${chalk_1.default.blue(image)}`));
|
|
357
|
+
console.log(chalk_1.default.yellow('⚠️ Note: Run "yarn publish" to build and push the Docker image'));
|
|
358
|
+
}
|
|
359
|
+
console.log(chalk_1.default.dim('Using metadata'));
|
|
360
|
+
Object.entries(outputFileInfo.appInfo).map(([key, value]) => console.log(chalk_1.default.dim(` ${key}: ${chalk_1.default.blue(value)}`)));
|
|
361
|
+
console.log(chalk_1.default.dim(`Validating template files in ${templatePath}...`));
|
|
362
|
+
const requireIndex = !isIotApp;
|
|
363
|
+
const schemaInfo = await (0, with_spinner_1.default)(() => validateAndGetSchema(templatePath, requireIndex), `Validating...`);
|
|
364
|
+
console.log(chalk_1.default.green(`✓ Template files are valid`));
|
|
365
|
+
console.log(chalk_1.default.dim(`Creating gridapp file...`));
|
|
366
|
+
await (0, with_spinner_1.default)(() => build({ templatePath, ...schemaInfo, ...outputFileInfo }), `Building...`);
|
|
367
|
+
console.log(chalk_1.default.green(`✓ Build successful: ${outputFileInfo.outputFilePath}`));
|
|
368
|
+
}
|
|
369
|
+
catch (err) {
|
|
370
|
+
// TODO: setup logging (Sentry, file, console output)
|
|
371
|
+
console.error(chalk_1.default.red(`❗️There was an error: ${err.message}`));
|
|
372
|
+
throw err;
|
|
373
|
+
}
|
|
374
|
+
};
|
|
375
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/app/build.ts"],"names":[],"mappings":"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"}
|