@naturalcycles/backend-lib 4.17.11 → 4.18.0
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/cfg/tsconfig.json +1 -0
- package/dist/admin/firebase.shared.service.js +1 -1
- package/dist/deploy/deployGae.js +16 -10
- package/dist/deploy/deployHealthCheck.js +9 -3
- package/dist/sentry/sentry.shared.service.js +1 -1
- package/dist/server/startServer.js +1 -1
- package/package.json +2 -2
- package/src/deploy/deployGae.ts +24 -14
- package/src/deploy/deployHealthCheck.ts +15 -7
package/cfg/tsconfig.json
CHANGED
|
@@ -26,7 +26,7 @@ class FirebaseSharedService {
|
|
|
26
26
|
return this.admin().auth();
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
+
exports.FirebaseSharedService = FirebaseSharedService;
|
|
29
30
|
tslib_1.__decorate([
|
|
30
31
|
(0, js_lib_1._Memo)()
|
|
31
32
|
], FirebaseSharedService.prototype, "admin", null);
|
|
32
|
-
exports.FirebaseSharedService = FirebaseSharedService;
|
package/dist/deploy/deployGae.js
CHANGED
|
@@ -3,14 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.deployGae = void 0;
|
|
4
4
|
const dev_lib_1 = require("@naturalcycles/dev-lib");
|
|
5
5
|
const js_lib_1 = require("@naturalcycles/js-lib");
|
|
6
|
-
const
|
|
6
|
+
const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
|
|
7
7
|
const deployHealthCheck_1 = require("./deployHealthCheck");
|
|
8
8
|
const deployPrepare_1 = require("./deployPrepare");
|
|
9
9
|
async function deployGae(opt = {}) {
|
|
10
10
|
const { logOnFailure, logOnSuccess } = opt;
|
|
11
11
|
// 1. build-prod
|
|
12
12
|
// await execCommand(`yarn`, [`build-prod`])
|
|
13
|
-
|
|
13
|
+
(0, dev_lib_1.buildProdCommand)();
|
|
14
14
|
// 2. deploy-prepare
|
|
15
15
|
// await execCommand(`yarn`, ['deploy-prepare'])
|
|
16
16
|
const deployInfo = await (0, deployPrepare_1.deployPrepare)();
|
|
@@ -22,13 +22,16 @@ async function deployGae(opt = {}) {
|
|
|
22
22
|
gaeService,
|
|
23
23
|
gaeVersion,
|
|
24
24
|
});
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
try {
|
|
26
|
+
// gcloud app deploy ./tmp/deploy/app.yaml --project $deployInfo_gaeProject --version $deployInfo_gaeVersion --quiet --no-promote
|
|
27
|
+
(0, nodejs_lib_1.execVoidCommandSync)(`gcloud app deploy ${appYamlPath} --project ${gaeProject} --version ${gaeVersion} --quiet --no-promote`, [], { shell: true });
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
27
30
|
if (logOnFailure) {
|
|
28
|
-
|
|
31
|
+
logs(gaeProject, gaeService, gaeVersion);
|
|
29
32
|
}
|
|
30
33
|
throw err;
|
|
31
|
-
}
|
|
34
|
+
}
|
|
32
35
|
// Health check (versionUrl)
|
|
33
36
|
// yarn deploy-health-check --url $deployInfo_versionUrl --repeat 3 --timeoutSec 180 --intervalSec 2
|
|
34
37
|
await (0, deployHealthCheck_1.deployHealthCheck)(versionUrl, opt);
|
|
@@ -36,17 +39,20 @@ async function deployGae(opt = {}) {
|
|
|
36
39
|
if (gaeVersion !== '1') {
|
|
37
40
|
// Rollout (promote versionUrl to serviceUrl)
|
|
38
41
|
// gcloud app services set-traffic $deployInfo_gaeService --project $deployInfo_gaeProject --splits $deployInfo_gaeVersion=1 --quiet
|
|
39
|
-
|
|
42
|
+
(0, nodejs_lib_1.execVoidCommandSync)(`gcloud app services set-traffic ${gaeService} --project ${gaeProject} --splits ${gaeVersion}=1 --quiet`, [], { shell: true });
|
|
40
43
|
// Health check (serviceUrl)
|
|
41
44
|
// yarn deploy-health-check --url $deployInfo_serviceUrl --repeat 3 --timeoutSec 60 --intervalSec 2
|
|
42
45
|
await (0, deployHealthCheck_1.deployHealthCheck)(serviceUrl, opt);
|
|
43
46
|
}
|
|
44
47
|
// Logs
|
|
45
48
|
if (logOnSuccess) {
|
|
46
|
-
|
|
49
|
+
logs(gaeProject, gaeService, gaeVersion);
|
|
47
50
|
}
|
|
48
51
|
}
|
|
49
52
|
exports.deployGae = deployGae;
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
function logs(gaeProject, gaeService, gaeVersion) {
|
|
54
|
+
try {
|
|
55
|
+
(0, nodejs_lib_1.execVoidCommandSync)(`gcloud app logs read --project ${gaeProject} --service ${gaeService} --version ${gaeVersion}`, [], { shell: true });
|
|
56
|
+
}
|
|
57
|
+
catch { }
|
|
52
58
|
}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.deployHealthCheck = exports.deployHealthCheckYargsOptions = void 0;
|
|
4
4
|
const node_util_1 = require("node:util");
|
|
5
|
+
const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
|
|
5
6
|
const js_lib_1 = require("@naturalcycles/js-lib");
|
|
6
7
|
const colors_1 = require("@naturalcycles/nodejs-lib/dist/colors");
|
|
7
|
-
const exec_1 = require("@naturalcycles/nodejs-lib/dist/exec");
|
|
8
8
|
const request_log_util_1 = require("../server/request.log.util");
|
|
9
9
|
exports.deployHealthCheckYargsOptions = {
|
|
10
10
|
thresholdHealthy: {
|
|
@@ -72,12 +72,18 @@ async function deployHealthCheck(url, opt = {}) {
|
|
|
72
72
|
if (failed) {
|
|
73
73
|
console.log((0, colors_1.red)(`Health check failed!`));
|
|
74
74
|
if (logOnFailure) {
|
|
75
|
-
|
|
75
|
+
try {
|
|
76
|
+
(0, nodejs_lib_1.execVoidCommandSync)(`gcloud app logs read --project ${gaeProject} --service ${gaeService} --version ${gaeVersion}`, [], { shell: true });
|
|
77
|
+
}
|
|
78
|
+
catch { }
|
|
76
79
|
}
|
|
77
80
|
process.exit(1);
|
|
78
81
|
}
|
|
79
82
|
if (logOnSuccess) {
|
|
80
|
-
|
|
83
|
+
try {
|
|
84
|
+
(0, nodejs_lib_1.execVoidCommandSync)(`gcloud app logs read --project ${gaeProject} --service ${gaeService} --version ${gaeVersion}`, [], { shell: true });
|
|
85
|
+
}
|
|
86
|
+
catch { }
|
|
81
87
|
}
|
|
82
88
|
async function makeAttempt() {
|
|
83
89
|
attempt++;
|
|
@@ -128,7 +128,7 @@ class SentrySharedService {
|
|
|
128
128
|
};
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
|
+
exports.SentrySharedService = SentrySharedService;
|
|
131
132
|
tslib_1.__decorate([
|
|
132
133
|
(0, js_lib_1._Memo)()
|
|
133
134
|
], SentrySharedService.prototype, "sentry", null);
|
|
134
|
-
exports.SentrySharedService = SentrySharedService;
|
|
@@ -78,10 +78,10 @@ class BackendServer {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
+
exports.BackendServer = BackendServer;
|
|
81
82
|
tslib_1.__decorate([
|
|
82
83
|
(0, js_lib_1._Memo)()
|
|
83
84
|
], BackendServer.prototype, "stop", null);
|
|
84
|
-
exports.BackendServer = BackendServer;
|
|
85
85
|
/**
|
|
86
86
|
* Convenience function.
|
|
87
87
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@naturalcycles/backend-lib",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.18.0",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"prepare": "husky install",
|
|
6
6
|
"serve": "APP_ENV=dev nodemon",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@types/yargs": "^16.0.0",
|
|
47
47
|
"fastify": "^4.0.0",
|
|
48
48
|
"jest": "^29.0.1",
|
|
49
|
-
"nodemon": "^
|
|
49
|
+
"nodemon": "^3.0.1",
|
|
50
50
|
"vue-class-component": "^7.2.6",
|
|
51
51
|
"vuepress": "^1.7.1",
|
|
52
52
|
"vuepress-plugin-typescript": "^0.3.1"
|
package/src/deploy/deployGae.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { buildProdCommand } from '@naturalcycles/dev-lib'
|
|
2
2
|
import { _objectAssign } from '@naturalcycles/js-lib'
|
|
3
|
-
import {
|
|
3
|
+
import { execVoidCommandSync } from '@naturalcycles/nodejs-lib'
|
|
4
4
|
import { deployHealthCheck, DeployHealthCheckOptions } from './deployHealthCheck'
|
|
5
5
|
import { deployPrepare, DeployPrepareOptions } from './deployPrepare'
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@ export async function deployGae(opt: DeployGaeOptions = {}): Promise<void> {
|
|
|
12
12
|
// 1. build-prod
|
|
13
13
|
|
|
14
14
|
// await execCommand(`yarn`, [`build-prod`])
|
|
15
|
-
|
|
15
|
+
buildProdCommand()
|
|
16
16
|
|
|
17
17
|
// 2. deploy-prepare
|
|
18
18
|
|
|
@@ -29,16 +29,20 @@ export async function deployGae(opt: DeployGaeOptions = {}): Promise<void> {
|
|
|
29
29
|
gaeVersion,
|
|
30
30
|
})
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
try {
|
|
33
|
+
// gcloud app deploy ./tmp/deploy/app.yaml --project $deployInfo_gaeProject --version $deployInfo_gaeVersion --quiet --no-promote
|
|
34
|
+
execVoidCommandSync(
|
|
35
|
+
`gcloud app deploy ${appYamlPath} --project ${gaeProject} --version ${gaeVersion} --quiet --no-promote`,
|
|
36
|
+
[],
|
|
37
|
+
{ shell: true },
|
|
38
|
+
)
|
|
39
|
+
} catch (err) {
|
|
36
40
|
if (logOnFailure) {
|
|
37
|
-
|
|
41
|
+
logs(gaeProject, gaeService, gaeVersion)
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
throw err
|
|
41
|
-
}
|
|
45
|
+
}
|
|
42
46
|
|
|
43
47
|
// Health check (versionUrl)
|
|
44
48
|
// yarn deploy-health-check --url $deployInfo_versionUrl --repeat 3 --timeoutSec 180 --intervalSec 2
|
|
@@ -48,8 +52,10 @@ export async function deployGae(opt: DeployGaeOptions = {}): Promise<void> {
|
|
|
48
52
|
if (gaeVersion !== '1') {
|
|
49
53
|
// Rollout (promote versionUrl to serviceUrl)
|
|
50
54
|
// gcloud app services set-traffic $deployInfo_gaeService --project $deployInfo_gaeProject --splits $deployInfo_gaeVersion=1 --quiet
|
|
51
|
-
|
|
55
|
+
execVoidCommandSync(
|
|
52
56
|
`gcloud app services set-traffic ${gaeService} --project ${gaeProject} --splits ${gaeVersion}=1 --quiet`,
|
|
57
|
+
[],
|
|
58
|
+
{ shell: true },
|
|
53
59
|
)
|
|
54
60
|
|
|
55
61
|
// Health check (serviceUrl)
|
|
@@ -59,12 +65,16 @@ export async function deployGae(opt: DeployGaeOptions = {}): Promise<void> {
|
|
|
59
65
|
|
|
60
66
|
// Logs
|
|
61
67
|
if (logOnSuccess) {
|
|
62
|
-
|
|
68
|
+
logs(gaeProject, gaeService, gaeVersion)
|
|
63
69
|
}
|
|
64
70
|
}
|
|
65
71
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
72
|
+
function logs(gaeProject: string, gaeService: string, gaeVersion: string): void {
|
|
73
|
+
try {
|
|
74
|
+
execVoidCommandSync(
|
|
75
|
+
`gcloud app logs read --project ${gaeProject} --service ${gaeService} --version ${gaeVersion}`,
|
|
76
|
+
[],
|
|
77
|
+
{ shell: true },
|
|
78
|
+
)
|
|
79
|
+
} catch {}
|
|
70
80
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { inspect, InspectOptions } from 'node:util'
|
|
2
|
+
import { execVoidCommandSync } from '@naturalcycles/nodejs-lib'
|
|
2
3
|
import { pDelay, _filterFalsyValues, _ms, _since, getFetcher } from '@naturalcycles/js-lib'
|
|
3
4
|
import { dimGrey, red } from '@naturalcycles/nodejs-lib/dist/colors'
|
|
4
|
-
import { execCommand } from '@naturalcycles/nodejs-lib/dist/exec'
|
|
5
5
|
import { coloredHttpCode } from '../server/request.log.util'
|
|
6
6
|
|
|
7
7
|
export interface DeployHealthCheckOptions {
|
|
@@ -104,18 +104,26 @@ export async function deployHealthCheck(
|
|
|
104
104
|
console.log(red(`Health check failed!`))
|
|
105
105
|
|
|
106
106
|
if (logOnFailure) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
107
|
+
try {
|
|
108
|
+
execVoidCommandSync(
|
|
109
|
+
`gcloud app logs read --project ${gaeProject} --service ${gaeService} --version ${gaeVersion}`,
|
|
110
|
+
[],
|
|
111
|
+
{ shell: true },
|
|
112
|
+
)
|
|
113
|
+
} catch {}
|
|
110
114
|
}
|
|
111
115
|
|
|
112
116
|
process.exit(1)
|
|
113
117
|
}
|
|
114
118
|
|
|
115
119
|
if (logOnSuccess) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
120
|
+
try {
|
|
121
|
+
execVoidCommandSync(
|
|
122
|
+
`gcloud app logs read --project ${gaeProject} --service ${gaeService} --version ${gaeVersion}`,
|
|
123
|
+
[],
|
|
124
|
+
{ shell: true },
|
|
125
|
+
)
|
|
126
|
+
} catch {}
|
|
119
127
|
}
|
|
120
128
|
|
|
121
129
|
async function makeAttempt(): Promise<void> {
|