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.
Files changed (35) hide show
  1. package/.dockerignore +8 -0
  2. package/DOCKER_COMPOSE_GUIDE.md +62 -0
  3. package/Dockerfile +23 -0
  4. package/README.md +65 -18
  5. package/dist/app.module.js +6 -0
  6. package/dist/app.module.js.map +1 -1
  7. package/dist/interfaces/config.interface.d.ts +11 -4
  8. package/dist/services/cicd-generator.service.d.ts +7 -1
  9. package/dist/services/cicd-generator.service.js +80 -18
  10. package/dist/services/cicd-generator.service.js.map +1 -1
  11. package/dist/services/cloud-provider.service.d.ts +1 -0
  12. package/dist/services/cloud-provider.service.js +135 -49
  13. package/dist/services/cloud-provider.service.js.map +1 -1
  14. package/dist/services/dashboard.service.d.ts +4 -0
  15. package/dist/services/dashboard.service.js +103 -0
  16. package/dist/services/dashboard.service.js.map +1 -0
  17. package/dist/services/docker-compose.service.d.ts +7 -0
  18. package/dist/services/docker-compose.service.js +113 -0
  19. package/dist/services/docker-compose.service.js.map +1 -0
  20. package/dist/services/iac.service.d.ts +8 -0
  21. package/dist/services/iac.service.js +164 -0
  22. package/dist/services/iac.service.js.map +1 -0
  23. package/dist/services/jenkinsfile.service.d.ts +1 -0
  24. package/dist/services/jenkinsfile.service.js +131 -33
  25. package/dist/services/jenkinsfile.service.js.map +1 -1
  26. package/dist/services/notification.service.js +13 -15
  27. package/dist/services/notification.service.js.map +1 -1
  28. package/dist/services/prompt.service.js +96 -18
  29. package/dist/services/prompt.service.js.map +1 -1
  30. package/dist/services/validation.service.js +1 -1
  31. package/dist/services/validation.service.js.map +1 -1
  32. package/dist/tsconfig.tsbuildinfo +1 -1
  33. package/docker-compose.yml +13 -0
  34. package/jest.config.js +12 -0
  35. 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
- return `
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/Updateb ECS Cluster
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": "${dockerImageName}",
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
- #Create or Update Service
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[ "\$SERVICE_EXISTS" != "ACTIVE" ]; then
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
- aws ecs update-service \\
74
- --cluster ${dockerImageName}-cluster \\
75
- --service ${dockerImageName}-service \\
76
- --task-definition ${dockerImageName} \\
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
- echo "AWS deployment completed successfully"
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
- return `
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
- --tenant \${AZURE_TENANT_ID}
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
- echo "Azure deployment completed successfully"
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
- return `
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
- echo "GCP deployment completed successfully"
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
- echo "DigitalOcean deployment completed successfully
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
- environment {
198
- AWS_ACCESS_KEY_ID = credentials('aws-access-key-id')
199
- AWS_SECRET_ACCESS_KEY = credentials('aws-secret-access-key')
200
- AWS_REGION = '${credentials['aws-region']}'
201
- }`;
202
- case 'azure':
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
- environment {
205
- AZURE_CLIENT_ID = credentials('azure-client-id')
206
- AZURE_CLIENT_SECRET = credentials('azure-client-secret')
207
- AZURE_TENANT_ID = credentials('azure-tenant-id')
208
- AZURE_SUBSCRIPTION_ID = credentials('azure-subscription-id')
209
- }`;
210
- case 'gcp':
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
- environment {
213
- GCP_PROJECT_ID = credentials('gcp-project-id')
214
- GCP_KEY_FILE = credentials('gcp-key-file')
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":"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"}
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,4 @@
1
+ import { CICDConfig } from '../interfaces/config.interface';
2
+ export declare class DashboardService {
3
+ generateDeploymentDashboard(config: CICDConfig): string;
4
+ }
@@ -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
+ &copy; 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,7 @@
1
+ import { CICDConfig } from '../interfaces/config.interface';
2
+ export declare class DockerComposeService {
3
+ generateDockerCompose(config: CICDConfig): string;
4
+ private getServiceName;
5
+ private getServiceConfig;
6
+ private yamlify;
7
+ }
@@ -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":";;;;;;;;;AAAA,2CAA4C;AAIrC,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,qBAAqB,CAAC,MAAkB;QACtC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC3B,MAAM,QAAQ,GAAQ,EAAE,CAAC;QAGzB,QAAQ,CAAC,KAAK,CAAC,GAAG;YAChB,KAAK,EAAE,GAAG;YACV,KAAK,EAAE;gBACL,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE;aAC9E;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;YAClB,UAAU,EAAE,OAAO,CAAC,gBAAgB;iBACjC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC;iBACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;SACtC,CAAC;QAGF,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3C,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,QAAQ;SACnB,CAAC;QAEF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAEO,cAAc,CAAC,OAAwB;QAC7C,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;IAEO,gBAAgB,CAAC,OAAwB;QAC/C,QAAQ,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YACtC,KAAK,YAAY;gBACf,OAAO;oBACL,KAAK,EAAE,iBAAiB;oBACxB,WAAW,EAAE;wBACX,aAAa,EAAE,MAAM;wBACrB,iBAAiB,EAAE,UAAU;wBAC7B,WAAW,EAAE,QAAQ;qBACtB;oBACD,KAAK,EAAE,CAAC,WAAW,CAAC;iBACrB,CAAC;YACJ,KAAK,SAAS;gBACZ,OAAO;oBACL,KAAK,EAAE,cAAc;oBACrB,KAAK,EAAE,CAAC,aAAa,CAAC;iBACvB,CAAC;YACJ,KAAK,OAAO;gBACV,OAAO;oBACL,KAAK,EAAE,cAAc;oBACrB,KAAK,EAAE,CAAC,WAAW,CAAC;iBACrB,CAAC;YACJ,KAAK,OAAO,CAAC;YACb,KAAK,SAAS;gBACZ,OAAO;oBACL,KAAK,EACH,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO;wBACvC,CAAC,CAAC,cAAc;wBAChB,CAAC,CAAC,gBAAgB;oBACtB,WAAW,EAAE;wBACX,mBAAmB,EAAE,UAAU;wBAC/B,cAAc,EAAE,QAAQ;qBACzB;oBACD,KAAK,EAAE,CAAC,WAAW,CAAC;iBACrB,CAAC;YACJ,KAAK,UAAU;gBACb,OAAO;oBACL,KAAK,EAAE,uBAAuB;oBAC9B,KAAK,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC;iBACpC,CAAC;YACJ;gBACE,OAAO;oBACL,KAAK,EAAE,eAAe;oBACtB,OAAO,EAAE,gBAAgB;iBAC1B,CAAC;QACN,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,GAAQ,EAAE,MAAM,GAAG,CAAC;QAClC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IACE,OAAO,KAAK,KAAK,QAAQ;gBACzB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACrB,KAAK,KAAK,IAAI,EACd,CAAC;gBACD,IAAI,IAAI,GAAG,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YACjE,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,IAAI,IAAI,GAAG,MAAM,GAAG,GAAG,KAAK,CAAC;gBAC7B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBACrB,MAAM,aAAa,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;oBACpE,IAAI,IAAI,GAAG,MAAM,OAAO,aAAa,IAAI,CAAC;gBAC5C,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,cAAc,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;gBACxE,IAAI,IAAI,GAAG,MAAM,GAAG,GAAG,KAAK,cAAc,IAAI,CAAC;YACjD,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AA7GY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;GACA,oBAAoB,CA6GhC"}
@@ -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
+ }