@alwaysai/device-agent 0.0.8 → 0.0.10
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/lib/application-control/backup.d.ts.map +1 -1
- package/lib/application-control/backup.js +2 -0
- package/lib/application-control/backup.js.map +1 -1
- package/lib/application-control/config.d.ts +17 -0
- package/lib/application-control/config.d.ts.map +1 -0
- package/lib/application-control/config.js +62 -0
- package/lib/application-control/config.js.map +1 -0
- package/lib/application-control/environment-variables.d.ts.map +1 -1
- package/lib/application-control/environment-variables.js +4 -12
- package/lib/application-control/environment-variables.js.map +1 -1
- package/lib/application-control/index.d.ts +2 -1
- package/lib/application-control/index.d.ts.map +1 -1
- package/lib/application-control/index.js +6 -1
- package/lib/application-control/index.js.map +1 -1
- package/lib/application-control/install.d.ts +12 -10
- package/lib/application-control/install.d.ts.map +1 -1
- package/lib/application-control/install.js +79 -41
- package/lib/application-control/install.js.map +1 -1
- package/lib/application-control/models.d.ts +3 -0
- package/lib/application-control/models.d.ts.map +1 -1
- package/lib/application-control/models.js +92 -19
- package/lib/application-control/models.js.map +1 -1
- package/lib/application-control/utils.d.ts +4 -3
- package/lib/application-control/utils.d.ts.map +1 -1
- package/lib/application-control/utils.js +30 -10
- package/lib/application-control/utils.js.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts +16 -9
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.js +165 -89
- package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
- package/lib/infrastructure/agent-config.d.ts.map +1 -1
- package/lib/infrastructure/agent-config.js +7 -18
- package/lib/infrastructure/agent-config.js.map +1 -1
- package/lib/infrastructure/agent-config.test.js +47 -0
- package/lib/infrastructure/agent-config.test.js.map +1 -1
- package/lib/subcommands/login.d.ts.map +1 -1
- package/lib/subcommands/login.js +4 -3
- package/lib/subcommands/login.js.map +1 -1
- package/lib/util/copy-dir.d.ts.map +1 -1
- package/lib/util/copy-dir.js +3 -1
- package/lib/util/copy-dir.js.map +1 -1
- package/lib/util/run-in-dir.d.ts +2 -0
- package/lib/util/run-in-dir.d.ts.map +1 -0
- package/lib/util/run-in-dir.js +17 -0
- package/lib/util/run-in-dir.js.map +1 -0
- package/package.json +4 -3
- package/src/application-control/backup.ts +3 -0
- package/src/application-control/config.ts +61 -0
- package/src/application-control/environment-variables.ts +4 -10
- package/src/application-control/index.ts +5 -0
- package/src/application-control/install.ts +121 -52
- package/src/application-control/models.ts +132 -22
- package/src/application-control/utils.ts +37 -12
- package/src/cloud-connection/device-agent-cloud-connection.ts +197 -105
- package/src/infrastructure/agent-config.test.ts +56 -0
- package/src/infrastructure/agent-config.ts +10 -19
- package/src/subcommands/login.ts +6 -4
- package/src/util/copy-dir.ts +3 -1
- package/src/util/run-in-dir.ts +15 -0
- package/lib/util/run-cli-cmd.d.ts +0 -5
- package/lib/util/run-cli-cmd.d.ts.map +0 -1
- package/lib/util/run-cli-cmd.js +0 -24
- package/lib/util/run-cli-cmd.js.map +0 -1
- package/src/util/run-cli-cmd.ts +0 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/application-control/backup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/application-control/backup.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAQjE;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAe7D"}
|
|
@@ -22,6 +22,8 @@ async function rollbackApp(props) {
|
|
|
22
22
|
if (!config) {
|
|
23
23
|
throw new Error(`Backup doesn't exist for ${projectId}`);
|
|
24
24
|
}
|
|
25
|
+
console.log(`Rolling back app ${projectId} to ${config.version}`);
|
|
26
|
+
await (0, agent_config_1.AgentConfigFile)().setAppInstalling({ projectId, version: config.version });
|
|
25
27
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
26
28
|
const backupAppDir = `${appDir}${exports.BACKUP_EXT}`;
|
|
27
29
|
rimraf.sync(appDir);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/application-control/backup.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AAEjC,+CAA2C;AAC3C,mCAA8C;AAC9C,iEAAiE;
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/application-control/backup.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AAEjC,+CAA2C;AAC3C,mCAA8C;AAC9C,iEAAiE;AAGpD,QAAA,UAAU,GAAG,MAAM,CAAC;AAE1B,KAAK,UAAU,eAAe,CAAC,KAA4B;IAChE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,SAAS,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,GAAG,MAAM,GAAG,kBAAU,EAAE,CAAC;IAC9C,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1B,MAAM,IAAA,kBAAO,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IAC3D,MAAM,IAAA,8BAAe,GAAE,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,OAAO,YAAY,EAAE,CAAC,CAAC;AAC/D,CAAC;AARD,0CAQC;AAEM,KAAK,UAAU,WAAW,CAAC,KAA4B;IAC5D,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAe,GAAE,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;KAC1D;IACD,OAAO,CAAC,GAAG,CAAC,oBAAoB,SAAS,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,MAAM,IAAA,8BAAe,GAAE,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,SAAS,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,GAAG,MAAM,GAAG,kBAAU,EAAE,CAAC;IAC9C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,IAAA,kBAAO,EAAC,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3D,MAAM,IAAA,gBAAQ,EAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3B,MAAM,IAAA,8BAAe,GAAE,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AACnE,CAAC;AAfD,kCAeC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AppConfig } from 'alwaysai/lib/core/app';
|
|
2
|
+
export declare function readAppCfg(props: {
|
|
3
|
+
projectId: string;
|
|
4
|
+
}): Promise<AppConfig>;
|
|
5
|
+
export declare function writeAppCfg(props: {
|
|
6
|
+
projectId: string;
|
|
7
|
+
appCfg: AppConfig;
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
export declare function updateAppConfig(appDir: string, newAppCfg: AppConfig): Promise<void>;
|
|
10
|
+
export declare function readDockerCompose(props: {
|
|
11
|
+
projectId: string;
|
|
12
|
+
}): Promise<any>;
|
|
13
|
+
export declare function writeDockerCompose(props: {
|
|
14
|
+
projectId: string;
|
|
15
|
+
dockerCompose: any;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,uBAAuB,CAAC;AAQ/D,wBAAsB,UAAU,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAQjF;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,iBAQhF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,iBAIzE;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,gBAUnE;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,GAAG,CAAC;CACpB,iBAWA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.writeDockerCompose = exports.readDockerCompose = exports.updateAppConfig = exports.writeAppCfg = exports.readAppCfg = void 0;
|
|
4
|
+
const app_1 = require("alwaysai/lib/core/app");
|
|
5
|
+
const agent_config_1 = require("../infrastructure/agent-config");
|
|
6
|
+
const yaml_1 = require("yaml");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
const util_1 = require("alwaysai/lib/util");
|
|
9
|
+
const docker_compose_1 = require("docker-compose");
|
|
10
|
+
const lodash_1 = require("lodash");
|
|
11
|
+
async function readAppCfg(props) {
|
|
12
|
+
const { projectId } = props;
|
|
13
|
+
if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
|
|
14
|
+
throw new Error(`App ${projectId} is not ready!`);
|
|
15
|
+
}
|
|
16
|
+
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
17
|
+
const appJson = (0, app_1.AppJsonFile)(appDir);
|
|
18
|
+
return appJson.read();
|
|
19
|
+
}
|
|
20
|
+
exports.readAppCfg = readAppCfg;
|
|
21
|
+
async function writeAppCfg(props) {
|
|
22
|
+
const { projectId, appCfg } = props;
|
|
23
|
+
if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
|
|
24
|
+
throw new Error(`App ${projectId} is not ready!`);
|
|
25
|
+
}
|
|
26
|
+
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
27
|
+
const appJson = (0, app_1.AppJsonFile)(appDir);
|
|
28
|
+
appJson.write(appCfg);
|
|
29
|
+
}
|
|
30
|
+
exports.writeAppCfg = writeAppCfg;
|
|
31
|
+
async function updateAppConfig(appDir, newAppCfg) {
|
|
32
|
+
const existingAppCfg = await readAppCfg({ projectId: appDir });
|
|
33
|
+
const appCfg = (0, lodash_1.assign)(existingAppCfg, (0, lodash_1.merge)(existingAppCfg, newAppCfg));
|
|
34
|
+
await writeAppCfg({ projectId: appDir, appCfg });
|
|
35
|
+
}
|
|
36
|
+
exports.updateAppConfig = updateAppConfig;
|
|
37
|
+
async function readDockerCompose(props) {
|
|
38
|
+
const { projectId } = props;
|
|
39
|
+
if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
|
|
40
|
+
throw new Error(`App ${projectId} is not ready!`);
|
|
41
|
+
}
|
|
42
|
+
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
43
|
+
const spawner = (0, util_1.JsSpawner)({ path: appDir });
|
|
44
|
+
const composeContents = await spawner.readFile('docker-compose.yaml');
|
|
45
|
+
const composeParsed = (0, yaml_1.parse)(composeContents);
|
|
46
|
+
return composeParsed;
|
|
47
|
+
}
|
|
48
|
+
exports.readDockerCompose = readDockerCompose;
|
|
49
|
+
async function writeDockerCompose(props) {
|
|
50
|
+
const { projectId, dockerCompose } = props;
|
|
51
|
+
if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
|
|
52
|
+
throw new Error(`App ${projectId} is not ready!`);
|
|
53
|
+
}
|
|
54
|
+
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
55
|
+
const spawner = (0, util_1.JsSpawner)({ path: appDir });
|
|
56
|
+
const composeOutput = (0, yaml_1.stringify)(dockerCompose);
|
|
57
|
+
// Validate new contents
|
|
58
|
+
await docker_compose_1.default.config({ cwd: appDir, configAsString: composeOutput });
|
|
59
|
+
await spawner.writeFile('docker-compose.yaml', composeOutput);
|
|
60
|
+
}
|
|
61
|
+
exports.writeDockerCompose = writeDockerCompose;
|
|
62
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-variables.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"environment-variables.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"AAOA,wBAAsB,MAAM,CAAC,KAAK,EAAE;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,iBA4BA;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,eAgC5D"}
|
|
@@ -2,19 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getAllEnvs = exports.setEnv = void 0;
|
|
4
4
|
const util_1 = require("alwaysai/lib/util");
|
|
5
|
-
const docker_compose_1 = require("docker-compose");
|
|
6
|
-
const yaml_1 = require("yaml");
|
|
7
5
|
const agent_config_1 = require("../infrastructure/agent-config");
|
|
6
|
+
const config_1 = require("./config");
|
|
8
7
|
const utils_1 = require("./utils");
|
|
9
8
|
async function setEnv(props) {
|
|
10
9
|
const { projectId, vars } = props;
|
|
11
10
|
if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
|
|
12
11
|
throw new Error(`App ${projectId} is not ready!`);
|
|
13
12
|
}
|
|
14
|
-
const
|
|
15
|
-
const spawner = (0, util_1.JsSpawner)({ path: appDir });
|
|
16
|
-
const composeContents = await spawner.readFile('docker-compose.yaml');
|
|
17
|
-
const composeParsed = (0, yaml_1.parse)(composeContents);
|
|
13
|
+
const composeParsed = await (0, config_1.readDockerCompose)({ projectId });
|
|
18
14
|
if ('services' in composeParsed) {
|
|
19
15
|
let services = Object.keys(composeParsed['services']);
|
|
20
16
|
if (props.service) {
|
|
@@ -38,10 +34,7 @@ async function setEnv(props) {
|
|
|
38
34
|
}
|
|
39
35
|
}
|
|
40
36
|
}
|
|
41
|
-
|
|
42
|
-
// Validate new contents
|
|
43
|
-
await docker_compose_1.default.config({ cwd: appDir, configAsString: composeOutput });
|
|
44
|
-
await spawner.writeFile('docker-compose.yaml', composeOutput);
|
|
37
|
+
await (0, config_1.writeDockerCompose)({ projectId, dockerCompose: composeParsed });
|
|
45
38
|
}
|
|
46
39
|
exports.setEnv = setEnv;
|
|
47
40
|
async function getAllEnvs(props) {
|
|
@@ -52,8 +45,7 @@ async function getAllEnvs(props) {
|
|
|
52
45
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
53
46
|
const spawner = (0, util_1.JsSpawner)({ path: appDir });
|
|
54
47
|
const envVars = {};
|
|
55
|
-
const
|
|
56
|
-
const composeParsed = (0, yaml_1.parse)(composeContents);
|
|
48
|
+
const composeParsed = await (0, config_1.readDockerCompose)({ projectId });
|
|
57
49
|
if ('services' in composeParsed) {
|
|
58
50
|
const services = Object.keys(composeParsed['services']);
|
|
59
51
|
for (const s of services) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-variables.js","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;
|
|
1
|
+
{"version":3,"file":"environment-variables.js","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { readAppCfg, writeAppCfg, readDockerCompose, writeDockerCompose } from './config';
|
|
1
2
|
import { installApp, uninstallApp } from './install';
|
|
2
3
|
import { rollbackApp } from './backup';
|
|
3
4
|
import { listAppReleases, listAppLatestRelease, getAppStatus, startApp, getAppLogs, stopApp, restartApp } from './status';
|
|
4
5
|
import { ModelDetails } from './types';
|
|
5
6
|
import { getAllEnvs, setEnv } from './environment-variables';
|
|
6
|
-
export { installApp, uninstallApp, rollbackApp, listAppReleases, listAppLatestRelease, getAppStatus, startApp, getAppLogs, stopApp, restartApp, ModelDetails, getAllEnvs, setEnv, };
|
|
7
|
+
export { readAppCfg, writeAppCfg, readDockerCompose, writeDockerCompose, installApp, uninstallApp, rollbackApp, listAppReleases, listAppLatestRelease, getAppStatus, startApp, getAppLogs, stopApp, restartApp, ModelDetails, getAllEnvs, setEnv, };
|
|
7
8
|
import { addModel, getAppModels, removeModel, replaceModels, updateModels } from './models';
|
|
8
9
|
export { addModel, getAppModels, removeModel, replaceModels, updateModels };
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EACL,UAAU,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACV,YAAY,EACZ,UAAU,EACV,MAAM,GACP,CAAC;AAGF,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EACL,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACV,YAAY,EACZ,UAAU,EACV,MAAM,GACP,CAAC;AAGF,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.updateModels = exports.replaceModels = exports.removeModel = exports.getAppModels = exports.addModel = exports.setEnv = exports.getAllEnvs = exports.restartApp = exports.stopApp = exports.getAppLogs = exports.startApp = exports.getAppStatus = exports.listAppLatestRelease = exports.listAppReleases = exports.rollbackApp = exports.uninstallApp = exports.installApp = void 0;
|
|
3
|
+
exports.updateModels = exports.replaceModels = exports.removeModel = exports.getAppModels = exports.addModel = exports.setEnv = exports.getAllEnvs = exports.restartApp = exports.stopApp = exports.getAppLogs = exports.startApp = exports.getAppStatus = exports.listAppLatestRelease = exports.listAppReleases = exports.rollbackApp = exports.uninstallApp = exports.installApp = exports.writeDockerCompose = exports.readDockerCompose = exports.writeAppCfg = exports.readAppCfg = void 0;
|
|
4
|
+
const config_1 = require("./config");
|
|
5
|
+
Object.defineProperty(exports, "readAppCfg", { enumerable: true, get: function () { return config_1.readAppCfg; } });
|
|
6
|
+
Object.defineProperty(exports, "writeAppCfg", { enumerable: true, get: function () { return config_1.writeAppCfg; } });
|
|
7
|
+
Object.defineProperty(exports, "readDockerCompose", { enumerable: true, get: function () { return config_1.readDockerCompose; } });
|
|
8
|
+
Object.defineProperty(exports, "writeDockerCompose", { enumerable: true, get: function () { return config_1.writeDockerCompose; } });
|
|
4
9
|
const install_1 = require("./install");
|
|
5
10
|
Object.defineProperty(exports, "installApp", { enumerable: true, get: function () { return install_1.installApp; } });
|
|
6
11
|
Object.defineProperty(exports, "uninstallApp", { enumerable: true, get: function () { return install_1.uninstallApp; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":";;;AAAA,uCAAqD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":";;;AAAA,qCAA0F;AAgBxF,2FAhBO,mBAAU,OAgBP;AACV,4FAjBmB,oBAAW,OAiBnB;AACX,kGAlBgC,0BAAiB,OAkBhC;AACjB,mGAnBmD,2BAAkB,OAmBnD;AAlBpB,uCAAqD;AAmBnD,2FAnBO,oBAAU,OAmBP;AACV,6FApBmB,sBAAY,OAoBnB;AAnBd,qCAAuC;AAoBrC,4FApBO,oBAAW,OAoBP;AAnBb,qCAQkB;AAYhB,gGAnBA,wBAAe,OAmBA;AACf,qGAnBA,6BAAoB,OAmBA;AACpB,6FAnBA,qBAAY,OAmBA;AACZ,yFAnBA,iBAAQ,OAmBA;AACR,2FAnBA,mBAAU,OAmBA;AACV,wFAnBA,gBAAO,OAmBA;AACP,2FAnBA,mBAAU,OAmBA;AAhBZ,mEAA6D;AAkB3D,2FAlBO,kCAAU,OAkBP;AACV,uFAnBmB,8BAAM,OAmBnB;AAGR,gBAAgB;AAChB,qCAMkB;AAET,yFAPP,iBAAQ,OAOO;AAAE,6FANjB,qBAAY,OAMiB;AAAE,4FAL/B,oBAAW,OAK+B;AAAE,8FAJ5C,sBAAa,OAI4C;AAAE,6FAH3D,qBAAY,OAG2D"}
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { AppDetailsPacket } from '@alwaysai/device-agent-schemas';
|
|
2
|
+
declare type SignedUrlPayloadType = {
|
|
3
|
+
appInstallPayload: {
|
|
4
|
+
appSignedUrl: string;
|
|
5
|
+
};
|
|
6
|
+
modelsInstallPayload: {
|
|
7
|
+
id: string;
|
|
8
|
+
version: number;
|
|
9
|
+
modelSignedUrl: string;
|
|
10
|
+
}[];
|
|
11
|
+
};
|
|
2
12
|
export declare function getInstalledApps(): Promise<AppDetailsPacket[]>;
|
|
3
13
|
export declare function installApp(props: {
|
|
4
14
|
projectId: string;
|
|
5
15
|
appReleaseHash: string;
|
|
6
|
-
signedUrlsPayload?:
|
|
7
|
-
appInstallPayload: {
|
|
8
|
-
appSignedUrl: string;
|
|
9
|
-
};
|
|
10
|
-
modelsInstallPayload: {
|
|
11
|
-
id: string;
|
|
12
|
-
version: number;
|
|
13
|
-
modelSignedUrl: string;
|
|
14
|
-
}[];
|
|
15
|
-
};
|
|
16
|
+
signedUrlsPayload?: SignedUrlPayloadType;
|
|
16
17
|
}): Promise<void>;
|
|
17
18
|
export declare function uninstallApp(props: {
|
|
18
19
|
projectId: string;
|
|
19
20
|
}): Promise<void>;
|
|
21
|
+
export {};
|
|
20
22
|
//# sourceMappingURL=install.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/application-control/install.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAuB,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/application-control/install.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAuB,MAAM,gCAAgC,CAAC;AAoBvF,aAAK,oBAAoB,GAAG;IAC1B,iBAAiB,EAAE;QACjB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,oBAAoB,EAAE;QACpB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;KACxB,EAAE,CAAC;CACL,CAAC;AAEF,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAQpE;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,oBAAoB,CAAC;CAC1C,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EhB;AA6DD,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9E"}
|
|
@@ -9,7 +9,14 @@ const utils_1 = require("./utils");
|
|
|
9
9
|
const backup_1 = require("./backup");
|
|
10
10
|
const status_1 = require("./status");
|
|
11
11
|
const agent_config_1 = require("../infrastructure/agent-config");
|
|
12
|
-
const
|
|
12
|
+
const project_1 = require("alwaysai/lib/core/project");
|
|
13
|
+
const app_1 = require("alwaysai/lib/core/app");
|
|
14
|
+
const app_2 = require("alwaysai/lib/components/app");
|
|
15
|
+
const app_install_component_1 = require("alwaysai/lib/components/app/app-install-component");
|
|
16
|
+
const constants_1 = require("alwaysai/lib/constants");
|
|
17
|
+
const release_1 = require("alwaysai/lib/components/release");
|
|
18
|
+
const run_in_dir_1 = require("../util/run-in-dir");
|
|
19
|
+
const models_1 = require("./models");
|
|
13
20
|
async function getInstalledApps() {
|
|
14
21
|
const apps = await (0, agent_config_1.AgentConfigFile)().getApps();
|
|
15
22
|
const appDetails = [];
|
|
@@ -28,9 +35,8 @@ async function installApp(props) {
|
|
|
28
35
|
if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
|
|
29
36
|
throw new Error('Application already has installation in progress!');
|
|
30
37
|
}
|
|
31
|
-
await (0, agent_config_1.AgentConfigFile)().setAppInstalling({ projectId, version: appReleaseHash });
|
|
32
38
|
console.log('Application is already installed, updating');
|
|
33
|
-
await (0,
|
|
39
|
+
await (0, agent_config_1.AgentConfigFile)().setAppInstalling({ projectId, version: appReleaseHash });
|
|
34
40
|
await spawner.rimraf(appDir);
|
|
35
41
|
}
|
|
36
42
|
else {
|
|
@@ -40,60 +46,92 @@ async function installApp(props) {
|
|
|
40
46
|
// download app package
|
|
41
47
|
const localDest = path.join(appDir, `${path.basename(appReleaseHash)}.tgz`);
|
|
42
48
|
if (!signedUrlsPayload) {
|
|
43
|
-
await (0,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
'--releaseHash',
|
|
51
|
-
appReleaseHash,
|
|
52
|
-
],
|
|
53
|
-
cwd: appDir,
|
|
54
|
-
});
|
|
49
|
+
await (0, run_in_dir_1.runInDir)(release_1.appReleasePullComponent, [
|
|
50
|
+
{
|
|
51
|
+
yes: true,
|
|
52
|
+
project: projectId,
|
|
53
|
+
releaseHash: appReleaseHash,
|
|
54
|
+
},
|
|
55
|
+
], appDir);
|
|
55
56
|
}
|
|
56
57
|
else {
|
|
57
58
|
const { appSignedUrl } = signedUrlsPayload.appInstallPayload;
|
|
58
59
|
await (0, utils_1.downloadPackageUsingPresignedUrl)({ localDest, presignedUrl: appSignedUrl });
|
|
59
60
|
}
|
|
60
61
|
// Unpack app package and remove tar file
|
|
61
|
-
await spawner
|
|
62
|
-
|
|
63
|
-
//
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
});
|
|
62
|
+
await unPackApp({ spawner, localDest, appDir });
|
|
63
|
+
// The following changes replace the runCliCmd for 'app configure'
|
|
64
|
+
// This part replaces findOrWriteProjectJsonFile() due to the
|
|
65
|
+
// calls that check the user is logged in and also for project collaboration
|
|
66
|
+
// NOTE: this process no longer checks project collaboration
|
|
67
|
+
await checkValidProjectFiles({ appDir });
|
|
68
68
|
// install models, python venv, and docker image
|
|
69
69
|
if (!signedUrlsPayload) {
|
|
70
|
-
await (0,
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
await (0, run_in_dir_1.runInDir)(app_install_component_1.appInstallComponent, [
|
|
71
|
+
{
|
|
72
|
+
yes: true,
|
|
73
|
+
pull: true,
|
|
74
|
+
clean: true,
|
|
75
|
+
skipModels: false,
|
|
76
|
+
source: false,
|
|
77
|
+
},
|
|
78
|
+
], appDir);
|
|
74
79
|
}
|
|
75
80
|
else {
|
|
76
|
-
await (
|
|
77
|
-
|
|
78
|
-
cwd: appDir,
|
|
79
|
-
});
|
|
80
|
-
await Promise.all(signedUrlsPayload.modelsInstallPayload.map(async (payload) => {
|
|
81
|
-
const modelDest = `${appDir}/models/${payload.id}`;
|
|
82
|
-
await spawner.mkdirp(modelDest);
|
|
83
|
-
const localDest = `${modelDest}/${payload.version}.tar.gz`;
|
|
84
|
-
await (0, utils_1.downloadPackageUsingPresignedUrl)({
|
|
85
|
-
localDest,
|
|
86
|
-
presignedUrl: payload.modelSignedUrl,
|
|
87
|
-
});
|
|
88
|
-
await spawner.untar(fs.createReadStream(localDest), path.dirname(modelDest));
|
|
89
|
-
await spawner.rimraf(localDest);
|
|
90
|
-
}));
|
|
81
|
+
await installAppBuildReqs({ appDir });
|
|
82
|
+
await (0, models_1.installModelsWithPresignedURLs)(signedUrlsPayload.modelsInstallPayload, path.join(appDir, 'models'));
|
|
91
83
|
}
|
|
92
84
|
await (0, utils_1.buildApp)({ appDir });
|
|
93
85
|
await (0, agent_config_1.AgentConfigFile)().setAppInstalled({ projectId, version: appReleaseHash });
|
|
94
86
|
console.log(`Installed app version ${appReleaseHash} from project ${projectId} to ${appDir}.`);
|
|
95
87
|
}
|
|
96
88
|
exports.installApp = installApp;
|
|
89
|
+
async function installAppBuildReqs(props) {
|
|
90
|
+
const { appDir } = props;
|
|
91
|
+
const targetJsonFile = (0, app_1.TargetJsonFile)(appDir);
|
|
92
|
+
const targetJson = targetJsonFile.readIfExists();
|
|
93
|
+
if (!targetJson) {
|
|
94
|
+
throw new Error('Target json file does not exist!');
|
|
95
|
+
}
|
|
96
|
+
await (0, run_in_dir_1.runInDir)(async () => {
|
|
97
|
+
const targetHostSpawner = targetJsonFile.readHostSpawner();
|
|
98
|
+
await (0, app_2.appCleanDockerComponent)({ targetHostSpawner });
|
|
99
|
+
await (0, app_2.buildDocker)({
|
|
100
|
+
targetJson,
|
|
101
|
+
targetJsonFile,
|
|
102
|
+
targetHostSpawner,
|
|
103
|
+
pull: true,
|
|
104
|
+
});
|
|
105
|
+
await (0, app_install_component_1.installVenv)({
|
|
106
|
+
targetJson,
|
|
107
|
+
sourceSpawner: targetHostSpawner,
|
|
108
|
+
targetJsonFile,
|
|
109
|
+
});
|
|
110
|
+
}, [], appDir);
|
|
111
|
+
}
|
|
112
|
+
async function unPackApp(props) {
|
|
113
|
+
const { spawner, localDest, appDir } = props;
|
|
114
|
+
await spawner.untar(fs.createReadStream(localDest), appDir);
|
|
115
|
+
await spawner.rimraf(localDest);
|
|
116
|
+
}
|
|
117
|
+
async function checkValidProjectFiles({ appDir }) {
|
|
118
|
+
if (!(0, project_1.ProjectJsonFile)(appDir).readIfExists()) {
|
|
119
|
+
throw new Error('Project JSON file does not exist!');
|
|
120
|
+
}
|
|
121
|
+
// check for app json file and app.py files
|
|
122
|
+
if (!(0, app_1.AppJsonFile)(appDir).readIfExists()) {
|
|
123
|
+
throw new Error('App JSON file does not exist!');
|
|
124
|
+
}
|
|
125
|
+
// write target json
|
|
126
|
+
if (!fs.existsSync(path.join(appDir, constants_1.DOCKERFILE))) {
|
|
127
|
+
throw new Error('No Dockerfile found for application!');
|
|
128
|
+
}
|
|
129
|
+
(0, app_1.TargetJsonFile)(appDir).write({
|
|
130
|
+
targetProtocol: 'docker:',
|
|
131
|
+
dockerImageId: constants_1.DOCKER_IMAGE_ID_INITIAL_VALUE,
|
|
132
|
+
targetHardware: await (0, app_1.getTargetHardwareType)({}),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
97
135
|
async function uninstallApp(props) {
|
|
98
136
|
const { projectId } = props;
|
|
99
137
|
if (!(await (0, agent_config_1.AgentConfigFile)().isAppPresent({ projectId }))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/application-control/install.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AACjC,yBAAyB;AACzB,6BAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/application-control/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ModelInstallPayload } from '@alwaysai/device-agent-schemas';
|
|
1
2
|
import { ModelDetails } from './types';
|
|
2
3
|
export declare function getAppModels(props: {
|
|
3
4
|
projectId: string;
|
|
@@ -17,4 +18,6 @@ export declare function replaceModels(props: {
|
|
|
17
18
|
export declare function updateModels(props: {
|
|
18
19
|
projectId: string;
|
|
19
20
|
}): Promise<void>;
|
|
21
|
+
export declare function installModelsWithPresignedURLs(modelPayloads: ModelInstallPayload[], targetDir: string): Promise<void>;
|
|
22
|
+
export declare function updateModelsWithPresignedUrls(project: string, modelInstallPayloads: ModelInstallPayload[]): Promise<void>;
|
|
20
23
|
//# sourceMappingURL=models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/application-control/models.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/application-control/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAgBjF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQvC,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,2BAoB9D;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,iBAY3E;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,iBAiB9E;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,iBAyBnF;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAU9D;AAED,wBAAsB,8BAA8B,CAClD,aAAa,EAAE,mBAAmB,EAAE,EACpC,SAAS,EAAE,MAAM,iBAgBlB;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,EACf,oBAAoB,EAAE,mBAAmB,EAAE,iBAoD5C"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.updateModels = exports.replaceModels = exports.removeModel = exports.addModel = exports.getAppModels = void 0;
|
|
3
|
+
exports.updateModelsWithPresignedUrls = exports.installModelsWithPresignedURLs = exports.updateModels = exports.replaceModels = exports.removeModel = exports.addModel = exports.getAppModels = void 0;
|
|
4
|
+
const device_agent_schemas_1 = require("@alwaysai/device-agent-schemas");
|
|
5
|
+
const app_1 = require("alwaysai/lib/components/app");
|
|
4
6
|
const util_1 = require("alwaysai/lib/util");
|
|
5
7
|
const fs_1 = require("fs");
|
|
6
8
|
const path_1 = require("path");
|
|
7
9
|
const agent_config_1 = require("../infrastructure/agent-config");
|
|
8
|
-
const
|
|
10
|
+
const copy_dir_1 = require("../util/copy-dir");
|
|
11
|
+
const run_in_dir_1 = require("../util/run-in-dir");
|
|
12
|
+
const status_1 = require("./status");
|
|
9
13
|
const utils_1 = require("./utils");
|
|
10
14
|
async function getAppModels(props) {
|
|
11
15
|
const { projectId } = props;
|
|
@@ -32,9 +36,11 @@ async function addModel(props) {
|
|
|
32
36
|
const { projectId, modelId } = props;
|
|
33
37
|
await (0, utils_1.requireAppInstalled)({ projectId });
|
|
34
38
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
35
|
-
await (0,
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
await (0, app_1.appModelsAddComponent)({
|
|
40
|
+
yes: false,
|
|
41
|
+
dir: appDir,
|
|
42
|
+
id: modelId,
|
|
43
|
+
addToProject: false,
|
|
38
44
|
});
|
|
39
45
|
await (0, utils_1.buildApp)({ appDir });
|
|
40
46
|
}
|
|
@@ -43,24 +49,31 @@ async function removeModel(props) {
|
|
|
43
49
|
const { projectId, modelId } = props;
|
|
44
50
|
await (0, utils_1.requireAppInstalled)({ projectId });
|
|
45
51
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
46
|
-
await (0,
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
await (0, run_in_dir_1.runInDir)(app_1.appModelsRemoveComponent, [
|
|
53
|
+
{
|
|
54
|
+
id: modelId,
|
|
55
|
+
purge: true,
|
|
56
|
+
removeFromProject: false,
|
|
57
|
+
},
|
|
58
|
+
], appDir);
|
|
50
59
|
}
|
|
51
60
|
exports.removeModel = removeModel;
|
|
52
61
|
async function replaceModels(props) {
|
|
53
62
|
const { projectId, modelIds } = props;
|
|
54
63
|
await (0, utils_1.requireAppInstalled)({ projectId });
|
|
55
64
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
56
|
-
await (0,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
65
|
+
await (0, run_in_dir_1.runInDir)(app_1.appModelsRemoveAllComponent, [
|
|
66
|
+
{
|
|
67
|
+
purge: true,
|
|
68
|
+
removeFromProject: false,
|
|
69
|
+
},
|
|
70
|
+
], appDir);
|
|
60
71
|
for (const modelId of modelIds) {
|
|
61
|
-
await (0,
|
|
62
|
-
|
|
63
|
-
|
|
72
|
+
await (0, app_1.appModelsAddComponent)({
|
|
73
|
+
yes: false,
|
|
74
|
+
dir: appDir,
|
|
75
|
+
id: modelId,
|
|
76
|
+
addToProject: false,
|
|
64
77
|
});
|
|
65
78
|
}
|
|
66
79
|
await (0, utils_1.buildApp)({ appDir });
|
|
@@ -70,11 +83,71 @@ async function updateModels(props) {
|
|
|
70
83
|
const { projectId } = props;
|
|
71
84
|
await (0, utils_1.requireAppInstalled)({ projectId });
|
|
72
85
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
73
|
-
await (0,
|
|
74
|
-
|
|
75
|
-
|
|
86
|
+
await (0, app_1.appModelsUpdateComponent)({
|
|
87
|
+
yes: false,
|
|
88
|
+
dir: appDir,
|
|
76
89
|
});
|
|
77
90
|
await (0, utils_1.buildApp)({ appDir });
|
|
78
91
|
}
|
|
79
92
|
exports.updateModels = updateModels;
|
|
93
|
+
async function installModelsWithPresignedURLs(modelPayloads, targetDir) {
|
|
94
|
+
const spawner = (0, util_1.JsSpawner)();
|
|
95
|
+
await Promise.all(modelPayloads.map(async (payload) => {
|
|
96
|
+
const modelDest = `${targetDir}/${payload.id}`;
|
|
97
|
+
await spawner.mkdirp(modelDest);
|
|
98
|
+
const localDest = `${modelDest}/${payload.version}.tar.gz`;
|
|
99
|
+
await (0, utils_1.downloadPackageUsingPresignedUrl)({
|
|
100
|
+
localDest,
|
|
101
|
+
presignedUrl: payload.modelSignedUrl,
|
|
102
|
+
});
|
|
103
|
+
await spawner.untar((0, fs_1.createReadStream)(localDest), (0, path_1.dirname)(modelDest));
|
|
104
|
+
await spawner.rimraf(localDest);
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
exports.installModelsWithPresignedURLs = installModelsWithPresignedURLs;
|
|
108
|
+
async function updateModelsWithPresignedUrls(project, modelInstallPayloads) {
|
|
109
|
+
// create temp dir with all untouched models
|
|
110
|
+
const spawner = (0, util_1.JsSpawner)();
|
|
111
|
+
const appDir = (0, utils_1.getAppDir)(project);
|
|
112
|
+
const ogDir = `${appDir}/models`;
|
|
113
|
+
const tmpDir = `${ogDir}.tmp`;
|
|
114
|
+
const restoreDir = `${ogDir}.restore`;
|
|
115
|
+
await (0, copy_dir_1.copyDir)({ srcPath: ogDir, destPath: restoreDir });
|
|
116
|
+
await spawner.rimraf(tmpDir);
|
|
117
|
+
try {
|
|
118
|
+
// Move unchanged models
|
|
119
|
+
const existingModels = await getAppModels({ projectId: project });
|
|
120
|
+
for (const model of existingModels) {
|
|
121
|
+
if (!modelInstallPayloads
|
|
122
|
+
.map((newModel) => newModel.id)
|
|
123
|
+
.includes(model.modelId)) {
|
|
124
|
+
// model does not need to be updated
|
|
125
|
+
await (0, copy_dir_1.copyDir)({
|
|
126
|
+
srcPath: `${ogDir}/${model.modelId}`,
|
|
127
|
+
destPath: `${tmpDir}/${model.modelId}`,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// install model packages
|
|
132
|
+
await installModelsWithPresignedURLs(modelInstallPayloads, tmpDir);
|
|
133
|
+
await spawner.rimraf(ogDir);
|
|
134
|
+
await (0, copy_dir_1.copyDir)({ srcPath: tmpDir, destPath: ogDir });
|
|
135
|
+
await spawner.rimraf(tmpDir);
|
|
136
|
+
await (0, utils_1.buildApp)({ appDir: (0, utils_1.getAppDir)(project) });
|
|
137
|
+
const appStatus = await (0, status_1.getAppStatus)({ projectId: project });
|
|
138
|
+
const appIsRunning = appStatus.services.length &&
|
|
139
|
+
appStatus.services[0].state !== device_agent_schemas_1.keyMirrors.appState.stopped;
|
|
140
|
+
if (appIsRunning) {
|
|
141
|
+
(0, status_1.restartApp)({ projectId: project });
|
|
142
|
+
}
|
|
143
|
+
console.log(`Models installed for project ${project}`);
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
console.error(e, 'Error updating app models from presigned URL, restoring models.');
|
|
147
|
+
await spawner.rimraf(tmpDir);
|
|
148
|
+
await spawner.rimraf(ogDir);
|
|
149
|
+
await (0, copy_dir_1.copyDir)({ srcPath: restoreDir, destPath: ogDir });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
exports.updateModelsWithPresignedUrls = updateModelsWithPresignedUrls;
|
|
80
153
|
//# sourceMappingURL=models.js.map
|