Skip to content

Commit 627071b

Browse files
authored
Merge pull request #131 from microservices-suite/repo-engineering/universal-cli
Repo engineering/universal cli
2 parents d11ece4 + d06fa38 commit 627071b

File tree

9 files changed

+328
-105
lines changed

9 files changed

+328
-105
lines changed

.suite-cli/cli/cli.js

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const { Command } = require('commander');
55
const { createPromptModule } = require('inquirer');
66
const { execSync } = require('node:child_process')
77
const actionHandlers = require('./scripts')
8-
const { logInfo, getExistingServices, getNextAvailablePort } = require('./scripts/scripts.module');
8+
const { logInfo, getExistingServices, getNextAvailablePort, scaffoldApp } = require('./scripts/scripts.module');
99
const { cwd } = require('node:process');
1010
const program = new Command()
1111
const prompt = createPromptModule()
@@ -218,6 +218,30 @@ program
218218
}
219219
]).then((answers) => actionHandlers.scaffoldNewLibrary({ answers: { ...answers, private: false } }))
220220
break
221+
case 'app':
222+
const all_services = getExistingServices({ currentDir: cwd() })
223+
const formatServiceName = (service) => `${service.name}: ${service.port}`;
224+
225+
prompt([
226+
{
227+
type: 'input',
228+
name: 'app_name',
229+
message: 'Enter the application name:',
230+
},
231+
{
232+
type: 'checkbox',
233+
name: 'services',
234+
message: 'Select services',
235+
choices: all_services.map(service => ({
236+
name: formatServiceName(service),
237+
value: service,
238+
checked: true, // Default all services to be selected
239+
})),
240+
},
241+
]).then(answers => {
242+
scaffoldApp({ answers })
243+
})
244+
break;
221245
default:
222246
console.log('Handling other resources, not yet implemented.');
223247
// Handle other cases or provide feedback that other options are not yet implemented

.suite-cli/cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@microservices-suite/cli",
3-
"version": "2.0.9",
3+
"version": "2.0.10",
44
"description": "This is the CLI tool for running the microservices-suite monorepo. It contains functionalities and tools required for automation and managing the repo across supported platforms. Works on Windows,MacOS and Linux as well as support to some extend other variants like SunOS, IBM AIX, FreeBSD, OpenBSD and more",
55
"main": "cli.js",
66
"repository": "https://github.com/microservices-suite/node-microservices-suite.git",
Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,46 @@
1-
module.exports = ({ services }) => `
2-
version: '3.8'
3-
services:
4-
mongodb:
5-
image: mongo:latest
6-
container_name: mongodb
7-
ports:
8-
- '27017:27017'
9-
rabbitmq:
10-
image: rabbitmq:3.8
11-
container_name: rabbitmq
12-
ports:
13-
- '5672:5672'
14-
- '15672:15672'
15-
${services.map(({ service, ports, prerequisites }) => `
16-
${service}:
17-
depends_on:
18-
${prerequisites.map((prerequisite) => ` - ${prerequisite}`).join('\n')}
19-
container_name: ${service}
20-
restart: always
1+
module.exports = ({ services }) => {
2+
const servicesConfig = services.map(service => `
3+
${service.name.toLowerCase().replace(/\s+/g, '-')}:
214
build:
22-
context: ../../../microservices/${service}
23-
dockerfile: DockerFile.dev
5+
dockerfile: Dockerfile.dev
6+
context: ../../../microservices/${service.name}
247
ports:
25-
${ports.map((p) => ` - '${p}:${p}'`).join('\n')}
8+
- "${service.port}:${service.port}"
269
volumes:
2710
- /app/node_modules
28-
- ../../../microservices/${service}:/app`).join('\n')}
29-
`.trim();
11+
- ../../../microservices/${service.name}:/app`).join('');
12+
13+
return `version: '3.8'
14+
services:${servicesConfig}`;
15+
};
16+
17+
18+
// module.exports = ({ services }) => `
19+
// version: '3.8'
20+
// services:
21+
// mongodb:
22+
// image: mongo:latest
23+
// container_name: mongodb
24+
// ports:
25+
// - '27017:27017'
26+
// rabbitmq:
27+
// image: rabbitmq:3.8
28+
// container_name: rabbitmq
29+
// ports:
30+
// - '5672:5672'
31+
// - '15672:15672'
32+
// ${services.map(({ service, ports, prerequisites }) => `
33+
// ${service}:
34+
// depends_on:
35+
// ${prerequisites.map((prerequisite) => ` - ${prerequisite}`).join('\n')}
36+
// container_name: ${service}
37+
// restart: always
38+
// build:
39+
// context: ../../../microservices/${service}
40+
// dockerfile: DockerFile.dev
41+
// ports:
42+
// ${ports.map((p) => ` - '${p}:${p}'`).join('\n')}
43+
// volumes:
44+
// - /app/node_modules
45+
// - ../../../microservices/${service}:/app`).join('\n')}
46+
// `.trim();
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module.exports = () =>`
2+
FROM node:18-alpine3.18
3+
4+
WORKDIR /app
5+
6+
COPY package.json .
7+
8+
RUN yarn install
9+
10+
COPY . .
11+
12+
CMD [ "yarn","dev" ]
13+
`

