@underpostnet/underpost 2.99.0 → 2.99.4

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/.env.development CHANGED
@@ -41,5 +41,6 @@ NFS_EXPORT_PATH=changethis
41
41
  NVIDIA_API_KEY=changethis
42
42
  DEFAULT_ADMIN_EMAIL=admin@default.net
43
43
  DEFAULT_ADMIN_PASSWORD=changethis
44
+ DEFAULT_SSH_PORT=22
44
45
  BASE_API=api
45
46
  DEV_PROXY_PORT_OFFSET=200
package/.env.production CHANGED
@@ -50,6 +50,7 @@ NPM_USER=changethis
50
50
  NPM_PASSWORD=changethis
51
51
  POSTMAN_EMAIL=admin@default.net
52
52
  POSTMAN_PASSWORD=changethis
53
+ DEFAULT_SSH_PORT=22
53
54
  BASE_API=api
54
55
  CERTBOT_LIVE_PATH=changethis
55
56
  CERTBOT_LIVE_PATH_WINDOWS=changethis
package/.env.test CHANGED
@@ -41,5 +41,6 @@ NFS_EXPORT_PATH=changethis
41
41
  NVIDIA_API_KEY=changethis
42
42
  DEFAULT_ADMIN_EMAIL=admin@default.net
43
43
  DEFAULT_ADMIN_PASSWORD=changethis
44
+ DEFAULT_SSH_PORT=22
44
45
  BASE_API=api
45
46
  DEV_PROXY_PORT_OFFSET=200
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 DOGMADUAL.com
3
+ Copyright (c) 2025 DOGMADUAL.com
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  <!-- badges -->
20
20
 
