@phystack/cli 4.3.40-dev

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.
Files changed (192) hide show
  1. package/LICENSE.md +19 -0
  2. package/README.md +24 -0
  3. package/bin/index.js +2 -0
  4. package/dist/commands/app/build-apps.js +66 -0
  5. package/dist/commands/app/build-apps.js.map +1 -0
  6. package/dist/commands/app/build-container-remote.js +171 -0
  7. package/dist/commands/app/build-container-remote.js.map +1 -0
  8. package/dist/commands/app/build-container.js +330 -0
  9. package/dist/commands/app/build-container.js.map +1 -0
  10. package/dist/commands/app/build.js +393 -0
  11. package/dist/commands/app/build.js.map +1 -0
  12. package/dist/commands/app/create.js +451 -0
  13. package/dist/commands/app/create.js.map +1 -0
  14. package/dist/commands/app/deploy.js +176 -0
  15. package/dist/commands/app/deploy.js.map +1 -0
  16. package/dist/commands/app/device-picker.js +150 -0
  17. package/dist/commands/app/device-picker.js.map +1 -0
  18. package/dist/commands/app/import.js +303 -0
  19. package/dist/commands/app/import.js.map +1 -0
  20. package/dist/commands/app/list.js +26 -0
  21. package/dist/commands/app/list.js.map +1 -0
  22. package/dist/commands/app/publish.js +327 -0
  23. package/dist/commands/app/publish.js.map +1 -0
  24. package/dist/commands/app/settings.js +129 -0
  25. package/dist/commands/app/settings.js.map +1 -0
  26. package/dist/commands/app/types.js +13 -0
  27. package/dist/commands/app/types.js.map +1 -0
  28. package/dist/commands/app/upload-description.js +139 -0
  29. package/dist/commands/app/upload-description.js.map +1 -0
  30. package/dist/commands/app/upload-settings.js +29 -0
  31. package/dist/commands/app/upload-settings.js.map +1 -0
  32. package/dist/commands/app/utils.js +86 -0
  33. package/dist/commands/app/utils.js.map +1 -0
  34. package/dist/commands/auth/login.js +111 -0
  35. package/dist/commands/auth/login.js.map +1 -0
  36. package/dist/commands/auth/logout.js +19 -0
  37. package/dist/commands/auth/logout.js.map +1 -0
  38. package/dist/commands/descriptor/create.js +143 -0
  39. package/dist/commands/descriptor/create.js.map +1 -0
  40. package/dist/commands/descriptor/index.js +36 -0
  41. package/dist/commands/descriptor/index.js.map +1 -0
  42. package/dist/commands/descriptor/publish.js +163 -0
  43. package/dist/commands/descriptor/publish.js.map +1 -0
  44. package/dist/commands/descriptor/show.js +68 -0
  45. package/dist/commands/descriptor/show.js.map +1 -0
  46. package/dist/commands/dev/develop.js +175 -0
  47. package/dist/commands/dev/develop.js.map +1 -0
  48. package/dist/commands/dev/forward.js +118 -0
  49. package/dist/commands/dev/forward.js.map +1 -0
  50. package/dist/commands/dev/index.js +66 -0
  51. package/dist/commands/dev/index.js.map +1 -0
  52. package/dist/commands/dev/list.js +96 -0
  53. package/dist/commands/dev/list.js.map +1 -0
  54. package/dist/commands/dev/screen-devtools.js +156 -0
  55. package/dist/commands/dev/screen-devtools.js.map +1 -0
  56. package/dist/commands/dev/select.js +118 -0
  57. package/dist/commands/dev/select.js.map +1 -0
  58. package/dist/commands/dev/shell.js +171 -0
  59. package/dist/commands/dev/shell.js.map +1 -0
  60. package/dist/commands/dev/vnc.js +75 -0
  61. package/dist/commands/dev/vnc.js.map +1 -0
  62. package/dist/commands/device/select.js +118 -0
  63. package/dist/commands/device/select.js.map +1 -0
  64. package/dist/commands/flash.js +1120 -0
  65. package/dist/commands/flash.js.map +1 -0
  66. package/dist/commands/inst/create.js +55 -0
  67. package/dist/commands/inst/create.js.map +1 -0
  68. package/dist/commands/inst/index.js +15 -0
  69. package/dist/commands/inst/index.js.map +1 -0
  70. package/dist/commands/inst/list.js +26 -0
  71. package/dist/commands/inst/list.js.map +1 -0
  72. package/dist/commands/legacydev/debug.js +11 -0
  73. package/dist/commands/legacydev/debug.js.map +1 -0
  74. package/dist/commands/legacydev/deploy.js +15 -0
  75. package/dist/commands/legacydev/deploy.js.map +1 -0
  76. package/dist/commands/legacydev/dumpTwin.js +27 -0
  77. package/dist/commands/legacydev/dumpTwin.js.map +1 -0
  78. package/dist/commands/legacydev/forward.js +104 -0
  79. package/dist/commands/legacydev/forward.js.map +1 -0
  80. package/dist/commands/legacydev/index.js +188 -0
  81. package/dist/commands/legacydev/index.js.map +1 -0
  82. package/dist/commands/legacydev/invoke.js +29 -0
  83. package/dist/commands/legacydev/invoke.js.map +1 -0
  84. package/dist/commands/legacydev/js.js +69 -0
  85. package/dist/commands/legacydev/js.js.map +1 -0
  86. package/dist/commands/legacydev/list.js +196 -0
  87. package/dist/commands/legacydev/list.js.map +1 -0
  88. package/dist/commands/legacydev/logs.js +60 -0
  89. package/dist/commands/legacydev/logs.js.map +1 -0
  90. package/dist/commands/legacydev/modules.js +50 -0
  91. package/dist/commands/legacydev/modules.js.map +1 -0
  92. package/dist/commands/legacydev/move.js +23 -0
  93. package/dist/commands/legacydev/move.js.map +1 -0
  94. package/dist/commands/legacydev/ota.js +88 -0
  95. package/dist/commands/legacydev/ota.js.map +1 -0
  96. package/dist/commands/legacydev/patchTwin.js +21 -0
  97. package/dist/commands/legacydev/patchTwin.js.map +1 -0
  98. package/dist/commands/legacydev/pin.js +23 -0
  99. package/dist/commands/legacydev/pin.js.map +1 -0
  100. package/dist/commands/legacydev/pub.js +25 -0
  101. package/dist/commands/legacydev/pub.js.map +1 -0
  102. package/dist/commands/legacydev/rdp.js +64 -0
  103. package/dist/commands/legacydev/rdp.js.map +1 -0
  104. package/dist/commands/legacydev/screen-devtools.js +142 -0
  105. package/dist/commands/legacydev/screen-devtools.js.map +1 -0
  106. package/dist/commands/legacydev/settingsShow.js +89 -0
  107. package/dist/commands/legacydev/settingsShow.js.map +1 -0
  108. package/dist/commands/legacydev/settingsUpdate.js +114 -0
  109. package/dist/commands/legacydev/settingsUpdate.js.map +1 -0
  110. package/dist/commands/legacydev/shell.js +167 -0
  111. package/dist/commands/legacydev/shell.js.map +1 -0
  112. package/dist/commands/legacydev/showTwin.js +9 -0
  113. package/dist/commands/legacydev/showTwin.js.map +1 -0
  114. package/dist/commands/legacydev/statusLog.js +56 -0
  115. package/dist/commands/legacydev/statusLog.js.map +1 -0
  116. package/dist/commands/legacydev/sub.js +39 -0
  117. package/dist/commands/legacydev/sub.js.map +1 -0
  118. package/dist/commands/legacydev/vnc.js +61 -0
  119. package/dist/commands/legacydev/vnc.js.map +1 -0
  120. package/dist/commands/tenant/index.js +21 -0
  121. package/dist/commands/tenant/index.js.map +1 -0
  122. package/dist/commands/tenant/list.js +14 -0
  123. package/dist/commands/tenant/list.js.map +1 -0
  124. package/dist/commands/tenant/select.js +87 -0
  125. package/dist/commands/tenant/select.js.map +1 -0
  126. package/dist/commands/vm/create.js +718 -0
  127. package/dist/commands/vm/create.js.map +1 -0
  128. package/dist/commands/vm/index.js +130 -0
  129. package/dist/commands/vm/index.js.map +1 -0
  130. package/dist/commands/vm/list.js +124 -0
  131. package/dist/commands/vm/list.js.map +1 -0
  132. package/dist/commands/vm/logs.js +66 -0
  133. package/dist/commands/vm/logs.js.map +1 -0
  134. package/dist/commands/vm/remove.js +180 -0
  135. package/dist/commands/vm/remove.js.map +1 -0
  136. package/dist/commands/vm/shell.js +400 -0
  137. package/dist/commands/vm/shell.js.map +1 -0
  138. package/dist/commands/vm/start.js +861 -0
  139. package/dist/commands/vm/start.js.map +1 -0
  140. package/dist/commands/vm/stop.js +232 -0
  141. package/dist/commands/vm/stop.js.map +1 -0
  142. package/dist/index.js +158 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/services/admin-api/admin-api.types.js +3 -0
  145. package/dist/services/admin-api/admin-api.types.js.map +1 -0
  146. package/dist/services/admin-api/device-modules.admin-api.service.js +58 -0
  147. package/dist/services/admin-api/device-modules.admin-api.service.js.map +1 -0
  148. package/dist/services/admin-api/devices-admin-api.service.js +213 -0
  149. package/dist/services/admin-api/devices-admin-api.service.js.map +1 -0
  150. package/dist/services/admin-api/gridapps-admin-api.service.js +59 -0
  151. package/dist/services/admin-api/gridapps-admin-api.service.js.map +1 -0
  152. package/dist/services/admin-api/index.js +157 -0
  153. package/dist/services/admin-api/index.js.map +1 -0
  154. package/dist/services/admin-api/installations-admin-api.service.js +29 -0
  155. package/dist/services/admin-api/installations-admin-api.service.js.map +1 -0
  156. package/dist/services/admin-api/organizations-admin-api.service.js +53 -0
  157. package/dist/services/admin-api/organizations-admin-api.service.js.map +1 -0
  158. package/dist/services/auth/device-grant-auth.service.js +224 -0
  159. package/dist/services/auth/device-grant-auth.service.js.map +1 -0
  160. package/dist/services/phyhub/index.js +200 -0
  161. package/dist/services/phyhub/index.js.map +1 -0
  162. package/dist/services/phyhub/phyhub.types.js +3 -0
  163. package/dist/services/phyhub/phyhub.types.js.map +1 -0
  164. package/dist/utils/device-fetcher.js +92 -0
  165. package/dist/utils/device-fetcher.js.map +1 -0
  166. package/dist/utils/devices.js +41 -0
  167. package/dist/utils/devices.js.map +1 -0
  168. package/dist/utils/docker-credentials.js +720 -0
  169. package/dist/utils/docker-credentials.js.map +1 -0
  170. package/dist/utils/emulated-device.js +91 -0
  171. package/dist/utils/emulated-device.js.map +1 -0
  172. package/dist/utils/index.js +180 -0
  173. package/dist/utils/index.js.map +1 -0
  174. package/dist/utils/modules.js +36 -0
  175. package/dist/utils/modules.js.map +1 -0
  176. package/dist/utils/org-selector.js +108 -0
  177. package/dist/utils/org-selector.js.map +1 -0
  178. package/dist/utils/proxy.js +31 -0
  179. package/dist/utils/proxy.js.map +1 -0
  180. package/dist/utils/registry-credentials.js +113 -0
  181. package/dist/utils/registry-credentials.js.map +1 -0
  182. package/dist/utils/statuses.js +124 -0
  183. package/dist/utils/statuses.js.map +1 -0
  184. package/dist/utils/templates.js +197 -0
  185. package/dist/utils/templates.js.map +1 -0
  186. package/dist/utils/tenant-storage.js +88 -0
  187. package/dist/utils/tenant-storage.js.map +1 -0
  188. package/dist/utils/vm.js +434 -0
  189. package/dist/utils/vm.js.map +1 -0
  190. package/dist/utils/with-spinner.js +20 -0
  191. package/dist/utils/with-spinner.js.map +1 -0
  192. package/package.json +103 -0
