underpost 3.2.30 → 3.2.80
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/ghpkg.ci.yml +87 -0
- package/.github/workflows/npmpkg.ci.yml +9 -6
- package/.github/workflows/publish.ci.yml +3 -3
- package/.github/workflows/pwa-microservices-template-page.cd.yml +0 -7
- package/.github/workflows/release.cd.yml +1 -1
- package/CHANGELOG.md +1230 -971
- package/CLI-HELP.md +14 -6
- package/README.md +3 -3
- package/bin/build.js +40 -4
- package/bin/deploy.js +2 -2
- package/bump.config.js +1 -0
- package/docker-compose.yml +26 -26
- 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/package.json +15 -15
- package/scripts/disk-clean.sh +85 -60
- package/scripts/test-monitor.sh +1 -1
- package/src/api/core/core.controller.js +4 -65
- package/src/api/core/core.router.js +8 -14
- package/src/api/default/default.controller.js +2 -70
- package/src/api/default/default.router.js +7 -17
- package/src/api/document/document.controller.js +5 -77
- package/src/api/document/document.router.js +9 -13
- package/src/api/file/file.controller.js +9 -53
- package/src/api/file/file.router.js +14 -6
- package/src/api/test/test.controller.js +8 -53
- package/src/api/test/test.router.js +1 -4
- package/src/cli/cluster.js +104 -11
- package/src/cli/db.js +4 -2
- package/src/cli/deploy.js +60 -11
- package/src/cli/docker-compose.js +212 -1
- package/src/cli/fs.js +45 -25
- package/src/cli/image.js +147 -51
- package/src/cli/index.js +26 -6
- package/src/cli/release.js +50 -4
- package/src/cli/repository.js +98 -24
- package/src/cli/run.js +380 -178
- package/src/cli/secrets.js +75 -46
- package/src/cli/ssh.js +30 -11
- package/src/client/components/core/Modal.js +38 -4
- package/src/index.js +1 -1
- package/src/server/catalog.js +2 -0
- package/src/server/conf.js +163 -3
- package/src/server/downloader.js +3 -3
- package/src/server/middlewares.js +152 -0
package/CLI-HELP.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
## Underpost CLI
|
|
2
2
|
|
|
3
|
-
> underpost ci/cd cli v3.2.
|
|
3
|
+
> underpost ci/cd cli v3.2.80
|
|
4
4
|
|
|
5
5
|
**Usage:** `underpost [options] [command]`
|
|
6
6
|
|
|
@@ -210,12 +210,15 @@ Manages commits to a GitHub repository, supporting various commit types and opti
|
|
|
210
210
|
| `--edit` | Edit last commit. |
|
|
211
211
|
| `--deploy-id <deploy-id>` | Sets the deployment configuration ID for the commit context. |
|
|
212
212
|
| `--cached` | Commit staged changes only or context. |
|
|
213
|
+
| `--init-repo [origin]` | Initialize a git repository at the specified path. Optionally set the git remote origin URL. |
|
|
213
214
|
| `--hashes <hashes>` | Comma-separated list of specific file hashes of commits. |
|
|
214
215
|
| `--extension <extension>` | specific file extensions of commits. |
|
|
215
|
-
| `--changelog
|
|
216
|
+
| `--changelog` | Print the plain changelog of the last N commits (see --from-n-commit, default 1). |
|
|
216
217
|
| `--changelog-build` | Builds a CHANGELOG.md file based on the commit history |
|
|
217
218
|
| `--changelog-min-version <version>` | Sets the minimum version limit for --changelog-build (default: 2.85.0) |
|
|
218
219
|
| `--changelog-no-hash` | Excludes commit hashes from the generated changelog entries (used with --changelog-build). |
|
|
220
|
+
| `--changelog-msg` | Print the sanitized, commit-ready changelog message of the last N commits (see --from-n-commit, default 1). Empty when there are no tagged entries. |
|
|
221
|
+
| `--from-n-commit <n>` | Number of latest commits to include in --changelog/--changelog-msg (default: 1). |
|
|
219
222
|
| `--unpush` | With --log, automatically sets range to unpushed commits ahead of remote. |
|
|
220
223
|
| `-b` | Shows the current Git branch name. |
|
|
221
224
|
| `-p [branch]` | Shows the reflog for the specified branch. |
|
|
@@ -517,7 +520,7 @@ Manages secrets for various platforms.
|
|
|
517
520
|
|
|
518
521
|
| Argument | Description |
|
|
519
522
|
| --- | --- |
|
|
520
|
-
| `platform` | The secret management platform. Options: underpost, globalSecretClean. |
|
|
523
|
+
| `platform` | The secret management platform. Options: underpost, sanitizeSecretEnvFile, globalSecretClean. |
|
|
521
524
|
|
|
522
525
|
#### Options
|
|
523
526
|
|
|
@@ -547,19 +550,21 @@ Manages Docker images, including building, saving, and loading into Kubernetes c
|
|
|
547
550
|
| `--rm <image-id>` | Removes specified Underpost Dockerfile images. |
|
|
548
551
|
| `--path [path]` | The path to the Dockerfile directory. |
|
|
549
552
|
| `--image-name [image-name]` | Sets a custom name for the Docker image. |
|
|
550
|
-
| `--image-path [image-path]` | Sets the output path for the tar image archive. |
|
|
553
|
+
| `--image-out-path [image-out-path]` | Sets the output path for the tar image archive. |
|
|
551
554
|
| `--dockerfile-name [dockerfile-name]` | Sets a custom name for the Dockerfile. |
|
|
552
555
|
| `--podman-save` | Exports the built image as a tar file using Podman. |
|
|
553
|
-
| `--pull-base` | Pulls base
|
|
556
|
+
| `--pull-base` | Pulls the base image prerequisites (rockylinux:9) on the host; combine with --build. |
|
|
554
557
|
| `--spec` | Get current cached list of container images used by all pods |
|
|
555
558
|
| `--namespace <namespace>` | Kubernetes namespace for image operations (defaults to "default"). |
|
|
556
559
|
| `--kind` | Set kind cluster env image context management. |
|
|
557
560
|
| `--kubeadm` | Set kubeadm cluster env image context management. |
|
|
558
561
|
| `--k3s` | Set k3s cluster env image context management. |
|
|
562
|
+
| `--docker-compose` | Load the built image tar into the local Docker store for Docker Compose availability. |
|
|
559
563
|
| `--node-name` | Set node name for kubeadm or k3s cluster env image context management. |
|
|
560
564
|
| `--reset` | Performs a build without using the cache. |
|
|
561
565
|
| `--dev` | Use development mode. |
|
|
562
566
|
| `--pull-dockerhub <dockerhub-image>` | Sets a custom Docker Hub image for base image pulls. |
|
|
567
|
+
| `--import-tar <tar-path>` | Load a pre-built image tar archive (e.g. ./image-v1.0.0.tar) into the enabled target(s) without building. Combine with --kind, --kubeadm, --k3s and/or --docker-compose; the archive is loaded into each enabled one. |
|
|
563
568
|
| `-h, --help` | display help for command |
|
|
564
569
|
|
|
565
570
|
---
|
|
@@ -820,7 +825,7 @@ Runs specified scripts using various runners.
|
|
|
820
825
|
|
|
821
826
|
| Argument | Description |
|
|
822
827
|
| --- | --- |
|
|
823
|
-
| `runner-id` | The runner ID to run. Options: dev-cluster,etc-hosts,ipfs-expose,metadata,svc-ls,svc-rm,ssh-deploy-info,node-move,dev-hosts-expose,dev-hosts-restore,cluster-build,template-deploy,template-deploy-local,docker-image,clean,pull,release-deploy,ssh-deploy,ide,crypto-policy,sync,stop,ssh-deploy-stop,ssh-deploy-db-rollback,ssh-deploy-db,ssh-deploy-db-status,tz,get-proxy,instance-promote,instance,instance-build-manifest,ls-deployments,host-update,install-crio,dd-container,ip-info,db-client,git-conf,promote,metrics,cluster,deploy,disk-clean,disk-devices,disk-usage,dev,service,sh,log,ps,pid-info,background,ports,deploy-test,tf-vae-test,spark-template,pull-rocky-image,rmi,kill,generate-pass,secret,underpost-config,gpu-env,tf-gpu-test,deploy-job,push-bundle,pull-bundle,build-cluster-deployment-manifests,monitor-ui,shared-dir,shared-dir-add-user. |
|
|
828
|
+
| `runner-id` | The runner ID to run. Options: dev-cluster,etc-hosts,ipfs-expose,metadata,svc-ls,svc-rm,ssh-deploy-info,node-move,dev-hosts-expose,dev-hosts-restore,cluster-build,template-deploy,template-deploy-local,docker-image,clean,pull,release-deploy,ssh-deploy,ide,crypto-policy,sync,stop,ssh-deploy-stop,ssh-deploy-db-rollback,ssh-deploy-db,ssh-deploy-db-status,tz,get-proxy,instance-promote,instance,deploy-key,instance-build-manifest,ls-deployments,host-update,install-crio,dd-container,ip-info,db-client,git-conf,promote,metrics,cluster,deploy,disk-clean,disk-devices,disk-usage,dev,service,sh,log,ps,pid-info,background,ports,deploy-test,tf-vae-test,spark-template,pull-rocky-image,rmi,kill,generate-pass,secret,underpost-config,gpu-env,tf-gpu-test,deploy-job,push-bundle,pull-bundle,build-cluster-deployment-manifests,monitor-ui,shared-dir,shared-dir-add-user. |
|
|
824
829
|
| `path` | The input value, identifier, or path for the operation. |
|
|
825
830
|
|
|
826
831
|
#### Options
|
|
@@ -871,6 +876,7 @@ Runs specified scripts using various runners.
|
|
|
871
876
|
| `--kubeadm` | Sets the kubeadm cluster context for the runner execution. |
|
|
872
877
|
| `--k3s` | Sets the k3s cluster context for the runner execution. |
|
|
873
878
|
| `--kind` | Sets the kind cluster context for the runner execution. |
|
|
879
|
+
| `--traffic <traffic>` | Blue/green traffic colour to bake into generated manifests (default: blue). |
|
|
874
880
|
| `--git-clean` | Runs git clean on volume mount paths before copying. |
|
|
875
881
|
| `--deploy-id <deploy-id>` | Sets deploy id context for the runner execution. |
|
|
876
882
|
| `--user <user>` | Sets user context for the runner execution. |
|
|
@@ -896,6 +902,7 @@ Runs specified scripts using various runners.
|
|
|
896
902
|
| `--pull-bundle` | Explicitly download the pre-built client bundle from Cloudinary inside the container (supported by: sync, template-deploy). Use together with --skip-full-build. |
|
|
897
903
|
| `--remove` | Remove/teardown resources |
|
|
898
904
|
| `--test` | Enables test/generic-purpose mode for the runner (e.g. use self-signed TLS instead of cert-manager). |
|
|
905
|
+
| `--branch <branch>` | Sets the branch for git operations (default: current branch). |
|
|
899
906
|
| `-h, --help` | display help for command |
|
|
900
907
|
|
|
901
908
|
---
|
|
@@ -920,6 +927,7 @@ General-purpose Docker Compose development pipeline (mirrors the Kubernetes dev
|
|
|
920
927
|
| `--reset` | Comprehensive teardown (equivalent to cluster --reset): removes all stack containers, the network, named volumes (destroys data), orphans, and generated artifacts. |
|
|
921
928
|
| `--force` | Force reinstall (--install), remove volumes (--down), or also drop the env-file (--reset). |
|
|
922
929
|
| `--deploy-id <deploy-id>` | Deployment to run as the app container (default: dd-default). 'dd-default' self-bootstraps a fresh engine; any other id runs the standard 'underpost start' command (mirrors src/cli/deploy.js). |
|
|
930
|
+
| `--docker-compose-id <docker-compose-id>` | Selects a canonical custom-workflow stack at engine-private/conf/<deploy-id>/docker-compose/<docker-compose-id>/ (docker-compose.yml + compose.env + nginx.conf, used as-is; nginx/env generation is skipped). e.g. --deploy-id dd-cyberia --docker-compose-id cyberia for the Cyberia MMO ecosystem. |
|
|
923
931
|
| `--env <env>` | Deployment environment for non-default deploy ids (default: development). |
|
|
924
932
|
| `--generate` | Render dynamic supporting files (nginx router config, env-file, app-command override). |
|
|
925
933
|
| `--up` | Start the full stack detached (regenerates config first). |
|
package/README.md
CHANGED
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
|
|
11
11
|
<div align="center">
|
|
12
12
|
|
|
13
|
-
<a target="_top" href='https://download.rockylinux.org/pub/rocky/9/'><img alt='rockylinux' src='https://img.shields.io/badge/Rocky Linux v9.
|
|
13
|
+
<a target="_top" href='https://download.rockylinux.org/pub/rocky/9/'><img alt='rockylinux' src='https://img.shields.io/badge/Rocky Linux v9.8-100000?style=flat&logo=rockylinux&logoColor=white&labelColor=10b981&color=727273'/></a> <a target="_top" href='https://www.npmjs.com/package/npm?activeTab=versions'><img alt='npm' src='https://img.shields.io/badge/npm v11.6.2-100000?style=flat&logo=npm&logoColor=white&labelColor=CB3837&color=727273'/></a> <a target="_top" href='https://nodejs.org/download/release'><img alt='nodedotjs' src='https://img.shields.io/badge/node v24.15.0-100000?style=flat&logo=nodedotjs&logoColor=white&labelColor=5FA04E&color=727273'/></a> <a target="_top" href='https://pgp.mongodb.com/'><img alt='mongodb' src='https://img.shields.io/badge/mongodb_server v7.0-100000?style=flat&logo=mongodb&logoColor=white&labelColor=47A248&color=727273'/></a>
|
|
14
14
|
|
|
15
15
|
</div>
|
|
16
16
|
|
|
17
17
|
<div align="center">
|
|
18
18
|
|
|
19
|
-
[](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml) [](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml) [](https://www.npmjs.com/package/underpost) [](https://www.jsdelivr.com/package/npm/underpost) [](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml) [](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml) [](https://www.npmjs.com/package/underpost) [](https://www.jsdelivr.com/package/npm/underpost) [](https://socket.dev/npm/package/underpost/overview/3.2.80) [](https://coveralls.io/github/underpostnet/engine?branch=master) [](https://www.npmjs.org/package/underpost) [](https://www.npmjs.com/package/underpost)
|
|
20
20
|
|
|
21
21
|
</div>
|
|
22
22
|
|
|
@@ -88,7 +88,7 @@ npm run dev
|
|
|
88
88
|
<!-- cli-index-start -->
|
|
89
89
|
## Underpost CLI
|
|
90
90
|
|
|
91
|
-
> underpost ci/cd cli v3.2.
|
|
91
|
+
> underpost ci/cd cli v3.2.80
|
|
92
92
|
|
|
93
93
|
**Usage:** `underpost [options] [command]`
|
|
94
94
|
|
package/bin/build.js
CHANGED
|
@@ -14,7 +14,8 @@ import {
|
|
|
14
14
|
updatePrivateEngineTestRepo,
|
|
15
15
|
} from '../src/server/conf.js';
|
|
16
16
|
import { loadDeployCatalog } from '../src/server/catalog.js';
|
|
17
|
-
import
|
|
17
|
+
import Underpost from '../src/index.js';
|
|
18
|
+
import { DOCKER_SCRIPTS } from '../src/api/cyberia-server-defaults/cyberia-server-defaults.js';
|
|
18
19
|
|
|
19
20
|
const baseConfPath = './engine-private/conf/dd-cron/.env.production';
|
|
20
21
|
if (fs.existsSync(baseConfPath)) dotenv.config({ path: baseConfPath, override: true });
|
|
@@ -34,8 +35,8 @@ const buildDeployTemplate = async (confName) => {
|
|
|
34
35
|
const catalog = await loadDeployCatalog(confName);
|
|
35
36
|
|
|
36
37
|
if (catalog.sourceMoves.length) {
|
|
37
|
-
|
|
38
|
-
if (catalog.sourceMoves.some(([src]) => !fs.existsSync(src)))
|
|
38
|
+
Underpost.repo.sparseCheckoutDirectory(`conf/${confName}`);
|
|
39
|
+
if (catalog.sourceMoves.some(([src]) => !fs.existsSync(src))) Underpost.repo.pullSourceRepo(repoName);
|
|
39
40
|
}
|
|
40
41
|
syncDeployIdSources(catalog.sourceMoves);
|
|
41
42
|
|
|
@@ -125,9 +126,14 @@ const buildDeployTemplate = async (confName) => {
|
|
|
125
126
|
packageJson.description = catalog.description;
|
|
126
127
|
const { CyberiaDependencies } = await import(`../src/api/cyberia-server-defaults/cyberia-server-defaults.js`);
|
|
127
128
|
packageJson.dependencies = {
|
|
128
|
-
|
|
129
|
+
underpost: '^' + Underpost.version.replace('v', ''),
|
|
130
|
+
'adm-zip': '^0.6.0',
|
|
129
131
|
...CyberiaDependencies,
|
|
130
132
|
};
|
|
133
|
+
packageJson.scripts = {
|
|
134
|
+
...packageJson.scripts,
|
|
135
|
+
...DOCKER_SCRIPTS,
|
|
136
|
+
};
|
|
131
137
|
fs.writeFileSync(`${basePath}/bin/index.js`, fs.readFileSync(`./bin/cyberia.js`, 'utf8'), 'utf8');
|
|
132
138
|
// Canonical Cyberia doc; engine-cyberia/README.md is a generated copy — never hand-edited.
|
|
133
139
|
fs.writeFileSync(
|
|
@@ -154,6 +160,16 @@ const buildDeployTemplate = async (confName) => {
|
|
|
154
160
|
if (!fs.existsSync(`${basePath}/images`)) fs.mkdirSync(`${basePath}/images`);
|
|
155
161
|
|
|
156
162
|
fs.copyFileSync(`./.github/workflows/${repoName}.ci.yml`, `${basePath}/.github/workflows/${repoName}.ci.yml`);
|
|
163
|
+
if (fs.existsSync(`./.github/workflows/docker-image.${repoName}.ci.yml`))
|
|
164
|
+
fs.copyFileSync(
|
|
165
|
+
`./.github/workflows/docker-image.${repoName}.ci.yml`,
|
|
166
|
+
`${basePath}/.github/workflows/docker-image.${repoName}.ci.yml`,
|
|
167
|
+
);
|
|
168
|
+
if (fs.existsSync(`./.github/workflows/docker-image.${repoName}.dev.ci.yml`))
|
|
169
|
+
fs.copyFileSync(
|
|
170
|
+
`./.github/workflows/docker-image.${repoName}.dev.ci.yml`,
|
|
171
|
+
`${basePath}/.github/workflows/docker-image.${repoName}.dev.ci.yml`,
|
|
172
|
+
);
|
|
157
173
|
fs.copyFileSync(`./.github/workflows/${repoName}.cd.yml`, `${basePath}/.github/workflows/${repoName}.cd.yml`);
|
|
158
174
|
|
|
159
175
|
if (fs.existsSync(`./typedoc.${confName}.json`)) {
|
|
@@ -179,6 +195,26 @@ const buildDeployTemplate = async (confName) => {
|
|
|
179
195
|
`${basePath}/.gitignore`,
|
|
180
196
|
fs.readFileSync(`.gitignore`, 'utf8').split('# Ignore ERP / CRM custom prototypes src')[0],
|
|
181
197
|
);
|
|
198
|
+
|
|
199
|
+
// Process catalog copies — each [src, dest] pair is copied from engine root to the template target.
|
|
200
|
+
if (catalog.copies && catalog.copies.length) {
|
|
201
|
+
for (const [src, dest] of catalog.copies) {
|
|
202
|
+
if (fs.existsSync(src)) {
|
|
203
|
+
logger.info(`Build copy`, `${src} -> ${dest}`);
|
|
204
|
+
fs.copySync(src, `${basePath}/${dest.replace(/^\.\//, '')}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Process catalog moves — each [src, dest] pair is moved from engine src to template dest.
|
|
210
|
+
if (catalog.moves && catalog.moves.length) {
|
|
211
|
+
for (const [src, dest] of catalog.moves) {
|
|
212
|
+
if (fs.existsSync(src)) {
|
|
213
|
+
logger.info(`Build move`, `${src} -> ${dest}`);
|
|
214
|
+
fs.moveSync(src, `${basePath}/${dest.replace(/^\.\//, '')}`, { overwrite: true });
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
182
218
|
};
|
|
183
219
|
|
|
184
220
|
const program = new Command();
|
package/bin/deploy.js
CHANGED
|
@@ -422,7 +422,7 @@ ${shellExec(`git log | grep Author: | sort -u`, { stdout: true }).split(`\n`).jo
|
|
|
422
422
|
shellExec(`sudo rm -rf ${path}/${imageName.replace(':', '_')}.tar`);
|
|
423
423
|
const args = [
|
|
424
424
|
`node bin image --build --path ${path}/backend/`,
|
|
425
|
-
`--image-name=${imageName} --image-path=${path}`,
|
|
425
|
+
`--image-name=${imageName} --image-out-path=${path}`,
|
|
426
426
|
`--podman-save --${process.argv.includes('kubeadm') ? 'kubeadm' : 'kind'} --reset`,
|
|
427
427
|
];
|
|
428
428
|
shellExec(args.join(' '));
|
|
@@ -434,7 +434,7 @@ ${shellExec(`git log | grep Author: | sort -u`, { stdout: true }).split(`\n`).jo
|
|
|
434
434
|
shellExec(`sudo rm -rf ${path}/${imageName.replace(':', '_')}.tar`);
|
|
435
435
|
const args = [
|
|
436
436
|
`node bin image --build --path ${path}/frontend/`,
|
|
437
|
-
`--image-name=${imageName} --image-path=${path}`,
|
|
437
|
+
`--image-name=${imageName} --image-out-path=${path}`,
|
|
438
438
|
`--podman-save --${process.argv.includes('kubeadm') ? 'kubeadm' : 'kind'} --reset`,
|
|
439
439
|
];
|
|
440
440
|
shellExec(args.join(' '));
|
package/bump.config.js
CHANGED
package/docker-compose.yml
CHANGED
|
@@ -26,7 +26,7 @@ services:
|
|
|
26
26
|
mongodb:
|
|
27
27
|
image: ${MONGO_IMAGE:-mongo:latest}
|
|
28
28
|
container_name: dd-mongodb
|
|
29
|
-
entrypoint: [
|
|
29
|
+
entrypoint: ['bash', '/docker-init/entrypoint.sh']
|
|
30
30
|
environment:
|
|
31
31
|
MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME:?set MONGO_INITDB_ROOT_USERNAME in docker/compose.env}
|
|
32
32
|
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD:?set MONGO_INITDB_ROOT_PASSWORD in docker/compose.env}
|
|
@@ -38,9 +38,9 @@ services:
|
|
|
38
38
|
networks:
|
|
39
39
|
- dd-internal
|
|
40
40
|
expose:
|
|
41
|
-
-
|
|
41
|
+
- '27017'
|
|
42
42
|
ports:
|
|
43
|
-
-
|
|
43
|
+
- '${MONGO_HOST_PORT:-27017}:27017'
|
|
44
44
|
healthcheck:
|
|
45
45
|
test:
|
|
46
46
|
- CMD-SHELL
|
|
@@ -58,18 +58,18 @@ services:
|
|
|
58
58
|
valkey-service:
|
|
59
59
|
image: ${VALKEY_IMAGE:-valkey/valkey:latest}
|
|
60
60
|
container_name: dd-valkey
|
|
61
|
-
command: [
|
|
61
|
+
command: ['valkey-server', '--port', '6379', '--bind', '0.0.0.0', '--protected-mode', 'no']
|
|
62
62
|
volumes:
|
|
63
63
|
- valkey-data:/data
|
|
64
64
|
networks:
|
|
65
65
|
- dd-internal
|
|
66
66
|
expose:
|
|
67
|
-
-
|
|
67
|
+
- '6379'
|
|
68
68
|
# NodePort equivalent (manifests/valkey/valkey-nodeport.yaml nodePort 32079).
|
|
69
69
|
ports:
|
|
70
|
-
-
|
|
70
|
+
- '${VALKEY_NODEPORT:-32079}:6379'
|
|
71
71
|
healthcheck:
|
|
72
|
-
test: [
|
|
72
|
+
test: ['CMD', 'valkey-cli', '-p', '6379', 'ping']
|
|
73
73
|
interval: 10s
|
|
74
74
|
timeout: 5s
|
|
75
75
|
retries: 10
|
|
@@ -81,7 +81,7 @@ services:
|
|
|
81
81
|
# (dd-default-development-blue). Connection targets use Docker service
|
|
82
82
|
# discovery instead of hardcoded localhost.
|
|
83
83
|
app:
|
|
84
|
-
image: ${APP_IMAGE:-underpost/underpost-engine}:${APP_TAG:-v3.2.
|
|
84
|
+
image: ${APP_IMAGE:-underpost/underpost-engine}:${APP_TAG:-v3.2.80}
|
|
85
85
|
container_name: dd-app
|
|
86
86
|
# The start command is supplied by the generated override docker/compose.app.yml
|
|
87
87
|
# (see `underpost docker-compose --generate --deploy-id <id>`), keeping this
|
|
@@ -100,18 +100,18 @@ services:
|
|
|
100
100
|
networks:
|
|
101
101
|
- dd-internal
|
|
102
102
|
expose:
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
103
|
+
- '4001'
|
|
104
|
+
- '4002'
|
|
105
|
+
- '4003'
|
|
106
|
+
- '4004'
|
|
107
107
|
# Direct access to the LoadBalancer-equivalent ports (manifest 4001-4004).
|
|
108
108
|
ports:
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
109
|
+
- '${APP_PORT_4001:-4001}:4001'
|
|
110
|
+
- '${APP_PORT_4002:-4002}:4002'
|
|
111
|
+
- '${APP_PORT_4003:-4003}:4003'
|
|
112
|
+
- '${APP_PORT_4004:-4004}:4004'
|
|
113
113
|
healthcheck:
|
|
114
|
-
test: [
|
|
114
|
+
test: ['CMD-SHELL', "timeout 2 bash -c '</dev/tcp/127.0.0.1/4001' || exit 1"]
|
|
115
115
|
interval: 15s
|
|
116
116
|
timeout: 5s
|
|
117
117
|
retries: 5
|
|
@@ -134,9 +134,9 @@ services:
|
|
|
134
134
|
networks:
|
|
135
135
|
- dd-internal
|
|
136
136
|
ports:
|
|
137
|
-
-
|
|
137
|
+
- '${PROXY_HTTP_PORT:-80}:80'
|
|
138
138
|
healthcheck:
|
|
139
|
-
test: [
|
|
139
|
+
test: ['CMD', 'wget', '-q', '-O', '-', 'http://127.0.0.1/healthz']
|
|
140
140
|
interval: 15s
|
|
141
141
|
timeout: 5s
|
|
142
142
|
retries: 5
|
|
@@ -162,11 +162,11 @@ services:
|
|
|
162
162
|
networks:
|
|
163
163
|
- dd-internal
|
|
164
164
|
expose:
|
|
165
|
-
-
|
|
165
|
+
- '9090'
|
|
166
166
|
ports:
|
|
167
|
-
-
|
|
167
|
+
- '${PROMETHEUS_PORT:-9090}:9090'
|
|
168
168
|
healthcheck:
|
|
169
|
-
test: [
|
|
169
|
+
test: ['CMD', 'wget', '-q', '-O', '-', 'http://127.0.0.1:9090/-/healthy']
|
|
170
170
|
interval: 15s
|
|
171
171
|
timeout: 5s
|
|
172
172
|
retries: 5
|
|
@@ -185,18 +185,18 @@ services:
|
|
|
185
185
|
environment:
|
|
186
186
|
GF_SECURITY_ADMIN_USER: ${GRAFANA_ADMIN_USER:-admin}
|
|
187
187
|
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD:-admin}
|
|
188
|
-
GF_USERS_ALLOW_SIGN_UP:
|
|
188
|
+
GF_USERS_ALLOW_SIGN_UP: 'false'
|
|
189
189
|
volumes:
|
|
190
190
|
- ./docker/grafana/provisioning:/etc/grafana/provisioning:ro
|
|
191
191
|
- grafana-data:/var/lib/grafana
|
|
192
192
|
networks:
|
|
193
193
|
- dd-internal
|
|
194
194
|
expose:
|
|
195
|
-
-
|
|
195
|
+
- '3000'
|
|
196
196
|
ports:
|
|
197
|
-
-
|
|
197
|
+
- '${GRAFANA_PORT:-3000}:3000'
|
|
198
198
|
healthcheck:
|
|
199
|
-
test: [
|
|
199
|
+
test: ['CMD', 'wget', '-q', '-O', '-', 'http://127.0.0.1:3000/api/health']
|
|
200
200
|
interval: 15s
|
|
201
201
|
timeout: 5s
|
|
202
202
|
retries: 5
|
|
@@ -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.80
|
|
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.80
|
|
102
102
|
# resources:
|
|
103
103
|
# requests:
|
|
104
104
|
# memory: "124Ki"
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"type": "module",
|
|
3
3
|
"main": "src/index.js",
|
|
4
4
|
"name": "underpost",
|
|
5
|
-
"version": "3.2.
|
|
5
|
+
"version": "3.2.80",
|
|
6
6
|
"description": "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.",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"start": "node --max-old-space-size=8192 src/server",
|
|
@@ -71,14 +71,14 @@
|
|
|
71
71
|
},
|
|
72
72
|
"homepage": "https://github.com/underpostnet/pwa-microservices-template#readme",
|
|
73
73
|
"dependencies": {
|
|
74
|
-
"@fortawesome/fontawesome-free": "^7.
|
|
75
|
-
"@fullcalendar/rrule": "^
|
|
74
|
+
"@fortawesome/fontawesome-free": "^7.3.1",
|
|
75
|
+
"@fullcalendar/rrule": "^7.0.1",
|
|
76
76
|
"@grpc/grpc-js": "^1.14.4",
|
|
77
77
|
"@grpc/proto-loader": "^0.8.1",
|
|
78
78
|
"@neodrag/vanilla": "^2.3.1",
|
|
79
|
-
"adm-zip": "^0.
|
|
80
|
-
"ag-grid-community": "^
|
|
81
|
-
"axios": "^1.18.
|
|
79
|
+
"adm-zip": "^0.6.0",
|
|
80
|
+
"ag-grid-community": "^36.0.1",
|
|
81
|
+
"axios": "^1.18.1",
|
|
82
82
|
"bumpp": "^11.1.0",
|
|
83
83
|
"chai": "^6.2.2",
|
|
84
84
|
"clipboardy": "^5.3.1",
|
|
@@ -96,25 +96,25 @@
|
|
|
96
96
|
"escape-string-regexp": "^5.0.0",
|
|
97
97
|
"express": "^5.2.1",
|
|
98
98
|
"express-fileupload": "^1.4.3",
|
|
99
|
-
"express-rate-limit": "^8.
|
|
99
|
+
"express-rate-limit": "^8.6.0",
|
|
100
100
|
"express-slow-down": "^3.1.0",
|
|
101
101
|
"fast-json-stable-stringify": "^2.1.0",
|
|
102
102
|
"favicons": "^7.3.0",
|
|
103
|
-
"fs-extra": "^11.3.
|
|
104
|
-
"fullcalendar": "^
|
|
105
|
-
"helmet": "^8.
|
|
103
|
+
"fs-extra": "^11.3.6",
|
|
104
|
+
"fullcalendar": "^7.0.1",
|
|
105
|
+
"helmet": "^8.3.0",
|
|
106
106
|
"html-minifier-terser": "^7.2.0",
|
|
107
|
-
"http-proxy-middleware": "^4.
|
|
107
|
+
"http-proxy-middleware": "^4.2.0",
|
|
108
108
|
"ignore-walk": "^9.0.0",
|
|
109
109
|
"iovalkey": "^0.3.3",
|
|
110
110
|
"json-colorizer": "^3.0.1",
|
|
111
111
|
"jsonwebtoken": "^9.0.3",
|
|
112
112
|
"mariadb": "^3.5.3",
|
|
113
|
-
"marked": "^18.0.
|
|
113
|
+
"marked": "^18.0.6",
|
|
114
114
|
"mocha": "^11.7.6",
|
|
115
|
-
"mongoose": "^9.7.
|
|
115
|
+
"mongoose": "^9.7.4",
|
|
116
116
|
"morgan": "^1.11.0",
|
|
117
|
-
"nodemailer": "^9.0.
|
|
117
|
+
"nodemailer": "^9.0.3",
|
|
118
118
|
"nodemon": "^3.0.1",
|
|
119
119
|
"peer": "^1.0.2",
|
|
120
120
|
"peerjs": "^1.5.5",
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
"split-file": "^2.3.0",
|
|
129
129
|
"swagger-autogen": "^2.23.7",
|
|
130
130
|
"swagger-ui-express": "^5.0.0",
|
|
131
|
-
"typedoc": "^0.28.
|
|
131
|
+
"typedoc": "^0.28.20",
|
|
132
132
|
"typescript": "^6.0.3",
|
|
133
133
|
"validator": "^13.15.35",
|
|
134
134
|
"vanilla-jsoneditor": "^3.12.0",
|