underpost 3.2.9 → 3.2.11
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/.github/workflows/npmpkg.ci.yml +1 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
- package/.github/workflows/release.cd.yml +1 -0
- package/.vscode/extensions.json +9 -9
- package/.vscode/settings.json +20 -4
- package/CHANGELOG.md +195 -1
- package/CLI-HELP.md +92 -23
- package/README.md +38 -9
- package/bin/build.js +27 -7
- package/bin/build.template.js +187 -0
- package/bin/deploy.js +12 -2
- package/bin/index.js +2 -1
- package/bump.config.js +26 -0
- package/conf.js +20 -7
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/deployment/dd-test-development/deployment.yaml +4 -2
- package/manifests/kind-config-dev.yaml +8 -0
- package/manifests/lxd/lxd-admin-profile.yaml +12 -3
- package/manifests/mongodb/pv-pvc.yaml +44 -8
- package/manifests/mongodb/statefulset.yaml +55 -68
- package/manifests/mongodb-4.4/headless-service.yaml +10 -0
- package/manifests/mongodb-4.4/kustomization.yaml +3 -1
- package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +10 -14
- package/manifests/mongodb-4.4/statefulset.yaml +79 -0
- package/manifests/mongodb-4.4/storage-class.yaml +9 -0
- package/manifests/valkey/statefulset.yaml +1 -1
- package/manifests/valkey/valkey-nodeport.yaml +17 -0
- package/package.json +27 -12
- package/scripts/ipxe-setup.sh +52 -49
- package/scripts/k3s-node-setup.sh +81 -46
- package/scripts/lxd-vm-setup.sh +193 -8
- package/scripts/maas-nat-firewalld.sh +145 -0
- package/src/api/core/core.router.js +19 -14
- package/src/api/core/core.service.js +5 -5
- package/src/api/default/default.router.js +22 -18
- package/src/api/default/default.service.js +5 -5
- package/src/api/document/document.router.js +28 -23
- package/src/api/document/document.service.js +100 -23
- package/src/api/file/file.router.js +19 -13
- package/src/api/file/file.service.js +9 -7
- package/src/api/test/test.router.js +17 -12
- package/src/api/types.js +24 -0
- package/src/api/user/guest.service.js +5 -4
- package/src/api/user/user.router.js +297 -288
- package/src/api/user/user.service.js +100 -35
- package/src/cli/baremetal.js +132 -101
- package/src/cli/cluster.js +700 -232
- package/src/cli/db.js +59 -60
- package/src/cli/deploy.js +216 -137
- package/src/cli/fs.js +13 -3
- package/src/cli/index.js +80 -15
- package/src/cli/ipfs.js +4 -6
- package/src/cli/kubectl.js +4 -1
- package/src/cli/lxd.js +1099 -223
- package/src/cli/monitor.js +9 -3
- package/src/cli/release.js +334 -140
- package/src/cli/repository.js +68 -23
- package/src/cli/run.js +191 -47
- package/src/cli/secrets.js +11 -2
- package/src/cli/test.js +9 -3
- package/src/client/Default.index.js +9 -3
- package/src/client/components/core/Auth.js +5 -0
- package/src/client/components/core/ClientEvents.js +76 -0
- package/src/client/components/core/EventBus.js +4 -0
- package/src/client/components/core/Modal.js +82 -41
- package/src/client/components/core/PanelForm.js +56 -52
- package/src/client/components/core/Worker.js +162 -363
- package/src/client/sw/core.sw.js +174 -112
- package/src/db/DataBaseProvider.js +115 -15
- package/src/db/mariadb/MariaDB.js +2 -1
- package/src/db/mongo/MongoBootstrap.js +657 -0
- package/src/db/mongo/MongooseDB.js +129 -21
- package/src/index.js +1 -1
- package/src/runtime/express/Express.js +2 -2
- package/src/runtime/wp/Wp.js +8 -5
- package/src/server/auth.js +2 -2
- package/src/server/client-build-docs.js +1 -1
- package/src/server/client-build.js +94 -129
- package/src/server/conf.js +81 -79
- package/src/server/process.js +180 -19
- package/src/server/proxy.js +9 -2
- package/src/server/runtime.js +1 -1
- package/src/server/start.js +16 -4
- package/src/server/valkey.js +2 -0
- package/src/ws/IoInterface.js +16 -16
- package/src/ws/core/channels/core.ws.chat.js +11 -11
- package/src/ws/core/channels/core.ws.mailer.js +29 -29
- package/src/ws/core/channels/core.ws.stream.js +19 -19
- package/src/ws/core/core.ws.connection.js +8 -8
- package/src/ws/core/core.ws.server.js +6 -5
- package/src/ws/default/channels/default.ws.main.js +10 -10
- package/src/ws/default/default.ws.connection.js +4 -4
- package/src/ws/default/default.ws.server.js +4 -3
- package/bin/file.js +0 -202
- package/bin/vs.js +0 -74
- package/bin/zed.js +0 -84
- package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
- package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
- /package/src/client/ssr/{offline → views}/Maintenance.js +0 -0
- /package/src/client/ssr/{offline → views}/NoNetworkConnection.js +0 -0
- /package/src/client/ssr/{pages → views}/Test.js +0 -0
package/bin/build.js
CHANGED
|
@@ -69,6 +69,7 @@ if (process.argv.includes('conf')) {
|
|
|
69
69
|
` && underpost push . ${privateGitUri}`,
|
|
70
70
|
{
|
|
71
71
|
silent: true,
|
|
72
|
+
silentOnError: true,
|
|
72
73
|
},
|
|
73
74
|
);
|
|
74
75
|
}
|
|
@@ -163,27 +164,45 @@ const { DefaultConf } = await import(`../conf.${confName}.js`);
|
|
|
163
164
|
`./.github/workflows/publish.cyberia.ci.yml`,
|
|
164
165
|
`${basePath}/.github/workflows/publish.cyberia.ci.yml`,
|
|
165
166
|
);
|
|
166
|
-
delete packageJson.bin.underpost;
|
|
167
|
+
if (packageJson.bin) delete packageJson.bin.underpost;
|
|
168
|
+
if (!packageJson.bin) packageJson.bin = {};
|
|
167
169
|
packageJson.bin.cyberia = 'bin/index.js';
|
|
168
170
|
packageJson.keywords = [
|
|
169
171
|
'cyberia',
|
|
172
|
+
'cyberia-cli',
|
|
173
|
+
'engine-cyberia',
|
|
174
|
+
'sidecar',
|
|
175
|
+
'data-layer',
|
|
176
|
+
'engine-cyberia',
|
|
170
177
|
'object-layer',
|
|
171
|
-
'game-engine',
|
|
172
|
-
'assets-management',
|
|
173
|
-
'web3',
|
|
174
178
|
'atlas-sprite-sheet',
|
|
179
|
+
'ipfs',
|
|
180
|
+
'erc-1155',
|
|
181
|
+
'object-layer-token',
|
|
182
|
+
'hardhat',
|
|
183
|
+
'hyperledger-besu',
|
|
184
|
+
'blockchain',
|
|
185
|
+
'web3',
|
|
186
|
+
'underpost-platform',
|
|
187
|
+
'mmorpg',
|
|
175
188
|
];
|
|
176
|
-
packageJson.description =
|
|
177
|
-
|
|
189
|
+
packageJson.description =
|
|
190
|
+
'Cyberia CLI — toolchain for the Cyberia MMO data layer, content pipeline, persistence, gRPC services, and ERC-1155 lifecycle on Hyperledger Besu.';
|
|
191
|
+
const { CyberiaDependencies } = await import(`../src/api/cyberia-server-defaults/cyberia-server-defaults.js`);
|
|
178
192
|
packageJson.dependencies = {
|
|
179
193
|
...originPackageJson.dependencies,
|
|
180
194
|
...CyberiaDependencies,
|
|
181
195
|
};
|
|
182
196
|
fs.writeFileSync(`${basePath}/bin/index.js`, fs.readFileSync(`./bin/cyberia.js`, 'utf8'), 'utf8');
|
|
197
|
+
fs.writeFileSync(
|
|
198
|
+
`${basePath}/README.md`,
|
|
199
|
+
fs.readFileSync(`./src/client/public/cyberia-docs/CYBERIA-CLI.md`, 'utf8'),
|
|
200
|
+
'utf8',
|
|
201
|
+
);
|
|
183
202
|
fs.copySync(`./hardhat`, `${basePath}/hardhat`);
|
|
184
203
|
for (const path of [
|
|
185
204
|
'/src/grpc/cyberia',
|
|
186
|
-
'/src/client/ssr/
|
|
205
|
+
'/src/client/ssr/views/CyberiaServerMetrics.js',
|
|
187
206
|
'/src/server/object-layer.js',
|
|
188
207
|
'/src/server/atlas-sprite-sheet-generator.js',
|
|
189
208
|
'/src/server/shape-generator.js',
|
|
@@ -197,6 +216,7 @@ const { DefaultConf } = await import(`../conf.${confName}.js`);
|
|
|
197
216
|
'/src/runtime/cyberia-client',
|
|
198
217
|
'/.github/workflows/hardhat.ci.yml',
|
|
199
218
|
'/src/client/public/cyberia-docs',
|
|
219
|
+
'/src/api/cyberia-server-defaults',
|
|
200
220
|
])
|
|
201
221
|
fs.copySync(`.${path}`, `${basePath}${path}`);
|
|
202
222
|
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
|
|
3
|
+
import { loggerFactory } from '../src/server/logger.js';
|
|
4
|
+
import { getDirname, newInstance, uniqueArray } from '../src/client/components/core/CommonJs.js';
|
|
5
|
+
import { shellExec } from '../src/server/process.js';
|
|
6
|
+
import walk from 'ignore-walk';
|
|
7
|
+
import { validateTemplatePath } from '../src/server/conf.js';
|
|
8
|
+
import dotenv from 'dotenv';
|
|
9
|
+
|
|
10
|
+
const logger = loggerFactory(import.meta);
|
|
11
|
+
|
|
12
|
+
if (fs.existsSync('./engine-private/conf/dd-cron/.env.production'))
|
|
13
|
+
dotenv.config({
|
|
14
|
+
path: `./engine-private/conf/dd-cron/.env.production`,
|
|
15
|
+
override: true,
|
|
16
|
+
});
|
|
17
|
+
else dotenv.config();
|
|
18
|
+
|
|
19
|
+
// Engine-only paths stripped from the template after the source sync.
|
|
20
|
+
const TEMPLATE_DELETE_PATHS = [
|
|
21
|
+
'./.github',
|
|
22
|
+
'./manifests/deployment/dd-lampp-development',
|
|
23
|
+
'./manifests/deployment/dd-cyberia-development',
|
|
24
|
+
'./manifests/deployment/dd-core-development',
|
|
25
|
+
'./manifests/deployment/dd-template-development',
|
|
26
|
+
'./src/server/object-layer.js',
|
|
27
|
+
'./src/server/atlas-sprite-sheet-generator.js',
|
|
28
|
+
'./src/server/shape-generator.js',
|
|
29
|
+
'./src/server/semantic-layer-generator.js',
|
|
30
|
+
'./src/server/semantic-layer-generator-floor.js',
|
|
31
|
+
'./src/server/semantic-layer-generator-skin.js',
|
|
32
|
+
'./src/server/semantic-layer-generator-resource.js',
|
|
33
|
+
'./src/server/besu-genesis-generator.js',
|
|
34
|
+
'./src/grpc/cyberia',
|
|
35
|
+
'./src/runtime/cyberia-server',
|
|
36
|
+
'./src/runtime/cyberia-client',
|
|
37
|
+
'./test/shape-generator.test.js',
|
|
38
|
+
'./src/client/public/cyberia-docs',
|
|
39
|
+
'bin/cyberia.js',
|
|
40
|
+
'./hardhat',
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
// Workflow + service files re-added to the template after the engine-only strip above.
|
|
44
|
+
const TEMPLATE_RESTORE_PATHS = [
|
|
45
|
+
`./.github/workflows/pwa-microservices-template-page.cd.yml`,
|
|
46
|
+
`./.github/workflows/pwa-microservices-template-test.ci.yml`,
|
|
47
|
+
`./.github/workflows/npmpkg.ci.yml`,
|
|
48
|
+
`./.github/workflows/ghpkg.ci.yml`,
|
|
49
|
+
`./.github/workflows/gitlab.ci.yml`,
|
|
50
|
+
`./.github/workflows/publish.ci.yml`,
|
|
51
|
+
`./.github/workflows/release.cd.yml`,
|
|
52
|
+
`./src/client/services/user/guest.service.js`,
|
|
53
|
+
'./src/api/user/guest.service.js',
|
|
54
|
+
'./src/ws/IoInterface.js',
|
|
55
|
+
'./src/ws/IoServer.js',
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
const TEMPLATE_KEYWORDS = [
|
|
59
|
+
'underpost',
|
|
60
|
+
'underpost-platform',
|
|
61
|
+
'cli',
|
|
62
|
+
'toolchain',
|
|
63
|
+
'ci-cd',
|
|
64
|
+
'devops',
|
|
65
|
+
'kubernetes',
|
|
66
|
+
'k3s',
|
|
67
|
+
'kubeadm',
|
|
68
|
+
'lxd',
|
|
69
|
+
'bare-metal',
|
|
70
|
+
'container-orchestration',
|
|
71
|
+
'image-management',
|
|
72
|
+
'pwa',
|
|
73
|
+
'workbox',
|
|
74
|
+
'microservices',
|
|
75
|
+
];
|
|
76
|
+
|
|
77
|
+
const TEMPLATE_DESCRIPTION =
|
|
78
|
+
'Underpost Platform — end-to-end CI/CD and application-delivery toolchain CLI. Covers bare metal, Kubernetes, K3s, kubeadm, LXD, container/image orchestration, secrets, databases, cron jobs, monitoring, SSH, runners, PWA + Workbox delivery, and release orchestration. Extensible via downstream CLIs.';
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Builds the pwa-microservices-template from scratch out of the current engine source tree.
|
|
82
|
+
*
|
|
83
|
+
* Clones (or resets) the template repo next to the engine, syncs every engine-tracked file the
|
|
84
|
+
* template is allowed to carry (validateTemplatePath), strips engine-only modules, restores the
|
|
85
|
+
* template's own CI workflows + guest services, and rewrites package.json / package-lock.json /
|
|
86
|
+
* README so the template is a standalone, installable project.
|
|
87
|
+
*
|
|
88
|
+
* Usage: node bin/build.template [srcPath=./] [toPath=../pwa-microservices-template]
|
|
89
|
+
*/
|
|
90
|
+
const srcPath = (process.argv[2] ?? './').replaceAll(`'`, '');
|
|
91
|
+
const toPath = (process.argv[3] ?? '../pwa-microservices-template').replaceAll(`'`, '');
|
|
92
|
+
const githubUsername = process.env.GITHUB_USERNAME;
|
|
93
|
+
|
|
94
|
+
logger.info('Build template', { srcPath, toPath });
|
|
95
|
+
|
|
96
|
+
try {
|
|
97
|
+
const sourceFiles = (
|
|
98
|
+
await new Promise((resolve) =>
|
|
99
|
+
walk(
|
|
100
|
+
{
|
|
101
|
+
path: srcPath,
|
|
102
|
+
ignoreFiles: [`.gitignore`],
|
|
103
|
+
includeEmpty: false,
|
|
104
|
+
follow: false,
|
|
105
|
+
},
|
|
106
|
+
(...args) => resolve(args[1]),
|
|
107
|
+
),
|
|
108
|
+
)
|
|
109
|
+
).filter((p) => !p.startsWith('.git'));
|
|
110
|
+
|
|
111
|
+
// Clone the template from 0 if missing; otherwise reset it to a clean pristine checkout.
|
|
112
|
+
if (!fs.existsSync(toPath)) {
|
|
113
|
+
shellExec(`cd .. && node engine/bin clone ${githubUsername}/pwa-microservices-template`);
|
|
114
|
+
} else {
|
|
115
|
+
shellExec(`cd ${toPath} && git reset && git checkout . && git clean -f -d`);
|
|
116
|
+
shellExec(`node bin pull ${toPath} ${githubUsername}/pwa-microservices-template`);
|
|
117
|
+
shellExec(`sudo rm -rf ${toPath}/engine-private`);
|
|
118
|
+
shellExec(`sudo rm -rf ${toPath}/logs`);
|
|
119
|
+
}
|
|
120
|
+
shellExec(`cd ${toPath} && git config core.filemode false`);
|
|
121
|
+
|
|
122
|
+
for (const copyPath of sourceFiles) {
|
|
123
|
+
if (copyPath === 'NaN') continue;
|
|
124
|
+
const absolutePath = `${srcPath}/${copyPath}`;
|
|
125
|
+
if (!validateTemplatePath(absolutePath)) continue;
|
|
126
|
+
|
|
127
|
+
const folder = getDirname(`${toPath}/${copyPath}`);
|
|
128
|
+
if (!fs.existsSync(folder)) fs.mkdirSync(folder, { recursive: true });
|
|
129
|
+
|
|
130
|
+
logger.info('build', `${toPath}/${copyPath}`);
|
|
131
|
+
fs.copyFileSync(absolutePath, `${toPath}/${copyPath}`);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
fs.copySync(`./.vscode`, `${toPath}/.vscode`);
|
|
135
|
+
fs.copySync(`./src/client/public/default`, `${toPath}/src/client/public/default`);
|
|
136
|
+
|
|
137
|
+
// Preserve the template's own README + package.json identity before merging engine metadata.
|
|
138
|
+
for (const checkoutPath of ['README.md', 'package.json']) shellExec(`cd ${toPath} && git checkout ${checkoutPath}`);
|
|
139
|
+
|
|
140
|
+
for (const deletePath of TEMPLATE_DELETE_PATHS) {
|
|
141
|
+
const target = `${toPath}/${deletePath}`;
|
|
142
|
+
if (fs.existsSync(target)) fs.removeSync(target);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
fs.mkdirSync(`${toPath}/.github/workflows`, { recursive: true });
|
|
146
|
+
for (const restorePath of TEMPLATE_RESTORE_PATHS) fs.copyFileSync(restorePath, `${toPath}/${restorePath}`);
|
|
147
|
+
|
|
148
|
+
// ── package.json: take engine deps/scripts/version, keep template identity. ──
|
|
149
|
+
const originPackageJson = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
|
|
150
|
+
const templatePackageJson = JSON.parse(fs.readFileSync(`${toPath}/package.json`, 'utf8'));
|
|
151
|
+
const templateName = templatePackageJson.name;
|
|
152
|
+
|
|
153
|
+
templatePackageJson.dependencies = originPackageJson.dependencies;
|
|
154
|
+
templatePackageJson.devDependencies = originPackageJson.devDependencies;
|
|
155
|
+
templatePackageJson.version = originPackageJson.version;
|
|
156
|
+
templatePackageJson.scripts = originPackageJson.scripts;
|
|
157
|
+
templatePackageJson.overrides = originPackageJson.overrides;
|
|
158
|
+
templatePackageJson.name = templateName;
|
|
159
|
+
templatePackageJson.description = TEMPLATE_DESCRIPTION;
|
|
160
|
+
templatePackageJson.keywords = uniqueArray(TEMPLATE_KEYWORDS.concat(templatePackageJson.keywords || []));
|
|
161
|
+
delete templatePackageJson.scripts['update:template'];
|
|
162
|
+
fs.writeFileSync(`${toPath}/package.json`, JSON.stringify(templatePackageJson, null, 4), 'utf8');
|
|
163
|
+
|
|
164
|
+
// ── package-lock.json: mirror engine packages, keep template name/version on the root entry. ──
|
|
165
|
+
const originPackageLockJson = JSON.parse(fs.readFileSync('./package-lock.json', 'utf8'));
|
|
166
|
+
const templatePackageLockJson = JSON.parse(fs.readFileSync(`${toPath}/package-lock.json`, 'utf8'));
|
|
167
|
+
const originBasePackageLock = newInstance(templatePackageLockJson.packages['']);
|
|
168
|
+
templatePackageLockJson.name = templateName;
|
|
169
|
+
templatePackageLockJson.version = originPackageLockJson.version;
|
|
170
|
+
templatePackageLockJson.packages = originPackageLockJson.packages;
|
|
171
|
+
templatePackageLockJson.packages[''].name = templateName;
|
|
172
|
+
templatePackageLockJson.packages[''].version = originPackageLockJson.version;
|
|
173
|
+
templatePackageLockJson.packages[''].hasInstallScript = originBasePackageLock.hasInstallScript;
|
|
174
|
+
templatePackageLockJson.packages[''].license = originBasePackageLock.license;
|
|
175
|
+
fs.writeFileSync(`${toPath}/package-lock.json`, JSON.stringify(templatePackageLockJson, null, 4), 'utf8');
|
|
176
|
+
|
|
177
|
+
fs.writeFileSync(
|
|
178
|
+
`${toPath}/README.md`,
|
|
179
|
+
fs
|
|
180
|
+
.readFileSync('./README.md', 'utf8')
|
|
181
|
+
.replace('<!-- template-title -->', '#### Base template for pwa/api-rest projects.'),
|
|
182
|
+
'utf8',
|
|
183
|
+
);
|
|
184
|
+
} catch (error) {
|
|
185
|
+
logger.error(error, error.stack);
|
|
186
|
+
process.exit(1);
|
|
187
|
+
}
|
package/bin/deploy.js
CHANGED
|
@@ -714,7 +714,7 @@ nvidia/gpu-operator \
|
|
|
714
714
|
}
|
|
715
715
|
|
|
716
716
|
case 'cyberia': {
|
|
717
|
-
const { CyberiaDependencies } = await import(`../src/
|
|
717
|
+
const { CyberiaDependencies } = await import(`../src/api/cyberia-server-defaults/cyberia-server-defaults.js`);
|
|
718
718
|
for (const dep of Object.keys(CyberiaDependencies)) {
|
|
719
719
|
const ver = CyberiaDependencies[dep];
|
|
720
720
|
shellExec(`npm install ${dep}@${ver}`);
|
|
@@ -823,7 +823,7 @@ nvidia/gpu-operator \
|
|
|
823
823
|
|
|
824
824
|
// Delete merged local and remote branches
|
|
825
825
|
for (const { branch, isAlreadyMerged } of mergedBranches) {
|
|
826
|
-
shellExec(`git branch -D ${branch}`, { silent: true });
|
|
826
|
+
shellExec(`git branch -D ${branch}`, { silent: true, silentOnError: true });
|
|
827
827
|
// logger.info(`Deleting remote branch: ${branch}${isAlreadyMerged ? ' (already merged)' : ''}`);
|
|
828
828
|
// shellExec(`git push https://${process.env.GITHUB_TOKEN}@github.com/${gitUri}.git --delete ${branch}`, {
|
|
829
829
|
// disableLog: true,
|
|
@@ -1528,6 +1528,16 @@ nvidia/gpu-operator \
|
|
|
1528
1528
|
|
|
1529
1529
|
break;
|
|
1530
1530
|
}
|
|
1531
|
+
|
|
1532
|
+
case 'k3s-template-env': {
|
|
1533
|
+
if (fs.existsSync('./engine-private/conf/dd-default')) {
|
|
1534
|
+
console.log('Cleaning up existing dd-default config for VM template environment setup');
|
|
1535
|
+
fs.removeSync('./engine-private/conf/dd-default');
|
|
1536
|
+
}
|
|
1537
|
+
shellExec(`node bin env clean`);
|
|
1538
|
+
shellExec(`sed -i "s/127.0.0.1/$(underpost ip --dhcp)/g" .env.example`);
|
|
1539
|
+
break;
|
|
1540
|
+
}
|
|
1531
1541
|
}
|
|
1532
1542
|
} catch (error) {
|
|
1533
1543
|
logger.error(error, error.stack);
|
package/bin/index.js
CHANGED
package/bump.config.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bumpp configuration for the Underpost engine.
|
|
3
|
+
*
|
|
4
|
+
* Owns the *canonical* version-bearing files (anything that exposes a literal `version` field
|
|
5
|
+
* bumpp can detect natively). Non-canonical files — image tags in workflows, README badges,
|
|
6
|
+
* doc strings, deployment.yaml image refs — are handled by the custom regex walker in
|
|
7
|
+
* src/cli/release.js (VERSION_BUMP_TARGETS), because bumpp only rewrites `version`-shaped lines.
|
|
8
|
+
*
|
|
9
|
+
* release.js drives bumpp programmatically (versionBump from 'bumpp') with commit/tag/push
|
|
10
|
+
* disabled, since the engine release flow stages and commits separately via `node bin cmt`.
|
|
11
|
+
*
|
|
12
|
+
* @see https://github.com/antfu/bumpp
|
|
13
|
+
*/
|
|
14
|
+
export default {
|
|
15
|
+
files: [
|
|
16
|
+
'package.json',
|
|
17
|
+
'package-lock.json',
|
|
18
|
+
// engine-private confs are git-ignored and visited only if present at bump time.
|
|
19
|
+
'engine-private/conf/**/package.json',
|
|
20
|
+
],
|
|
21
|
+
commit: false,
|
|
22
|
+
tag: false,
|
|
23
|
+
push: false,
|
|
24
|
+
confirm: false,
|
|
25
|
+
recursive: false,
|
|
26
|
+
};
|
package/conf.js
CHANGED
|
@@ -168,11 +168,25 @@ const DefaultConf = /**/ {
|
|
|
168
168
|
head: ['Seo', 'Pwa', 'Css', 'DefaultScripts', 'Production'],
|
|
169
169
|
body: ['CacheControl', 'DefaultSplashScreen', '404', '500', 'SwaggerDarkMode'],
|
|
170
170
|
mailer: { userVerifyEmail: 'DefaultVerifyEmail', userRecoverEmail: 'DefaultRecoverEmail' },
|
|
171
|
-
|
|
172
|
-
{
|
|
173
|
-
|
|
171
|
+
views: [
|
|
172
|
+
{
|
|
173
|
+
path: '/offline',
|
|
174
|
+
title: 'No Network Connection',
|
|
175
|
+
client: 'NoNetworkConnection',
|
|
176
|
+
head: [],
|
|
177
|
+
body: [],
|
|
178
|
+
offlineDefault: true,
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
path: '/maintenance',
|
|
182
|
+
title: 'Server Maintenance',
|
|
183
|
+
client: 'Maintenance',
|
|
184
|
+
head: [],
|
|
185
|
+
body: [],
|
|
186
|
+
maintenanceDefault: true,
|
|
187
|
+
},
|
|
188
|
+
{ path: '/test', title: 'Test', client: 'Test', head: [], body: [] },
|
|
174
189
|
],
|
|
175
|
-
pages: [{ path: '/test', title: 'Test', client: 'Test', head: [], body: [] }],
|
|
176
190
|
},
|
|
177
191
|
},
|
|
178
192
|
server: {
|
|
@@ -187,10 +201,9 @@ const DefaultConf = /**/ {
|
|
|
187
201
|
proxy: [80, 443],
|
|
188
202
|
db: {
|
|
189
203
|
provider: 'env:DB_PROVIDER:mongoose',
|
|
190
|
-
host: 'env:DB_HOST:mongodb://
|
|
204
|
+
host: 'env:DB_HOST:mongodb://mongodb-0.mongodb-service:27017',
|
|
191
205
|
name: 'env:DB_NAME:default',
|
|
192
|
-
|
|
193
|
-
password: 'env:DB_PASSWORD:',
|
|
206
|
+
replicaSet: 'env:DB_REPLICA_SET:rs0',
|
|
194
207
|
},
|
|
195
208
|
mailer: {
|
|
196
209
|
sender: {
|
|
@@ -17,7 +17,7 @@ spec:
|
|
|
17
17
|
spec:
|
|
18
18
|
containers:
|
|
19
19
|
- name: dd-default-development-blue
|
|
20
|
-
image: underpost/underpost-engine:v3.2.
|
|
20
|
+
image: underpost/underpost-engine:v3.2.11
|
|
21
21
|
# resources:
|
|
22
22
|
# requests:
|
|
23
23
|
# memory: "124Ki"
|
|
@@ -98,7 +98,7 @@ spec:
|
|
|
98
98
|
spec:
|
|
99
99
|
containers:
|
|
100
100
|
- name: dd-default-development-green
|
|
101
|
-
image: underpost/underpost-engine:v3.2.
|
|
101
|
+
image: underpost/underpost-engine:v3.2.11
|
|
102
102
|
# resources:
|
|
103
103
|
# requests:
|
|
104
104
|
# memory: "124Ki"
|
|
@@ -20,7 +20,7 @@ spec:
|
|
|
20
20
|
spec:
|
|
21
21
|
containers:
|
|
22
22
|
- name: dd-test-development-blue
|
|
23
|
-
image: underpost/underpost-engine:v3.2.
|
|
23
|
+
image: underpost/underpost-engine:v3.2.11
|
|
24
24
|
imagePullPolicy: IfNotPresent
|
|
25
25
|
envFrom:
|
|
26
26
|
- secretRef:
|
|
@@ -34,6 +34,7 @@ spec:
|
|
|
34
34
|
underpost start --build --run dd-test development
|
|
35
35
|
|
|
36
36
|
|
|
37
|
+
|
|
37
38
|
---
|
|
38
39
|
apiVersion: v1
|
|
39
40
|
kind: Service
|
|
@@ -147,7 +148,7 @@ spec:
|
|
|
147
148
|
spec:
|
|
148
149
|
containers:
|
|
149
150
|
- name: dd-test-development-green
|
|
150
|
-
image: underpost/underpost-engine:v3.2.
|
|
151
|
+
image: underpost/underpost-engine:v3.2.11
|
|
151
152
|
imagePullPolicy: IfNotPresent
|
|
152
153
|
envFrom:
|
|
153
154
|
- secretRef:
|
|
@@ -161,6 +162,7 @@ spec:
|
|
|
161
162
|
underpost start --build --run dd-test development
|
|
162
163
|
|
|
163
164
|
|
|
165
|
+
|
|
164
166
|
---
|
|
165
167
|
apiVersion: v1
|
|
166
168
|
kind: Service
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
kind: Cluster
|
|
2
2
|
apiVersion: kind.x-k8s.io/v1alpha4
|
|
3
|
+
networking:
|
|
4
|
+
ipFamily: ipv4
|
|
3
5
|
nodes:
|
|
4
6
|
- role: control-plane
|
|
7
|
+
extraMounts:
|
|
8
|
+
- hostPath: /data/mongodb
|
|
9
|
+
containerPath: /data/mongodb
|
|
5
10
|
- role: worker
|
|
11
|
+
extraMounts:
|
|
12
|
+
- hostPath: /data/mongodb
|
|
13
|
+
containerPath: /data/mongodb
|
|
6
14
|
# extraPortMappings:
|
|
7
15
|
# - containerPort: 80
|
|
8
16
|
# hostPort: 80
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
config:
|
|
2
|
-
limits.cpu:
|
|
2
|
+
limits.cpu: '2'
|
|
3
3
|
limits.memory: 4GB
|
|
4
|
-
|
|
4
|
+
# Host-safety hardening:
|
|
5
|
+
# boot.autostart=false → the LXD daemon will NOT start any VM created with
|
|
6
|
+
# this profile when the host boots. The user explicitly brings VMs up
|
|
7
|
+
# after the host is verified healthy. Prevents a broken VM from blocking
|
|
8
|
+
# boot via snap.lxd.daemon.
|
|
9
|
+
# boot.host_shutdown_timeout=60 → bound the time the daemon waits for this
|
|
10
|
+
# VM to stop when the host is going down. Prevents an unresponsive VM
|
|
11
|
+
# from holding the host in an indefinite shutdown.
|
|
12
|
+
boot.autostart: 'false'
|
|
13
|
+
boot.host_shutdown_timeout: '60'
|
|
14
|
+
description: vm nat network (host-safe defaults)
|
|
5
15
|
devices:
|
|
6
16
|
eth0:
|
|
7
17
|
name: eth0
|
|
8
18
|
network: lxdbr0
|
|
9
19
|
type: nic
|
|
10
|
-
ipv4.address: 10.250.250.100
|
|
11
20
|
root:
|
|
12
21
|
path: /
|
|
13
22
|
pool: local # lxc storage list
|
|
@@ -1,23 +1,59 @@
|
|
|
1
1
|
apiVersion: v1
|
|
2
2
|
kind: PersistentVolume
|
|
3
3
|
metadata:
|
|
4
|
-
name: mongodb-pv
|
|
4
|
+
name: mongodb-pv-0
|
|
5
|
+
labels:
|
|
6
|
+
app: mongodb
|
|
5
7
|
spec:
|
|
6
8
|
capacity:
|
|
7
9
|
storage: 5Gi
|
|
8
10
|
accessModes:
|
|
9
11
|
- ReadWriteOnce
|
|
12
|
+
persistentVolumeReclaimPolicy: Retain
|
|
13
|
+
storageClassName: mongodb-storage-class
|
|
14
|
+
claimRef:
|
|
15
|
+
namespace: default
|
|
16
|
+
name: mongodb-storage-mongodb-0
|
|
10
17
|
hostPath:
|
|
11
|
-
path: /data/mongodb
|
|
18
|
+
path: /data/mongodb/v0
|
|
19
|
+
type: DirectoryOrCreate
|
|
12
20
|
---
|
|
13
21
|
apiVersion: v1
|
|
14
|
-
kind:
|
|
22
|
+
kind: PersistentVolume
|
|
23
|
+
metadata:
|
|
24
|
+
name: mongodb-pv-1
|
|
25
|
+
labels:
|
|
26
|
+
app: mongodb
|
|
27
|
+
spec:
|
|
28
|
+
capacity:
|
|
29
|
+
storage: 5Gi
|
|
30
|
+
accessModes:
|
|
31
|
+
- ReadWriteOnce
|
|
32
|
+
persistentVolumeReclaimPolicy: Retain
|
|
33
|
+
storageClassName: mongodb-storage-class
|
|
34
|
+
claimRef:
|
|
35
|
+
namespace: default
|
|
36
|
+
name: mongodb-storage-mongodb-1
|
|
37
|
+
hostPath:
|
|
38
|
+
path: /data/mongodb/v1
|
|
39
|
+
type: DirectoryOrCreate
|
|
40
|
+
---
|
|
41
|
+
apiVersion: v1
|
|
42
|
+
kind: PersistentVolume
|
|
15
43
|
metadata:
|
|
16
|
-
name: mongodb-
|
|
44
|
+
name: mongodb-pv-2
|
|
45
|
+
labels:
|
|
46
|
+
app: mongodb
|
|
17
47
|
spec:
|
|
18
|
-
|
|
48
|
+
capacity:
|
|
49
|
+
storage: 5Gi
|
|
19
50
|
accessModes:
|
|
20
51
|
- ReadWriteOnce
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
52
|
+
persistentVolumeReclaimPolicy: Retain
|
|
53
|
+
storageClassName: mongodb-storage-class
|
|
54
|
+
claimRef:
|
|
55
|
+
namespace: default
|
|
56
|
+
name: mongodb-storage-mongodb-2
|
|
57
|
+
hostPath:
|
|
58
|
+
path: /data/mongodb/v2
|
|
59
|
+
type: DirectoryOrCreate
|