21
- [![Node.js CI](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/docker-image.yml) [![Test](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml) [![Downloads](https://img.shields.io/npm/dm/underpost.svg)](https://www.npmjs.com/package/underpost) [![Socket Badge](https://socket.dev/api/badge/npm/package/underpost/2.99.0)](https://socket.dev/npm/package/underpost/overview/2.99.0) [![Coverage Status](https://coveralls.io/repos/github/underpostnet/engine/badge.svg?branch=master)](https://coveralls.io/github/underpostnet/engine?branch=master) [![Version](https://img.shields.io/npm/v/underpost.svg)](https://www.npmjs.org/package/underpost) [![License](https://img.shields.io/npm/l/underpost.svg)](https://www.npmjs.com/package/underpost)
21
+ [![Node.js CI](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/docker-image.yml) [![Test](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml) [![Downloads](https://img.shields.io/npm/dm/underpost.svg)](https://www.npmjs.com/package/underpost) [![Socket Badge](https://socket.dev/api/badge/npm/package/underpost/2.99.4)](https://socket.dev/npm/package/underpost/overview/2.99.4) [![Coverage Status](https://coveralls.io/repos/github/underpostnet/engine/badge.svg?branch=master)](https://coveralls.io/github/underpostnet/engine?branch=master) [![Version](https://img.shields.io/npm/v/underpost.svg)](https://www.npmjs.org/package/underpost) [![License](https://img.shields.io/npm/l/underpost.svg)](https://www.npmjs.com/package/underpost)
22
22
 
23
23
  <!-- end-badges -->
24
24
 
@@ -66,42 +66,42 @@ Run dev client server
66
66
  npm run dev
67
67
  ```
68
68
  <!-- -->
69
- ## underpost ci/cd cli v2.99.0
69
+ ## underpost ci/cd cli v2.99.4
70
70
 
71
71
  ### Usage: `underpost [options] [command]`
72
72
  ```
73
73
  Options:
74
- -V, --version output the version number
75
- -h, --help display help for command
74
+ -V, --version output the version number
75
+ -h, --help display help for command
76
76
 
77
77
  Commands:
78
- new [options] [app-name] Initializes a new Underpost project, service, or configuration.
79
- start [options] <deploy-id> [env] Initiates application servers, build pipelines, or other defined services based on the deployment ID.
80
- clone [options] <uri> Clones a specified GitHub repository into the current directory.
81
- pull [options] <path> <uri> Pulls the latest changes from a specified GitHub repository.
82
- cmt [options] [path] [commit-type] [module-tag] [message] Manages commits to a GitHub repository, supporting various commit types and options.
83
- push [options] <path> <uri> Pushes committed changes from a local repository to a remote GitHub repository.
84
- env [deploy-id] [env] [subConf] Sets environment variables and configurations related to a specific deployment ID.
85
- static [options] Manages static build of page, bundles, and documentation with comprehensive customization options.
86
- config [options] <operator> [key] [value] Manages Underpost configurations using various operators.
87
- root Displays the root path of the npm installation.
88
- ip [options] [ips] Displays the current public machine IP addresses.
89
- cluster [options] [pod-name] Manages Kubernetes clusters, defaulting to Kind cluster initialization.
90
- deploy [options] [deploy-list] [env] Manages application deployments, defaulting to deploying development pods.
91
- secret [options] <platform> Manages secrets for various platforms.
92
- image [options] Manages Docker images, including building, saving, and loading into Kubernetes clusters.
93
- install Quickly imports Underpost npm dependencies by copying them.
94
- db [options] [deploy-list] Manages database operations with support for MariaDB and MongoDB, including import/export, multi-pod targeting, and Git integration.
95
- metadata [options] [deploy-id] [host] [path] Manages cluster metadata operations, including import and export.
96
- cron [options] [deploy-list] [job-list] Manages cron jobs, including initialization, execution, and configuration updates.
97
- fs [options] [path] Manages file storage, defaulting to file upload operations.
98
- test [options] [deploy-list] Manages and runs tests, defaulting to the current Underpost default test suite.
99
- monitor [options] <deploy-id> [env] Manages health server monitoring for specified deployments.
78
+ new [options] [app-name] Initializes a new Underpost project, service, or configuration.
79
+ start [options] <deploy-id> [env] Initiates application servers, build pipelines, or other defined services based on the deployment ID.
80
+ clone [options] <uri> Clones a specified GitHub repository into the current directory.
81
+ pull [options] <path> <uri> Pulls the latest changes from a specified GitHub repository.
82
+ cmt [options] [path] [commit-type] [module-tag] [message] Manages commits to a GitHub repository, supporting various commit types and options.
83
+ push [options] <path> <uri> Pushes committed changes from a local repository to a remote GitHub repository.
84
+ env [deploy-id] [env] [subConf] Sets environment variables and configurations related to a specific deployment ID.
85
+ static [options] Manages static build of page, bundles, and documentation with comprehensive customization options.
86
+ config [options] <operator> [key] [value] Manages Underpost configurations using various operators.
87
+ root Displays the root path of the npm installation.
88
+ ip [options] [ips] Displays the current public machine IP addresses.
89
+ cluster [options] [pod-name] Manages Kubernetes clusters, defaulting to Kind cluster initialization.
90
+ deploy [options] [deploy-list] [env] Manages application deployments, defaulting to deploying development pods.
91
+ secret [options] <platform> Manages secrets for various platforms.
92
+ image [options] Manages Docker images, including building, saving, and loading into Kubernetes clusters.
93
+ install Quickly imports Underpost npm dependencies by copying them.
94
+ db [options] [deploy-list] Manages database operations with support for MariaDB and MongoDB, including import/export, multi-pod targeting, and Git integration.
95
+ metadata [options] [deploy-id] [host] [path] Manages cluster metadata operations, including import and export.
96
+ cron [options] [deploy-list] [job-list] Manages cron jobs, including initialization, execution, and configuration updates.
97
+ fs [options] [path] Manages file storage, defaulting to file upload operations.
98
+ test [options] [deploy-list] Manages and runs tests, defaulting to the current Underpost default test suite.
99
+ monitor [options] <deploy-id> [env] Manages health server monitoring for specified deployments.
100
100
  ssh [options]
101
- run [options] <runner-id> [path] Runs specified scripts using various runners.
102
- lxd [options] Manages LXD containers and virtual machines.
103
- baremetal [options] [workflow-id] [ip-address] [hostname] [ip-file-server] [ip-config] [netmask] [dns-server] Manages baremetal server operations, including installation, database setup, commissioning, and user management.
104
- help [command] display help for command
101
+ run [options] <runner-id> [path] Runs specified scripts using various runners.
102
+ lxd [options] Manages LXD containers and virtual machines.
103
+ baremetal [options] [workflow-id] Manages baremetal server operations, including installation, database setup, commissioning, and user management.
104
+ help [command] display help for command
105
105
 
106
106
  ```
107
107
 
package/bin/deploy.js CHANGED
@@ -241,7 +241,7 @@ try {
241
241
  for (const relativePath of files) {
242
242
  const filePah = `./engine-private/conf/${relativePath.replaceAll(`\\`, '/')}`;
243
243
  if (filePah.split('/').pop() === 'package.json') {
244
- const deployPackage = JSON.parse(fs.readFileSync(filePah), 'utf8');
244
+ const deployPackage = JSON.parse(fs.readFileSync(filePah, 'utf8'));
245
245
  deployPackage.dependencies = originPackage.dependencies;
246
246
  deployPackage.devDependencies = originPackage.devDependencies;
247
247
  fs.writeFileSync(filePah, JSON.stringify(deployPackage, null, 4), 'utf8');
@@ -841,7 +841,7 @@ ${shellExec(`git log | grep Author: | sort -u`, { stdout: true }).split(`\n`).jo
841
841
  const args = [
842
842
  `node bin image --build --path ${path}/backend/`,
843
843
  `--image-name=${imageName} --image-path=${path}`,
844
- `--podman-save --${process.argv.includes('kubeadm') ? 'kubeadm' : 'kind'}-load --reset`,
844
+ `--podman-save --${process.argv.includes('kubeadm') ? 'kubeadm' : 'kind'} --reset`,
845
845
  ];
846
846
  shellExec(args.join(' '));
847
847
  }
@@ -853,7 +853,7 @@ ${shellExec(`git log | grep Author: | sort -u`, { stdout: true }).split(`\n`).jo
853
853
  const args = [
854
854
  `node bin image --build --path ${path}/frontend/`,
855
855
  `--image-name=${imageName} --image-path=${path}`,
856
- `--podman-save --${process.argv.includes('kubeadm') ? 'kubeadm' : 'kind'}-load --reset`,
856
+ `--podman-save --${process.argv.includes('kubeadm') ? 'kubeadm' : 'kind'} --reset`,
857
857
  ];
858
858
  shellExec(args.join(' '));
859
859
  }
@@ -1143,6 +1143,52 @@ nvidia/gpu-operator \
1143
1143
  }
1144
1144
  break;
1145
1145
  }
1146
+
1147
+ case 'pw': {
1148
+ const help = `node bin/deploy pw <script-path> <from-path-in-pod> [to-path-on-local]`;
1149
+ const scriptPath = process.argv[3];
1150
+ const fromPath = process.argv[4];
1151
+ const toPath = process.argv[5] ? process.argv[5] : fromPath ? `./${fromPath.split('/').pop()}` : '';
1152
+ if (scriptPath === 'help') {
1153
+ logger.info(help);
1154
+ break;
1155
+ }
1156
+ if (fs.existsSync(toPath)) fs.removeSync(toPath);
1157
+ shellExec(`node bin/deploy pw-conf ${scriptPath}`);
1158
+ shellExec(`kubectl delete deployment playwright-server --ignore-not-found`);
1159
+ while (Underpost.deploy.get('playwright-server').length > 0) {
1160
+ logger.info(`Waiting for playwright-server deployment to be deleted...`);
1161
+ await timer(1000);
1162
+ }
1163
+ shellExec(`kubectl apply -f manifests/deployment/playwright/deployment.yaml`);
1164
+ const id = 'playwright-server';
1165
+ await Underpost.test.statusMonitor(id);
1166
+ const nameSpace = 'default';
1167
+ const [pod] = Underpost.deploy.get(id);
1168
+ const podName = pod.NAME;
1169
+ shellExec(`kubectl logs -f ${podName} -n ${nameSpace}`, {
1170
+ async: true,
1171
+ });
1172
+ (async () => {
1173
+ while (!Underpost.deploy.existsContainerFile({ podName, path: fromPath })) {
1174
+ await timer(1000);
1175
+ logger.info(`Waiting for file ${fromPath} in pod ${podName}...`);
1176
+ }
1177
+ shellExec(`sudo kubectl cp ${nameSpace}/${podName}:${fromPath} ${toPath}`);
1178
+ if (toPath.match('.png') && fs.existsSync(toPath)) shellExec(`firefox ${toPath}`);
1179
+ })();
1180
+ break;
1181
+ }
1182
+
1183
+ case 'pw-conf': {
1184
+ const scriptPath = process.argv[3];
1185
+ shellExec(`kubectl delete configmap playwright-script`);
1186
+ shellExec(`kubectl create configmap playwright-script \
1187
+ --from-file=script.js=${scriptPath} \
1188
+ --dry-run=client -o yaml | kubectl apply -f -
1189
+ `);
1190
+ break;
1191
+ }
1146
1192
  }
1147
1193
  } catch (error) {
1148
1194
  logger.error(error, error.stack);
package/cli.md CHANGED
@@ -1,39 +1,39 @@
1
- ## underpost ci/cd cli v2.99.0
1
+ ## underpost ci/cd cli v2.99.4
2
2
 
3
3
  ### Usage: `underpost [options] [command]`
4
4
  ```
5
5
  Options:
6
- -V, --version output the version number
7
- -h, --help display help for command
6
+ -V, --version output the version number
7
+ -h, --help display help for command
8
8
 
9
9
  Commands:
10
- new [options] [app-name] Initializes a new Underpost project, service, or configuration.
11
- start [options] <deploy-id> [env] Initiates application servers, build pipelines, or other defined services based on the deployment ID.
12
- clone [options] <uri> Clones a specified GitHub repository into the current directory.
13
- pull [options] <path> <uri> Pulls the latest changes from a specified GitHub repository.
14
- cmt [options] [path] [commit-type] [module-tag] [message] Manages commits to a GitHub repository, supporting various commit types and options.
15
- push [options] <path> <uri> Pushes committed changes from a local repository to a remote GitHub repository.
16
- env [deploy-id] [env] [subConf] Sets environment variables and configurations related to a specific deployment ID.
17
- static [options] Manages static build of page, bundles, and documentation with comprehensive customization options.
18
- config [options] <operator> [key] [value] Manages Underpost configurations using various operators.
19
- root Displays the root path of the npm installation.
20
- ip [options] [ips] Displays the current public machine IP addresses.
21
- cluster [options] [pod-name] Manages Kubernetes clusters, defaulting to Kind cluster initialization.
22
- deploy [options] [deploy-list] [env] Manages application deployments, defaulting to deploying development pods.
23
- secret [options] <platform> Manages secrets for various platforms.
24
- image [options] Manages Docker images, including building, saving, and loading into Kubernetes clusters.
25
- install Quickly imports Underpost npm dependencies by copying them.
26
- db [options] [deploy-list] Manages database operations with support for MariaDB and MongoDB, including import/export, multi-pod targeting, and Git integration.
27
- metadata [options] [deploy-id] [host] [path] Manages cluster metadata operations, including import and export.
28
- cron [options] [deploy-list] [job-list] Manages cron jobs, including initialization, execution, and configuration updates.
29
- fs [options] [path] Manages file storage, defaulting to file upload operations.
30
- test [options] [deploy-list] Manages and runs tests, defaulting to the current Underpost default test suite.
31
- monitor [options] <deploy-id> [env] Manages health server monitoring for specified deployments.
10
+ new [options] [app-name] Initializes a new Underpost project, service, or configuration.
11
+ start [options] <deploy-id> [env] Initiates application servers, build pipelines, or other defined services based on the deployment ID.
12
+ clone [options] <uri> Clones a specified GitHub repository into the current directory.
13
+ pull [options] <path> <uri> Pulls the latest changes from a specified GitHub repository.
14
+ cmt [options] [path] [commit-type] [module-tag] [message] Manages commits to a GitHub repository, supporting various commit types and options.
15
+ push [options] <path> <uri> Pushes committed changes from a local repository to a remote GitHub repository.
16
+ env [deploy-id] [env] [subConf] Sets environment variables and configurations related to a specific deployment ID.
17
+ static [options] Manages static build of page, bundles, and documentation with comprehensive customization options.
18
+ config [options] <operator> [key] [value] Manages Underpost configurations using various operators.
19
+ root Displays the root path of the npm installation.
20
+ ip [options] [ips] Displays the current public machine IP addresses.
21
+ cluster [options] [pod-name] Manages Kubernetes clusters, defaulting to Kind cluster initialization.
22
+ deploy [options] [deploy-list] [env] Manages application deployments, defaulting to deploying development pods.
23
+ secret [options] <platform> Manages secrets for various platforms.
24
+ image [options] Manages Docker images, including building, saving, and loading into Kubernetes clusters.
25
+ install Quickly imports Underpost npm dependencies by copying them.
26
+ db [options] [deploy-list] Manages database operations with support for MariaDB and MongoDB, including import/export, multi-pod targeting, and Git integration.
27
+ metadata [options] [deploy-id] [host] [path] Manages cluster metadata operations, including import and export.
28
+ cron [options] [deploy-list] [job-list] Manages cron jobs, including initialization, execution, and configuration updates.
29
+ fs [options] [path] Manages file storage, defaulting to file upload operations.
30
+ test [options] [deploy-list] Manages and runs tests, defaulting to the current Underpost default test suite.
31
+ monitor [options] <deploy-id> [env] Manages health server monitoring for specified deployments.
32
32
  ssh [options]
33
- run [options] <runner-id> [path] Runs specified scripts using various runners.
34
- lxd [options] Manages LXD containers and virtual machines.
35
- baremetal [options] [workflow-id] [ip-address] [hostname] [ip-file-server] [ip-config] [netmask] [dns-server] Manages baremetal server operations, including installation, database setup, commissioning, and user management.
36
- help [command] display help for command
33
+ run [options] <runner-id> [path] Runs specified scripts using various runners.
34
+ lxd [options] Manages LXD containers and virtual machines.
35
+ baremetal [options] [workflow-id] Manages baremetal server operations, including installation, database setup, commissioning, and user management.
36
+ help [command] display help for command
37
37
 
38
38
  ```
39
39
 
@@ -742,6 +742,10 @@ Options:
742
742
  (e.g., "150ms").
743
743
  --disable-private-conf-update Disables updates to private configuration
744
744
  during execution.
745
+ --versions <deployment-versions> Specifies the deployment versions to
746
+ monitor. eg. "blue,green", "green"
747
+ --ready-deployment Run in ready deployment monitor mode.
748
+ --promote Promotes the deployment after monitoring.
745
749
  -h, --help display help for command
746
750
 
747
751
  ```
@@ -796,7 +800,7 @@ Options:
796
800
  Runs specified scripts using various runners.
797
801
 
798
802
  Arguments:
799
- runner-id The runner ID to run. Options: dev-cluster,metadata,svc-ls,svc-rm,ssh-cluster-info,dev-hosts-expose,dev-hosts-restore,cluster-build,template-deploy,template-deploy-image,clean,pull,release-deploy,ssh-deploy,ide,crypto-policy,sync,stop,ssh-deploy-stop,tz,cron,get-proxy,instance-promote,instance,ls-deployments,host-update,dd-container,ip-info,monitor,db-client,git-conf,promote,metrics,cluster,deploy,disk-clean,disk-usage,dev,service,etc-hosts,sh,log,ps,ptls,release-cmt,deploy-test,sync-replica,tf-vae-test,spark-template,rmi,kill,secret,underpost-config,gpu-env,tf-gpu-test,deploy-job.
803
+ runner-id The runner ID to run. Options: dev-cluster,metadata,svc-ls,svc-rm,ssh-deploy-info,dev-hosts-expose,dev-hosts-restore,cluster-build,template-deploy,template-deploy-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,cron,get-proxy,instance-promote,instance,ls-deployments,host-update,dd-container,ip-info,db-client,git-conf,promote,metrics,cluster,deploy,disk-clean,disk-usage,dev,service,etc-hosts,sh,log,ps,ptls,release-cmt,deploy-test,sync-replica,tf-vae-test,spark-template,rmi,kill,secret,underpost-config,gpu-env,tf-gpu-test,deploy-job.
800
804
  path The input value, identifier, or path for the operation.
801
805
 
802
806
  Options:
@@ -854,6 +858,11 @@ Options:
854
858
  --retry-count <count> Sets HTTPProxy per-route retry count (e.g., 3).
855
859
  --retry-per-try-timeout <duration> Sets HTTPProxy retry per-try timeout (e.g., "150ms").
856
860
  --disable-private-conf-update Disables updates to private configuration during execution.
861
+ --logs Streams logs during the runner execution.
862
+ --monitor-status <status> Sets the status to monitor for pod/resource (default: "Running").
863
+ --monitor-status-kind-type <kind-type> Sets the Kubernetes resource kind type to monitor (default: "pods").
864
+ --monitor-status-delta-ms <milliseconds> Sets the polling interval in milliseconds for status monitoring (default: 1000).
865
+ --monitor-status-max-attempts <attempts> Sets the maximum number of status check attempts (default: 600).
857
866
  -h, --help display help for command
858
867
 
859
868
  ```
@@ -911,12 +920,18 @@ Options:
911
920
 
912
921
  ### `baremetal` :
913
922
  ```
914
- Usage: underpost baremetal [options] [workflow-id] [ip-address] [hostname] [ip-file-server] [ip-config] [netmask] [dns-server]
923
+ Usage: underpost baremetal [options] [workflow-id]
915
924
 
916
925
  Manages baremetal server operations, including installation, database setup,
917
926
  commissioning, and user management.
918
927
 
919
928
  Options:
929
+ --ip-address <ip-address> The IP address of the control server or the local machine.
930
+ --hostname <hostname> The hostname of the target baremetal machine.
931
+ --ip-file-server <ip-file-server> The IP address of the file server (NFS/TFTP).
932
+ --ip-config <ip-config> IP configuration string for the baremetal machine.
933
+ --netmask <netmask> Netmask of network.
934
+ --dns-server <dns-server> DNS server IP address.
920
935
  --control-server-install Installs the baremetal control server.
921
936
  --control-server-uninstall Uninstalls the baremetal control server.
922
937
  --control-server-restart Restarts the baremetal control server.
package/jsconfig.json CHANGED
@@ -1,7 +1,9 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "module": "CommonJS",
4
- "target": "ES6"
4
+ "target": "ES6",
5
+ "moduleResolution": "Node",
6
+ "checkJs": false
5
7
  },
6
- "exclude": ["node_modules", "public", "engine-private"]
8
+ "exclude": ["node_modules", "public", "engine-private", "volume"]
7
9
  }
@@ -17,7 +17,7 @@ spec:
17
17
  spec:
18
18
  containers:
19
19
  - name: dd-default-development-blue
20
- image: localhost/rockylinux9-underpost:v2.99.0
20
+ image: localhost/rockylinux9-underpost:v2.99.4
21
21
  # resources:
22
22
  # requests:
23
23
  # memory: "124Ki"
@@ -100,7 +100,7 @@ spec:
100
100
  spec:
101
101
  containers:
102
102
  - name: dd-default-development-green
103
- image: localhost/rockylinux9-underpost:v2.99.0
103
+ image: localhost/rockylinux9-underpost:v2.99.4
104
104
  # resources:
105
105
  # requests:
106
106
  # memory: "124Ki"
@@ -18,7 +18,7 @@ spec:
18
18
  spec:
19
19
  containers:
20
20
  - name: dd-test-development-blue
21
- image: localhost/rockylinux9-underpost:v2.99.0
21
+ image: localhost/rockylinux9-underpost:v2.99.4
22
22
 
23
23
  command:
24
24
  - /bin/sh
@@ -103,7 +103,7 @@ spec:
103
103
  spec:
104
104
  containers:
105
105
  - name: dd-test-development-green
106
- image: localhost/rockylinux9-underpost:v2.99.0
106
+ image: localhost/rockylinux9-underpost:v2.99.4
107
107
 
108
108
  command:
109
109
  - /bin/sh
@@ -0,0 +1,52 @@
1
+ apiVersion: apps/v1
2
+ kind: Deployment
3
+ metadata:
4
+ name: playwright-server
5
+ spec:
6
+ replicas: 1
7
+ selector:
8
+ matchLabels:
9
+ app: playwright-server
10
+ template:
11
+ metadata:
12
+ labels:
13
+ app: playwright-server
14
+ spec:
15
+ containers:
16
+ - name: playwright
17
+ image: mcr.microsoft.com/playwright:v1.58.1-jammy
18
+ command:
19
+ - /bin/bash
20
+ - -c
21
+ - |
22
+ echo "[startup] Checking injected JS script..."
23
+ if [ -f /app/script.js ]; then
24
+ echo "[startup] Running /app/script.js"
25
+ cd /app
26
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
27
+ \. "$HOME/.nvm/nvm.sh"
28
+ nvm install 24
29
+ nvm use 24
30
+ npm init -y
31
+ npm pkg set type=module
32
+ npm pkg set main=script.js
33
+ npm pkg set scripts.start="node script.js"
34
+ npm install playwright
35
+ npm start
36
+ else
37
+ echo "[startup] No script found, skipping"
38
+ fi
39
+ exec npx -y playwright@latest run-server --port 3000
40
+ env:
41
+ - name: PLAYWRIGHT_HEADLESS
42
+ value: '1'
43
+ ports:
44
+ - containerPort: 3000
45
+ volumeMounts:
46
+ - name: js-script
47
+ mountPath: /app/script.js
48
+ subPath: script.js
49
+ volumes:
50
+ - name: js-script
51
+ configMap:
52
+ name: playwright-script
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "type": "module",
3
3
  "main": "src/index.js",
4
4
  "name": "@underpostnet/underpost",
5
- "version": "2.99.0",
5
+ "version": "2.99.4",
6
6
  "description": "pwa api rest template",
7
7
  "scripts": {
8
8
  "start": "env-cmd -f .env.production node --max-old-space-size=8192 src/server",
@@ -141,7 +141,7 @@ if [[ -z "$FOUND_ICON" ]]; then
141
141
  fi
142
142
 
143
143
  echo ">>> Downloading icon from $ICON_URL..."
144
- wget -q -O "$BUILD_TMP/downloaded_icon" "$ICON_URL" || true
144
+ wget -q -O "$BUILD_TMP/downloaded_icon" "$ICON_URL"
145
145
  if [[ -s "$BUILD_TMP/downloaded_icon" ]]; then
146
146
  FOUND_ICON="$BUILD_TMP/downloaded_icon"
147
147
  fi
@@ -174,7 +174,7 @@ EOF
174
174
 
175
175
  # Update cache
176
176
  if command -v update-desktop-database &> /dev/null; then
177
- update-desktop-database /usr/share/applications || true
177
+ update-desktop-database /usr/share/applications
178
178
  fi
179
179
 
180
180
  # ------------------------------------------------------------------------------
package/scripts/ssl.sh CHANGED
@@ -48,7 +48,13 @@ info "Outputs: $CERT_FILE, $KEY_FILE, $FULLCHAIN_FILE, $ROOT_PEM"
48
48
 
49
49
  # Install prerequisites
50
50
  if ! command -v dnf >/dev/null 2>&1; then err "dnf not found. This script expects RHEL/Rocky with dnf."; exit 1; fi
51
- sudo dnf install -y curl nss-tools ca-certificates
51
+
52
+ SUDO=""
53
+ if [ "$EUID" -ne 0 ]; then
54
+ SUDO="sudo"
55
+ fi
56
+
57
+ $SUDO dnf install -y curl nss-tools ca-certificates
52
58
 
53
59
  # Download and install mkcert binary (no 'go install')
54
60
  download_mkcert_binary() {
@@ -68,8 +74,8 @@ download_mkcert_binary() {
68
74
  if [[ -z "$ASSET_URL" ]]; then err "Could not find mkcert asset for your arch"; return 1; fi
69
75
  TMP_BIN="$(mktemp -u /tmp/mkcert.XXXXXX)"
70
76
  if curl -fSL -o "$TMP_BIN" "$ASSET_URL"; then
71
- sudo mv "$TMP_BIN" /usr/local/bin/mkcert
72
- sudo chmod +x /usr/local/bin/mkcert
77
+ $SUDO mv "$TMP_BIN" /usr/local/bin/mkcert
78
+ $SUDO chmod +x /usr/local/bin/mkcert
73
79
  info "mkcert installed to /usr/local/bin/mkcert"
74
80
  return 0
75
81
  fi
@@ -83,7 +89,7 @@ use_mkcert() {
83
89
  fi
84
90
  MKCERT_BIN="$(command -v mkcert || echo /usr/local/bin/mkcert)"
85
91
  info "Running mkcert -install as sudo (if necessary)"
86
- if ! sudo "$MKCERT_BIN" -install >/dev/null 2>&1; then
92
+ if ! $SUDO "$MKCERT_BIN" -install >/dev/null 2>&1; then
87
93
  if ! "$MKCERT_BIN" -install >/dev/null 2>&1; then
88
94
  err "mkcert -install failed"; return 1
89
95
  fi
@@ -135,8 +141,8 @@ use_openssl() {
135
141
  mv -f "$CSR_KEY" "$KEY_FILE"
136
142
  # create fullchain: leaf + root
137
143
  cat "$CERT_FILE" "$ROOT_PEM" > "$FULLCHAIN_FILE"
138
- sudo cp "$ROOT_PEM" /etc/pki/ca-trust/source/anchors/
139
- sudo update-ca-trust extract
144
+ $SUDO cp "$ROOT_PEM" /etc/pki/ca-trust/source/anchors/
145
+ $SUDO update-ca-trust extract
140
146
  if command -v certutil >/dev/null 2>&1; then
141
147
  mkdir -p "$HOME/.pki/nssdb"
142
148
  certutil -d sql:$HOME/.pki/nssdb -A -t "CT,C,C" -n "Local Dev Root CA" -i "$ROOT_PEM"
@@ -122,6 +122,7 @@ const UserDto = {
122
122
  publicProfile: 1,
123
123
  briefDescription: 1,
124
124
  createdAt: 1,
125
+ updatedAt: 1,
125
126
  };
126
127
  },
127
128
  },
@@ -47,13 +47,13 @@ class UnderpostBaremetal {
47
47
  * It handles NFS root filesystem building, control server installation/uninstallation,
48
48
  * and system-level provisioning tasks like timezone and keyboard configuration.
49
49
  * @param {string} [workflowId='rpi4mb'] - Identifier for the specific workflow configuration to use.
50
- * @param {string} [ipAddress=getLocalIPv4Address()] - The IP address of the control server or the local machine.
51
- * @param {string} [hostname=workflowId] - The hostname of the target baremetal machine.
52
- * @param {string} [ipFileServer=getLocalIPv4Address()] - The IP address of the file server (NFS/TFTP).
53
- * @param {string} [ipConfig=''] - IP configuration string for the baremetal machine.
54
- * @param {string} [netmask=''] - Netmask of network
55
- * @param {string} [dnsServer=''] - DNS server IP address.
56
50
  * @param {object} [options] - An object containing boolean flags for various operations.
51
+ * @param {string} [options.ipAddress=getLocalIPv4Address()] - The IP address of the control server or the local machine.
52
+ * @param {string} [options.hostname=workflowId] - The hostname of the target baremetal machine.
53
+ * @param {string} [options.ipFileServer=getLocalIPv4Address()] - The IP address of the file server (NFS/TFTP).
54
+ * @param {string} [options.ipConfig=''] - IP configuration string for the baremetal machine.
55
+ * @param {string} [options.netmask=''] - Netmask of network
56
+ * @param {string} [options.dnsServer=''] - DNS server IP address.
57
57
  * @param {boolean} [options.dev=false] - Development mode flag.
58
58
  * @param {boolean} [options.controlServerInstall=false] - Flag to install the control server (e.g., MAAS).
59
59
  * @param {boolean} [options.controlServerUninstall=false] - Flag to uninstall the control server.
@@ -94,13 +94,13 @@ class UnderpostBaremetal {
94
94
  */
95
95
  async callback(
96
96
  workflowId,
97
- ipAddress,
98
- hostname,
99
- ipFileServer,
100
- ipConfig,
101
- netmask,
102
- dnsServer,
103
97
  options = {
98
+ ipAddress: undefined,
99
+ hostname: undefined,
100
+ ipFileServer: undefined,
101
+ ipConfig: undefined,
102
+ netmask: undefined,
103
+ dnsServer: undefined,
104
104
  dev: false,
105
105
  controlServerInstall: false,
106
106
  controlServerUninstall: false,
@@ -139,6 +139,8 @@ class UnderpostBaremetal {
139
139
  logs: '',
140
140
  },
141
141
  ) {
142
+ let { ipAddress, hostname, ipFileServer, ipConfig, netmask, dnsServer } = options;
143
+
142
144
  // Load environment variables from .env file, overriding existing ones if present.
143
145
  dotenv.config({ path: `${getUnderpostRootPath()}/.env`, override: true });
144
146
 
package/src/cli/deploy.js CHANGED
@@ -166,7 +166,7 @@ spec:
166
166
  spec:
167
167
  containers:
168
168
  - name: ${deployId}-${env}-${suffix}
169
- image: ${image ?? `localhost/rockylinux9-underpost:v${packageJson.version}`}
169
+ image: ${image ? image : `localhost/rockylinux9-underpost:v${packageJson.version}`}
170
170
  ${
171
171
  resources
172
172
  ? ` resources:
@@ -698,30 +698,12 @@ EOF`);
698
698
  * @memberof UnderpostDeploy
699
699
  */
700
700
  existsContainerFile({ podName, path }) {
701
- if (podName === 'kind-worker') {
702
- const isFile = JSON.parse(
703
- shellExec(`docker exec ${podName} sh -c 'test -f "$1" && echo true || echo false' sh ${path}`, {
704
- stdout: true,
705
- disableLog: true,
706
- silent: true,
707
- }).trim(),
708
- );
709
- const isFolder = JSON.parse(
710
- shellExec(`docker exec ${podName} sh -c 'test -d "$1" && echo true || echo false' sh ${path}`, {
711
- stdout: true,
712
- disableLog: true,
713
- silent: true,
714
- }).trim(),
715
- );
716
- return isFolder || isFile;
717
- }
718
- return JSON.parse(
719
- shellExec(`kubectl exec ${podName} -- test -f ${path} && echo "true" || echo "false"`, {
720
- stdout: true,
721
- disableLog: true,
722
- silent: true,
723
- }).trim(),
724
- );
701
+ const result = shellExec(`kubectl exec ${podName} -- test -f ${path} && echo "true" || echo "false"`, {
702
+ stdout: true,
703
+ disableLog: true,
704
+ silent: true,
705
+ }).trim();
706
+ return result === 'true';
725
707
  },
726
708
  /**
727
709
  * Checks the status of a deployment.
package/src/cli/env.js CHANGED
@@ -27,7 +27,7 @@ class UnderpostRootEnv {
27
27
  * @param {string} value - The value of the environment variable to set.
28
28
  * @param {object} options - Options for setting the environment variable.
29
29
  * @param {string} [options.deployId=''] - Deployment ID associated with the environment variable.
30
- * @param {boolean} [options.build=false] - If true, triggers a build after setting the environment variable.
30
+ * @param {boolean} [options.build=false] - If true, sets the environment variable using custom --deploy-id or all dd.router deploy ids configured.
31
31
  * @memberof UnderpostEnv
32
32
  */
33
33
  set(key, value, options = { deployId: '', build: false }) {