@@ -0,0 +1,327 @@
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.uploadGridApp = exports.registerApp = void 0;
7
+ /* eslint no-constant-condition: ["error", { "checkLoops": false }] */
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const child_process_1 = __importDefault(require("child_process"));
12
+ const trimEnd_1 = __importDefault(require("lodash/trimEnd"));
13
+ const build_1 = require("./build");
14
+ const utils_1 = require("./utils");
15
+ const upload_description_1 = __importDefault(require("./upload-description"));
16
+ const build_container_1 = __importDefault(require("./build-container"));
17
+ const docker_credentials_1 = require("../../utils/docker-credentials");
18
+ const admin_api_1 = require("../../services/admin-api");
19
+ const PKG_FILE = './package.json';
20
+ /**
21
+ * Checks if a Docker image exists locally
22
+ */
23
+ const imageExistsLocally = (image) => {
24
+ try {
25
+ child_process_1.default.execSync(`docker image inspect ${image}`, { stdio: 'ignore' });
26
+ return true;
27
+ }
28
+ catch (e) {
29
+ return false;
30
+ }
31
+ };
32
+ // NOTE: we cant parse .gridapp file here, so we just guess the version from filename
33
+ const guessVersion = (packageJsonPath, gridappFilename) => {
34
+ if (fs_1.default.existsSync(packageJsonPath)) {
35
+ const { version } = JSON.parse(fs_1.default.readFileSync(packageJsonPath).toString());
36
+ if (/^[0-9.]+$/.test(version))
37
+ return version;
38
+ }
39
+ const name = path_1.default.basename(gridappFilename, '.gridapp');
40
+ if (!name)
41
+ return null;
42
+ const version = name.split('-').pop();
43
+ if (/^[0-9.]+$/.test(version))
44
+ return version;
45
+ return null;
46
+ };
47
+ /**
48
+ * This function registers the app with the admin API.
49
+ * It will read package.json, verify the app identifier (<org>.<appName>) and create the app record if needed.
50
+ * This registration step happens immediately after cloning.
51
+ */
52
+ const registerApp = async (id, { appDir, overwrite }) => {
53
+ const packageJsonPath = appDir ? `${appDir}/package.json` : 'package.json';
54
+ if (!fs_1.default.existsSync(packageJsonPath))
55
+ throw new Error(`${packageJsonPath} not found. Please specify app-id or run in an app directory`);
56
+ const pkgData = await fs_1.default.promises.readFile(packageJsonPath);
57
+ const { name, 'application-type': type } = JSON.parse(pkgData.toString());
58
+ const appIdentifier = id || name;
59
+ const [orgName, appName] = appIdentifier.split('.');
60
+ if (!appName) {
61
+ if (id)
62
+ throw new Error('Specify application name as <org>.<appName>');
63
+ throw new Error('Specify app name as "<org>.<appName>" in your package.json');
64
+ }
65
+ console.log(chalk_1.default.dim(`Looking for an application ${chalk_1.default.blue(appIdentifier)}`));
66
+ const orgs = await (0, admin_api_1.adminApi)().organizations.listOrganizations();
67
+ const org = orgs.find(({ organizationName }) => organizationName === orgName);
68
+ if (!org) {
69
+ throw new Error('Organisation not found');
70
+ }
71
+ const apps = await (0, admin_api_1.adminApi)().gridapps.listGridappsByOrganizationId(org.id);
72
+ let app = apps.find(({ packageName, organizationId }) => packageName === appName && organizationId === org.id);
73
+ if (!app) {
74
+ console.log(`App ${chalk_1.default.yellow('NOT FOUND')} in ${chalk_1.default.white(org.displayName)} organisation, ${chalk_1.default.yellow(`attempting to create it`)}`);
75
+ app = await (0, admin_api_1.adminApi)().gridapps.createGridapp({
76
+ packageName: appName,
77
+ type,
78
+ access: 'private',
79
+ organizationId: org.id,
80
+ description: 'no description',
81
+ displayName: appName,
82
+ });
83
+ console.log(`App ${chalk_1.default.blue(appName)} ${chalk_1.default.green('created successfully')}`);
84
+ }
85
+ return { id: app.id, name: appName, organizationId: org.id };
86
+ };
87
+ exports.registerApp = registerApp;
88
+ /**
89
+ * Uploads a GridApp for a specific app
90
+ */
91
+ const uploadGridApp = async (app, gridappFile, appInfo, overwrite) => {
92
+ const { id: appId } = app;
93
+ // If the app is a docker image, build and push it to registry
94
+ if (appInfo.image) {
95
+ const fullImage = appInfo.image;
96
+ // The image should already have a version tag from the build process
97
+ const versionedImage = fullImage;
98
+ // Log the image being used
99
+ console.log(chalk_1.default.dim(`Using image: ${chalk_1.default.blue(versionedImage)}`));
100
+ // Extract registry information from the image
101
+ const registry = versionedImage.split('/')[0].includes('.')
102
+ ? versionedImage.split('/')[0]
103
+ : utils_1.DEFAULT_REGISTRY;
104
+ // Check for cached build metadata
105
+ const metadataFile = '.phygrid-image.json';
106
+ let hasCachedBuild = false;
107
+ if (fs_1.default.existsSync(metadataFile)) {
108
+ const metadata = JSON.parse(fs_1.default.readFileSync(metadataFile, 'utf8'));
109
+ // Check if the cached build matches the expected tag
110
+ if (metadata.cached && metadata.tag === versionedImage) {
111
+ hasCachedBuild = true;
112
+ console.log(chalk_1.default.green(`✓ Found cached multi-platform build`));
113
+ console.log(chalk_1.default.dim(` Tag: ${metadata.tag}`));
114
+ console.log(chalk_1.default.dim(` Platforms: ${metadata.platforms.join(', ')}`));
115
+ console.log(chalk_1.default.dim(` Built: ${metadata.buildTime}`));
116
+ }
117
+ }
118
+ // Verify Docker credentials before pushing
119
+ console.log(chalk_1.default.dim('Verifying Docker registry credentials for pushing'));
120
+ const verifiedCredentials = await (0, docker_credentials_1.setupDockerCredentials)(registry, app.name, 'package.json', versionedImage);
121
+ // Check if the image already exists in the registry
122
+ console.log(chalk_1.default.dim(`Checking if image already exists in registry: ${versionedImage}`));
123
+ const imageExists = await (0, utils_1.checkImageExistsInRegistry)(versionedImage, { username: verifiedCredentials.pullUsername, password: verifiedCredentials.pullPassword }, registry);
124
+ if (imageExists && !overwrite) {
125
+ throw new Error(`Docker image ${versionedImage} already exists in registry. Use --overwrite to replace it.`);
126
+ }
127
+ if (imageExists && overwrite) {
128
+ console.log(chalk_1.default.yellow(`⚠️ Image ${versionedImage} exists in registry and will be overwritten`));
129
+ }
130
+ else if (!imageExists) {
131
+ console.log(chalk_1.default.dim(`Image does not exist in registry, proceeding with build...`));
132
+ }
133
+ // Build and push the container to registry
134
+ console.log(chalk_1.default.dim('Building and pushing container to registry...'));
135
+ await (0, build_container_1.default)(undefined, { platforms: appInfo.platforms, shouldPush: true });
136
+ // Verify the image was pushed to the registry
137
+ console.log(chalk_1.default.dim('Verifying image was pushed to registry:', versionedImage));
138
+ const imagePushed = await (0, utils_1.checkImageExistsInRegistry)(versionedImage, { username: verifiedCredentials.pullUsername, password: verifiedCredentials.pullPassword }, registry);
139
+ if (!imagePushed) {
140
+ throw new Error(`Image was not pushed to registry: ${versionedImage}`);
141
+ }
142
+ console.log(chalk_1.default.green(`✓ Image successfully pushed to registry`));
143
+ }
144
+ console.log(chalk_1.default.dim('Obtaining upload token'));
145
+ const token = await (0, admin_api_1.adminApi)().gridapps.getBuildUploadToken();
146
+ // Call a helper upload function to push the .gridapp file.
147
+ const url = await (0, utils_1.upload)({
148
+ file: gridappFile,
149
+ token,
150
+ gridappId: appId,
151
+ contentType: 'application/octet-stream',
152
+ });
153
+ console.log(chalk_1.default.green(`Gridapp uploaded successfully: ${url}`));
154
+ return { id: appId, name: '', organizationId: '' };
155
+ };
156
+ exports.uploadGridApp = uploadGridApp;
157
+ exports.default = async (id, { file, appDir, overwrite }) => {
158
+ let appIdentifier = id;
159
+ let appType = 'screen';
160
+ const appRootDir = `${(0, trimEnd_1.default)(appDir, '/')}`;
161
+ const packageJsonPath = appDir ? `${appRootDir}/package.json` : PKG_FILE;
162
+ if (!id) {
163
+ if (!fs_1.default.existsSync(packageJsonPath))
164
+ throw new Error(`${packageJsonPath} not found. Please specify app-id, omg app publish [organization-slug.installation-slug]`);
165
+ const { name, 'application-type': type } = JSON.parse(fs_1.default.readFileSync(packageJsonPath).toString());
166
+ appIdentifier = name;
167
+ if (type === 'iot' || type === 'module' || type === 'edge')
168
+ appType = 'module';
169
+ if (type === 'mobile')
170
+ appType = 'mobile';
171
+ }
172
+ const [orgName, appName] = appIdentifier.split('.');
173
+ if (!appName) {
174
+ if (id) {
175
+ throw new Error('Specify application name as <org>.<appName>');
176
+ }
177
+ throw new Error('Specify app name as "<org>.<appName>" in your package.json');
178
+ }
179
+ console.log(chalk_1.default.dim(`Looking for an application ${chalk_1.default.blue(appIdentifier)}`));
180
+ const orgs = await (0, admin_api_1.adminApi)().organizations.listOrganizations();
181
+ const org = orgs.find(({ organizationName }) => organizationName === orgName);
182
+ if (!org) {
183
+ throw new Error('Organisation not found');
184
+ }
185
+ const apps = await (0, admin_api_1.adminApi)().gridapps.listGridappsByOrganizationId(org.id);
186
+ let app = apps.find(({ packageName, organizationId }) => packageName === appName && organizationId === org.id);
187
+ if (!app) {
188
+ console.log(`App ${chalk_1.default.yellow('NOT FOUND')} in ${chalk_1.default.white(org.displayName)} organisation, ${chalk_1.default.yellow(`attempting to create it`)}`);
189
+ const metaData = {
190
+ packageName: appName,
191
+ type: appType,
192
+ access: 'private',
193
+ organizationId: org.id,
194
+ description: 'no description',
195
+ displayName: appName,
196
+ appContainerGridappId: appType === 'module' ? undefined : 'app-container',
197
+ };
198
+ console.log(chalk_1.default.dim(`Creating app with metadata: ${JSON.stringify(metaData)}`));
199
+ app = await (0, admin_api_1.adminApi)().gridapps.createGridapp(metaData);
200
+ console.log(`App ${chalk_1.default.blue(appName)} ${chalk_1.default.green('created successfully')}`);
201
+ }
202
+ const { outputFilePath, appInfo } = await (0, build_1.getGridAppFileInfo)(appRootDir);
203
+ const gridappFile = file || outputFilePath;
204
+ console.log(chalk_1.default.dim(`Looking for a bundle: ${chalk_1.default.blue(gridappFile)}`));
205
+ let stat;
206
+ try {
207
+ stat = await fs_1.default.promises.stat(gridappFile);
208
+ }
209
+ catch (e) {
210
+ throw new Error(`.gridapp file not found. Try --file <file-path> command option`);
211
+ }
212
+ if (!stat.isFile())
213
+ throw new Error(`.gridapp file not found`);
214
+ const version = guessVersion(packageJsonPath, gridappFile);
215
+ if (version) {
216
+ console.log(chalk_1.default.dim(`Checking release version ${chalk_1.default.blue(version)}`));
217
+ const builds = await (0, admin_api_1.adminApi)().gridapps.listGridappBuilds(app.id);
218
+ if (!overwrite &&
219
+ builds
220
+ .filter((build) => build.result)
221
+ .find((build) => build.result.version === version)) {
222
+ throw new Error(`Version ${version} aleady exists`);
223
+ }
224
+ }
225
+ // If the app is a docker image, build and push it to registry
226
+ if (appInfo.image) {
227
+ const fullImage = appInfo.image;
228
+ // The image should already have a version tag from the build process
229
+ const versionedImage = fullImage;
230
+ // Log the image being used
231
+ console.log(chalk_1.default.dim(`Using image: ${chalk_1.default.blue(versionedImage)}`));
232
+ // Extract registry information from the image
233
+ const registry = versionedImage.split('/')[0].includes('.')
234
+ ? versionedImage.split('/')[0]
235
+ : utils_1.DEFAULT_REGISTRY;
236
+ // Verify Docker credentials before pushing
237
+ console.log(chalk_1.default.dim('Verifying Docker registry credentials for pushing'));
238
+ const verifiedCredentials = await (0, docker_credentials_1.setupDockerCredentials)(registry, app.packageName, packageJsonPath, versionedImage);
239
+ // Check if the image already exists in the registry
240
+ console.log(chalk_1.default.dim(`Checking if image already exists in registry: ${versionedImage}`));
241
+ const imageExists = await (0, utils_1.checkImageExistsInRegistry)(versionedImage, { username: verifiedCredentials.pullUsername, password: verifiedCredentials.pullPassword }, registry);
242
+ if (imageExists && !overwrite) {
243
+ throw new Error(`Docker image ${versionedImage} already exists in registry. Use --overwrite to replace it.`);
244
+ }
245
+ if (imageExists && overwrite) {
246
+ console.log(chalk_1.default.yellow(`⚠️ Image ${versionedImage} exists in registry and will be overwritten`));
247
+ }
248
+ else if (!imageExists) {
249
+ console.log(chalk_1.default.dim(`Image does not exist in registry, proceeding with build...`));
250
+ }
251
+ // Build and push the container to registry
252
+ console.log(chalk_1.default.dim('Building and pushing container to registry...'));
253
+ await (0, build_container_1.default)(undefined, { platforms: appInfo.platforms, shouldPush: true });
254
+ // Verify the image was pushed to the registry
255
+ console.log(chalk_1.default.dim('Verifying image was pushed to registry:', versionedImage));
256
+ const imagePushed = await (0, utils_1.checkImageExistsInRegistry)(versionedImage, { username: verifiedCredentials.pullUsername, password: verifiedCredentials.pullPassword }, registry);
257
+ if (!imagePushed) {
258
+ throw new Error(`Image was not pushed to registry: ${versionedImage}`);
259
+ }
260
+ console.log(chalk_1.default.green(`✓ Image successfully pushed to registry`));
261
+ }
262
+ console.log(chalk_1.default.dim('Obtaining upload token'));
263
+ const token = await (0, admin_api_1.adminApi)().gridapps.getBuildUploadToken();
264
+ process.stdout.write(chalk_1.default.dim('Uploading...'));
265
+ await (0, utils_1.upload)({
266
+ suffix: '.gridapp',
267
+ file: gridappFile,
268
+ token,
269
+ gridappId: app.id,
270
+ onProgress: (p) => process.stdout.write(chalk_1.default.dim(`\rUploading...`) + chalk_1.default.white(p)),
271
+ contentType: 'application/x-gridapp',
272
+ });
273
+ console.log('');
274
+ console.log(chalk_1.default.dim('Creating a release'));
275
+ const build = await (0, admin_api_1.adminApi)().gridapps.createGridappBuild({
276
+ filename: path_1.default.basename(gridappFile),
277
+ size: stat.size,
278
+ fileUuid: token.uuid,
279
+ gridappId: app.id,
280
+ });
281
+ process.stdout.write(chalk_1.default.dim('Waiting for build...'));
282
+ let release;
283
+ while (true) {
284
+ process.stdout.write(chalk_1.default.dim('.'));
285
+ await new Promise((resolve) => setTimeout(resolve, 1000));
286
+ const res = await (0, admin_api_1.adminApi)().gridapps.listGridappBuilds(app.id);
287
+ release = res.find((data) => data.id === build.id);
288
+ if (release && release.status !== 'processing') {
289
+ break;
290
+ }
291
+ }
292
+ console.log('');
293
+ if (release.status === 'error') {
294
+ throw new Error(`Unable to create release: ${release.metadata.error}`);
295
+ }
296
+ if (release.result.packageName !== appIdentifier) {
297
+ console.log(chalk_1.default.yellow("Package name in package.json is different from .gridapp file, you'll likely want to run `yarn build` again"));
298
+ console.log(` package.json: ${chalk_1.default.yellowBright(appIdentifier)}`);
299
+ console.log(` gridapp: ${chalk_1.default.yellowBright(release.result.packageName)}`);
300
+ }
301
+ if (version && release.result.version !== version) {
302
+ console.log(chalk_1.default.yellow("Version in package.json is different from .gridapp file, you'll likely want to run `yarn build` again"));
303
+ console.log(` package.json: ${chalk_1.default.yellowBright(version)}`);
304
+ console.log(` gridapp: ${chalk_1.default.yellowBright(release.result.version)}`);
305
+ }
306
+ console.log(`Release created: ${chalk_1.default.greenBright(release.result.packageName)}@${chalk_1.default.greenBright(release.result.version)}`);
307
+ const root = appRootDir || '.';
308
+ const descFilePath = fs_1.default.existsSync(`${root}/DESCRIPTION.md`)
309
+ ? `${root}/DESCRIPTION.md`
310
+ : `${root}/README.md`;
311
+ if (fs_1.default.existsSync(descFilePath)) {
312
+ await (0, upload_description_1.default)(appIdentifier, {
313
+ filepath: descFilePath,
314
+ applicationName: appName,
315
+ author: org.displayName,
316
+ });
317
+ }
318
+ else {
319
+ console.log(chalk_1.default.dim('Description file not found, not updating app info'));
320
+ }
321
+ return {
322
+ id: app.id,
323
+ name: app.displayName,
324
+ organizationId: app.organizationId,
325
+ };
326
+ };
327
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/app/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
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
+ require("isomorphic-fetch");
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ // import { execSync } from 'child_process';
11
+ const mkdirp_1 = __importDefault(require("mkdirp"));
12
+ const rimraf_1 = require("rimraf");
13
+ const lodash_1 = require("lodash");
14
+ // import tar from 'tar';
15
+ const applyMedia = (settings, gridSettingsFolder, ancestors = null) => (0, lodash_1.mapValues)(settings, (item, key) => {
16
+ if (Array.isArray(item)) {
17
+ return (0, lodash_1.values)(applyMedia(item, gridSettingsFolder));
18
+ }
19
+ if (typeof item === 'object' && item !== null) {
20
+ if (item.ref === 'media') {
21
+ let suffix = '';
22
+ switch (item.type) {
23
+ case 'image/jpeg':
24
+ suffix = '.jpg';
25
+ break;
26
+ case 'image/png':
27
+ suffix = '.png';
28
+ break;
29
+ case 'image/svg+xml':
30
+ suffix = '.svg';
31
+ break;
32
+ case 'video/mp4':
33
+ suffix = '.mp4';
34
+ break;
35
+ case 'video/webm':
36
+ suffix = '.webm';
37
+ break;
38
+ case 'application/x-gridapp':
39
+ suffix = '.tar.gz';
40
+ break;
41
+ default:
42
+ }
43
+ // eslint-disable-next-line no-param-reassign
44
+ item.filename = `${item.id}${suffix}`;
45
+ // eslint-disable-next-line no-param-reassign
46
+ item.path = `/grid-settings/${item.filename}`;
47
+ if (item.type === 'application/x-gridapp') {
48
+ // const itemUrl = `${item.url}${suffix}`;
49
+ // const downloadPath = path.resolve(gridSettingsFolder, item.filename);
50
+ // eslint-disable-next-line no-param-reassign
51
+ item.path = `/grid-settings/${item.id}`;
52
+ // console.log('Downloading asset', key, itemUrl, downloadPath);
53
+ // // Don't download a file more than once
54
+ // try {
55
+ // execSync(
56
+ // `[ -f "${downloadPath}" ] || curl -s -o "${downloadPath}" "${itemUrl}" -O`,
57
+ // );
58
+ // console.log('Extracting assets', downloadPath);
59
+ // const directory = path.join(gridSettingsFolder, item.id);
60
+ // mkdirp.sync(directory);
61
+ // tar.x({
62
+ // file: downloadPath,
63
+ // cwd: directory,
64
+ // });
65
+ // } catch (error) {
66
+ // console.error('Error downloading asset', itemUrl, error);
67
+ // return false;
68
+ // }
69
+ }
70
+ }
71
+ if (Object.keys(item).length > 0) {
72
+ return applyMedia(item, gridSettingsFolder, `${ancestors || ''}${key}.`);
73
+ }
74
+ }
75
+ return item;
76
+ });
77
+ async function writeConfigFile(filename, data) {
78
+ const jsonData = JSON.stringify(data, null, 2);
79
+ fs_extra_1.default.writeFileSync(filename, jsonData);
80
+ return true;
81
+ }
82
+ async function createGridSettingsFolder(settingsRaw, gridSettingsFolder) {
83
+ if (!gridSettingsFolder) {
84
+ throw new Error('No destination folder');
85
+ }
86
+ (0, rimraf_1.rimrafSync)(gridSettingsFolder);
87
+ mkdirp_1.default.sync(gridSettingsFolder);
88
+ const filename = `${gridSettingsFolder}/index.json`;
89
+ writeConfigFile(filename, applyMedia(settingsRaw, gridSettingsFolder));
90
+ return gridSettingsFolder;
91
+ }
92
+ exports.default = async (appName, destination = './src/settings') => {
93
+ try {
94
+ const gridSettingsFolder = destination ||
95
+ process.env.PHYGRID_SETTINGS_FOLDER ||
96
+ path_1.default.resolve(process.cwd(), './grid-settings');
97
+ const apiEndpoint = process.env[`${process.env.PHYGRID_ENV}_PHYGRID_ADMIN_API`] ||
98
+ process.env.PHYGRID_ADMIN_API ||
99
+ 'https://api.omborigrid.com';
100
+ const settingsUrl = `${apiEndpoint}/api/settings/${appName}`;
101
+ // eslint-disable-next-line no-undef
102
+ const result = await fetch(settingsUrl);
103
+ const settings = await result.json();
104
+ if (settings.error) {
105
+ console.log(chalk_1.default.red('Fetch error:', settings.error));
106
+ return;
107
+ }
108
+ if (settings.provider && settings.provider.app) {
109
+ settings.app = settings.provider.app;
110
+ }
111
+ if (settings.provider && settings.provider.web) {
112
+ settings.web = settings.provider.web;
113
+ }
114
+ if (settings.provider && settings.provider.generic) {
115
+ settings.generic = settings.provider.generic;
116
+ }
117
+ if (settings.provider) {
118
+ delete settings.provider;
119
+ }
120
+ const settingsDirectory = await createGridSettingsFolder(settings, gridSettingsFolder);
121
+ console.log(chalk_1.default.green(`✓ Successfully applied settings. It can be found in ${settingsDirectory}`));
122
+ }
123
+ catch (err) {
124
+ // TODO: setup logging (Sentry, file, console output)
125
+ console.error(chalk_1.default.red(`❗️There was an error: ${err.message}`));
126
+ throw err;
127
+ }
128
+ };
129
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/commands/app/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProjectType = void 0;
4
+ /* eslint-disable import/prefer-default-export */
5
+ var ProjectType;
6
+ (function (ProjectType) {
7
+ ProjectType["Basic"] = "basic";
8
+ ProjectType["Handlebars"] = "handlebars";
9
+ ProjectType["React"] = "react";
10
+ ProjectType["EdgeNode"] = "edgenode";
11
+ ProjectType["Mobile"] = "mobile";
12
+ })(ProjectType || (exports.ProjectType = ProjectType = {}));
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/app/types.ts"],"names":[],"mappings":";;;AAAA,iDAAiD;AACjD,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,wCAAyB,CAAA;IACzB,8BAAe,CAAA;IACf,oCAAqB,CAAA;IACrB,gCAAiB,CAAA;AACnB,CAAC,EANW,WAAW,2BAAX,WAAW,QAMtB"}
@@ -0,0 +1,139 @@
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.updateDescription = void 0;
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ /* eslint-disable @typescript-eslint/no-unused-vars */
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ const template_1 = __importDefault(require("lodash/template"));
13
+ const utils_1 = require("./utils");
14
+ const with_spinner_1 = __importDefault(require("../../utils/with-spinner"));
15
+ const admin_api_1 = require("../../services/admin-api");
16
+ const readDescriptionFile = async (filename) => {
17
+ try {
18
+ await fs_1.default.promises.stat(filename);
19
+ }
20
+ catch (e) {
21
+ return false;
22
+ }
23
+ const result = {
24
+ title: null,
25
+ author: null,
26
+ description: '',
27
+ screenshots: [],
28
+ };
29
+ const descriptionText = await fs_1.default.promises.readFile(filename);
30
+ descriptionText
31
+ .toString()
32
+ .split('\n\n')
33
+ .forEach((p) => {
34
+ const images = Array.from(p.matchAll(/!\[.*?\]\((.+?)\)/g));
35
+ if (images.length) {
36
+ images.forEach(([_, file]) => result.screenshots.push(file));
37
+ return;
38
+ }
39
+ const header = p.match(/^# /);
40
+ if (header) {
41
+ result.title = p
42
+ .split('\n')
43
+ .shift()
44
+ .replace(/#/g, '')
45
+ .trim();
46
+ const by = p
47
+ .split('\n')
48
+ .map((line) => /^[bB]y (.+)$/.exec(line))
49
+ .filter((a) => a)
50
+ .shift();
51
+ if (by) {
52
+ result.author = by[1]; // eslint-disable-line prefer-destructuring
53
+ }
54
+ return;
55
+ }
56
+ result.description += `${p}\n\n`;
57
+ });
58
+ return result;
59
+ };
60
+ const getNameFromPackageJson = async (projectDir) => {
61
+ const packageFile = `${projectDir}/package.json`;
62
+ const resultRaw = await fs_1.default.promises.readFile(packageFile);
63
+ const resultParsed = JSON.parse(resultRaw.toString());
64
+ return resultParsed.name;
65
+ };
66
+ const updateDescription = async (descFilePath, data) => {
67
+ try {
68
+ const buffer = await fs_1.default.promises.readFile(descFilePath);
69
+ const content = buffer.toString();
70
+ const compiled = (0, template_1.default)(content, { interpolate: /{{([\s\S]+?)}}/g });
71
+ const updatedContent = compiled(data);
72
+ await fs_1.default.promises.writeFile(descFilePath, updatedContent);
73
+ }
74
+ catch {
75
+ console.log(chalk_1.default.green('Cannot update the description file. You may manually update it on your succeeding builds.'));
76
+ }
77
+ };
78
+ exports.updateDescription = updateDescription;
79
+ const uploadDescription = async (id, { filepath, applicationName, author, }) => {
80
+ let file = filepath;
81
+ if (!file) {
82
+ file = fs_1.default.existsSync('./DESCRIPTION.md') ? './DESCRIPTION.md' : './README.md';
83
+ }
84
+ const desc = await readDescriptionFile(file);
85
+ if (!desc) {
86
+ throw new Error('Unable to find description file');
87
+ }
88
+ const { dir: projectDir } = path_1.default.parse(file);
89
+ const projectId = id ||
90
+ (await (0, with_spinner_1.default)(() => getNameFromPackageJson(projectDir), 'Extracting app id from package.json'));
91
+ const [orgName, appId] = projectId.split('.');
92
+ const org = await (0, with_spinner_1.default)(() => (0, admin_api_1.adminApi)().organizations.getOrganizationBySlug(orgName), 'Fetching organization info');
93
+ if (!org) {
94
+ throw new Error('Organization not found');
95
+ }
96
+ // TO DO: Fetch the app by package name and organization id, instead of all apps
97
+ const apps = await (0, with_spinner_1.default)(() => (0, admin_api_1.adminApi)().gridapps.listGridappsByOrganizationId(org.id), 'Fetching app info');
98
+ const app = apps.find(({ packageName }) => packageName === appId);
99
+ if (!app) {
100
+ throw new Error('Application not found, should you create one?');
101
+ }
102
+ console.log(chalk_1.default.dim('Obtaining upload token'));
103
+ const token = await (0, admin_api_1.adminApi)().gridapps.getBuildUploadToken();
104
+ console.log(chalk_1.default.dim('Uploading screenshots'));
105
+ // eslint-disable-next-line guard-for-in
106
+ for (const n in desc.screenshots) {
107
+ const image = `${path_1.default.parse(file).dir}/${desc.screenshots[n]}`;
108
+ process.stdout.write(chalk_1.default.dim(`Uploading ${image}...`));
109
+ try {
110
+ await fs_1.default.promises.stat(image);
111
+ }
112
+ catch (e) {
113
+ console.log('not found');
114
+ continue; // eslint-disable-line no-continue
115
+ }
116
+ const url = await (0, utils_1.upload)({
117
+ file: image,
118
+ token,
119
+ gridappId: app.id,
120
+ suffix: `/screen${n}.png`,
121
+ contentType: 'image/png',
122
+ });
123
+ console.log(chalk_1.default.dim('ok'));
124
+ desc.screenshots[n] = url;
125
+ }
126
+ console.log(chalk_1.default.dim('Uploading description'));
127
+ await (0, admin_api_1.adminApi)().gridapps.updateGridapp({
128
+ id: app.id,
129
+ displayName: app.displayName,
130
+ packageName: app.packageName,
131
+ author: app.author,
132
+ access: app.access,
133
+ description: desc.description || app.description,
134
+ screenshots: desc.screenshots,
135
+ });
136
+ console.log(chalk_1.default.green('Description updated'));
137
+ };
138
+ exports.default = uploadDescription;
139
+ //# sourceMappingURL=upload-description.js.map