underpost 2.6.2 → 2.7.1

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/.nycrc CHANGED
@@ -3,7 +3,7 @@
3
3
  "include": ["test"],
4
4
  "output": "reports",
5
5
  "reporter": ["html", "text", "lcov", "text-lcov", "cobertura"],
6
- "sourceMap": false,
7
- "instrument": false,
6
+ "sourceMap": true,
7
+ "instrument": true,
8
8
  "all": true
9
9
  }
package/AUTHORS.md ADDED
@@ -0,0 +1,10 @@
1
+ # Authors
2
+
3
+ #### Ordered by first contribution.
4
+
5
+ - fcoverdugo ([fcoverdugoa@underpost.net](mailto:fcoverdugoa@underpost.net))
6
+ - underpost.net ([52893447+underpostnet@users.noreply.github.com](mailto:52893447+underpostnet@users.noreply.github.com))
7
+ - fcoverdugoa ([52893447+underpostnet@users.noreply.github.com](mailto:52893447+underpostnet@users.noreply.github.com))
8
+ - underpostnet ([fcoverdugoa@underpost.net](mailto:fcoverdugoa@underpost.net))
9
+
10
+ #### Generated by [underpost.net](https://underpost.net)
package/CHANGELOG.md ADDED
@@ -0,0 +1,91 @@
1
+ ### Changelog
2
+
3
+ All notable changes to this project will be documented in this file. Dates are displayed in UTC.
4
+
5
+ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
6
+
7
+ #### [v2.6.3](https://github.com/underpostnet/engine/compare/v2.6.2...v2.6.3)
8
+
9
+ > 14 September 2024
10
+
11
+ - update version 2.6.3 [`85c585d`](https://github.com/underpostnet/engine/commit/85c585d1cce30de4389772605cf56e774e2b7d3c)
12
+ - update refactor docs and coverage [`b455016`](https://github.com/underpostnet/engine/commit/b455016f5f2b2bdc142aacb4dfd66ab890125662)
13
+ - update [`b8f01f2`](https://github.com/underpostnet/engine/commit/b8f01f258999c9ebc1173b0616f0f7b8f7171048)
14
+
15
+ #### [v2.6.2](https://github.com/underpostnet/engine/compare/v2.5.6...v2.6.2)
16
+
17
+ > 13 September 2024
18
+
19
+ - update version 2.6.2 [`0895afb`](https://github.com/underpostnet/engine/commit/0895afbde42dd5a573507ccfcb07c328648b4eb0)
20
+ - update [`344d303`](https://github.com/underpostnet/engine/commit/344d303702ebce22dff50d8c0f8d8d870a2860ee)
21
+
22
+ #### [v2.5.6](https://github.com/underpostnet/engine/compare/v2.5.2...v2.5.6)
23
+
24
+ > 13 September 2024
25
+
26
+ - update version 2.5.6 [`ca57b87`](https://github.com/underpostnet/engine/commit/ca57b87c56a544e7b7e53baa5a6e15415e16b99b)
27
+ - update [`eec4943`](https://github.com/underpostnet/engine/commit/eec49433f50b4dfa7b7bbff48891a60f5be25545)
28
+ - update [`5f0a6ac`](https://github.com/underpostnet/engine/commit/5f0a6aca1ae971bc42f654cf3f2bf7ace7fe613d)
29
+
30
+ #### [v2.5.2](https://github.com/underpostnet/engine/compare/v2.5.1...v2.5.2)
31
+
32
+ > 12 September 2024
33
+
34
+ - update dependebot security [`1289b96`](https://github.com/underpostnet/engine/commit/1289b9627dc59bf08e66edbef1bf7bf08e53984c)
35
+ - update [`ec11af8`](https://github.com/underpostnet/engine/commit/ec11af86e884ca3eeaeaa12695edddaa8b46492d)
36
+ - remove toast-ui [`40c207f`](https://github.com/underpostnet/engine/commit/40c207f13f3e6d7ab71fc4cc203ce6ff02101bb5)
37
+
38
+ #### [v2.5.1](https://github.com/underpostnet/engine/compare/v2.5.0...v2.5.1)
39
+
40
+ > 27 August 2024
41
+
42
+ - refactor ssr [`4fa5d24`](https://github.com/underpostnet/engine/commit/4fa5d24531f791fa860a4ba38b9784491f084a68)
43
+ - bucket to document [`747cb0b`](https://github.com/underpostnet/engine/commit/747cb0bf5198e4b97df186e642413fa49ed9383f)
44
+ - add user control table managements [`2cfb710`](https://github.com/underpostnet/engine/commit/2cfb7103a591b941897ff3834ad5874565cba6b4)
45
+
46
+ #### [v2.5.0](https://github.com/underpostnet/engine/compare/v2.0.0...v2.5.0)
47
+
48
+ > 23 August 2024
49
+
50
+ - css refactor [`49b1904`](https://github.com/underpostnet/engine/commit/49b1904e83162f9066fbf843ced37d4e87db5581)
51
+ - refactor [`dad4f95`](https://github.com/underpostnet/engine/commit/dad4f9567629b737254702ce8be6b243e68fb01e)
52
+ - add sitemap builder [`53d05a6`](https://github.com/underpostnet/engine/commit/53d05a62d03ea327df3d37181a4b5c272d417289)
53
+
54
+ ### [v2.0.0](https://github.com/underpostnet/engine/compare/v1.0.4...v2.0.0)
55
+
56
+ > 30 March 2024
57
+
58
+ - seed-city assets [`6d9decb`](https://github.com/underpostnet/engine/commit/6d9decbae96b828aa001777f96dd75aab3fc71d1)
59
+ - update [`1069fc5`](https://github.com/underpostnet/engine/commit/1069fc5268aa5ef7c101695393de59edfc14daf8)
60
+ - update [`41ae7d4`](https://github.com/underpostnet/engine/commit/41ae7d4c969cce0608171c820e05ebab42610a7f)
61
+
62
+ #### [v1.0.4](https://github.com/underpostnet/engine/compare/v1.0.3...v1.0.4)
63
+
64
+ > 14 January 2023
65
+
66
+ - update [`8109700`](https://github.com/underpostnet/engine/commit/81097008baa95ac50efb760b228dc4abae63c379)
67
+ - update [`b6bb47f`](https://github.com/underpostnet/engine/commit/b6bb47f95bd56c0062066ecae5f03813cf1ed6f8)
68
+ - update [`15c0ca9`](https://github.com/underpostnet/engine/commit/15c0ca9f9a8203bec53a9677d5a8edcd04a7f1df)
69
+
70
+ #### [v1.0.3](https://github.com/underpostnet/engine/compare/v1.0.2...v1.0.3)
71
+
72
+ > 21 December 2022
73
+
74
+ - update [`69418ba`](https://github.com/underpostnet/engine/commit/69418ba34831983e07aa458d1ea4a742c7b66096)
75
+ - update [`003412f`](https://github.com/underpostnet/engine/commit/003412fadf3efe6b819f037e99855192f13ccd7e)
76
+
77
+ #### [v1.0.2](https://github.com/underpostnet/engine/compare/v1.0.1...v1.0.2)
78
+
79
+ > 21 December 2022
80
+
81
+ - update [`470f07a`](https://github.com/underpostnet/engine/commit/470f07a72398792ac9ecf07bf1ba5170bc427dc5)
82
+ - update [`dacc20a`](https://github.com/underpostnet/engine/commit/dacc20a14971388bcf2a5077286989a77197aadc)
83
+ - update [`d2efee0`](https://github.com/underpostnet/engine/commit/d2efee08f9b31dd9fca31a3b1b15bdaa0e75faea)
84
+
85
+ #### v1.0.1
86
+
87
+ > 11 October 2022
88
+
89
+ - update [`bd40237`](https://github.com/underpostnet/engine/commit/bd402372513151a15a972a7727f7d77d014739f1)
90
+ - update [`39dd3b9`](https://github.com/underpostnet/engine/commit/39dd3b9a5a6b4292b899840dd5cd333cc80410d1)
91
+ - First Commit [`ad7b2a3`](https://github.com/underpostnet/engine/commit/ad7b2a3be0746b34fa19ba896d3faa7f1b4f40dc)
package/Dockerfile CHANGED
@@ -76,11 +76,13 @@ RUN apt-get install -y mongodb-org
76
76
  RUN sed -i "s,\\(^[[:blank:]]*bindIp:\\) .*,\\1 0.0.0.0," /etc/mongod.conf
77
77
 
78
78
  # Bundle app source
79
- COPY . .
79
+ # COPY . .
80
80
 
81
- RUN npm install
81
+ # Install underpost cli
82
+ RUN npm install -g underpost
82
83
 
83
- VOLUME [ "/code/logs" ]
84
+
85
+ VOLUME [ "/code/app/logs" ]
84
86
 
85
87
  EXPOSE 22 80 443 3306 27017
86
88
  EXPOSE 3000-3020
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://underpost.net/assets/splash/apple-touch-icon-precomposed.png" alt="underpost engine core server"/>
2
+ <img src="https://underpost.net/assets/splash/apple-touch-icon-precomposed.png" alt="underpost.net"/>
3
3
  </p>
4
4
 
5
5
  <div align="center">
@@ -22,7 +22,7 @@ template
22
22
 
23
23
  <div align="center">
24
24
 
25
- [![Node.js CI](https://github.com/underpostnet/engine/actions/workflows/docker-image.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/docker-image.yml) [![Test](https://github.com/underpostnet/engine/actions/workflows/coverall.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/coverall.yml) [![Coverage Status](https://coveralls.io/repos/github/underpostnet/engine/badge.svg?branch=master)](https://coveralls.io/github/underpostnet/engine?branch=master)
25
+ [![Node.js CI](https://github.com/underpostnet/engine/actions/workflows/docker-image.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/docker-image.yml) [![Test](https://github.com/underpostnet/engine/actions/workflows/coverall.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/coverall.yml) [![Downloads](https://img.shields.io/npm/dm/underpost.svg)](https://www.npmjs.com/package/underpost) [![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)
26
26
 
27
27
  </div>
28
28
 
@@ -45,7 +45,52 @@ npm install -g underpost
45
45
  ```
46
46
 
47
47
  ```bash
48
- underpost new my-project-name
48
+ underpost new app-name
49
49
  ```
50
50
 
51
51
  After template installation, the server will be running on [http://localhost:4001](http://localhost:4001)
52
+
53
+ #### Usage
54
+
55
+ ```bash
56
+ cd app-name
57
+ ```
58
+
59
+ Build client bundle
60
+
61
+ ```bash
62
+ npm run build
63
+ ```
64
+
65
+ Run dev client server
66
+
67
+ ```bash
68
+ npm run dev
69
+ ```
70
+
71
+ Run dev api server
72
+
73
+ ```bash
74
+ npm run dev-api
75
+ ```
76
+
77
+ Run on `pm2`
78
+
79
+ ```bash
80
+ npm run pm2
81
+ ```
82
+
83
+ Run on `docker-compose`
84
+
85
+ ```bash
86
+ npm run start:docker
87
+ ```
88
+
89
+ Run on `docker`
90
+
91
+ ```bash
92
+ # build image
93
+ docker build . -t app-name
94
+ # run image
95
+ docker run --name app-name-instance -p 41061:3001 -p 41062:3002 app-name
96
+ ```
package/bin/deploy.js CHANGED
@@ -23,8 +23,9 @@ import {
23
23
  getDataDeploy,
24
24
  } from '../src/server/conf.js';
25
25
  import { buildClient } from '../src/server/client-build.js';
26
- import { range, setPad, timer } from '../src/client/components/core/CommonJs.js';
26
+ import { range, setPad, timer, uniqueArray } from '../src/client/components/core/CommonJs.js';
27
27
  import toJsonSchema from 'to-json-schema';
28
+ import simpleGit from 'simple-git';
28
29
 
29
30
  const logger = loggerFactory(import.meta);
30
31
 
@@ -337,7 +338,7 @@ try {
337
338
  if (argHost && argPath && (!argHost.includes(host) || !argPath.includes(path))) {
338
339
  delete serverConf[host][path];
339
340
  } else {
340
- serverConf[host][path].lightBuild = process.argv.includes('l') ? true : false;
341
+ serverConf[host][path].liteBuild = process.argv.includes('l') ? true : false;
341
342
  serverConf[host][path].minifyBuild = process.env.NODE_ENV === 'production' ? true : false;
342
343
  }
343
344
  }
@@ -441,24 +442,46 @@ try {
441
442
  if (!proxyInstance) for (const host of Object.keys(serverConf)) port += Object.keys(serverConf[host]).length;
442
443
  }
443
444
  break;
445
+ case 'uml':
446
+ {
447
+ shellExec(`node bin/deploy fix-uml ${process.argv.slice(3).join(' ')}`);
448
+ shellExec(`node bin/deploy build-uml ${process.argv.slice(3).join(' ')}`);
449
+ }
450
+ break;
444
451
 
452
+ case 'fix-uml': {
453
+ // required: java jdk-11.0.1
454
+
455
+ // comment:
456
+ // '--add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax="ALL-UNNAMED"'
457
+ // in plantuml.js src
458
+
459
+ // const deployId = process.argv[3];
460
+ // const clientId = process.argv[4];
461
+ // const folder = `./src/client/public/${clientId ? clientId : 'default'}/docs/plantuml`;
462
+ // const privateConfFolder = `./engine-private/conf/${deployId}`;
463
+ // const confData = !deployId
464
+ // ? Config.default
465
+ // : {
466
+ // client: JSON.parse(fs.readFileSync(`${privateConfFolder}/conf.client.json`, 'utf8')),
467
+ // ssr: JSON.parse(fs.readFileSync(`${privateConfFolder}/conf.ssr.json`, 'utf8')),
468
+ // server: JSON.parse(fs.readFileSync(`${privateConfFolder}/conf.server.json`, 'utf8')),
469
+ // cron: JSON.parse(fs.readFileSync(`${privateConfFolder}/conf.cron.json`, 'utf8')),
470
+ // };
471
+
472
+ fs.writeFileSync(
473
+ `./node_modules/plantuml/lib/plantuml.js`,
474
+ fs
475
+ .readFileSync(`./node_modules/plantuml/lib/plantuml.js`, 'utf8')
476
+ .replace(`'--add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax="ALL-UNNAMED"'`, `//`),
477
+ );
478
+ }
445
479
  case 'build-uml':
446
480
  {
447
- // comment:
448
- // '--add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax="ALL-UNNAMED"'
449
- // in plantuml.js src
450
-
451
- const deployId = process.argv[3];
452
- const clientId = process.argv[4];
453
- const folder = `./src/client/public/${clientId ? clientId : 'default'}/plantuml`;
454
- const confData = !deployId
455
- ? Config.default
456
- : {
457
- client: '',
458
- ssr: '',
459
- server: '',
460
- cron: '',
461
- };
481
+ const host = process.argv[3];
482
+ const path = process.argv[4];
483
+ const folder = `./public/${host}${path}/docs/plantuml`;
484
+ const confData = Config.default;
462
485
 
463
486
  if (!fs.existsSync(folder)) fs.mkdirSync(folder, { recursive: true });
464
487
 
@@ -469,7 +492,7 @@ try {
469
492
  ${JSON.stringify(confData[typeConf])}
470
493
  @endjson
471
494
  `);
472
- fs.writeFileSync(`${folder}/${typeConf}-conf-default.svg`, svg);
495
+ fs.writeFileSync(`${folder}/${typeConf}-conf.svg`, svg);
473
496
  }
474
497
  {
475
498
  const svg = await plantuml(`
@@ -477,7 +500,7 @@ try {
477
500
  ${JSON.stringify(toJsonSchema(confData[typeConf]))}
478
501
  @endjson
479
502
  `);
480
- fs.writeFileSync(`${folder}/${typeConf}-schema-default.svg`, svg);
503
+ fs.writeFileSync(`${folder}/${typeConf}-schema.svg`, svg);
481
504
  }
482
505
  }
483
506
  }
@@ -547,7 +570,12 @@ try {
547
570
  originPackageJson.version = newVersion;
548
571
  fs.writeFileSync(`package.json`, JSON.stringify(originPackageJson, null, 4), 'utf8');
549
572
 
550
- {
573
+ const originPackageLockJson = JSON.parse(fs.readFileSync(`package-lock.json`, 'utf8'));
574
+ originPackageLockJson.version = newVersion;
575
+ originPackageLockJson.packages[''].version = newVersion;
576
+ fs.writeFileSync(`package-lock.json`, JSON.stringify(originPackageLockJson, null, 4), 'utf8');
577
+
578
+ if (fs.existsSync(`./engine-private/conf`)) {
551
579
  const files = await fs.readdir(`./engine-private/conf`, { recursive: true });
552
580
  for (const relativePath of files) {
553
581
  const filePah = `./engine-private/conf/${relativePath.replaceAll(`\\`, '/')}`;
@@ -567,13 +595,14 @@ try {
567
595
  'utf8',
568
596
  );
569
597
 
570
- fs.writeFileSync(
571
- `./.github/workflows/docker-image.yml`,
572
- fs
573
- .readFileSync(`./.github/workflows/docker-image.yml`, 'utf8')
574
- .replaceAll(`underpost-engine:v${version}`, `underpost-engine:v${newVersion}`),
575
- 'utf8',
576
- );
598
+ if (fs.existsSync(`./.github/workflows/docker-image.yml`))
599
+ fs.writeFileSync(
600
+ `./.github/workflows/docker-image.yml`,
601
+ fs
602
+ .readFileSync(`./.github/workflows/docker-image.yml`, 'utf8')
603
+ .replaceAll(`underpost-engine:v${version}`, `underpost-engine:v${newVersion}`),
604
+ 'utf8',
605
+ );
577
606
 
578
607
  fs.writeFileSync(
579
608
  `./src/client/components/core/Docs.js`,
@@ -590,8 +619,40 @@ try {
590
619
  .replaceAll(`v${version}`, `v${newVersion}`),
591
620
  'utf8',
592
621
  );
622
+
623
+ fs.writeFileSync(
624
+ `./bin/index.js`,
625
+ fs.readFileSync(`./bin/index.js`, 'utf8').replaceAll(`${version}`, `${newVersion}`),
626
+ 'utf8',
627
+ );
593
628
  }
594
629
  break;
630
+
631
+ case 'update-authors': {
632
+ // shellExec(`git log --reverse --format='%aN (<%aE>)' | sort -u`, { stdout: true });
633
+ const logs = await simpleGit().log();
634
+
635
+ fs.writeFileSync(
636
+ './AUTHORS.md',
637
+ `# Authors
638
+
639
+ #### Ordered by first contribution.
640
+
641
+ ${uniqueArray(logs.all.map((log) => `- ${log.author_name} ([${log.author_email}](mailto:${log.author_email}))`)).join(`
642
+ `)}
643
+
644
+ #### Generated by [underpost.net](https://underpost.net)`,
645
+ 'utf8',
646
+ );
647
+
648
+ // hash: '1c7418ad2f49c7798a6d28d370b34c69d31dce46',
649
+ // date: '2024-09-16T17:10:13-03:00',
650
+ // message: 'update',
651
+ // refs: '',
652
+ // body: '',
653
+ // author_name: 'fcoverdugo',
654
+ // author_email: 'fcoverdugoa@underpost.net'
655
+ }
595
656
  default:
596
657
  break;
597
658
  }
package/bin/index.js CHANGED
@@ -1,29 +1,53 @@
1
1
  #! /usr/bin/env node
2
2
 
3
- import { loggerFactory } from '../src/server/logger.js';
4
3
  import dotenv from 'dotenv';
5
4
  import { shellCd, shellExec } from '../src/server/process.js';
6
5
  import fs from 'fs-extra';
6
+ import { Command } from 'commander';
7
7
 
8
8
  dotenv.config();
9
9
 
10
- const logger = loggerFactory(import.meta);
11
-
12
- await logger.setUpInfo();
13
-
14
- switch (process.argv[2]) {
15
- case 'new':
16
- {
17
- const projectName = process.argv[3] || 'my-project';
18
- const globalBinFolder = shellExec(`npm root -g`, { stdout: true, silent: true }).trim();
19
- const destFolder = `${process.cwd()}/${projectName}`;
20
- fs.mkdirSync(destFolder, { recursive: true });
21
- fs.copySync(`${globalBinFolder}/underpost`, destFolder);
22
- shellCd(`${destFolder}`);
23
- shellExec(`npm run install-template`);
24
- shellExec(`npm run dev`);
25
- }
26
- break;
27
- default:
28
- break;
29
- }
10
+ const globalBinFolder = `${shellExec(`npm root -g`, {
11
+ stdout: true,
12
+ silent: true,
13
+ disableLog: true,
14
+ }).trim()}/underpost`;
15
+
16
+ const program = new Command();
17
+
18
+ const version = '2.7.1';
19
+
20
+ program.name('underpost').description(`underpost.net ci/cd cli ${version}`).version(version);
21
+
22
+ program
23
+ .command('new <app-name>')
24
+ .description('Create a new project')
25
+ .action((appName) => {
26
+ const destFolder = `${process.cwd()}/${appName}`;
27
+ console.log('Note: This process may take several minutes to complete');
28
+ console.log('build app', { destFolder });
29
+ fs.mkdirSync(destFolder, { recursive: true });
30
+ fs.copySync(globalBinFolder, destFolder);
31
+ fs.writeFileSync(`${destFolder}/.gitignore`, fs.readFileSync(`${globalBinFolder}/.dockerignore`, 'utf8'), 'utf8');
32
+ shellCd(`${destFolder}`);
33
+ shellExec(`git init && git add . && git commit -m "Base template implementation"`);
34
+ shellExec(`npm run install-template`);
35
+ shellExec(`npm run dev`);
36
+ });
37
+
38
+ program
39
+ .command('test')
40
+ .description('Run tests')
41
+ .action(() => {
42
+ shellCd(`${globalBinFolder}`);
43
+ shellExec(`npm run test`);
44
+ });
45
+
46
+ program
47
+ .command('help')
48
+ .description('Display help information')
49
+ .action(() => {
50
+ program.outputHelp();
51
+ });
52
+
53
+ program.parse();
package/bin/ssl.js CHANGED
@@ -29,6 +29,9 @@ try {
29
29
  cmd = `certbot certonly --webroot --webroot-path ${
30
30
  directory ? directory : `${getRootDirectory()}/public/${host}`
31
31
  } -d ${host}`;
32
+ // directory ? directory : `${getRootDirectory()}/public/${host}`
33
+ // directory ? directory : `${getRootDirectory()}/public/www.${host.split('.').slice(-2).join('.')}`
34
+
32
35
  // You can get multi domain cert by specifying (extra) -d
33
36
  // For example
34
37
  // certbot -d example.com -d example.net -d www.example.org
package/conf.js CHANGED
@@ -179,7 +179,7 @@ const DefaultConf = {
179
179
  origins: [],
180
180
  minifyBuild: false,
181
181
  iconsBuild: true,
182
- lightBuild: false,
182
+ liteBuild: false,
183
183
  docsBuild: false,
184
184
  ws: 'core',
185
185
  peer: true,
@@ -217,7 +217,7 @@ const DefaultConf = {
217
217
  apis: [],
218
218
  origins: [],
219
219
  minifyBuild: false,
220
- lightBuild: true,
220
+ liteBuild: true,
221
221
  proxy: [80, 443],
222
222
  },
223
223
  },
@@ -238,6 +238,11 @@ const DefaultConf = {
238
238
  },
239
239
  ],
240
240
  },
241
+ backups: [
242
+ {
243
+ deployGroupId: 'default-group',
244
+ },
245
+ ],
241
246
  },
242
247
  };
243
248
 
@@ -58,7 +58,7 @@ services:
58
58
  cpus: '0.25'
59
59
  memory: 20M
60
60
  labels: # labels in Compose file instead of Dockerfile
61
- engine.version: '2.6.2'
61
+ engine.version: '2.7.1'
62
62
  networks:
63
63
  - load-balancer
64
64