jenkins-generator 2.0.1 → 2.2.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/.dockerignore +8 -0
- package/DOCKER_COMPOSE_GUIDE.md +62 -0
- package/Dockerfile +23 -0
- package/README.md +65 -18
- package/dist/app.module.js +6 -0
- package/dist/app.module.js.map +1 -1
- package/dist/interfaces/config.interface.d.ts +11 -4
- package/dist/services/cicd-generator.service.d.ts +7 -1
- package/dist/services/cicd-generator.service.js +80 -18
- package/dist/services/cicd-generator.service.js.map +1 -1
- package/dist/services/cloud-provider.service.d.ts +1 -0
- package/dist/services/cloud-provider.service.js +135 -49
- package/dist/services/cloud-provider.service.js.map +1 -1
- package/dist/services/dashboard.service.d.ts +4 -0
- package/dist/services/dashboard.service.js +103 -0
- package/dist/services/dashboard.service.js.map +1 -0
- package/dist/services/docker-compose.service.d.ts +7 -0
- package/dist/services/docker-compose.service.js +113 -0
- package/dist/services/docker-compose.service.js.map +1 -0
- package/dist/services/iac.service.d.ts +8 -0
- package/dist/services/iac.service.js +164 -0
- package/dist/services/iac.service.js.map +1 -0
- package/dist/services/jenkinsfile.service.d.ts +1 -0
- package/dist/services/jenkinsfile.service.js +131 -33
- package/dist/services/jenkinsfile.service.js.map +1 -1
- package/dist/services/notification.service.js +13 -15
- package/dist/services/notification.service.js.map +1 -1
- package/dist/services/prompt.service.js +96 -18
- package/dist/services/prompt.service.js.map +1 -1
- package/dist/services/validation.service.js +1 -1
- package/dist/services/validation.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docker-compose.yml +13 -0
- package/jest.config.js +12 -0
- package/package.json +11 -4
|
@@ -10,14 +10,30 @@ exports.CloudProviderService = void 0;
|
|
|
10
10
|
const common_1 = require("@nestjs/common");
|
|
11
11
|
let CloudProviderService = class CloudProviderService {
|
|
12
12
|
generateAWSDeploymentScript(config, dockerImageName) {
|
|
13
|
-
const { region, deploymentConfig } = config;
|
|
14
|
-
|
|
13
|
+
const { region, deploymentConfig, credentials } = config;
|
|
14
|
+
const awsCredentials = credentials;
|
|
15
|
+
let authLogic = `
|
|
15
16
|
#AWS Deployment Configuration
|
|
16
17
|
aws configure set aws_access_key_id \${AWS_ACCESS_KEY_ID}
|
|
17
18
|
aws configure set aws_secret_access_key \${AWS_SECRET_ACCESS_KEY}
|
|
18
|
-
aws configure set region ${region}
|
|
19
|
+
aws configure set region ${region}`;
|
|
20
|
+
if (awsCredentials.useOIDC && awsCredentials.oidcRoleArn) {
|
|
21
|
+
authLogic = `
|
|
22
|
+
# AWS OIDC Authentication
|
|
23
|
+
echo "Authenticating via OIDC..."
|
|
24
|
+
export $(printf "AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s AWS_SESSION_TOKEN=%s" \\
|
|
25
|
+
$(aws sts assume-role-with-web-identity \\
|
|
26
|
+
--role-arn ${awsCredentials.oidcRoleArn} \\
|
|
27
|
+
--role-session-name JenkinsSession \\
|
|
28
|
+
--web-identity-token \${AWS_WEB_IDENTITY_TOKEN} \\
|
|
29
|
+
--query "Credentials.[AccessKeyId,SecretAccessKey,SessionToken]" \\
|
|
30
|
+
--output text))
|
|
31
|
+
aws configure set region ${region}`;
|
|
32
|
+
}
|
|
33
|
+
return `
|
|
34
|
+
${authLogic}
|
|
19
35
|
|
|
20
|
-
#Create/
|
|
36
|
+
#Create/Update ECS Cluster
|
|
21
37
|
aws ecs create-cluster --cluster-name ${dockerImageName}-cluster || true
|
|
22
38
|
|
|
23
39
|
#Register Task Definition
|
|
@@ -31,7 +47,7 @@ let CloudProviderService = class CloudProviderService {
|
|
|
31
47
|
"containerDefinitions": [
|
|
32
48
|
{
|
|
33
49
|
"name": "${dockerImageName}",
|
|
34
|
-
"image": "
|
|
50
|
+
"image": "\${DOCKER_IMAGE}",
|
|
35
51
|
"portMappings": [
|
|
36
52
|
{
|
|
37
53
|
"containerPort": ${deploymentConfig.port},
|
|
@@ -46,22 +62,23 @@ let CloudProviderService = class CloudProviderService {
|
|
|
46
62
|
"awslogs-stream-prefix": "ecs"
|
|
47
63
|
}
|
|
48
64
|
}
|
|
49
|
-
},
|
|
65
|
+
}],
|
|
50
66
|
"healthCheck": {
|
|
51
67
|
"command": ["CMD-SHELL", "curl -f http://localhost:${deploymentConfig.port}${deploymentConfig.healthCheckPath} || exit 1"],
|
|
52
68
|
"interval": 30,
|
|
53
69
|
"timeout": 5,
|
|
54
70
|
"retries": 3
|
|
55
71
|
}
|
|
56
|
-
}]
|
|
57
72
|
}
|
|
58
73
|
EOF
|
|
59
74
|
|
|
60
75
|
aws ecs register-task-definition --cli-input-json file://task-definition.json
|
|
61
76
|
|
|
62
|
-
#
|
|
77
|
+
# Check if ECS service exists
|
|
78
|
+
SERVICE_EXISTS=$(aws ecs describe-services --cluster ${dockerImageName}-cluster --services ${dockerImageName}-service --query 'services[0].status' --output text || echo "MISSING")
|
|
63
79
|
|
|
64
|
-
if[ "
|
|
80
|
+
if [ "$SERVICE_EXISTS" != "ACTIVE" ]; then
|
|
81
|
+
echo "Creating new ECS service..."
|
|
65
82
|
aws ecs create-service \\
|
|
66
83
|
--cluster ${dockerImageName}-cluster \\
|
|
67
84
|
--service-name ${dockerImageName}-service \\
|
|
@@ -70,25 +87,45 @@ let CloudProviderService = class CloudProviderService {
|
|
|
70
87
|
--launch-type FARGATE \\
|
|
71
88
|
--network-configuration "awsvpcConfiguration={subnets=[\${SUBNET_IDS}], securityGroups=[\${SECURITY_GROUP_IDS}], assignPublicIp=ENABLED}"
|
|
72
89
|
else
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
--force-new-deployment
|
|
90
|
+
echo "Updating existing ECS service with ${deploymentConfig.deploymentStrategy} strategy..."
|
|
91
|
+
if [ "${deploymentConfig.deploymentStrategy}" == "blue-green" ]; then
|
|
92
|
+
echo "Performing Blue-Green deployment..."
|
|
93
|
+
# Simulating blue-green by creating/updating a 'green' version
|
|
94
|
+
aws ecs update-service --cluster ${dockerImageName}-cluster --service ${dockerImageName}-service --task-definition ${dockerImageName} --force-new-deployment
|
|
95
|
+
elif [ "${deploymentConfig.deploymentStrategy}" == "canary" ]; then
|
|
96
|
+
echo "Performing Canary deployment (10% traffic)..."
|
|
97
|
+
aws ecs update-service --cluster ${dockerImageName}-cluster --service ${dockerImageName}-service --task-definition ${dockerImageName} --desired-count $(( ${deploymentConfig.minInstances || 1} + 1 ))
|
|
98
|
+
else
|
|
99
|
+
aws ecs update-service --cluster ${dockerImageName}-cluster --service ${dockerImageName}-service --task-definition ${dockerImageName} --force-new-deployment
|
|
100
|
+
fi
|
|
78
101
|
fi
|
|
79
102
|
|
|
80
|
-
|
|
81
|
-
|
|
103
|
+
${this.generateDeployedUrlExport(deploymentConfig, `TASK_ARN=$(aws ecs list-tasks --cluster ${dockerImageName}-cluster --service-name ${dockerImageName}-service --query 'taskArns[0]' --output text)
|
|
104
|
+
ENI_ID=$(aws ecs describe-tasks --cluster ${dockerImageName}-cluster --tasks $TASK_ARN --query 'tasks[0].attachments[0].details[?name==\`networkInterfaceId\`].value' --output text)
|
|
105
|
+
PUBLIC_IP=$(aws ec2 describe-network-interfaces --network-interface-ids $ENI_ID --query 'NetworkInterfaces[0].Association.PublicIp' --output text)
|
|
106
|
+
export DEPLOYED_URL="http://$PUBLIC_IP:${deploymentConfig.port}"`)}
|
|
82
107
|
`;
|
|
83
108
|
}
|
|
84
109
|
generateAzureDeploymentScript(config, dockerImageName) {
|
|
85
|
-
const { deploymentConfig } = config;
|
|
86
|
-
|
|
110
|
+
const { deploymentConfig, credentials } = config;
|
|
111
|
+
const azureCredentials = credentials;
|
|
112
|
+
let authLogic = `
|
|
87
113
|
# Azure Deployment Configuration
|
|
88
114
|
az login --service-principal \\
|
|
89
115
|
-u \${AZURE_CLIENT_ID} \\
|
|
90
116
|
-p \${AZURE_CLIENT_SECRET} \\
|
|
91
|
-
|
|
117
|
+
-t \${AZURE_TENANT_ID}`;
|
|
118
|
+
if (azureCredentials.useOIDC) {
|
|
119
|
+
authLogic = `
|
|
120
|
+
# Azure OIDC Authentication
|
|
121
|
+
echo "Authenticating via OIDC..."
|
|
122
|
+
az login --service-principal \\
|
|
123
|
+
-u \${AZURE_CLIENT_ID} \\
|
|
124
|
+
-t \${AZURE_TENANT_ID} \\
|
|
125
|
+
--federated-token \${AZURE_FEDERATED_TOKEN}`;
|
|
126
|
+
}
|
|
127
|
+
return `
|
|
128
|
+
${authLogic}
|
|
92
129
|
|
|
93
130
|
az account set --subscription \${AZURE_SUBSCRIPTION_ID}
|
|
94
131
|
|
|
@@ -106,35 +143,47 @@ let CloudProviderService = class CloudProviderService {
|
|
|
106
143
|
--registry-username \${ACR_USERNAME} \\
|
|
107
144
|
--registry-password \${ACR_PASSWORD} \\
|
|
108
145
|
--dns-name-label ${dockerImageName} \\
|
|
109
|
-
--ports ${deploymentConfig.port}
|
|
146
|
+
--ports ${deploymentConfig.port} \\
|
|
110
147
|
--environment-variables NODE_ENV=production \\
|
|
111
148
|
--restart-policy Always
|
|
112
|
-
|
|
113
|
-
|
|
149
|
+
|
|
150
|
+
${this.generateDeployedUrlExport(deploymentConfig, `export DEPLOYED_URL="http://${dockerImageName}.\${AZURE_REGION}.azurecontainer.io:${deploymentConfig.port}"`)}
|
|
114
151
|
`;
|
|
115
152
|
}
|
|
116
153
|
generateGCPDeploymentScript(config, dockerImageName) {
|
|
117
|
-
const { region, deploymentConfig } = config;
|
|
118
|
-
|
|
154
|
+
const { region, deploymentConfig, credentials } = config;
|
|
155
|
+
const gcpCredentials = credentials;
|
|
156
|
+
let authLogic = `
|
|
119
157
|
# GCP Deployment Configuration
|
|
120
158
|
gcloud auth activate-service-account --key-file=\${GCP_KEY_FILE}
|
|
121
159
|
gcloud config set project \${GCP_PROJECT_ID}
|
|
122
|
-
gcloud config set compute/region ${region}
|
|
160
|
+
gcloud config set compute/region ${region}`;
|
|
161
|
+
if (gcpCredentials.useOIDC) {
|
|
162
|
+
authLogic = `
|
|
163
|
+
# GCP OIDC Authentication
|
|
164
|
+
echo "Authenticating via OIDC..."
|
|
165
|
+
echo \${GCP_OIDC_TOKEN} > oidc_token.txt
|
|
166
|
+
gcloud auth login --cred-file=oidc_token.txt
|
|
167
|
+
gcloud config set project \${GCP_PROJECT_ID}
|
|
168
|
+
gcloud config set compute/region ${region}`;
|
|
169
|
+
}
|
|
170
|
+
return `
|
|
171
|
+
${authLogic}
|
|
123
172
|
|
|
124
173
|
# Deploy to Cloud Run
|
|
125
174
|
gcloud run deploy ${dockerImageName} \\
|
|
126
175
|
--image \${DOCKER_IMAGE} \\
|
|
127
176
|
--platform managed \\
|
|
128
|
-
--region ${region} \\
|
|
129
|
-
--allow-unauthenticated
|
|
130
177
|
--port ${deploymentConfig.port} \\
|
|
131
178
|
--memory 512Mi \\
|
|
132
179
|
--cpu 1 \\
|
|
133
180
|
--min-instances ${deploymentConfig.minInstances || 0} \\
|
|
134
181
|
--max-instances ${deploymentConfig.maxInstances || 1} \\
|
|
135
|
-
--set-env-vars NODE_ENV=production
|
|
182
|
+
--set-env-vars NODE_ENV=production \\
|
|
183
|
+
--region ${region} \\
|
|
184
|
+
--format='value(status.url)' > gcp_url.txt
|
|
136
185
|
|
|
137
|
-
|
|
186
|
+
${this.generateDeployedUrlExport(deploymentConfig, `export DEPLOYED_URL=$(cat gcp_url.txt)`)}
|
|
138
187
|
`;
|
|
139
188
|
}
|
|
140
189
|
generateDigitalOceanDeploymentScript(config, dockerImageName) {
|
|
@@ -163,7 +212,6 @@ let CloudProviderService = class CloudProviderService {
|
|
|
163
212
|
EOF
|
|
164
213
|
|
|
165
214
|
# Create or update app
|
|
166
|
-
|
|
167
215
|
APP_ID=\$(doctl apps list --format ID --no-header | head -n 1)
|
|
168
216
|
|
|
169
217
|
if [ -z "\$APP_ID" ]; then
|
|
@@ -172,7 +220,7 @@ let CloudProviderService = class CloudProviderService {
|
|
|
172
220
|
doctl apps update \$APP_ID --spec app-spec.yaml
|
|
173
221
|
fi
|
|
174
222
|
|
|
175
|
-
|
|
223
|
+
${this.generateDeployedUrlExport(deploymentConfig, `export DEPLOYED_URL=$(doctl apps get \$APP_ID --format DefaultIngress --no-header)`)}
|
|
176
224
|
`;
|
|
177
225
|
}
|
|
178
226
|
generateDeploymentScript(config, dockerImageName) {
|
|
@@ -192,27 +240,53 @@ let CloudProviderService = class CloudProviderService {
|
|
|
192
240
|
generateCredentialsEnvironmentVariables(config) {
|
|
193
241
|
const { provider, credentials } = config;
|
|
194
242
|
switch (provider) {
|
|
195
|
-
case 'aws':
|
|
243
|
+
case 'aws': {
|
|
244
|
+
const awsCreds = credentials;
|
|
245
|
+
if (awsCreds.useOIDC) {
|
|
246
|
+
return `
|
|
247
|
+
environment {
|
|
248
|
+
AWS_WEB_IDENTITY_TOKEN = credentials('aws-oidc-token')
|
|
249
|
+
}`;
|
|
250
|
+
}
|
|
196
251
|
return `
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
252
|
+
environment {
|
|
253
|
+
AWS_ACCESS_KEY_ID = credentials('aws-access-key-id')
|
|
254
|
+
AWS_SECRET_ACCESS_KEY = credentials('aws-secret-access-key')
|
|
255
|
+
AWS_REGION = '${credentials['region']}'
|
|
256
|
+
}`;
|
|
257
|
+
}
|
|
258
|
+
case 'azure': {
|
|
259
|
+
const azCreds = credentials;
|
|
260
|
+
const baseEnv = `
|
|
261
|
+
AZURE_SUBSCRIPTION_ID = credentials('azure-subscription-id')
|
|
262
|
+
AZURE_TENANT_ID = credentials('azure-tenant-id')
|
|
263
|
+
AZURE_CLIENT_ID = credentials('azure-client-id')`;
|
|
264
|
+
if (azCreds.useOIDC) {
|
|
265
|
+
return `
|
|
266
|
+
environment {${baseEnv}
|
|
267
|
+
AZURE_FEDERATED_TOKEN = credentials('azure-federated-token')
|
|
268
|
+
}`;
|
|
269
|
+
}
|
|
203
270
|
return `
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
271
|
+
environment {${baseEnv}
|
|
272
|
+
AZURE_CLIENT_SECRET = credentials('azure-client-secret')
|
|
273
|
+
}`;
|
|
274
|
+
}
|
|
275
|
+
case 'gcp': {
|
|
276
|
+
const gcpCreds = credentials;
|
|
277
|
+
if (gcpCreds.useOIDC) {
|
|
278
|
+
return `
|
|
279
|
+
environment {
|
|
280
|
+
GCP_PROJECT_ID = credentials('gcp-project-id')
|
|
281
|
+
GCP_OIDC_TOKEN = credentials('gcp-oidc-token')
|
|
282
|
+
}`;
|
|
283
|
+
}
|
|
211
284
|
return `
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
285
|
+
environment {
|
|
286
|
+
GCP_PROJECT_ID = credentials('gcp-project-id')
|
|
287
|
+
GCP_KEY_FILE = credentials('gcp-key-file')
|
|
288
|
+
}`;
|
|
289
|
+
}
|
|
216
290
|
case 'digitalocean':
|
|
217
291
|
return `
|
|
218
292
|
environment {
|
|
@@ -222,6 +296,18 @@ let CloudProviderService = class CloudProviderService {
|
|
|
222
296
|
return '';
|
|
223
297
|
}
|
|
224
298
|
}
|
|
299
|
+
generateDeployedUrlExport(deploymentConfig, defaultUrlScript) {
|
|
300
|
+
if (deploymentConfig.useLoadBalancer && deploymentConfig.loadBalancerUrl) {
|
|
301
|
+
return `
|
|
302
|
+
export DEPLOYED_URL="${deploymentConfig.loadBalancerUrl}"
|
|
303
|
+
echo "DEPLOYED_URL=\$DEPLOYED_URL" >> deployment.env
|
|
304
|
+
echo "Deployment completed. Reachable at Load Balancer: \$DEPLOYED_URL"`;
|
|
305
|
+
}
|
|
306
|
+
return `
|
|
307
|
+
${defaultUrlScript}
|
|
308
|
+
echo "DEPLOYED_URL=\$DEPLOYED_URL" >> deployment.env
|
|
309
|
+
echo "Deployment completed. Reachable at: \$DEPLOYED_URL"`;
|
|
310
|
+
}
|
|
225
311
|
};
|
|
226
312
|
exports.CloudProviderService = CloudProviderService;
|
|
227
313
|
exports.CloudProviderService = CloudProviderService = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-provider.service.js","sourceRoot":"","sources":["../../src/services/cloud-provider.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAIrC,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,2BAA2B,CACzB,MAAmB,EACnB,eAAuB;QAEvB,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"cloud-provider.service.js","sourceRoot":"","sources":["../../src/services/cloud-provider.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DashboardService = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
let DashboardService = class DashboardService {
|
|
12
|
+
generateDeploymentDashboard(config) {
|
|
13
|
+
const { project, cloud, notifications, jenkinsConfig } = config;
|
|
14
|
+
return `
|
|
15
|
+
<!DOCTYPE html>
|
|
16
|
+
<html lang="en">
|
|
17
|
+
<head>
|
|
18
|
+
<meta charset="UTF-8">
|
|
19
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
20
|
+
<title>Deployment Dashboard - ${project.projectName}</title>
|
|
21
|
+
<style>
|
|
22
|
+
body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: #333; max-width: 1000px; margin: 0 auto; padding: 20px; background-color: #f4f7f6; }
|
|
23
|
+
.container { background: #fff; padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
|
|
24
|
+
h1 { color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px; }
|
|
25
|
+
h2 { color: #2980b9; margin-top: 30px; }
|
|
26
|
+
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; }
|
|
27
|
+
.card { background: #f9f9f9; padding: 20px; border-radius: 6px; border-left: 4px solid #3498db; }
|
|
28
|
+
.card h3 { margin-top: 0; color: #34495e; }
|
|
29
|
+
.status { display: inline-block; padding: 5px 12px; border-radius: 20px; font-size: 0.85em; font-weight: bold; text-transform: uppercase; }
|
|
30
|
+
.status-active { background: #e8f5e9; color: #2e7d32; }
|
|
31
|
+
ul { padding-left: 20px; }
|
|
32
|
+
code { background: #eee; padding: 2px 5px; border-radius: 4px; font-family: 'Courier New', Courier, monospace; }
|
|
33
|
+
.footer { margin-top: 50px; text-align: center; font-size: 0.9em; color: #7f8c8d; }
|
|
34
|
+
</style>
|
|
35
|
+
</head>
|
|
36
|
+
<body>
|
|
37
|
+
<div class="container">
|
|
38
|
+
<h1>🚀 Deployment Dashboard: ${project.projectName}</h1>
|
|
39
|
+
<p>Generated by Jenkins-Generator v2.1.0</p>
|
|
40
|
+
|
|
41
|
+
<div class="grid">
|
|
42
|
+
<div class="card">
|
|
43
|
+
<h3>📦 Project Info</h3>
|
|
44
|
+
<ul>
|
|
45
|
+
<li><strong>Type:</strong> ${project.projectType}</li>
|
|
46
|
+
<li><strong>Language:</strong> ${project.language}</li>
|
|
47
|
+
<li><strong>Repository:</strong> <code>${project.repository}</code></li>
|
|
48
|
+
<li><strong>Branch:</strong> <code>${project.branch}</code></li>
|
|
49
|
+
</ul>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<div class="card">
|
|
53
|
+
<h3>☁️ Cloud Deployment</h3>
|
|
54
|
+
<ul>
|
|
55
|
+
<li><strong>Provider:</strong> ${cloud.provider.toUpperCase()}</li>
|
|
56
|
+
<li><strong>Region:</strong> ${cloud.region}</li>
|
|
57
|
+
<li><strong>Tier:</strong> ${cloud.deploymentConfig.tier}</li>
|
|
58
|
+
<li><strong>Strategy:</strong> ${cloud.deploymentConfig.deploymentStrategy}</li>
|
|
59
|
+
<li><strong>Port:</strong> ${cloud.deploymentConfig.port}</li>
|
|
60
|
+
</ul>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<div class="card">
|
|
64
|
+
<h3>⚙️ Resources</h3>
|
|
65
|
+
<ul>
|
|
66
|
+
<li><strong>Instance:</strong> ${cloud.instanceType}</li>
|
|
67
|
+
<li><strong>Auto-Scaling:</strong> ${cloud.deploymentConfig.autoScaling
|
|
68
|
+
? 'Enabled'
|
|
69
|
+
: 'Disabled'}</li>
|
|
70
|
+
<li><strong>Min/Max:</strong> ${cloud.deploymentConfig.minInstances || 1} / ${cloud.deploymentConfig.maxInstances || 1}</li>
|
|
71
|
+
<li><strong>Load Balancer:</strong> ${cloud.deploymentConfig.useLoadBalancer
|
|
72
|
+
? 'Configured'
|
|
73
|
+
: 'None'}</li>
|
|
74
|
+
</ul>
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
<div class="card">
|
|
78
|
+
<h3>🔔 Notifications</h3>
|
|
79
|
+
<ul>
|
|
80
|
+
<li><strong>Email:</strong> ${notifications.email}</li>
|
|
81
|
+
<li><strong>Platforms:</strong> ${notifications.platforms.map((p) => p.type).join(', ') ||
|
|
82
|
+
'None'}</li>
|
|
83
|
+
</ul>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<h2>🛠️ Infrastructure as Code (IaC)</h2>
|
|
88
|
+
<p>Terraform modules have been generated in <code>.cicd/terraform/</code> to manage your ${cloud.provider.toUpperCase()} resources.</p>
|
|
89
|
+
|
|
90
|
+
<div class="footer">
|
|
91
|
+
© 2026 Jenkins-Generator. Empowering your CI/CD journey.
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
</body>
|
|
95
|
+
</html>
|
|
96
|
+
`;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
exports.DashboardService = DashboardService;
|
|
100
|
+
exports.DashboardService = DashboardService = __decorate([
|
|
101
|
+
(0, common_1.Injectable)()
|
|
102
|
+
], DashboardService);
|
|
103
|
+
//# sourceMappingURL=dashboard.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.service.js","sourceRoot":"","sources":["../../src/services/dashboard.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAIrC,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,2BAA2B,CAAC,MAAkB;QAC5C,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;QAEhE,OAAO;;;;;;oCAMyB,OAAO,CAAC,WAAW;;;;;;;;;;;;;;;;;;uCAkBhB,OAAO,CAAC,WAAW;;;;;;;iDAOT,OAAO,CAAC,WAAW;qDACf,OAAO,CAAC,QAAQ;6DAE/C,OAAO,CAAC,UACV;yDAEE,OAAO,CAAC,MACV;;;;;;;qDAOiC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE;mDAC9B,KAAK,CAAC,MAAM;iDAEzC,KAAK,CAAC,gBAAgB,CAAC,IACzB;qDAEE,KAAK,CAAC,gBAAgB,CAAC,kBACzB;iDAEE,KAAK,CAAC,gBAAgB,CAAC,IACzB;;;;;;;qDAOiC,KAAK,CAAC,YAAY;yDAEjD,KAAK,CAAC,gBAAgB,CAAC,WAAW;YAChC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,UACN;oDAEE,KAAK,CAAC,gBAAgB,CAAC,YAAY,IAAI,CACzC,MAAM,KAAK,CAAC,gBAAgB,CAAC,YAAY,IAAI,CAAC;0DAE5C,KAAK,CAAC,gBAAgB,CAAC,eAAe;YACpC,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,MACN;;;;;;;kDAO8B,aAAa,CAAC,KAAK;sDAE/C,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACrD,MACF;;;;;;mGAM+E,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE;;;;;;;;CAQ9H,CAAC;IACA,CAAC;CACF,CAAA;AA1GY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;GACA,gBAAgB,CA0G5B"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DockerComposeService = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
let DockerComposeService = class DockerComposeService {
|
|
12
|
+
generateDockerCompose(config) {
|
|
13
|
+
const { project } = config;
|
|
14
|
+
const services = {};
|
|
15
|
+
services['app'] = {
|
|
16
|
+
build: '.',
|
|
17
|
+
ports: [
|
|
18
|
+
`${config.cloud.deploymentConfig.port}:${config.cloud.deploymentConfig.port}`,
|
|
19
|
+
],
|
|
20
|
+
env_file: ['.env'],
|
|
21
|
+
depends_on: project.externalServices
|
|
22
|
+
.filter((s) => s.requiresInfrastructure)
|
|
23
|
+
.map((s) => this.getServiceName(s)),
|
|
24
|
+
};
|
|
25
|
+
project.externalServices.forEach((service) => {
|
|
26
|
+
if (service.requiresInfrastructure) {
|
|
27
|
+
services[this.getServiceName(service)] = this.getServiceConfig(service);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
const compose = {
|
|
31
|
+
version: '3.8',
|
|
32
|
+
services: services,
|
|
33
|
+
};
|
|
34
|
+
return this.yamlify(compose);
|
|
35
|
+
}
|
|
36
|
+
getServiceName(service) {
|
|
37
|
+
return service.name.toLowerCase().replace(/\s+/g, '-');
|
|
38
|
+
}
|
|
39
|
+
getServiceConfig(service) {
|
|
40
|
+
switch (service.service.toLowerCase()) {
|
|
41
|
+
case 'postgresql':
|
|
42
|
+
return {
|
|
43
|
+
image: 'postgres:latest',
|
|
44
|
+
environment: {
|
|
45
|
+
POSTGRES_USER: 'user',
|
|
46
|
+
POSTGRES_PASSWORD: 'password',
|
|
47
|
+
POSTGRES_DB: 'app_db',
|
|
48
|
+
},
|
|
49
|
+
ports: ['5432:5432'],
|
|
50
|
+
};
|
|
51
|
+
case 'mongodb':
|
|
52
|
+
return {
|
|
53
|
+
image: 'mongo:latest',
|
|
54
|
+
ports: ['27017:27017'],
|
|
55
|
+
};
|
|
56
|
+
case 'redis':
|
|
57
|
+
return {
|
|
58
|
+
image: 'redis:latest',
|
|
59
|
+
ports: ['6379:6379'],
|
|
60
|
+
};
|
|
61
|
+
case 'mysql':
|
|
62
|
+
case 'mariadb':
|
|
63
|
+
return {
|
|
64
|
+
image: service.service.toLowerCase() === 'mysql'
|
|
65
|
+
? 'mysql:latest'
|
|
66
|
+
: 'mariadb:latest',
|
|
67
|
+
environment: {
|
|
68
|
+
MYSQL_ROOT_PASSWORD: 'password',
|
|
69
|
+
MYSQL_DATABASE: 'app_db',
|
|
70
|
+
},
|
|
71
|
+
ports: ['3306:3306'],
|
|
72
|
+
};
|
|
73
|
+
case 'rabbitmq':
|
|
74
|
+
return {
|
|
75
|
+
image: 'rabbitmq:3-management',
|
|
76
|
+
ports: ['5672:5672', '15672:15672'],
|
|
77
|
+
};
|
|
78
|
+
default:
|
|
79
|
+
return {
|
|
80
|
+
image: 'alpine:latest',
|
|
81
|
+
command: 'sleep infinity',
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
yamlify(obj, indent = 0) {
|
|
86
|
+
const spaces = ' '.repeat(indent);
|
|
87
|
+
let yaml = '';
|
|
88
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
89
|
+
if (typeof value === 'object' &&
|
|
90
|
+
!Array.isArray(value) &&
|
|
91
|
+
value !== null) {
|
|
92
|
+
yaml += `${spaces}${key}:\n${this.yamlify(value, indent + 2)}`;
|
|
93
|
+
}
|
|
94
|
+
else if (Array.isArray(value)) {
|
|
95
|
+
yaml += `${spaces}${key}:\n`;
|
|
96
|
+
value.forEach((item) => {
|
|
97
|
+
const formattedItem = typeof item === 'string' ? `"${item}"` : item;
|
|
98
|
+
yaml += `${spaces} - ${formattedItem}\n`;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const formattedValue = typeof value === 'string' ? `"${value}"` : value;
|
|
103
|
+
yaml += `${spaces}${key}: ${formattedValue}\n`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return yaml;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
exports.DockerComposeService = DockerComposeService;
|
|
110
|
+
exports.DockerComposeService = DockerComposeService = __decorate([
|
|
111
|
+
(0, common_1.Injectable)()
|
|
112
|
+
], DockerComposeService);
|
|
113
|
+
//# sourceMappingURL=docker-compose.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-compose.service.js","sourceRoot":"","sources":["../../src/services/docker-compose.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CloudConfig } from '../interfaces/config.interface';
|
|
2
|
+
export declare class IaCService {
|
|
3
|
+
generateTerraformConfig(config: CloudConfig, dockerImageName: string): string;
|
|
4
|
+
private generateAWSTerraform;
|
|
5
|
+
private generateAzureTerraform;
|
|
6
|
+
private generateGCPTerraform;
|
|
7
|
+
private generateDOTerraform;
|
|
8
|
+
}
|