jenkins-generator 1.0.1 → 2.0.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/README.md +176 -17
- package/dist/app.module.js +2 -0
- package/dist/app.module.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/config.interface.d.ts +31 -0
- package/dist/services/cicd-generator.service.d.ts +4 -1
- package/dist/services/cicd-generator.service.js +81 -12
- package/dist/services/cicd-generator.service.js.map +1 -1
- package/dist/services/environment.service.d.ts +10 -0
- package/dist/services/environment.service.js +163 -0
- package/dist/services/environment.service.js.map +1 -0
- package/dist/services/jenkinsfile.service.d.ts +3 -1
- package/dist/services/jenkinsfile.service.js +22 -8
- package/dist/services/jenkinsfile.service.js.map +1 -1
- package/dist/services/prompt.service.d.ts +9 -0
- package/dist/services/prompt.service.js +547 -1
- package/dist/services/prompt.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ExternalService } from '../interfaces/config.interface';
|
|
2
|
+
export declare class EnvironmentService {
|
|
3
|
+
generateEnvironmentVariablesBlock(services: ExternalService[]): string;
|
|
4
|
+
generateCredentialsSetupGuide(services: ExternalService[]): string;
|
|
5
|
+
generateDockerEnvironmentVariables(services: ExternalService[]): string;
|
|
6
|
+
generateEnvFileTemplate(services: ExternalService[]): string;
|
|
7
|
+
generateReadmeServicesSection(services: ExternalService[]): string;
|
|
8
|
+
private getCredentialId;
|
|
9
|
+
generateKubernetesSecrets(services: ExternalService[]): string;
|
|
10
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
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.EnvironmentService = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
let EnvironmentService = class EnvironmentService {
|
|
12
|
+
generateEnvironmentVariablesBlock(services) {
|
|
13
|
+
if (!services || services.length === 0) {
|
|
14
|
+
return '';
|
|
15
|
+
}
|
|
16
|
+
let envBlock = '\n environment {\n';
|
|
17
|
+
const allEnvVars = new Set();
|
|
18
|
+
for (const service of services) {
|
|
19
|
+
for (const envVar of service.envVariables) {
|
|
20
|
+
if (!allEnvVars.has(envVar.key)) {
|
|
21
|
+
allEnvVars.add(envVar.key);
|
|
22
|
+
if (envVar.isSecret) {
|
|
23
|
+
envBlock += ` ${envVar.key} = credentials('${this.getCredentialId(envVar.key)}')\n`;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
envBlock += ` ${envVar.key} = '\${env.${envVar.key} ?: ""}'\n`;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
envBlock += ' }\n';
|
|
32
|
+
return envBlock;
|
|
33
|
+
}
|
|
34
|
+
generateCredentialsSetupGuide(services) {
|
|
35
|
+
if (!services || services.length === 0) {
|
|
36
|
+
return '';
|
|
37
|
+
}
|
|
38
|
+
let guide = `\n╔════════════════════════════════════════════════════════════════╗
|
|
39
|
+
║ EXTERNAL SERVICES CREDENTIALS ║
|
|
40
|
+
╚════════════════════════════════════════════════════════════════╝\n\n`;
|
|
41
|
+
for (const service of services) {
|
|
42
|
+
guide += `\n## ${service.name.toUpperCase()} (${service.service})\n\n`;
|
|
43
|
+
const secretVars = service.envVariables.filter((v) => v.isSecret);
|
|
44
|
+
const nonSecretVars = service.envVariables.filter((v) => !v.isSecret);
|
|
45
|
+
if (secretVars.length > 0) {
|
|
46
|
+
guide += `**Secret Credentials (Store in Jenkins):**\n\n`;
|
|
47
|
+
for (const envVar of secretVars) {
|
|
48
|
+
guide += ` - ID: ${this.getCredentialId(envVar.key)}\n`;
|
|
49
|
+
guide += ` Type: Secret text\n`;
|
|
50
|
+
guide += ` Description: ${envVar.description}\n`;
|
|
51
|
+
guide += ` Environment Variable: ${envVar.key}\n\n`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (nonSecretVars.length > 0) {
|
|
55
|
+
guide += `**Non-Secret Configuration:**\n\n`;
|
|
56
|
+
for (const envVar of nonSecretVars) {
|
|
57
|
+
guide += ` - ${envVar.key}: ${envVar.description}\n`;
|
|
58
|
+
}
|
|
59
|
+
guide += `\n These can be stored in Jenkins as environment variables or in a .env file.\n\n`;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
guide += `\n╔════════════════════════════════════════════════════════════════╗
|
|
63
|
+
║ SETUP INSTRUCTIONS ║
|
|
64
|
+
╚════════════════════════════════════════════════════════════════╝\n\n`;
|
|
65
|
+
guide += `1. Go to Jenkins → Manage Jenkins → Manage Credentials\n`;
|
|
66
|
+
guide += `2. Select "Global credentials (unrestricted)"\n`;
|
|
67
|
+
guide += `3. Click "Add Credentials"\n`;
|
|
68
|
+
guide += `4. For each secret above:\n`;
|
|
69
|
+
guide += ` - Kind: Secret text\n`;
|
|
70
|
+
guide += ` - Scope: Global\n`;
|
|
71
|
+
guide += ` - Secret: [Your actual secret value]\n`;
|
|
72
|
+
guide += ` - ID: [Use the ID specified above]\n`;
|
|
73
|
+
guide += ` - Description: [Use the description above]\n\n`;
|
|
74
|
+
return guide;
|
|
75
|
+
}
|
|
76
|
+
generateDockerEnvironmentVariables(services) {
|
|
77
|
+
if (!services || services.length === 0) {
|
|
78
|
+
return '';
|
|
79
|
+
}
|
|
80
|
+
let dockerEnv = '';
|
|
81
|
+
for (const service of services) {
|
|
82
|
+
for (const envVar of service.envVariables) {
|
|
83
|
+
dockerEnv += ` --env ${envVar.key}="\${${envVar.key}}" \\\n`;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return dockerEnv;
|
|
87
|
+
}
|
|
88
|
+
generateEnvFileTemplate(services) {
|
|
89
|
+
if (!services || services.length === 0) {
|
|
90
|
+
return '';
|
|
91
|
+
}
|
|
92
|
+
let envFile = `# Environment Variables Template
|
|
93
|
+
# Generated by Jenkins Generator
|
|
94
|
+
# Copy this to .env and fill in your values\n\n`;
|
|
95
|
+
for (const service of services) {
|
|
96
|
+
envFile += `# ${service.name} (${service.service})\n`;
|
|
97
|
+
for (const envVar of service.envVariables) {
|
|
98
|
+
if (envVar.isSecret) {
|
|
99
|
+
envFile += `${envVar.key}=your_${envVar.key.toLowerCase()}_here # ${envVar.description}\n`;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
envFile += `${envVar.key}= # ${envVar.description}\n`;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
envFile += '\n';
|
|
106
|
+
}
|
|
107
|
+
return envFile;
|
|
108
|
+
}
|
|
109
|
+
generateReadmeServicesSection(services) {
|
|
110
|
+
if (!services || services.length === 0) {
|
|
111
|
+
return '';
|
|
112
|
+
}
|
|
113
|
+
let readme = `\n## External Services Configuration\n\n`;
|
|
114
|
+
readme += `This application uses the following external services:\n\n`;
|
|
115
|
+
for (const service of services) {
|
|
116
|
+
readme += `### ${service.name}\n`;
|
|
117
|
+
readme += `- **Type**: ${service.type}\n`;
|
|
118
|
+
readme += `- **Service**: ${service.service}\n`;
|
|
119
|
+
readme += `- **Environment Variables**:\n`;
|
|
120
|
+
for (const envVar of service.envVariables) {
|
|
121
|
+
const secretLabel = envVar.isSecret ? ' (Secret)' : '';
|
|
122
|
+
readme += ` - \`${envVar.key}\`${secretLabel}: ${envVar.description}\n`;
|
|
123
|
+
}
|
|
124
|
+
readme += '\n';
|
|
125
|
+
}
|
|
126
|
+
readme += `### Setup Instructions\n\n`;
|
|
127
|
+
readme += `1. Copy \`.env.template\` to \`.env\`\n`;
|
|
128
|
+
readme += `2. Fill in all required environment variables\n`;
|
|
129
|
+
readme += `3. For Jenkins deployment, configure credentials in Jenkins as specified in \`CREDENTIALS_SETUP.md\`\n`;
|
|
130
|
+
readme += `4. Never commit \`.env\` file to version control\n\n`;
|
|
131
|
+
return readme;
|
|
132
|
+
}
|
|
133
|
+
getCredentialId(envVarKey) {
|
|
134
|
+
return envVarKey.toLowerCase().replace(/_/g, '-');
|
|
135
|
+
}
|
|
136
|
+
generateKubernetesSecrets(services) {
|
|
137
|
+
if (!services || services.length === 0) {
|
|
138
|
+
return '';
|
|
139
|
+
}
|
|
140
|
+
let yaml = `# Kubernetes Secrets Template
|
|
141
|
+
# Generate base64 values: echo -n "your-value" | base64
|
|
142
|
+
|
|
143
|
+
apiVersion: v1
|
|
144
|
+
kind: Secret
|
|
145
|
+
metadata:
|
|
146
|
+
name: app-secrets
|
|
147
|
+
type: Opaque
|
|
148
|
+
data:\n`;
|
|
149
|
+
for (const service of services) {
|
|
150
|
+
for (const envVar of service.envVariables) {
|
|
151
|
+
if (envVar.isSecret) {
|
|
152
|
+
yaml += ` ${envVar.key}: <base64-encoded-value> # ${envVar.description}\n`;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return yaml;
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
exports.EnvironmentService = EnvironmentService;
|
|
160
|
+
exports.EnvironmentService = EnvironmentService = __decorate([
|
|
161
|
+
(0, common_1.Injectable)()
|
|
162
|
+
], EnvironmentService);
|
|
163
|
+
//# sourceMappingURL=environment.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.service.js","sourceRoot":"","sources":["../../src/services/environment.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,13 @@ import { CICDConfig } from '../interfaces/config.interface';
|
|
|
2
2
|
import { CloudProviderService } from './cloud-provider.service';
|
|
3
3
|
import { NotificationService } from './notification.service';
|
|
4
4
|
import { SecurityService } from './security.service';
|
|
5
|
+
import { EnvironmentService } from './environment.service';
|
|
5
6
|
export declare class JenkinsFileService {
|
|
6
7
|
private readonly cloudProvider;
|
|
7
8
|
private readonly notificationService;
|
|
8
9
|
private readonly securityService;
|
|
9
|
-
|
|
10
|
+
private readonly environmentService;
|
|
11
|
+
constructor(cloudProvider: CloudProviderService, notificationService: NotificationService, securityService: SecurityService, environmentService: EnvironmentService);
|
|
10
12
|
generateJenkinsfile(config: CICDConfig): string;
|
|
11
13
|
private generateTestStage;
|
|
12
14
|
generateCredentialsSetupGuide(config: CICDConfig): string;
|
|
@@ -14,14 +14,17 @@ const common_1 = require("@nestjs/common");
|
|
|
14
14
|
const cloud_provider_service_1 = require("./cloud-provider.service");
|
|
15
15
|
const notification_service_1 = require("./notification.service");
|
|
16
16
|
const security_service_1 = require("./security.service");
|
|
17
|
+
const environment_service_1 = require("./environment.service");
|
|
17
18
|
let JenkinsFileService = class JenkinsFileService {
|
|
18
19
|
cloudProvider;
|
|
19
20
|
notificationService;
|
|
20
21
|
securityService;
|
|
21
|
-
|
|
22
|
+
environmentService;
|
|
23
|
+
constructor(cloudProvider, notificationService, securityService, environmentService) {
|
|
22
24
|
this.cloudProvider = cloudProvider;
|
|
23
25
|
this.notificationService = notificationService;
|
|
24
26
|
this.securityService = securityService;
|
|
27
|
+
this.environmentService = environmentService;
|
|
25
28
|
}
|
|
26
29
|
generateJenkinsfile(config) {
|
|
27
30
|
const { project, cloud, notifications, jenkinsConfig } = config;
|
|
@@ -32,8 +35,9 @@ let JenkinsFileService = class JenkinsFileService {
|
|
|
32
35
|
const notificationFunctions = this.notificationService.generateNotificationScript(notifications);
|
|
33
36
|
const deploymentScript = this.cloudProvider.generateDeploymentScript(cloud, dockerImageName);
|
|
34
37
|
const credentialsEnv = this.cloudProvider.generateCredentialsEnvironmentVariables(cloud);
|
|
38
|
+
const externalServicesEnv = this.environmentService.generateEnvironmentVariablesBlock(project.externalServices);
|
|
35
39
|
const jenkinsfile = `// Auto-generated Jenkins Pipeline
|
|
36
|
-
// Generated by
|
|
40
|
+
// Generated by Jenkins Generator
|
|
37
41
|
// Project: ${project.projectName}
|
|
38
42
|
// Cloud Provider: ${cloud.provider}
|
|
39
43
|
// Generated on: ${new Date().toISOString()}
|
|
@@ -51,6 +55,7 @@ pipeline {
|
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
${credentialsEnv}
|
|
58
|
+
${externalServicesEnv}
|
|
54
59
|
|
|
55
60
|
stages {
|
|
56
61
|
stage('Checkout') {
|
|
@@ -103,7 +108,7 @@ ${project.runTests && project.testCommand
|
|
|
103
108
|
def dockerImage = "${dockerImageName}:${dockerImageTag}"
|
|
104
109
|
|
|
105
110
|
${project.hasDockerfile
|
|
106
|
-
? `sh "docker build -t \${dockerImage} -f ${project.dockerfilePath} ."`
|
|
111
|
+
? `sh "docker build -t \${dockerImage} -f ${project.dockerfilePath || 'Dockerfile'} ."`
|
|
107
112
|
: `error("Dockerfile not found. Please ensure Dockerfile exists in the project.")`}
|
|
108
113
|
|
|
109
114
|
env.DOCKER_IMAGE = dockerImage
|
|
@@ -229,7 +234,7 @@ ${notificationFunctions}
|
|
|
229
234
|
`;
|
|
230
235
|
}
|
|
231
236
|
generateCredentialsSetupGuide(config) {
|
|
232
|
-
const { cloud, notifications } = config;
|
|
237
|
+
const { cloud, notifications, project } = config;
|
|
233
238
|
let guide = `
|
|
234
239
|
╔════════════════════════════════════════════════════════════════╗
|
|
235
240
|
║ JENKINS CREDENTIALS SETUP GUIDE ║
|
|
@@ -305,6 +310,9 @@ Please configure the following credentials in Jenkins:
|
|
|
305
310
|
`;
|
|
306
311
|
break;
|
|
307
312
|
}
|
|
313
|
+
if (project.externalServices && project.externalServices.length > 0) {
|
|
314
|
+
guide += this.environmentService.generateCredentialsSetupGuide(project.externalServices);
|
|
315
|
+
}
|
|
308
316
|
guide += `
|
|
309
317
|
4. NOTIFICATION CREDENTIALS (if applicable)
|
|
310
318
|
Email notifications are configured automatically.
|
|
@@ -326,11 +334,11 @@ Please configure the following credentials in Jenkins:
|
|
|
326
334
|
}
|
|
327
335
|
generateReadme(config) {
|
|
328
336
|
const { project, cloud } = config;
|
|
329
|
-
|
|
337
|
+
let readme = `# ${project.projectName} - CI/CD Pipeline
|
|
330
338
|
|
|
331
339
|
## Auto-generated CI/CD Configuration
|
|
332
340
|
|
|
333
|
-
This Jenkins pipeline was automatically generated by
|
|
341
|
+
This Jenkins pipeline was automatically generated by Jenkins Generator.
|
|
334
342
|
|
|
335
343
|
### Project Information
|
|
336
344
|
- **Project Name:** ${project.projectName}
|
|
@@ -377,7 +385,11 @@ ${project.runTests ? '3. **Run Tests** - Execute test suite\n' : ''}4. **Build**
|
|
|
377
385
|
- Monitor pipeline execution
|
|
378
386
|
- Check email notifications
|
|
379
387
|
- Verify application is running in ${cloud.provider.toUpperCase()}
|
|
380
|
-
|
|
388
|
+
`;
|
|
389
|
+
if (project.externalServices && project.externalServices.length > 0) {
|
|
390
|
+
readme += this.environmentService.generateReadmeServicesSection(project.externalServices);
|
|
391
|
+
}
|
|
392
|
+
readme += `
|
|
381
393
|
### Customization
|
|
382
394
|
|
|
383
395
|
To modify the pipeline:
|
|
@@ -402,6 +414,7 @@ For issues or questions, refer to:
|
|
|
402
414
|
---
|
|
403
415
|
Generated on: ${new Date().toISOString()}
|
|
404
416
|
`;
|
|
417
|
+
return readme;
|
|
405
418
|
}
|
|
406
419
|
};
|
|
407
420
|
exports.JenkinsFileService = JenkinsFileService;
|
|
@@ -409,6 +422,7 @@ exports.JenkinsFileService = JenkinsFileService = __decorate([
|
|
|
409
422
|
(0, common_1.Injectable)(),
|
|
410
423
|
__metadata("design:paramtypes", [cloud_provider_service_1.CloudProviderService,
|
|
411
424
|
notification_service_1.NotificationService,
|
|
412
|
-
security_service_1.SecurityService
|
|
425
|
+
security_service_1.SecurityService,
|
|
426
|
+
environment_service_1.EnvironmentService])
|
|
413
427
|
], JenkinsFileService);
|
|
414
428
|
//# sourceMappingURL=jenkinsfile.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jenkinsfile.service.js","sourceRoot":"","sources":["../../src/services/jenkinsfile.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAE5C,qEAAgE;AAChE,iEAA6D;AAC7D,yDAAqD;
|
|
1
|
+
{"version":3,"file":"jenkinsfile.service.js","sourceRoot":"","sources":["../../src/services/jenkinsfile.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,15 @@ export declare class PromptService {
|
|
|
5
5
|
constructor(validationService: ValidationService);
|
|
6
6
|
collectAllConfigurations(): Promise<CICDConfig>;
|
|
7
7
|
private collectProjectConfig;
|
|
8
|
+
private collectExternalServices;
|
|
9
|
+
private configureDatabaseService;
|
|
10
|
+
private configureCacheService;
|
|
11
|
+
private configureQueueService;
|
|
12
|
+
private configureStorageService;
|
|
13
|
+
private configureEmailService;
|
|
14
|
+
private configureMonitoringService;
|
|
15
|
+
private configureCustomService;
|
|
16
|
+
private consolidateEnvironmentVariables;
|
|
8
17
|
private collectCloudConfig;
|
|
9
18
|
private collectAWSCredentials;
|
|
10
19
|
private collectAzureCredentials;
|