.suite-cli/cli/scripts/assets/fileStructureContent.asset.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ module.exports = ({ answers }) => (
1010
`tests/${answers.service_name}/snapshot`,
1111
`microservices`,
1212
`k8s/${answers.service_name}`,
13-
`gateways/apps/app1/${answers.webserver}`,
13+
`gateways/apps`,
1414
...(answers.apis.map((api) => `${api}/app1`)),
1515
]
1616
)
Lines changed: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,52 @@
1-
module.exports = ({ answers, suffix, isMicroservice, description, os }) => (
2-
{
3-
name: `${answers.project_base}/${suffix}`,
4-
version: "1.0.0",
5-
description,
6-
main: "index.js",
7-
author: `${os.userInfo().username}`,
8-
license: `${answers.license}`,
9-
publishConfig: {
10-
access: "public",
11-
registry: "http://registry.npmjs.org"
1+
module.exports = ({ answers, suffix, isMicroservice, description, os, addDeps }) => ({
2+
name: `${answers.project_base}/${suffix}`,
3+
version: "1.0.0",
4+
description,
5+
main: "index.js",
6+
author: `${os.userInfo().username}`,
7+
license: `${answers.license}`,
8+
...(isMicroservice && addDeps && {
9+
dependencies: {
10+
[`${answers.project_base}/config`]: "1.0.0",
11+
[`${answers.project_base}/errors`]: "1.0.0",
12+
[`${answers.project_base}/utilities`]: "1.0.0",
13+
[`${answers.project_base}/validations`]: "1.0.0",
14+
dotenv: "^16.4.5",
15+
express: "^4.18.3",
16+
helmet: "^7.1.0",
17+
mongodb: "^6.5.0",
18+
mongoose: "^8.2.1",
19+
morgan: "^1.10.0",
20+
pm2: "^5.3.1",
21+
winston: "^3.12.0"
1222
},
13-
scripts: {
14-
release: "npx bumpp-version@latest && npm publish",
15-
...(isMicroservice ? {
16-
dev: os.platform()==='win32'?'set NODE_ENV=dev && nodemon --legacy-watch -q index.js':"NODE_ENV=dev nodemon --legacy-watch -q index.js",
17-
start: "pm2-runtime start ecosystem.config.js --env production",
18-
stoprod: "pm2 stop ecosystem.config.js",
19-
deletprod: "pm2 delete ecosystem.config.js",
20-
test: "jest",
21-
} : {}
22-
)
23+
devDependencies: {
24+
nodemon: "^3.1.0"
2325
},
24-
private: isMicroservice,
25-
})
26-
;
26+
workspaces: {
27+
nohoist: [
28+
`**/${answers.project_base}/utilities/`,
29+
`**/${answers.project_base}/utilities/**`,
30+
`**/${answers.project_base}/errors/`,
31+
`**/${answers.project_base}/errors/**`,
32+
`**/${answers.project_base}/config/`,
33+
`**/${answers.project_base}/config/**`
34+
]
35+
},
36+
}),
37+
publishConfig: {
38+
access: "public",
39+
registry: "http://registry.npmjs.org"
40+
},
41+
scripts: {
42+
release: "npx bumpp-version@latest && npm publish",
43+
...(isMicroservice && {
44+
dev: os.platform() === 'win32' ? 'set NODE_ENV=dev && nodemon --legacy-watch -q index.js' : 'NODE_ENV=dev nodemon --legacy-watch -q index.js',
45+
start: "pm2-runtime start ecosystem.config.js --env production",
46+
stoprod: "pm2 stop ecosystem.config.js",
47+
deletprod: "pm2 delete ecosystem.config.js",
48+
test: "jest"
49+
})
50+
},
51+
private: isMicroservice
52+
});

.suite-cli/cli/scripts/assets/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,8 @@ module.exports.debuggerConfigContent = require('./debuggerConfigContent.asset')
4545
module.exports.suiteJSON = require('./suiteJSON.asset')
4646
module.exports.suiteConfig = require('./suiteConfig.asset')
4747
module.exports.suiteRC = require('./suiteRC.asset')
48+
module.exports.nginxContent = require('./nginxContent.asset')
49+
module.exports.dockerComposeContent = require('./dockerComposeContent.asset')
50+
module.exports.dockerfileContent = require('./dockerfileContent.asset')
4851

4952

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
module.exports = ({ services }) => {
2+
const upstreams = services.map(service => `
3+
upstream ${service.name.toLowerCase().replace(/\s+/g, '-')}_upstream {
4+
server ${service.name.toLowerCase().replace(/\s+/g, '-')}:${service.port};
5+
}`).join('\n');
6+
7+
const serverBlocks = services.map(service => `
8+
location /${service.name.toLowerCase().replace(/\s+/g, '-')}/ {
9+
proxy_pass http://${service.name.toLowerCase().replace(/\s+/g, '-')}_upstream;
10+
}`).join('\n');
11+
12+
return `http {
13+
${upstreams}
14+
15+
server {
16+
listen 80;
17+
18+
${serverBlocks}
19+
}
20+
}`;
21+
};

0 commit comments

Comments
 (0)