@strapi/cloud-cli 0.0.0-next.f698d55751345c4ca87477ef683475c1a68f310a → 0.0.0-next.f93d6eabe52aa7681655cfa08eedbc3708dbb90d
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/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +40 -171
- package/dist/bin.js.map +1 -1
- package/dist/bin.mjs +44 -0
- package/dist/bin.mjs.map +1 -0
- package/dist/cloud/command.d.ts.map +1 -0
- package/dist/cloud/command.js +14 -0
- package/dist/cloud/command.js.map +1 -0
- package/dist/cloud/command.mjs +12 -0
- package/dist/cloud/command.mjs.map +1 -0
- package/dist/config/api.d.ts.map +1 -0
- package/dist/config/api.js +11 -0
- package/dist/config/api.js.map +1 -0
- package/dist/config/api.mjs +9 -0
- package/dist/config/api.mjs.map +1 -0
- package/dist/config/local.d.ts.map +1 -0
- package/dist/config/local.js +60 -0
- package/dist/config/local.js.map +1 -0
- package/dist/config/local.mjs +55 -0
- package/dist/config/local.mjs.map +1 -0
- package/dist/create-project/action.d.ts.map +1 -0
- package/dist/create-project/action.js +95 -0
- package/dist/create-project/action.js.map +1 -0
- package/dist/create-project/action.mjs +93 -0
- package/dist/create-project/action.mjs.map +1 -0
- package/dist/create-project/command.d.ts.map +1 -0
- package/dist/create-project/command.js +14 -0
- package/dist/create-project/command.js.map +1 -0
- package/dist/create-project/command.mjs +12 -0
- package/dist/create-project/command.mjs.map +1 -0
- package/dist/create-project/index.d.ts.map +1 -0
- package/dist/create-project/index.js +18 -0
- package/dist/create-project/index.js.map +1 -0
- package/dist/create-project/index.mjs +12 -0
- package/dist/create-project/index.mjs.map +1 -0
- package/dist/create-project/utils/get-project-name-from-pkg.d.ts.map +1 -0
- package/dist/create-project/utils/get-project-name-from-pkg.js +15 -0
- package/dist/create-project/utils/get-project-name-from-pkg.js.map +1 -0
- package/dist/create-project/utils/get-project-name-from-pkg.mjs +13 -0
- package/dist/create-project/utils/get-project-name-from-pkg.mjs.map +1 -0
- package/dist/create-project/utils/project-questions.utils.d.ts.map +1 -0
- package/dist/create-project/utils/project-questions.utils.js +63 -0
- package/dist/create-project/utils/project-questions.utils.js.map +1 -0
- package/dist/create-project/utils/project-questions.utils.mjs +59 -0
- package/dist/create-project/utils/project-questions.utils.mjs.map +1 -0
- package/dist/deploy-project/action.d.ts.map +1 -0
- package/dist/deploy-project/action.js +287 -0
- package/dist/deploy-project/action.js.map +1 -0
- package/dist/deploy-project/action.mjs +266 -0
- package/dist/deploy-project/action.mjs.map +1 -0
- package/dist/deploy-project/command.d.ts.map +1 -0
- package/dist/deploy-project/command.js +14 -0
- package/dist/deploy-project/command.js.map +1 -0
- package/dist/deploy-project/command.mjs +12 -0
- package/dist/deploy-project/command.mjs.map +1 -0
- package/dist/deploy-project/index.d.ts.map +1 -0
- package/dist/deploy-project/index.js +18 -0
- package/dist/deploy-project/index.js.map +1 -0
- package/dist/deploy-project/index.mjs +12 -0
- package/dist/deploy-project/index.mjs.map +1 -0
- package/dist/environment/command.d.ts.map +1 -0
- package/dist/environment/command.js +15 -0
- package/dist/environment/command.js.map +1 -0
- package/dist/environment/command.mjs +13 -0
- package/dist/environment/command.mjs.map +1 -0
- package/dist/environment/link/action.d.ts.map +1 -0
- package/dist/environment/link/action.js +117 -0
- package/dist/environment/link/action.js.map +1 -0
- package/dist/environment/link/action.mjs +115 -0
- package/dist/environment/link/action.mjs.map +1 -0
- package/dist/environment/link/command.d.ts.map +1 -0
- package/dist/environment/link/command.js +13 -0
- package/dist/environment/link/command.js.map +1 -0
- package/dist/environment/link/command.mjs +11 -0
- package/dist/environment/link/command.mjs.map +1 -0
- package/dist/environment/link/index.d.ts.map +1 -0
- package/dist/environment/link/index.js +18 -0
- package/dist/environment/link/index.js.map +1 -0
- package/dist/environment/link/index.mjs +12 -0
- package/dist/environment/link/index.mjs.map +1 -0
- package/dist/environment/list/action.d.ts.map +1 -0
- package/dist/environment/list/action.js +57 -0
- package/dist/environment/list/action.js.map +1 -0
- package/dist/environment/list/action.mjs +55 -0
- package/dist/environment/list/action.mjs.map +1 -0
- package/dist/environment/list/command.d.ts.map +1 -0
- package/dist/environment/list/command.js +13 -0
- package/dist/environment/list/command.js.map +1 -0
- package/dist/environment/list/command.mjs +11 -0
- package/dist/environment/list/command.mjs.map +1 -0
- package/dist/environment/list/index.d.ts.map +1 -0
- package/dist/environment/list/index.js +18 -0
- package/dist/environment/list/index.js.map +1 -0
- package/dist/environment/list/index.mjs +12 -0
- package/dist/environment/list/index.mjs.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -1911
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +53 -1856
- package/dist/index.mjs.map +1 -1
- package/dist/link/action.d.ts.map +1 -0
- package/dist/link/action.js +146 -0
- package/dist/link/action.js.map +1 -0
- package/dist/link/action.mjs +144 -0
- package/dist/link/action.mjs.map +1 -0
- package/dist/link/command.d.ts.map +1 -0
- package/dist/link/command.js +13 -0
- package/dist/link/command.js.map +1 -0
- package/dist/link/command.mjs +11 -0
- package/dist/link/command.mjs.map +1 -0
- package/dist/link/index.d.ts.map +1 -0
- package/dist/link/index.js +18 -0
- package/dist/link/index.js.map +1 -0
- package/dist/link/index.mjs +12 -0
- package/dist/link/index.mjs.map +1 -0
- package/dist/list-projects/action.d.ts.map +1 -0
- package/dist/list-projects/action.js +34 -0
- package/dist/list-projects/action.js.map +1 -0
- package/dist/list-projects/action.mjs +32 -0
- package/dist/list-projects/action.mjs.map +1 -0
- package/dist/list-projects/command.d.ts.map +1 -0
- package/dist/list-projects/command.js +13 -0
- package/dist/list-projects/command.js.map +1 -0
- package/dist/list-projects/command.mjs +11 -0
- package/dist/list-projects/command.mjs.map +1 -0
- package/dist/list-projects/index.d.ts.map +1 -0
- package/dist/list-projects/index.js +18 -0
- package/dist/list-projects/index.js.map +1 -0
- package/dist/list-projects/index.mjs +12 -0
- package/dist/list-projects/index.mjs.map +1 -0
- package/dist/login/action.d.ts.map +1 -0
- package/dist/login/action.js +177 -0
- package/dist/login/action.js.map +1 -0
- package/dist/login/action.mjs +172 -0
- package/dist/login/action.mjs.map +1 -0
- package/dist/login/command.d.ts.map +1 -0
- package/dist/login/command.js +14 -0
- package/dist/login/command.js.map +1 -0
- package/dist/login/command.mjs +12 -0
- package/dist/login/command.mjs.map +1 -0
- package/dist/login/index.d.ts.map +1 -0
- package/dist/login/index.js +18 -0
- package/dist/login/index.js.map +1 -0
- package/dist/login/index.mjs +12 -0
- package/dist/login/index.mjs.map +1 -0
- package/dist/logout/action.d.ts.map +1 -0
- package/dist/logout/action.js +46 -0
- package/dist/logout/action.js.map +1 -0
- package/dist/logout/action.mjs +44 -0
- package/dist/logout/action.mjs.map +1 -0
- package/dist/logout/command.d.ts.map +1 -0
- package/dist/logout/command.js +14 -0
- package/dist/logout/command.js.map +1 -0
- package/dist/logout/command.mjs +12 -0
- package/dist/logout/command.mjs.map +1 -0
- package/dist/logout/index.d.ts.map +1 -0
- package/dist/logout/index.js +18 -0
- package/dist/logout/index.js.map +1 -0
- package/dist/logout/index.mjs +12 -0
- package/dist/logout/index.mjs.map +1 -0
- package/dist/package.json.js +129 -0
- package/dist/package.json.js.map +1 -0
- package/dist/package.json.mjs +105 -0
- package/dist/package.json.mjs.map +1 -0
- package/dist/services/build-logs.d.ts.map +1 -0
- package/dist/services/build-logs.js +67 -0
- package/dist/services/build-logs.js.map +1 -0
- package/dist/services/build-logs.mjs +65 -0
- package/dist/services/build-logs.mjs.map +1 -0
- package/dist/services/cli-api.d.ts.map +1 -0
- package/dist/services/cli-api.js +146 -0
- package/dist/services/cli-api.js.map +1 -0
- package/dist/services/cli-api.mjs +143 -0
- package/dist/services/cli-api.mjs.map +1 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +14 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/index.mjs +6 -0
- package/dist/services/index.mjs.map +1 -0
- package/dist/services/logger.d.ts.map +1 -0
- package/dist/services/logger.js +128 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/logger.mjs +107 -0
- package/dist/services/logger.mjs.map +1 -0
- package/dist/services/notification.d.ts.map +1 -0
- package/dist/services/notification.js +37 -0
- package/dist/services/notification.js.map +1 -0
- package/dist/services/notification.mjs +35 -0
- package/dist/services/notification.mjs.map +1 -0
- package/dist/services/strapi-info-save.d.ts.map +1 -0
- package/dist/services/strapi-info-save.js +53 -0
- package/dist/services/strapi-info-save.js.map +1 -0
- package/dist/services/strapi-info-save.mjs +47 -0
- package/dist/services/strapi-info-save.mjs.map +1 -0
- package/dist/services/token.d.ts.map +1 -0
- package/dist/services/token.js +126 -0
- package/dist/services/token.js.map +1 -0
- package/dist/services/token.mjs +124 -0
- package/dist/services/token.mjs.map +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/analytics.d.ts.map +1 -0
- package/dist/utils/analytics.js +12 -0
- package/dist/utils/analytics.js.map +1 -0
- package/dist/utils/analytics.mjs +10 -0
- package/dist/utils/analytics.mjs.map +1 -0
- package/dist/utils/compress-files.d.ts.map +1 -0
- package/dist/utils/compress-files.js +102 -0
- package/dist/utils/compress-files.js.map +1 -0
- package/dist/utils/compress-files.mjs +78 -0
- package/dist/utils/compress-files.mjs.map +1 -0
- package/dist/utils/get-local-config.d.ts.map +1 -0
- package/dist/utils/get-local-config.js +37 -0
- package/dist/utils/get-local-config.js.map +1 -0
- package/dist/utils/get-local-config.mjs +34 -0
- package/dist/utils/get-local-config.mjs.map +1 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +33 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/helpers.mjs +31 -0
- package/dist/utils/helpers.mjs.map +1 -0
- package/dist/utils/pkg.d.ts.map +1 -0
- package/dist/utils/pkg.js +65 -0
- package/dist/utils/pkg.js.map +1 -0
- package/dist/utils/pkg.mjs +43 -0
- package/dist/utils/pkg.mjs.map +1 -0
- package/dist/utils/tests/compress-files.test.d.ts.map +1 -0
- package/package.json +11 -11
- package/dist/src/bin.d.ts.map +0 -1
- package/dist/src/cloud/command.d.ts.map +0 -1
- package/dist/src/config/api.d.ts.map +0 -1
- package/dist/src/config/local.d.ts.map +0 -1
- package/dist/src/create-project/action.d.ts.map +0 -1
- package/dist/src/create-project/command.d.ts.map +0 -1
- package/dist/src/create-project/index.d.ts.map +0 -1
- package/dist/src/create-project/utils/get-project-name-from-pkg.d.ts.map +0 -1
- package/dist/src/create-project/utils/project-questions.utils.d.ts.map +0 -1
- package/dist/src/deploy-project/action.d.ts.map +0 -1
- package/dist/src/deploy-project/command.d.ts.map +0 -1
- package/dist/src/deploy-project/index.d.ts.map +0 -1
- package/dist/src/environment/command.d.ts.map +0 -1
- package/dist/src/environment/link/action.d.ts.map +0 -1
- package/dist/src/environment/link/command.d.ts.map +0 -1
- package/dist/src/environment/link/index.d.ts.map +0 -1
- package/dist/src/environment/list/action.d.ts.map +0 -1
- package/dist/src/environment/list/command.d.ts.map +0 -1
- package/dist/src/environment/list/index.d.ts.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/link/action.d.ts.map +0 -1
- package/dist/src/link/command.d.ts.map +0 -1
- package/dist/src/link/index.d.ts.map +0 -1
- package/dist/src/list-projects/action.d.ts.map +0 -1
- package/dist/src/list-projects/command.d.ts.map +0 -1
- package/dist/src/list-projects/index.d.ts.map +0 -1
- package/dist/src/login/action.d.ts.map +0 -1
- package/dist/src/login/command.d.ts.map +0 -1
- package/dist/src/login/index.d.ts.map +0 -1
- package/dist/src/logout/action.d.ts.map +0 -1
- package/dist/src/logout/command.d.ts.map +0 -1
- package/dist/src/logout/index.d.ts.map +0 -1
- package/dist/src/services/build-logs.d.ts.map +0 -1
- package/dist/src/services/cli-api.d.ts.map +0 -1
- package/dist/src/services/index.d.ts.map +0 -1
- package/dist/src/services/logger.d.ts.map +0 -1
- package/dist/src/services/notification.d.ts.map +0 -1
- package/dist/src/services/strapi-info-save.d.ts.map +0 -1
- package/dist/src/services/token.d.ts.map +0 -1
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/utils/analytics.d.ts.map +0 -1
- package/dist/src/utils/compress-files.d.ts.map +0 -1
- package/dist/src/utils/get-local-config.d.ts.map +0 -1
- package/dist/src/utils/helpers.d.ts.map +0 -1
- package/dist/src/utils/pkg.d.ts.map +0 -1
- package/dist/src/utils/tests/compress-files.test.d.ts.map +0 -1
- /package/dist/{src/bin.d.ts → bin.d.ts} +0 -0
- /package/dist/{src/cloud → cloud}/command.d.ts +0 -0
- /package/dist/{src/config → config}/api.d.ts +0 -0
- /package/dist/{src/config → config}/local.d.ts +0 -0
- /package/dist/{src/create-project → create-project}/action.d.ts +0 -0
- /package/dist/{src/create-project → create-project}/command.d.ts +0 -0
- /package/dist/{src/create-project → create-project}/index.d.ts +0 -0
- /package/dist/{src/create-project → create-project}/utils/get-project-name-from-pkg.d.ts +0 -0
- /package/dist/{src/create-project → create-project}/utils/project-questions.utils.d.ts +0 -0
- /package/dist/{src/deploy-project → deploy-project}/action.d.ts +0 -0
- /package/dist/{src/deploy-project → deploy-project}/command.d.ts +0 -0
- /package/dist/{src/deploy-project → deploy-project}/index.d.ts +0 -0
- /package/dist/{src/environment → environment}/command.d.ts +0 -0
- /package/dist/{src/environment → environment}/link/action.d.ts +0 -0
- /package/dist/{src/environment → environment}/link/command.d.ts +0 -0
- /package/dist/{src/environment → environment}/link/index.d.ts +0 -0
- /package/dist/{src/environment → environment}/list/action.d.ts +0 -0
- /package/dist/{src/environment → environment}/list/command.d.ts +0 -0
- /package/dist/{src/environment → environment}/list/index.d.ts +0 -0
- /package/dist/{src/index.d.ts → index.d.ts} +0 -0
- /package/dist/{src/link → link}/action.d.ts +0 -0
- /package/dist/{src/link → link}/command.d.ts +0 -0
- /package/dist/{src/link → link}/index.d.ts +0 -0
- /package/dist/{src/list-projects → list-projects}/action.d.ts +0 -0
- /package/dist/{src/list-projects → list-projects}/command.d.ts +0 -0
- /package/dist/{src/list-projects → list-projects}/index.d.ts +0 -0
- /package/dist/{src/login → login}/action.d.ts +0 -0
- /package/dist/{src/login → login}/command.d.ts +0 -0
- /package/dist/{src/login → login}/index.d.ts +0 -0
- /package/dist/{src/logout → logout}/action.d.ts +0 -0
- /package/dist/{src/logout → logout}/command.d.ts +0 -0
- /package/dist/{src/logout → logout}/index.d.ts +0 -0
- /package/dist/{src/services → services}/build-logs.d.ts +0 -0
- /package/dist/{src/services → services}/cli-api.d.ts +0 -0
- /package/dist/{src/services → services}/index.d.ts +0 -0
- /package/dist/{src/services → services}/logger.d.ts +0 -0
- /package/dist/{src/services → services}/notification.d.ts +0 -0
- /package/dist/{src/services → services}/strapi-info-save.d.ts +0 -0
- /package/dist/{src/services → services}/token.d.ts +0 -0
- /package/dist/{src/types.d.ts → types.d.ts} +0 -0
- /package/dist/{src/utils → utils}/analytics.d.ts +0 -0
- /package/dist/{src/utils → utils}/compress-files.d.ts +0 -0
- /package/dist/{src/utils → utils}/get-local-config.d.ts +0 -0
- /package/dist/{src/utils → utils}/helpers.d.ts +0 -0
- /package/dist/{src/utils → utils}/pkg.d.ts +0 -0
- /package/dist/{src/utils → utils}/tests/compress-files.test.d.ts +0 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fse = require('fs-extra');
|
|
4
|
+
var inquirer = require('inquirer');
|
|
5
|
+
var boxen = require('boxen');
|
|
6
|
+
var path = require('path');
|
|
7
|
+
var chalk = require('chalk');
|
|
8
|
+
var axios = require('axios');
|
|
9
|
+
var crypto = require('node:crypto');
|
|
10
|
+
var api = require('../config/api.js');
|
|
11
|
+
var compressFiles = require('../utils/compress-files.js');
|
|
12
|
+
var action$2 = require('../create-project/action.js');
|
|
13
|
+
var local = require('../config/local.js');
|
|
14
|
+
var cliApi = require('../services/cli-api.js');
|
|
15
|
+
var strapiInfoSave = require('../services/strapi-info-save.js');
|
|
16
|
+
var token = require('../services/token.js');
|
|
17
|
+
require('fast-safe-stringify');
|
|
18
|
+
require('ora');
|
|
19
|
+
require('cli-progress');
|
|
20
|
+
var notification = require('../services/notification.js');
|
|
21
|
+
var pkg = require('../utils/pkg.js');
|
|
22
|
+
var buildLogs = require('../services/build-logs.js');
|
|
23
|
+
var action$1 = require('../login/action.js');
|
|
24
|
+
var analytics = require('../utils/analytics.js');
|
|
25
|
+
|
|
26
|
+
function _interopNamespaceDefault(e) {
|
|
27
|
+
var n = Object.create(null);
|
|
28
|
+
if (e) {
|
|
29
|
+
Object.keys(e).forEach(function (k) {
|
|
30
|
+
if (k !== 'default') {
|
|
31
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
32
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () { return e[k]; }
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
n.default = e;
|
|
40
|
+
return Object.freeze(n);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
var crypto__namespace = /*#__PURE__*/_interopNamespaceDefault(crypto);
|
|
44
|
+
|
|
45
|
+
const boxenOptions = {
|
|
46
|
+
padding: 1,
|
|
47
|
+
margin: 1,
|
|
48
|
+
align: 'center',
|
|
49
|
+
borderColor: 'yellow',
|
|
50
|
+
borderStyle: 'round'
|
|
51
|
+
};
|
|
52
|
+
const QUIT_OPTION = 'Quit';
|
|
53
|
+
async function promptForEnvironment(environments) {
|
|
54
|
+
const choices = environments.map((env)=>({
|
|
55
|
+
name: env,
|
|
56
|
+
value: env
|
|
57
|
+
}));
|
|
58
|
+
const { selectedEnvironment } = await inquirer.prompt([
|
|
59
|
+
{
|
|
60
|
+
type: 'list',
|
|
61
|
+
name: 'selectedEnvironment',
|
|
62
|
+
message: 'Select the environment to deploy:',
|
|
63
|
+
choices: [
|
|
64
|
+
...choices,
|
|
65
|
+
{
|
|
66
|
+
name: chalk.grey(`(${QUIT_OPTION})`),
|
|
67
|
+
value: null
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
]);
|
|
72
|
+
if (selectedEnvironment === null) {
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
return selectedEnvironment;
|
|
76
|
+
}
|
|
77
|
+
async function upload(ctx, project, token, maxProjectFileSize) {
|
|
78
|
+
const cloudApi = await cliApi.cloudApiFactory(ctx, token);
|
|
79
|
+
try {
|
|
80
|
+
const storagePath = await local.getTmpStoragePath();
|
|
81
|
+
const projectFolder = path.resolve(process.cwd());
|
|
82
|
+
const packageJson = await pkg.loadPkg(ctx);
|
|
83
|
+
if (!packageJson) {
|
|
84
|
+
ctx.logger.error('Unable to deploy the project. Please make sure the package.json file is correctly formatted.');
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
ctx.logger.log('📦 Compressing project...');
|
|
88
|
+
// hash packageJson.name to avoid conflicts
|
|
89
|
+
const hashname = crypto__namespace.createHash('sha512').update(packageJson.name).digest('hex');
|
|
90
|
+
const compressedFilename = `${hashname}.tar.gz`;
|
|
91
|
+
try {
|
|
92
|
+
ctx.logger.debug('Compression parameters\n', `Storage path: ${storagePath}\n`, `Project folder: ${projectFolder}\n`, `Compressed filename: ${compressedFilename}`);
|
|
93
|
+
await compressFiles.compressFilesToTar(storagePath, projectFolder, compressedFilename);
|
|
94
|
+
ctx.logger.log('📦 Project compressed successfully!');
|
|
95
|
+
} catch (e) {
|
|
96
|
+
ctx.logger.error('⚠️ Project compression failed. Try again later or check for large/incompatible files.');
|
|
97
|
+
ctx.logger.debug(e);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
const tarFilePath = path.resolve(storagePath, compressedFilename);
|
|
101
|
+
const fileStats = await fse.stat(tarFilePath);
|
|
102
|
+
if (fileStats.size > maxProjectFileSize) {
|
|
103
|
+
ctx.logger.log('Unable to proceed: Your project is too big to be transferred, please use a git repo instead.');
|
|
104
|
+
try {
|
|
105
|
+
await fse.remove(tarFilePath);
|
|
106
|
+
} catch (e) {
|
|
107
|
+
ctx.logger.log('Unable to remove file: ', tarFilePath);
|
|
108
|
+
ctx.logger.debug(e);
|
|
109
|
+
}
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
ctx.logger.info('🚀 Uploading project...');
|
|
113
|
+
const progressBar = ctx.logger.progressBar(100, 'Upload Progress');
|
|
114
|
+
try {
|
|
115
|
+
const { data } = await cloudApi.deploy({
|
|
116
|
+
filePath: tarFilePath,
|
|
117
|
+
project
|
|
118
|
+
}, {
|
|
119
|
+
onUploadProgress (progressEvent) {
|
|
120
|
+
const total = progressEvent.total || fileStats.size;
|
|
121
|
+
const percentage = Math.round(progressEvent.loaded * 100 / total);
|
|
122
|
+
progressBar.update(percentage);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
progressBar.update(100);
|
|
126
|
+
progressBar.stop();
|
|
127
|
+
ctx.logger.success('✨ Upload finished!');
|
|
128
|
+
return data.build_id;
|
|
129
|
+
} catch (e) {
|
|
130
|
+
progressBar.stop();
|
|
131
|
+
ctx.logger.error('An error occurred while deploying the project. Please try again later.');
|
|
132
|
+
ctx.logger.debug(e);
|
|
133
|
+
} finally{
|
|
134
|
+
await fse.remove(tarFilePath);
|
|
135
|
+
}
|
|
136
|
+
process.exit(0);
|
|
137
|
+
} catch (e) {
|
|
138
|
+
ctx.logger.error('An error occurred while deploying the project. Please try again later.');
|
|
139
|
+
ctx.logger.debug(e);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async function getProject(ctx) {
|
|
144
|
+
const { project } = await strapiInfoSave.retrieve();
|
|
145
|
+
if (!project) {
|
|
146
|
+
try {
|
|
147
|
+
return await action$2(ctx);
|
|
148
|
+
} catch (e) {
|
|
149
|
+
ctx.logger.error('An error occurred while deploying the project. Please try again later.');
|
|
150
|
+
ctx.logger.debug(e);
|
|
151
|
+
process.exit(1);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return project;
|
|
155
|
+
}
|
|
156
|
+
async function getConfig({ ctx, cloudApiService }) {
|
|
157
|
+
try {
|
|
158
|
+
const { data: cliConfig } = await cloudApiService.config();
|
|
159
|
+
return cliConfig;
|
|
160
|
+
} catch (e) {
|
|
161
|
+
ctx.logger.debug('Failed to get cli config', e);
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function validateEnvironment(ctx, environment, environments) {
|
|
166
|
+
if (!environments.includes(environment)) {
|
|
167
|
+
ctx.logger.error(`Environment ${environment} does not exist.`);
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async function getTargetEnvironment(ctx, opts, project, environments) {
|
|
172
|
+
if (opts.env) {
|
|
173
|
+
validateEnvironment(ctx, opts.env, environments);
|
|
174
|
+
return opts.env;
|
|
175
|
+
}
|
|
176
|
+
if (project.targetEnvironment) {
|
|
177
|
+
return project.targetEnvironment;
|
|
178
|
+
}
|
|
179
|
+
if (environments.length > 1) {
|
|
180
|
+
return promptForEnvironment(environments);
|
|
181
|
+
}
|
|
182
|
+
return environments[0];
|
|
183
|
+
}
|
|
184
|
+
function hasPendingOrLiveDeployment(environments, targetEnvironment) {
|
|
185
|
+
const environment = environments.find((env)=>env.name === targetEnvironment);
|
|
186
|
+
if (!environment) {
|
|
187
|
+
throw new Error(`Environment details ${targetEnvironment} not found.`);
|
|
188
|
+
}
|
|
189
|
+
return environment.hasPendingDeployment || environment.hasLiveDeployment || false;
|
|
190
|
+
}
|
|
191
|
+
var action = (async (ctx, opts)=>{
|
|
192
|
+
const { getValidToken } = await token.tokenServiceFactory(ctx);
|
|
193
|
+
const token$1 = await getValidToken(ctx, action$1.promptLogin);
|
|
194
|
+
if (!token$1) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const project = await getProject(ctx);
|
|
198
|
+
if (!project) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const cloudApiService = await cliApi.cloudApiFactory(ctx, token$1);
|
|
202
|
+
let projectData;
|
|
203
|
+
let environments;
|
|
204
|
+
let environmentsDetails;
|
|
205
|
+
try {
|
|
206
|
+
const { data: { data, metadata } } = await cloudApiService.getProject({
|
|
207
|
+
name: project.name
|
|
208
|
+
});
|
|
209
|
+
projectData = data;
|
|
210
|
+
environments = projectData.environments;
|
|
211
|
+
environmentsDetails = projectData.environmentsDetails;
|
|
212
|
+
const isProjectSuspended = projectData.suspendedAt;
|
|
213
|
+
if (isProjectSuspended) {
|
|
214
|
+
ctx.logger.log('\n Oops! This project has been suspended. \n\n Please reactivate it from the dashboard to continue deploying: ');
|
|
215
|
+
ctx.logger.log(chalk.underline(`${metadata.dashboardUrls.project}`));
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
} catch (e) {
|
|
219
|
+
if (e instanceof axios.AxiosError && e.response?.data) {
|
|
220
|
+
if (e.response.status === 404) {
|
|
221
|
+
ctx.logger.warn(`The project associated with this folder does not exist in Strapi Cloud. \nPlease link your local project to an existing Strapi Cloud project using the ${chalk.cyan('link')} command before deploying.`);
|
|
222
|
+
} else {
|
|
223
|
+
ctx.logger.error(e.response.data);
|
|
224
|
+
}
|
|
225
|
+
} else {
|
|
226
|
+
ctx.logger.error("An error occurred while retrieving the project's information. Please try again later.");
|
|
227
|
+
}
|
|
228
|
+
ctx.logger.debug(e);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
await analytics.trackEvent(ctx, cloudApiService, 'willDeployWithCLI', {
|
|
232
|
+
projectInternalName: project.name
|
|
233
|
+
});
|
|
234
|
+
const notificationService = notification.notificationServiceFactory(ctx);
|
|
235
|
+
const buildLogsService = buildLogs.buildLogsServiceFactory(ctx);
|
|
236
|
+
const cliConfig = await getConfig({
|
|
237
|
+
ctx,
|
|
238
|
+
cloudApiService
|
|
239
|
+
});
|
|
240
|
+
if (!cliConfig) {
|
|
241
|
+
ctx.logger.error('An error occurred while retrieving data from Strapi Cloud. Please check your network or try again later.');
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
let maxSize = parseInt(cliConfig.maxProjectFileSize, 10);
|
|
245
|
+
if (Number.isNaN(maxSize)) {
|
|
246
|
+
ctx.logger.debug('An error occurred while parsing the maxProjectFileSize. Using default value.');
|
|
247
|
+
maxSize = 100000000;
|
|
248
|
+
}
|
|
249
|
+
project.targetEnvironment = await getTargetEnvironment(ctx, opts, project, environments);
|
|
250
|
+
if (!opts.force) {
|
|
251
|
+
const shouldDisplayWarning = hasPendingOrLiveDeployment(environmentsDetails, project.targetEnvironment);
|
|
252
|
+
if (shouldDisplayWarning) {
|
|
253
|
+
ctx.logger.log(boxen(cliConfig.projectDeployment.confirmationText, boxenOptions));
|
|
254
|
+
const { confirm } = await inquirer.prompt([
|
|
255
|
+
{
|
|
256
|
+
type: 'confirm',
|
|
257
|
+
name: 'confirm',
|
|
258
|
+
message: `Do you want to proceed with deployment to ${chalk.cyan(projectData.displayName)} on ${chalk.cyan(project.targetEnvironment)} environment?`
|
|
259
|
+
}
|
|
260
|
+
]);
|
|
261
|
+
if (!confirm) {
|
|
262
|
+
process.exit(1);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
const buildId = await upload(ctx, project, token$1, maxSize);
|
|
267
|
+
if (!buildId) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
ctx.logger.log(`🚀 Deploying project to ${chalk.cyan(project.targetEnvironment ?? `production`)} environment...`);
|
|
272
|
+
notificationService(`${api.apiConfig.apiBaseUrl}/notifications`, token$1, cliConfig);
|
|
273
|
+
await buildLogsService(`${api.apiConfig.apiBaseUrl}/v1/logs/${buildId}`, token$1, cliConfig);
|
|
274
|
+
ctx.logger.log('Visit the following URL for deployment logs. Your deployment will be available here shortly.');
|
|
275
|
+
ctx.logger.log(chalk.underline(`${api.apiConfig.dashboardBaseUrl}/projects/${project.name}/deployments`));
|
|
276
|
+
} catch (e) {
|
|
277
|
+
ctx.logger.debug(e);
|
|
278
|
+
if (e instanceof Error) {
|
|
279
|
+
ctx.logger.error(e.message);
|
|
280
|
+
} else {
|
|
281
|
+
ctx.logger.error('An error occurred while deploying the project. Please try again later.');
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
module.exports = action;
|
|
287
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../src/deploy-project/action.ts"],"sourcesContent":["import fse from 'fs-extra';\nimport inquirer from 'inquirer';\nimport boxen from 'boxen';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { AxiosError } from 'axios';\nimport * as crypto from 'node:crypto';\nimport { apiConfig } from '../config/api';\nimport { compressFilesToTar } from '../utils/compress-files';\nimport createProjectAction from '../create-project/action';\nimport type {\n CLIContext,\n CloudApiService,\n CloudCliConfig,\n EnvironmentDetails,\n ProjectInfo,\n} from '../types';\nimport { getTmpStoragePath } from '../config/local';\nimport { cloudApiFactory, tokenServiceFactory, local } from '../services';\nimport { notificationServiceFactory } from '../services/notification';\nimport { loadPkg } from '../utils/pkg';\nimport { buildLogsServiceFactory } from '../services/build-logs';\nimport { promptLogin } from '../login/action';\nimport { trackEvent } from '../utils/analytics';\n\ntype PackageJson = {\n name: string;\n strapi?: {\n uuid: string;\n };\n};\n\ninterface CmdOptions {\n env?: string;\n force?: boolean;\n}\n\nconst boxenOptions: boxen.Options = {\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'round',\n};\n\nconst QUIT_OPTION = 'Quit';\n\nasync function promptForEnvironment(environments: string[]): Promise<string> {\n const choices = environments.map((env) => ({ name: env, value: env }));\n const { selectedEnvironment } = await inquirer.prompt([\n {\n type: 'list',\n name: 'selectedEnvironment',\n message: 'Select the environment to deploy:',\n choices: [...choices, { name: chalk.grey(`(${QUIT_OPTION})`), value: null }],\n },\n ]);\n if (selectedEnvironment === null) {\n process.exit(1);\n }\n\n return selectedEnvironment;\n}\n\nasync function upload(\n ctx: CLIContext,\n project: ProjectInfo,\n token: string,\n maxProjectFileSize: number\n) {\n const cloudApi = await cloudApiFactory(ctx, token);\n try {\n const storagePath = await getTmpStoragePath();\n const projectFolder = path.resolve(process.cwd());\n const packageJson = (await loadPkg(ctx)) as PackageJson;\n\n if (!packageJson) {\n ctx.logger.error(\n 'Unable to deploy the project. Please make sure the package.json file is correctly formatted.'\n );\n return;\n }\n\n ctx.logger.log('📦 Compressing project...');\n // hash packageJson.name to avoid conflicts\n const hashname = crypto.createHash('sha512').update(packageJson.name).digest('hex');\n const compressedFilename = `${hashname}.tar.gz`;\n try {\n ctx.logger.debug(\n 'Compression parameters\\n',\n `Storage path: ${storagePath}\\n`,\n `Project folder: ${projectFolder}\\n`,\n `Compressed filename: ${compressedFilename}`\n );\n await compressFilesToTar(storagePath, projectFolder, compressedFilename);\n ctx.logger.log('📦 Project compressed successfully!');\n } catch (e: unknown) {\n ctx.logger.error(\n '⚠️ Project compression failed. Try again later or check for large/incompatible files.'\n );\n ctx.logger.debug(e);\n process.exit(1);\n }\n\n const tarFilePath = path.resolve(storagePath, compressedFilename);\n const fileStats = await fse.stat(tarFilePath);\n\n if (fileStats.size > maxProjectFileSize) {\n ctx.logger.log(\n 'Unable to proceed: Your project is too big to be transferred, please use a git repo instead.'\n );\n try {\n await fse.remove(tarFilePath);\n } catch (e: any) {\n ctx.logger.log('Unable to remove file: ', tarFilePath);\n ctx.logger.debug(e);\n }\n return;\n }\n\n ctx.logger.info('🚀 Uploading project...');\n const progressBar = ctx.logger.progressBar(100, 'Upload Progress');\n\n try {\n const { data } = await cloudApi.deploy(\n { filePath: tarFilePath, project },\n {\n onUploadProgress(progressEvent) {\n const total = progressEvent.total || fileStats.size;\n const percentage = Math.round((progressEvent.loaded * 100) / total);\n progressBar.update(percentage);\n },\n }\n );\n\n progressBar.update(100);\n progressBar.stop();\n ctx.logger.success('✨ Upload finished!');\n return data.build_id;\n } catch (e: any) {\n progressBar.stop();\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n ctx.logger.debug(e);\n } finally {\n await fse.remove(tarFilePath);\n }\n process.exit(0);\n } catch (e: any) {\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n ctx.logger.debug(e);\n process.exit(1);\n }\n}\n\nasync function getProject(ctx: CLIContext) {\n const { project } = await local.retrieve();\n if (!project) {\n try {\n return await createProjectAction(ctx);\n } catch (e: any) {\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n ctx.logger.debug(e);\n process.exit(1);\n }\n }\n return project;\n}\n\nasync function getConfig({\n ctx,\n cloudApiService,\n}: {\n ctx: CLIContext;\n cloudApiService: CloudApiService;\n}): Promise<CloudCliConfig | null> {\n try {\n const { data: cliConfig } = await cloudApiService.config();\n return cliConfig;\n } catch (e) {\n ctx.logger.debug('Failed to get cli config', e);\n return null;\n }\n}\n\nfunction validateEnvironment(ctx: CLIContext, environment: string, environments: string[]): void {\n if (!environments.includes(environment)) {\n ctx.logger.error(`Environment ${environment} does not exist.`);\n process.exit(1);\n }\n}\n\nasync function getTargetEnvironment(\n ctx: CLIContext,\n opts: CmdOptions,\n project: ProjectInfo,\n environments: string[]\n): Promise<string> {\n if (opts.env) {\n validateEnvironment(ctx, opts.env, environments);\n return opts.env;\n }\n\n if (project.targetEnvironment) {\n return project.targetEnvironment;\n }\n\n if (environments.length > 1) {\n return promptForEnvironment(environments);\n }\n\n return environments[0];\n}\n\nfunction hasPendingOrLiveDeployment(\n environments: EnvironmentDetails[],\n targetEnvironment: string\n): boolean {\n const environment = environments.find((env) => env.name === targetEnvironment);\n if (!environment) {\n throw new Error(`Environment details ${targetEnvironment} not found.`);\n }\n return environment.hasPendingDeployment || environment.hasLiveDeployment || false;\n}\n\nexport default async (ctx: CLIContext, opts: CmdOptions) => {\n const { getValidToken } = await tokenServiceFactory(ctx);\n const token = await getValidToken(ctx, promptLogin);\n if (!token) {\n return;\n }\n\n const project = await getProject(ctx);\n if (!project) {\n return;\n }\n\n const cloudApiService = await cloudApiFactory(ctx, token);\n let projectData;\n let environments: string[];\n let environmentsDetails: EnvironmentDetails[];\n\n try {\n const {\n data: { data, metadata },\n } = await cloudApiService.getProject({ name: project.name });\n projectData = data;\n environments = projectData.environments;\n environmentsDetails = projectData.environmentsDetails;\n const isProjectSuspended = projectData.suspendedAt;\n\n if (isProjectSuspended) {\n ctx.logger.log(\n '\\n Oops! This project has been suspended. \\n\\n Please reactivate it from the dashboard to continue deploying: '\n );\n ctx.logger.log(chalk.underline(`${metadata.dashboardUrls.project}`));\n return;\n }\n } catch (e: Error | unknown) {\n if (e instanceof AxiosError && e.response?.data) {\n if (e.response.status === 404) {\n ctx.logger.warn(\n `The project associated with this folder does not exist in Strapi Cloud. \\nPlease link your local project to an existing Strapi Cloud project using the ${chalk.cyan(\n 'link'\n )} command before deploying.`\n );\n } else {\n ctx.logger.error(e.response.data);\n }\n } else {\n ctx.logger.error(\n \"An error occurred while retrieving the project's information. Please try again later.\"\n );\n }\n ctx.logger.debug(e);\n return;\n }\n\n await trackEvent(ctx, cloudApiService, 'willDeployWithCLI', {\n projectInternalName: project.name,\n });\n\n const notificationService = notificationServiceFactory(ctx);\n const buildLogsService = buildLogsServiceFactory(ctx);\n\n const cliConfig = await getConfig({ ctx, cloudApiService });\n if (!cliConfig) {\n ctx.logger.error(\n 'An error occurred while retrieving data from Strapi Cloud. Please check your network or try again later.'\n );\n return;\n }\n\n let maxSize: number = parseInt(cliConfig.maxProjectFileSize, 10);\n if (Number.isNaN(maxSize)) {\n ctx.logger.debug(\n 'An error occurred while parsing the maxProjectFileSize. Using default value.'\n );\n maxSize = 100000000;\n }\n\n project.targetEnvironment = await getTargetEnvironment(ctx, opts, project, environments);\n\n if (!opts.force) {\n const shouldDisplayWarning = hasPendingOrLiveDeployment(\n environmentsDetails,\n project.targetEnvironment\n );\n if (shouldDisplayWarning) {\n ctx.logger.log(boxen(cliConfig.projectDeployment.confirmationText, boxenOptions));\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: `Do you want to proceed with deployment to ${chalk.cyan(projectData.displayName)} on ${chalk.cyan(project.targetEnvironment)} environment?`,\n },\n ]);\n if (!confirm) {\n process.exit(1);\n }\n }\n }\n\n const buildId = await upload(ctx, project, token, maxSize);\n\n if (!buildId) {\n return;\n }\n\n try {\n ctx.logger.log(\n `🚀 Deploying project to ${chalk.cyan(project.targetEnvironment ?? `production`)} environment...`\n );\n notificationService(`${apiConfig.apiBaseUrl}/notifications`, token, cliConfig);\n await buildLogsService(`${apiConfig.apiBaseUrl}/v1/logs/${buildId}`, token, cliConfig);\n\n ctx.logger.log(\n 'Visit the following URL for deployment logs. Your deployment will be available here shortly.'\n );\n ctx.logger.log(\n chalk.underline(`${apiConfig.dashboardBaseUrl}/projects/${project.name}/deployments`)\n );\n } catch (e: Error | unknown) {\n ctx.logger.debug(e);\n if (e instanceof Error) {\n ctx.logger.error(e.message);\n } else {\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n }\n }\n};\n"],"names":["boxenOptions","padding","margin","align","borderColor","borderStyle","QUIT_OPTION","promptForEnvironment","environments","choices","map","env","name","value","selectedEnvironment","inquirer","prompt","type","message","chalk","grey","process","exit","upload","ctx","project","token","maxProjectFileSize","cloudApi","cloudApiFactory","storagePath","getTmpStoragePath","projectFolder","path","resolve","cwd","packageJson","loadPkg","logger","error","log","hashname","crypto","createHash","update","digest","compressedFilename","debug","compressFilesToTar","e","tarFilePath","fileStats","fse","stat","size","remove","info","progressBar","data","deploy","filePath","onUploadProgress","progressEvent","total","percentage","Math","round","loaded","stop","success","build_id","getProject","local","createProjectAction","getConfig","cloudApiService","cliConfig","config","validateEnvironment","environment","includes","getTargetEnvironment","opts","targetEnvironment","length","hasPendingOrLiveDeployment","find","Error","hasPendingDeployment","hasLiveDeployment","getValidToken","tokenServiceFactory","promptLogin","projectData","environmentsDetails","metadata","isProjectSuspended","suspendedAt","underline","dashboardUrls","AxiosError","response","status","warn","cyan","trackEvent","projectInternalName","notificationService","notificationServiceFactory","buildLogsService","buildLogsServiceFactory","maxSize","parseInt","Number","isNaN","force","shouldDisplayWarning","boxen","projectDeployment","confirmationText","confirm","displayName","buildId","apiConfig","apiBaseUrl","dashboardBaseUrl"],"mappings":"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"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import fse__default from 'fs-extra';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import boxen from 'boxen';
|
|
4
|
+
import path__default from 'path';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { AxiosError } from 'axios';
|
|
7
|
+
import * as crypto from 'node:crypto';
|
|
8
|
+
import { apiConfig } from '../config/api.mjs';
|
|
9
|
+
import { compressFilesToTar } from '../utils/compress-files.mjs';
|
|
10
|
+
import action$1 from '../create-project/action.mjs';
|
|
11
|
+
import { getTmpStoragePath } from '../config/local.mjs';
|
|
12
|
+
import { cloudApiFactory } from '../services/cli-api.mjs';
|
|
13
|
+
import { retrieve } from '../services/strapi-info-save.mjs';
|
|
14
|
+
import { tokenServiceFactory } from '../services/token.mjs';
|
|
15
|
+
import 'fast-safe-stringify';
|
|
16
|
+
import 'ora';
|
|
17
|
+
import 'cli-progress';
|
|
18
|
+
import { notificationServiceFactory } from '../services/notification.mjs';
|
|
19
|
+
import { loadPkg } from '../utils/pkg.mjs';
|
|
20
|
+
import { buildLogsServiceFactory } from '../services/build-logs.mjs';
|
|
21
|
+
import { promptLogin } from '../login/action.mjs';
|
|
22
|
+
import { trackEvent } from '../utils/analytics.mjs';
|
|
23
|
+
|
|
24
|
+
const boxenOptions = {
|
|
25
|
+
padding: 1,
|
|
26
|
+
margin: 1,
|
|
27
|
+
align: 'center',
|
|
28
|
+
borderColor: 'yellow',
|
|
29
|
+
borderStyle: 'round'
|
|
30
|
+
};
|
|
31
|
+
const QUIT_OPTION = 'Quit';
|
|
32
|
+
async function promptForEnvironment(environments) {
|
|
33
|
+
const choices = environments.map((env)=>({
|
|
34
|
+
name: env,
|
|
35
|
+
value: env
|
|
36
|
+
}));
|
|
37
|
+
const { selectedEnvironment } = await inquirer.prompt([
|
|
38
|
+
{
|
|
39
|
+
type: 'list',
|
|
40
|
+
name: 'selectedEnvironment',
|
|
41
|
+
message: 'Select the environment to deploy:',
|
|
42
|
+
choices: [
|
|
43
|
+
...choices,
|
|
44
|
+
{
|
|
45
|
+
name: chalk.grey(`(${QUIT_OPTION})`),
|
|
46
|
+
value: null
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
]);
|
|
51
|
+
if (selectedEnvironment === null) {
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
return selectedEnvironment;
|
|
55
|
+
}
|
|
56
|
+
async function upload(ctx, project, token, maxProjectFileSize) {
|
|
57
|
+
const cloudApi = await cloudApiFactory(ctx, token);
|
|
58
|
+
try {
|
|
59
|
+
const storagePath = await getTmpStoragePath();
|
|
60
|
+
const projectFolder = path__default.resolve(process.cwd());
|
|
61
|
+
const packageJson = await loadPkg(ctx);
|
|
62
|
+
if (!packageJson) {
|
|
63
|
+
ctx.logger.error('Unable to deploy the project. Please make sure the package.json file is correctly formatted.');
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
ctx.logger.log('📦 Compressing project...');
|
|
67
|
+
// hash packageJson.name to avoid conflicts
|
|
68
|
+
const hashname = crypto.createHash('sha512').update(packageJson.name).digest('hex');
|
|
69
|
+
const compressedFilename = `${hashname}.tar.gz`;
|
|
70
|
+
try {
|
|
71
|
+
ctx.logger.debug('Compression parameters\n', `Storage path: ${storagePath}\n`, `Project folder: ${projectFolder}\n`, `Compressed filename: ${compressedFilename}`);
|
|
72
|
+
await compressFilesToTar(storagePath, projectFolder, compressedFilename);
|
|
73
|
+
ctx.logger.log('📦 Project compressed successfully!');
|
|
74
|
+
} catch (e) {
|
|
75
|
+
ctx.logger.error('⚠️ Project compression failed. Try again later or check for large/incompatible files.');
|
|
76
|
+
ctx.logger.debug(e);
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
const tarFilePath = path__default.resolve(storagePath, compressedFilename);
|
|
80
|
+
const fileStats = await fse__default.stat(tarFilePath);
|
|
81
|
+
if (fileStats.size > maxProjectFileSize) {
|
|
82
|
+
ctx.logger.log('Unable to proceed: Your project is too big to be transferred, please use a git repo instead.');
|
|
83
|
+
try {
|
|
84
|
+
await fse__default.remove(tarFilePath);
|
|
85
|
+
} catch (e) {
|
|
86
|
+
ctx.logger.log('Unable to remove file: ', tarFilePath);
|
|
87
|
+
ctx.logger.debug(e);
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
ctx.logger.info('🚀 Uploading project...');
|
|
92
|
+
const progressBar = ctx.logger.progressBar(100, 'Upload Progress');
|
|
93
|
+
try {
|
|
94
|
+
const { data } = await cloudApi.deploy({
|
|
95
|
+
filePath: tarFilePath,
|
|
96
|
+
project
|
|
97
|
+
}, {
|
|
98
|
+
onUploadProgress (progressEvent) {
|
|
99
|
+
const total = progressEvent.total || fileStats.size;
|
|
100
|
+
const percentage = Math.round(progressEvent.loaded * 100 / total);
|
|
101
|
+
progressBar.update(percentage);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
progressBar.update(100);
|
|
105
|
+
progressBar.stop();
|
|
106
|
+
ctx.logger.success('✨ Upload finished!');
|
|
107
|
+
return data.build_id;
|
|
108
|
+
} catch (e) {
|
|
109
|
+
progressBar.stop();
|
|
110
|
+
ctx.logger.error('An error occurred while deploying the project. Please try again later.');
|
|
111
|
+
ctx.logger.debug(e);
|
|
112
|
+
} finally{
|
|
113
|
+
await fse__default.remove(tarFilePath);
|
|
114
|
+
}
|
|
115
|
+
process.exit(0);
|
|
116
|
+
} catch (e) {
|
|
117
|
+
ctx.logger.error('An error occurred while deploying the project. Please try again later.');
|
|
118
|
+
ctx.logger.debug(e);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async function getProject(ctx) {
|
|
123
|
+
const { project } = await retrieve();
|
|
124
|
+
if (!project) {
|
|
125
|
+
try {
|
|
126
|
+
return await action$1(ctx);
|
|
127
|
+
} catch (e) {
|
|
128
|
+
ctx.logger.error('An error occurred while deploying the project. Please try again later.');
|
|
129
|
+
ctx.logger.debug(e);
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return project;
|
|
134
|
+
}
|
|
135
|
+
async function getConfig({ ctx, cloudApiService }) {
|
|
136
|
+
try {
|
|
137
|
+
const { data: cliConfig } = await cloudApiService.config();
|
|
138
|
+
return cliConfig;
|
|
139
|
+
} catch (e) {
|
|
140
|
+
ctx.logger.debug('Failed to get cli config', e);
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function validateEnvironment(ctx, environment, environments) {
|
|
145
|
+
if (!environments.includes(environment)) {
|
|
146
|
+
ctx.logger.error(`Environment ${environment} does not exist.`);
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async function getTargetEnvironment(ctx, opts, project, environments) {
|
|
151
|
+
if (opts.env) {
|
|
152
|
+
validateEnvironment(ctx, opts.env, environments);
|
|
153
|
+
return opts.env;
|
|
154
|
+
}
|
|
155
|
+
if (project.targetEnvironment) {
|
|
156
|
+
return project.targetEnvironment;
|
|
157
|
+
}
|
|
158
|
+
if (environments.length > 1) {
|
|
159
|
+
return promptForEnvironment(environments);
|
|
160
|
+
}
|
|
161
|
+
return environments[0];
|
|
162
|
+
}
|
|
163
|
+
function hasPendingOrLiveDeployment(environments, targetEnvironment) {
|
|
164
|
+
const environment = environments.find((env)=>env.name === targetEnvironment);
|
|
165
|
+
if (!environment) {
|
|
166
|
+
throw new Error(`Environment details ${targetEnvironment} not found.`);
|
|
167
|
+
}
|
|
168
|
+
return environment.hasPendingDeployment || environment.hasLiveDeployment || false;
|
|
169
|
+
}
|
|
170
|
+
var action = (async (ctx, opts)=>{
|
|
171
|
+
const { getValidToken } = await tokenServiceFactory(ctx);
|
|
172
|
+
const token = await getValidToken(ctx, promptLogin);
|
|
173
|
+
if (!token) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const project = await getProject(ctx);
|
|
177
|
+
if (!project) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const cloudApiService = await cloudApiFactory(ctx, token);
|
|
181
|
+
let projectData;
|
|
182
|
+
let environments;
|
|
183
|
+
let environmentsDetails;
|
|
184
|
+
try {
|
|
185
|
+
const { data: { data, metadata } } = await cloudApiService.getProject({
|
|
186
|
+
name: project.name
|
|
187
|
+
});
|
|
188
|
+
projectData = data;
|
|
189
|
+
environments = projectData.environments;
|
|
190
|
+
environmentsDetails = projectData.environmentsDetails;
|
|
191
|
+
const isProjectSuspended = projectData.suspendedAt;
|
|
192
|
+
if (isProjectSuspended) {
|
|
193
|
+
ctx.logger.log('\n Oops! This project has been suspended. \n\n Please reactivate it from the dashboard to continue deploying: ');
|
|
194
|
+
ctx.logger.log(chalk.underline(`${metadata.dashboardUrls.project}`));
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
} catch (e) {
|
|
198
|
+
if (e instanceof AxiosError && e.response?.data) {
|
|
199
|
+
if (e.response.status === 404) {
|
|
200
|
+
ctx.logger.warn(`The project associated with this folder does not exist in Strapi Cloud. \nPlease link your local project to an existing Strapi Cloud project using the ${chalk.cyan('link')} command before deploying.`);
|
|
201
|
+
} else {
|
|
202
|
+
ctx.logger.error(e.response.data);
|
|
203
|
+
}
|
|
204
|
+
} else {
|
|
205
|
+
ctx.logger.error("An error occurred while retrieving the project's information. Please try again later.");
|
|
206
|
+
}
|
|
207
|
+
ctx.logger.debug(e);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
await trackEvent(ctx, cloudApiService, 'willDeployWithCLI', {
|
|
211
|
+
projectInternalName: project.name
|
|
212
|
+
});
|
|
213
|
+
const notificationService = notificationServiceFactory(ctx);
|
|
214
|
+
const buildLogsService = buildLogsServiceFactory(ctx);
|
|
215
|
+
const cliConfig = await getConfig({
|
|
216
|
+
ctx,
|
|
217
|
+
cloudApiService
|
|
218
|
+
});
|
|
219
|
+
if (!cliConfig) {
|
|
220
|
+
ctx.logger.error('An error occurred while retrieving data from Strapi Cloud. Please check your network or try again later.');
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
let maxSize = parseInt(cliConfig.maxProjectFileSize, 10);
|
|
224
|
+
if (Number.isNaN(maxSize)) {
|
|
225
|
+
ctx.logger.debug('An error occurred while parsing the maxProjectFileSize. Using default value.');
|
|
226
|
+
maxSize = 100000000;
|
|
227
|
+
}
|
|
228
|
+
project.targetEnvironment = await getTargetEnvironment(ctx, opts, project, environments);
|
|
229
|
+
if (!opts.force) {
|
|
230
|
+
const shouldDisplayWarning = hasPendingOrLiveDeployment(environmentsDetails, project.targetEnvironment);
|
|
231
|
+
if (shouldDisplayWarning) {
|
|
232
|
+
ctx.logger.log(boxen(cliConfig.projectDeployment.confirmationText, boxenOptions));
|
|
233
|
+
const { confirm } = await inquirer.prompt([
|
|
234
|
+
{
|
|
235
|
+
type: 'confirm',
|
|
236
|
+
name: 'confirm',
|
|
237
|
+
message: `Do you want to proceed with deployment to ${chalk.cyan(projectData.displayName)} on ${chalk.cyan(project.targetEnvironment)} environment?`
|
|
238
|
+
}
|
|
239
|
+
]);
|
|
240
|
+
if (!confirm) {
|
|
241
|
+
process.exit(1);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
const buildId = await upload(ctx, project, token, maxSize);
|
|
246
|
+
if (!buildId) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
try {
|
|
250
|
+
ctx.logger.log(`🚀 Deploying project to ${chalk.cyan(project.targetEnvironment ?? `production`)} environment...`);
|
|
251
|
+
notificationService(`${apiConfig.apiBaseUrl}/notifications`, token, cliConfig);
|
|
252
|
+
await buildLogsService(`${apiConfig.apiBaseUrl}/v1/logs/${buildId}`, token, cliConfig);
|
|
253
|
+
ctx.logger.log('Visit the following URL for deployment logs. Your deployment will be available here shortly.');
|
|
254
|
+
ctx.logger.log(chalk.underline(`${apiConfig.dashboardBaseUrl}/projects/${project.name}/deployments`));
|
|
255
|
+
} catch (e) {
|
|
256
|
+
ctx.logger.debug(e);
|
|
257
|
+
if (e instanceof Error) {
|
|
258
|
+
ctx.logger.error(e.message);
|
|
259
|
+
} else {
|
|
260
|
+
ctx.logger.error('An error occurred while deploying the project. Please try again later.');
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
export { action as default };
|
|
266
|
+
//# sourceMappingURL=action.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.mjs","sources":["../../src/deploy-project/action.ts"],"sourcesContent":["import fse from 'fs-extra';\nimport inquirer from 'inquirer';\nimport boxen from 'boxen';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { AxiosError } from 'axios';\nimport * as crypto from 'node:crypto';\nimport { apiConfig } from '../config/api';\nimport { compressFilesToTar } from '../utils/compress-files';\nimport createProjectAction from '../create-project/action';\nimport type {\n CLIContext,\n CloudApiService,\n CloudCliConfig,\n EnvironmentDetails,\n ProjectInfo,\n} from '../types';\nimport { getTmpStoragePath } from '../config/local';\nimport { cloudApiFactory, tokenServiceFactory, local } from '../services';\nimport { notificationServiceFactory } from '../services/notification';\nimport { loadPkg } from '../utils/pkg';\nimport { buildLogsServiceFactory } from '../services/build-logs';\nimport { promptLogin } from '../login/action';\nimport { trackEvent } from '../utils/analytics';\n\ntype PackageJson = {\n name: string;\n strapi?: {\n uuid: string;\n };\n};\n\ninterface CmdOptions {\n env?: string;\n force?: boolean;\n}\n\nconst boxenOptions: boxen.Options = {\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'round',\n};\n\nconst QUIT_OPTION = 'Quit';\n\nasync function promptForEnvironment(environments: string[]): Promise<string> {\n const choices = environments.map((env) => ({ name: env, value: env }));\n const { selectedEnvironment } = await inquirer.prompt([\n {\n type: 'list',\n name: 'selectedEnvironment',\n message: 'Select the environment to deploy:',\n choices: [...choices, { name: chalk.grey(`(${QUIT_OPTION})`), value: null }],\n },\n ]);\n if (selectedEnvironment === null) {\n process.exit(1);\n }\n\n return selectedEnvironment;\n}\n\nasync function upload(\n ctx: CLIContext,\n project: ProjectInfo,\n token: string,\n maxProjectFileSize: number\n) {\n const cloudApi = await cloudApiFactory(ctx, token);\n try {\n const storagePath = await getTmpStoragePath();\n const projectFolder = path.resolve(process.cwd());\n const packageJson = (await loadPkg(ctx)) as PackageJson;\n\n if (!packageJson) {\n ctx.logger.error(\n 'Unable to deploy the project. Please make sure the package.json file is correctly formatted.'\n );\n return;\n }\n\n ctx.logger.log('📦 Compressing project...');\n // hash packageJson.name to avoid conflicts\n const hashname = crypto.createHash('sha512').update(packageJson.name).digest('hex');\n const compressedFilename = `${hashname}.tar.gz`;\n try {\n ctx.logger.debug(\n 'Compression parameters\\n',\n `Storage path: ${storagePath}\\n`,\n `Project folder: ${projectFolder}\\n`,\n `Compressed filename: ${compressedFilename}`\n );\n await compressFilesToTar(storagePath, projectFolder, compressedFilename);\n ctx.logger.log('📦 Project compressed successfully!');\n } catch (e: unknown) {\n ctx.logger.error(\n '⚠️ Project compression failed. Try again later or check for large/incompatible files.'\n );\n ctx.logger.debug(e);\n process.exit(1);\n }\n\n const tarFilePath = path.resolve(storagePath, compressedFilename);\n const fileStats = await fse.stat(tarFilePath);\n\n if (fileStats.size > maxProjectFileSize) {\n ctx.logger.log(\n 'Unable to proceed: Your project is too big to be transferred, please use a git repo instead.'\n );\n try {\n await fse.remove(tarFilePath);\n } catch (e: any) {\n ctx.logger.log('Unable to remove file: ', tarFilePath);\n ctx.logger.debug(e);\n }\n return;\n }\n\n ctx.logger.info('🚀 Uploading project...');\n const progressBar = ctx.logger.progressBar(100, 'Upload Progress');\n\n try {\n const { data } = await cloudApi.deploy(\n { filePath: tarFilePath, project },\n {\n onUploadProgress(progressEvent) {\n const total = progressEvent.total || fileStats.size;\n const percentage = Math.round((progressEvent.loaded * 100) / total);\n progressBar.update(percentage);\n },\n }\n );\n\n progressBar.update(100);\n progressBar.stop();\n ctx.logger.success('✨ Upload finished!');\n return data.build_id;\n } catch (e: any) {\n progressBar.stop();\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n ctx.logger.debug(e);\n } finally {\n await fse.remove(tarFilePath);\n }\n process.exit(0);\n } catch (e: any) {\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n ctx.logger.debug(e);\n process.exit(1);\n }\n}\n\nasync function getProject(ctx: CLIContext) {\n const { project } = await local.retrieve();\n if (!project) {\n try {\n return await createProjectAction(ctx);\n } catch (e: any) {\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n ctx.logger.debug(e);\n process.exit(1);\n }\n }\n return project;\n}\n\nasync function getConfig({\n ctx,\n cloudApiService,\n}: {\n ctx: CLIContext;\n cloudApiService: CloudApiService;\n}): Promise<CloudCliConfig | null> {\n try {\n const { data: cliConfig } = await cloudApiService.config();\n return cliConfig;\n } catch (e) {\n ctx.logger.debug('Failed to get cli config', e);\n return null;\n }\n}\n\nfunction validateEnvironment(ctx: CLIContext, environment: string, environments: string[]): void {\n if (!environments.includes(environment)) {\n ctx.logger.error(`Environment ${environment} does not exist.`);\n process.exit(1);\n }\n}\n\nasync function getTargetEnvironment(\n ctx: CLIContext,\n opts: CmdOptions,\n project: ProjectInfo,\n environments: string[]\n): Promise<string> {\n if (opts.env) {\n validateEnvironment(ctx, opts.env, environments);\n return opts.env;\n }\n\n if (project.targetEnvironment) {\n return project.targetEnvironment;\n }\n\n if (environments.length > 1) {\n return promptForEnvironment(environments);\n }\n\n return environments[0];\n}\n\nfunction hasPendingOrLiveDeployment(\n environments: EnvironmentDetails[],\n targetEnvironment: string\n): boolean {\n const environment = environments.find((env) => env.name === targetEnvironment);\n if (!environment) {\n throw new Error(`Environment details ${targetEnvironment} not found.`);\n }\n return environment.hasPendingDeployment || environment.hasLiveDeployment || false;\n}\n\nexport default async (ctx: CLIContext, opts: CmdOptions) => {\n const { getValidToken } = await tokenServiceFactory(ctx);\n const token = await getValidToken(ctx, promptLogin);\n if (!token) {\n return;\n }\n\n const project = await getProject(ctx);\n if (!project) {\n return;\n }\n\n const cloudApiService = await cloudApiFactory(ctx, token);\n let projectData;\n let environments: string[];\n let environmentsDetails: EnvironmentDetails[];\n\n try {\n const {\n data: { data, metadata },\n } = await cloudApiService.getProject({ name: project.name });\n projectData = data;\n environments = projectData.environments;\n environmentsDetails = projectData.environmentsDetails;\n const isProjectSuspended = projectData.suspendedAt;\n\n if (isProjectSuspended) {\n ctx.logger.log(\n '\\n Oops! This project has been suspended. \\n\\n Please reactivate it from the dashboard to continue deploying: '\n );\n ctx.logger.log(chalk.underline(`${metadata.dashboardUrls.project}`));\n return;\n }\n } catch (e: Error | unknown) {\n if (e instanceof AxiosError && e.response?.data) {\n if (e.response.status === 404) {\n ctx.logger.warn(\n `The project associated with this folder does not exist in Strapi Cloud. \\nPlease link your local project to an existing Strapi Cloud project using the ${chalk.cyan(\n 'link'\n )} command before deploying.`\n );\n } else {\n ctx.logger.error(e.response.data);\n }\n } else {\n ctx.logger.error(\n \"An error occurred while retrieving the project's information. Please try again later.\"\n );\n }\n ctx.logger.debug(e);\n return;\n }\n\n await trackEvent(ctx, cloudApiService, 'willDeployWithCLI', {\n projectInternalName: project.name,\n });\n\n const notificationService = notificationServiceFactory(ctx);\n const buildLogsService = buildLogsServiceFactory(ctx);\n\n const cliConfig = await getConfig({ ctx, cloudApiService });\n if (!cliConfig) {\n ctx.logger.error(\n 'An error occurred while retrieving data from Strapi Cloud. Please check your network or try again later.'\n );\n return;\n }\n\n let maxSize: number = parseInt(cliConfig.maxProjectFileSize, 10);\n if (Number.isNaN(maxSize)) {\n ctx.logger.debug(\n 'An error occurred while parsing the maxProjectFileSize. Using default value.'\n );\n maxSize = 100000000;\n }\n\n project.targetEnvironment = await getTargetEnvironment(ctx, opts, project, environments);\n\n if (!opts.force) {\n const shouldDisplayWarning = hasPendingOrLiveDeployment(\n environmentsDetails,\n project.targetEnvironment\n );\n if (shouldDisplayWarning) {\n ctx.logger.log(boxen(cliConfig.projectDeployment.confirmationText, boxenOptions));\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: `Do you want to proceed with deployment to ${chalk.cyan(projectData.displayName)} on ${chalk.cyan(project.targetEnvironment)} environment?`,\n },\n ]);\n if (!confirm) {\n process.exit(1);\n }\n }\n }\n\n const buildId = await upload(ctx, project, token, maxSize);\n\n if (!buildId) {\n return;\n }\n\n try {\n ctx.logger.log(\n `🚀 Deploying project to ${chalk.cyan(project.targetEnvironment ?? `production`)} environment...`\n );\n notificationService(`${apiConfig.apiBaseUrl}/notifications`, token, cliConfig);\n await buildLogsService(`${apiConfig.apiBaseUrl}/v1/logs/${buildId}`, token, cliConfig);\n\n ctx.logger.log(\n 'Visit the following URL for deployment logs. Your deployment will be available here shortly.'\n );\n ctx.logger.log(\n chalk.underline(`${apiConfig.dashboardBaseUrl}/projects/${project.name}/deployments`)\n );\n } catch (e: Error | unknown) {\n ctx.logger.debug(e);\n if (e instanceof Error) {\n ctx.logger.error(e.message);\n } else {\n ctx.logger.error('An error occurred while deploying the project. Please try again later.');\n }\n }\n};\n"],"names":["boxenOptions","padding","margin","align","borderColor","borderStyle","QUIT_OPTION","promptForEnvironment","environments","choices","map","env","name","value","selectedEnvironment","inquirer","prompt","type","message","chalk","grey","process","exit","upload","ctx","project","token","maxProjectFileSize","cloudApi","cloudApiFactory","storagePath","getTmpStoragePath","projectFolder","path","resolve","cwd","packageJson","loadPkg","logger","error","log","hashname","crypto","createHash","update","digest","compressedFilename","debug","compressFilesToTar","e","tarFilePath","fileStats","fse","stat","size","remove","info","progressBar","data","deploy","filePath","onUploadProgress","progressEvent","total","percentage","Math","round","loaded","stop","success","build_id","getProject","local","createProjectAction","getConfig","cloudApiService","cliConfig","config","validateEnvironment","environment","includes","getTargetEnvironment","opts","targetEnvironment","length","hasPendingOrLiveDeployment","find","Error","hasPendingDeployment","hasLiveDeployment","getValidToken","tokenServiceFactory","promptLogin","projectData","environmentsDetails","metadata","isProjectSuspended","suspendedAt","underline","dashboardUrls","AxiosError","response","status","warn","cyan","trackEvent","projectInternalName","notificationService","notificationServiceFactory","buildLogsService","buildLogsServiceFactory","maxSize","parseInt","Number","isNaN","force","shouldDisplayWarning","boxen","projectDeployment","confirmationText","confirm","displayName","buildId","apiConfig","apiBaseUrl","dashboardBaseUrl"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/deploy-project/command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAInD;;GAEG;AACH,QAAA,MAAM,OAAO,EAAE,kBASd,CAAC;AAEF,eAAe,OAAO,CAAC"}
|