projen-pipelines 0.2.11 → 0.2.13
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/.jsii +5051 -1445
- package/API.md +3366 -457
- package/README.md +270 -0
- package/lib/assign-approver/base.js +1 -1
- package/lib/assign-approver/github.js +1 -1
- package/lib/awscdk/base.d.ts +21 -0
- package/lib/awscdk/base.js +247 -3
- package/lib/awscdk/bash.js +1 -1
- package/lib/awscdk/github.d.ts +12 -0
- package/lib/awscdk/github.js +117 -2
- package/lib/awscdk/gitlab.d.ts +1 -0
- package/lib/awscdk/gitlab.js +8 -2
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/steps/artifact-steps.js +2 -2
- package/lib/steps/aws-assume-role.step.js +1 -1
- package/lib/steps/registries.js +2 -2
- package/lib/steps/step.js +4 -4
- package/lib/versioning/computation.d.ts +63 -0
- package/lib/versioning/computation.js +121 -0
- package/lib/versioning/config.d.ts +41 -0
- package/lib/versioning/config.js +91 -0
- package/lib/versioning/index.d.ts +7 -0
- package/lib/versioning/index.js +46 -0
- package/lib/versioning/outputs.d.ts +87 -0
- package/lib/versioning/outputs.js +166 -0
- package/lib/versioning/setup.d.ts +30 -0
- package/lib/versioning/setup.js +165 -0
- package/lib/versioning/strategy.d.ts +21 -0
- package/lib/versioning/strategy.js +51 -0
- package/lib/versioning/types.d.ts +183 -0
- package/lib/versioning/types.js +3 -0
- package/lib/versioning/version-info.d.ts +106 -0
- package/lib/versioning/version-info.js +269 -0
- package/llm.md +23 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,6 +16,7 @@ specifically designed to work with the projen project configuration engine.
|
|
|
16
16
|
* Allows easy switching between different CI/CD platforms without rewriting pipeline configurations
|
|
17
17
|
* Handles complex deployment scenarios with less code
|
|
18
18
|
* Manages AWS infrastructure more efficiently and straightforwardly
|
|
19
|
+
* Automatic versioning with flexible strategies and multiple output targets
|
|
19
20
|
|
|
20
21
|
### Benefits
|
|
21
22
|
|
|
@@ -23,6 +24,7 @@ specifically designed to work with the projen project configuration engine.
|
|
|
23
24
|
* Ensures consistency across projects by using proven defaults
|
|
24
25
|
* Simplifies compliance management by integrating it directly into pipeline definitions
|
|
25
26
|
* Facilitates platform migrations (e.g., from GitHub to GitLab) by abstracting pipeline definitions
|
|
27
|
+
* Provides automatic version tracking and exposure through CloudFormation and SSM Parameter Store
|
|
26
28
|
|
|
27
29
|
## Beyond AWS CDK: A Vision for Universal CI/CD Pipeline Generation
|
|
28
30
|
|
|
@@ -203,6 +205,274 @@ Here's a brief description of each one:
|
|
|
203
205
|
|
|
204
206
|
Remember that these tasks are created and managed automatically by the `CDKPipeline` class. You can run these tasks using the `npx projen TASK_NAME` command.
|
|
205
207
|
|
|
208
|
+
## Versioning
|
|
209
|
+
|
|
210
|
+
Projen Pipelines includes a comprehensive versioning system that automatically tracks and exposes deployment versions through various AWS services. This feature enables deployment traceability, automated rollback decisions, and comprehensive audit trails.
|
|
211
|
+
|
|
212
|
+
### Basic Versioning Configuration
|
|
213
|
+
|
|
214
|
+
To enable versioning in your pipeline, add the `versioning` configuration:
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
import { awscdk } from 'projen';
|
|
218
|
+
import { GithubCDKPipeline, VersioningStrategy, VersioningOutputs } from 'projen-pipelines';
|
|
219
|
+
|
|
220
|
+
const app = new awscdk.AwsCdkTypeScriptApp({
|
|
221
|
+
// ... other config
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
new GithubCDKPipeline(app, {
|
|
225
|
+
// ... other pipeline config
|
|
226
|
+
|
|
227
|
+
versioning: {
|
|
228
|
+
enabled: true,
|
|
229
|
+
strategy: VersioningStrategy.commitCount(),
|
|
230
|
+
outputs: VersioningOutputs.standard()
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Versioning Strategies
|
|
236
|
+
|
|
237
|
+
Projen Pipelines provides several built-in versioning strategies:
|
|
238
|
+
|
|
239
|
+
#### Git Tag Strategy
|
|
240
|
+
Uses git tags as the version source, with optional prefix stripping:
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
// Basic git tag strategy
|
|
244
|
+
const strategy = VersioningStrategy.gitTag();
|
|
245
|
+
|
|
246
|
+
// With custom configuration
|
|
247
|
+
const strategy = VersioningStrategy.gitTag({
|
|
248
|
+
stripPrefix: 'v', // Strip 'v' from tags (v1.2.3 → 1.2.3)
|
|
249
|
+
annotatedOnly: true, // Only use annotated tags
|
|
250
|
+
includeSinceTag: true // Include commits since tag
|
|
251
|
+
});
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
#### Package.json Strategy
|
|
255
|
+
Uses the version from your package.json file:
|
|
256
|
+
|
|
257
|
+
```typescript
|
|
258
|
+
// Basic package.json strategy
|
|
259
|
+
const strategy = VersioningStrategy.packageJson();
|
|
260
|
+
|
|
261
|
+
// With custom configuration
|
|
262
|
+
const strategy = VersioningStrategy.packageJson({
|
|
263
|
+
path: './package.json',
|
|
264
|
+
includePrerelease: true,
|
|
265
|
+
appendCommitInfo: true
|
|
266
|
+
});
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
#### Commit Count Strategy
|
|
270
|
+
Uses the number of commits as the version:
|
|
271
|
+
|
|
272
|
+
```typescript
|
|
273
|
+
// Basic commit count strategy
|
|
274
|
+
const strategy = VersioningStrategy.commitCount();
|
|
275
|
+
|
|
276
|
+
// With custom configuration
|
|
277
|
+
const strategy = VersioningStrategy.commitCount({
|
|
278
|
+
countFrom: 'all', // 'all' | 'since-tag'
|
|
279
|
+
includeBranch: true, // Include branch name
|
|
280
|
+
padding: 5 // Zero-pad count (00001)
|
|
281
|
+
});
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
#### Build Number Strategy
|
|
285
|
+
Creates a version from build metadata:
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
// Basic build number strategy
|
|
289
|
+
const strategy = VersioningStrategy.buildNumber();
|
|
290
|
+
|
|
291
|
+
// With custom configuration
|
|
292
|
+
const strategy = VersioningStrategy.buildNumber({
|
|
293
|
+
prefix: 'release',
|
|
294
|
+
commitCount: { countFrom: 'all', padding: 5 }
|
|
295
|
+
});
|
|
296
|
+
// Output: release-01234-3a4b5c6d
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
#### Custom Composite Strategy
|
|
300
|
+
Create your own version format using template variables:
|
|
301
|
+
|
|
302
|
+
```typescript
|
|
303
|
+
const strategy = VersioningStrategy.create(
|
|
304
|
+
'{git-tag}+{commit-count}-{commit-hash:8}',
|
|
305
|
+
{
|
|
306
|
+
gitTag: { stripPrefix: 'v' },
|
|
307
|
+
commitCount: { countFrom: 'since-tag' }
|
|
308
|
+
}
|
|
309
|
+
);
|
|
310
|
+
// Output: 1.2.3+45-3a4b5c6d
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### Version Output Configurations
|
|
314
|
+
|
|
315
|
+
Control how and where version information is exposed:
|
|
316
|
+
|
|
317
|
+
#### CloudFormation Outputs
|
|
318
|
+
Export version information as CloudFormation stack outputs:
|
|
319
|
+
|
|
320
|
+
```typescript
|
|
321
|
+
// Basic CloudFormation output
|
|
322
|
+
const outputs = VersioningOutputs.cloudFormationOnly();
|
|
323
|
+
|
|
324
|
+
// With custom configuration
|
|
325
|
+
const outputs = VersioningOutputs.cloudFormationOnly({
|
|
326
|
+
exportName: 'MyApp-{stage}-Version'
|
|
327
|
+
});
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
#### SSM Parameter Store
|
|
331
|
+
Store version information in AWS Systems Manager Parameter Store:
|
|
332
|
+
|
|
333
|
+
```typescript
|
|
334
|
+
// Basic parameter store
|
|
335
|
+
const outputs = VersioningOutputs.parameterStoreOnly('/myapp/{stage}/version');
|
|
336
|
+
|
|
337
|
+
// Hierarchical parameters
|
|
338
|
+
const outputs = VersioningOutputs.hierarchicalParameters('/myapp/{stage}/version', {
|
|
339
|
+
includeCloudFormation: true
|
|
340
|
+
});
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
This creates parameters like:
|
|
344
|
+
- `/myapp/prod/version` → Full version JSON
|
|
345
|
+
- `/myapp/prod/version/commit` → Commit hash
|
|
346
|
+
- `/myapp/prod/version/tag` → Git tag
|
|
347
|
+
- `/myapp/prod/version/count` → Commit count
|
|
348
|
+
|
|
349
|
+
#### Standard Configuration
|
|
350
|
+
The recommended configuration that uses CloudFormation outputs with optional Parameter Store:
|
|
351
|
+
|
|
352
|
+
```typescript
|
|
353
|
+
const outputs = VersioningOutputs.standard({
|
|
354
|
+
parameterName: '/myapp/{stage}/version',
|
|
355
|
+
});
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Output Formats
|
|
359
|
+
|
|
360
|
+
Version information can be output in two formats:
|
|
361
|
+
|
|
362
|
+
**Plain Format:** Simple string values in CloudFormation
|
|
363
|
+
```yaml
|
|
364
|
+
Outputs:
|
|
365
|
+
AppVersion:
|
|
366
|
+
Value: "1.2.3+45-3a4b5c6d"
|
|
367
|
+
Description: "Application version"
|
|
368
|
+
AppCommitHash:
|
|
369
|
+
Value: "3a4b5c6def1234567890"
|
|
370
|
+
Description: "Git commit hash"
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
**Structured Format:** JSON object with comprehensive metadata in SSM
|
|
374
|
+
```json
|
|
375
|
+
{
|
|
376
|
+
"version": "1.2.3",
|
|
377
|
+
"commitHash": "3a4b5c6def1234567890",
|
|
378
|
+
"commitCount": 1234,
|
|
379
|
+
"commitsSinceTag": 45,
|
|
380
|
+
"branch": "main",
|
|
381
|
+
"tag": "v1.2.3",
|
|
382
|
+
"deployedAt": "2024-01-15T10:30:00Z",
|
|
383
|
+
"deployedBy": "github-actions",
|
|
384
|
+
"buildNumber": "456",
|
|
385
|
+
"environment": "production"
|
|
386
|
+
}
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### Stage-Specific Overrides
|
|
390
|
+
|
|
391
|
+
Configure different versioning strategies for different stages:
|
|
392
|
+
|
|
393
|
+
```typescript
|
|
394
|
+
new GithubCDKPipeline(app, {
|
|
395
|
+
versioning: {
|
|
396
|
+
enabled: true,
|
|
397
|
+
strategy: VersioningStrategy.gitTag(),
|
|
398
|
+
outputs: VersioningOutputs.standard(),
|
|
399
|
+
stageOverrides: {
|
|
400
|
+
dev: {
|
|
401
|
+
strategy: VersioningStrategy.commitCount(),
|
|
402
|
+
outputs: VersioningOutputs.minimal()
|
|
403
|
+
},
|
|
404
|
+
prod: {
|
|
405
|
+
validation: {
|
|
406
|
+
requireTag: true,
|
|
407
|
+
tagPattern: /^v\d+\.\d+\.\d+$/
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
});
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
### Template Variables
|
|
416
|
+
|
|
417
|
+
All strategies support these template variables:
|
|
418
|
+
- `{git-tag}` - Git tag (with optional prefix stripping)
|
|
419
|
+
- `{package-version}` - Version from package.json
|
|
420
|
+
- `{commit-count}` - Number of commits
|
|
421
|
+
- `{commit-hash}` - Full commit hash
|
|
422
|
+
- `{commit-hash:8}` - Short commit hash (8 characters)
|
|
423
|
+
- `{branch}` - Git branch name
|
|
424
|
+
- `{build-number}` - CI/CD build number
|
|
425
|
+
|
|
426
|
+
### Benefits of Versioning
|
|
427
|
+
|
|
428
|
+
1. **Deployment Traceability**: Always know exactly which code version is deployed
|
|
429
|
+
2. **Automated Rollback**: Use version information for automated rollback decisions
|
|
430
|
+
3. **Audit Trail**: Comprehensive deployment history with metadata
|
|
431
|
+
4. **Multi-Stage Support**: Different versioning strategies per environment
|
|
432
|
+
5. **Zero Configuration**: Works out-of-the-box with sensible defaults
|
|
433
|
+
6. **CI/CD Integration**: Automatically detects version info from CI/CD environments
|
|
434
|
+
|
|
435
|
+
### Feature Branch Deployments
|
|
436
|
+
|
|
437
|
+
Projen Pipelines supports automated feature branch deployments for GitHub Actions. This allows you to deploy and test your changes in isolated environments before merging to the main branch. Gitlab support is currently missing.
|
|
438
|
+
|
|
439
|
+
#### Configuration
|
|
440
|
+
|
|
441
|
+
To enable feature branch deployments, add the `featureStages` configuration to your pipeline:
|
|
442
|
+
|
|
443
|
+
```typescript
|
|
444
|
+
new GithubCDKPipeline(app, {
|
|
445
|
+
stackPrefix: 'MyApp',
|
|
446
|
+
iamRoleArns: {
|
|
447
|
+
default: 'arn:aws:iam::123456789012:role/GithubDeploymentRole',
|
|
448
|
+
},
|
|
449
|
+
featureStages: {
|
|
450
|
+
env: { account: '123456789013', region: 'eu-central-1' },
|
|
451
|
+
},
|
|
452
|
+
stages: [
|
|
453
|
+
// ... your regular stages
|
|
454
|
+
],
|
|
455
|
+
});
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
#### How It Works
|
|
459
|
+
|
|
460
|
+
When feature stages are configured, two GitHub workflows are created:
|
|
461
|
+
|
|
462
|
+
1. **deploy-feature** - Automatically deploys your feature branch when a pull request is labeled with `feature-deployment`
|
|
463
|
+
2. **destroy-feature** - Automatically destroys the feature deployment when:
|
|
464
|
+
- The pull request is closed
|
|
465
|
+
- The `feature-deployment` label is removed from the pull request
|
|
466
|
+
|
|
467
|
+
#### Using Feature Deployments
|
|
468
|
+
|
|
469
|
+
1. Create a pull request with your changes
|
|
470
|
+
2. Add the `feature-deployment` label to trigger deployment
|
|
471
|
+
3. The feature environment will be deployed with a stack name including your branch name
|
|
472
|
+
4. Remove the label or close the PR to destroy the feature environment
|
|
473
|
+
|
|
474
|
+
The feature deployment uses the `--force` flag when destroying to ensure cleanup without manual confirmation.
|
|
475
|
+
|
|
206
476
|
## Current Status
|
|
207
477
|
|
|
208
478
|
Projen-Pipelines is currently in version 0.x, awaiting Projen's 1.0 release. Despite its pre-1.0 status, it's being used in several production environments.
|
|
@@ -12,5 +12,5 @@ class AssignApprover extends projen_1.Component {
|
|
|
12
12
|
}
|
|
13
13
|
exports.AssignApprover = AssignApprover;
|
|
14
14
|
_a = JSII_RTTI_SYMBOL_1;
|
|
15
|
-
AssignApprover[_a] = { fqn: "projen-pipelines.AssignApprover", version: "0.2.
|
|
15
|
+
AssignApprover[_a] = { fqn: "projen-pipelines.AssignApprover", version: "0.2.13" };
|
|
16
16
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hc3NpZ24tYXBwcm92ZXIvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUE0QztBQXVCNUMsTUFBc0IsY0FBZSxTQUFRLGtCQUFTO0lBR3BELFlBQVksS0FBYyxFQUFxQixXQUFrQztRQUMvRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFEZ0MsZ0JBQVcsR0FBWCxXQUFXLENBQXVCO0lBRWpGLENBQUM7O0FBTEgsd0NBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFByb2plY3QgfSBmcm9tICdwcm9qZW4nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcHJvdmVyTWFwcGluZyB7XG5cbiAgcmVhZG9ubHkgYXV0aG9yOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFwcHJvdmVyczogc3RyaW5nW107XG5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3NpZ25BcHByb3Zlck9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBUaGUgbWFwcGluZyBvZiBhdXRob3JzIHRvIGFwcHJvdmVycy5cbiAgICovXG4gIHJlYWRvbmx5IGFwcHJvdmVyTWFwcGluZzogQXBwcm92ZXJNYXBwaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgdG9rZW4gdG8gdXNlIGZvciB0aGUgQVBJIGNhbGxzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEFwcHJvdmVyczogc3RyaW5nW107XG5cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFzc2lnbkFwcHJvdmVyIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBQcm9qZWN0LCBwcm90ZWN0ZWQgcmVhZG9ubHkgYmFzZU9wdGlvbnM6IEFzc2lnbkFwcHJvdmVyT3B0aW9ucykge1xuICAgIHN1cGVyKHNjb3BlKTtcbiAgfVxuXG59Il19
|
|
@@ -81,5 +81,5 @@ if (filteredApprovers.length > 0) {
|
|
|
81
81
|
}
|
|
82
82
|
exports.GitHubAssignApprover = GitHubAssignApprover;
|
|
83
83
|
_a = JSII_RTTI_SYMBOL_1;
|
|
84
|
-
GitHubAssignApprover[_a] = { fqn: "projen-pipelines.GitHubAssignApprover", version: "0.2.
|
|
84
|
+
GitHubAssignApprover[_a] = { fqn: "projen-pipelines.GitHubAssignApprover", version: "0.2.13" };
|
|
85
85
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Fzc2lnbi1hcHByb3Zlci9naXRodWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSx1RUFBa0Y7QUFDbEYsaUNBQStEO0FBYS9ELE1BQWEsb0JBQXFCLFNBQVEscUJBQWM7SUFJdEQsWUFBWSxLQUFvQixFQUFFLE9BQW9DO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdkIsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU8sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNmLGlCQUFpQixFQUFFO2dCQUNqQixLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUM7YUFDdEM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCO1FBQ3RCLE9BQU87WUFDTCxZQUFZLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBRVMsYUFBYTtRQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWhFLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFFbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7WUFDdEMsTUFBTSxFQUFFLFVBQVU7WUFDbEIsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUNyQyxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsSUFBSSxFQUFFLGlDQUFpQztvQkFDdkMsSUFBSSxFQUFFLDBCQUEwQjtvQkFDaEMsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSxxQkFBcUI7cUJBQzlCO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsNkJBQTZCO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZTthQUNwRCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDN0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQjthQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVkLE9BQU87Ozs7RUFJVCxjQUFjLEdBQUcsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdkMsZ0JBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxQjlCLENBQUM7SUFDRCxDQUFDOztBQXBGSCxvREFxRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHaXRIdWJQcm9qZWN0LCBHaXRodWJXb3JrZmxvdyB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViJztcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24sIEpvYlBlcm1pc3Npb25zIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IEFzc2lnbkFwcHJvdmVyLCBBc3NpZ25BcHByb3Zlck9wdGlvbnMgfSBmcm9tICcuL2Jhc2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdpdEh1YkFzc2lnbkFwcHJvdmVyT3B0aW9ucyBleHRlbmRzIEFzc2lnbkFwcHJvdmVyT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIHJ1bm5lciB0YWdzIHRvIHVzZSB0byBzZWxlY3QgcnVubmVyc1xuICAgKlxuICAgKiBAZGVmYXVsdCBbJ3VidW50dS1sYXRlc3QnXVxuICAgKi9cbiAgcmVhZG9ubHkgcnVubmVyVGFncz86IHN0cmluZ1tdO1xuXG59XG5cbmV4cG9ydCBjbGFzcyBHaXRIdWJBc3NpZ25BcHByb3ZlciBleHRlbmRzIEFzc2lnbkFwcHJvdmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvdzogR2l0aHViV29ya2Zsb3c7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogR2l0SHViQXNzaWduQXBwcm92ZXJPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBHaXRIdWJQcm9qZWN0LCBvcHRpb25zOiBHaXRIdWJBc3NpZ25BcHByb3Zlck9wdGlvbnMpIHtcbiAgICBzdXBlcihzY29wZSwgb3B0aW9ucyk7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGRlcGxveW1lbnQgd29ya2Zsb3cgb24gR2l0SHViLlxuICAgIHRoaXMud29ya2Zsb3cgPSBzY29wZS5naXRodWIhLmFkZFdvcmtmbG93KCdhc3NpZ24tYXBwcm92ZXInKTtcbiAgICB0aGlzLndvcmtmbG93Lm9uKHtcbiAgICAgIHB1bGxSZXF1ZXN0VGFyZ2V0OiB7XG4gICAgICAgIHR5cGVzOiBbJ29wZW5lZCcsICdyZWFkeV9mb3JfcmV2aWV3J10sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZXR1cFdvcmtmbG93KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyBmb3IgdGhlIEdpdEh1YiB3b3JrZmxvd1xuICAgKi9cbiAgcHVibGljIHJlbmRlclBlcm1pc3Npb25zKCk6IEpvYlBlcm1pc3Npb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbFJlcXVlc3RzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBXb3JrZmxvdygpOiB2b2lkIHtcbiAgICBjb25zdCBydW5uZXJUYWdzID0gdGhpcy5vcHRpb25zLnJ1bm5lclRhZ3MgPz8gWyd1YnVudHUtbGF0ZXN0J107XG5cbiAgICBjb25zdCBhcHByb3Zlck1hcHBpbmdTY3JpcHQgPSB0aGlzLmdlbmVyYXRlQXBwcm92ZXJNYXBwaW5nU2NyaXB0KCk7XG5cbiAgICB0aGlzLndvcmtmbG93LmFkZEpvYignYXNzaWduLWFwcHJvdmVyJywge1xuICAgICAgcnVuc09uOiBydW5uZXJUYWdzLFxuICAgICAgcGVybWlzc2lvbnM6IHRoaXMucmVuZGVyUGVybWlzc2lvbnMoKSxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQXNzaWduIGFwcHJvdmVyIGJhc2VkIG9uIGF1dGhvcicsXG4gICAgICAgICAgdXNlczogJ2FjdGlvbnMvZ2l0aHViLXNjcmlwdEB2NycsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgc2NyaXB0OiBhcHByb3Zlck1hcHBpbmdTY3JpcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVBcHByb3Zlck1hcHBpbmdTY3JpcHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXBwaW5nRW50cmllcyA9IHRoaXMuYmFzZU9wdGlvbnMuYXBwcm92ZXJNYXBwaW5nXG4gICAgICAubWFwKG1hcHBpbmcgPT4gYCAgJyR7bWFwcGluZy5hdXRob3J9JzogWyR7bWFwcGluZy5hcHByb3ZlcnMubWFwKGEgPT4gYCcke2F9J2ApLmpvaW4oJywgJyl9XWApXG4gICAgICAuam9pbignLFxcbicpO1xuXG4gICAgY29uc3QgZGVmYXVsdEFwcHJvdmVycyA9IHRoaXMuYmFzZU9wdGlvbnMuZGVmYXVsdEFwcHJvdmVyc1xuICAgICAgLm1hcChhID0+IGAnJHthfSdgKVxuICAgICAgLmpvaW4oJywgJyk7XG5cbiAgICByZXR1cm4gYGNvbnN0IGF1dGhvciA9IGNvbnRleHQucGF5bG9hZC5wdWxsX3JlcXVlc3QudXNlci5sb2dpbjtcblxuLy8gRGVmaW5lIGFwcHJvdmVyIG1hcHBpbmdcbmNvbnN0IGFwcHJvdmVyTWFwcGluZyA9IHtcbiR7bWFwcGluZ0VudHJpZXN9JHttYXBwaW5nRW50cmllcy5sZW5ndGggPiAwID8gJywnIDogJyd9XG4gICdkZWZhdWx0JzogWyR7ZGVmYXVsdEFwcHJvdmVyc31dIC8vIERlZmF1bHQgYXBwcm92ZXIocykgaWYgYXV0aG9yIG5vdCBpbiBtYXBwaW5nXG59O1xuXG4vLyBHZXQgYXBwcm92ZXJzIGZvciB0aGUgUFIgYXV0aG9yXG5jb25zdCBhcHByb3ZlcnMgPSBhcHByb3Zlck1hcHBpbmdbYXV0aG9yXSB8fCBhcHByb3Zlck1hcHBpbmdbJ2RlZmF1bHQnXTtcblxuLy8gRmlsdGVyIG91dCB0aGUgYXV0aG9yIGZyb20gYXBwcm92ZXJzIGxpc3QgKGNhbid0IGFwcHJvdmUgb3duIFBSKVxuY29uc3QgZmlsdGVyZWRBcHByb3ZlcnMgPSBhcHByb3ZlcnMuZmlsdGVyKGFwcHJvdmVyID0+IGFwcHJvdmVyICE9PSBhdXRob3IpO1xuXG5pZiAoZmlsdGVyZWRBcHByb3ZlcnMubGVuZ3RoID4gMCkge1xuICAvLyBSZXF1ZXN0IHJldmlld3MgZnJvbSB0aGUgYXBwcm92ZXJzXG4gIGF3YWl0IGdpdGh1Yi5yZXN0LnB1bGxzLnJlcXVlc3RSZXZpZXdlcnMoe1xuICAgIG93bmVyOiBjb250ZXh0LnJlcG8ub3duZXIsXG4gICAgcmVwbzogY29udGV4dC5yZXBvLnJlcG8sXG4gICAgcHVsbF9udW1iZXI6IGNvbnRleHQuaXNzdWUubnVtYmVyLFxuICAgIHJldmlld2VyczogZmlsdGVyZWRBcHByb3ZlcnNcbiAgfSk7XG4gIFxuICBjb25zb2xlLmxvZyhcXGBBc3NpZ25lZCByZXZpZXdlcnM6IFxcJHtmaWx0ZXJlZEFwcHJvdmVycy5qb2luKCcsICcpfVxcYCk7XG59IGVsc2Uge1xuICBjb25zb2xlLmxvZygnTm8gZWxpZ2libGUgcmV2aWV3ZXJzIGZvdW5kIGZvciB0aGlzIFBSIGF1dGhvcicpO1xufWA7XG4gIH1cbn1cbiJdfQ==
|
package/lib/awscdk/base.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Component, awscdk } from 'projen';
|
|
2
2
|
import { PipelineEngine } from '../engine';
|
|
3
3
|
import { PipelineStep } from '../steps';
|
|
4
|
+
import { VersioningConfig } from '../versioning';
|
|
4
5
|
/**
|
|
5
6
|
* The Environment interface is designed to hold AWS related information
|
|
6
7
|
* for a specific deployment environment within your infrastructure.
|
|
@@ -138,6 +139,10 @@ export interface CDKPipelineOptions {
|
|
|
138
139
|
readonly preInstallSteps?: PipelineStep[];
|
|
139
140
|
readonly preSynthSteps?: PipelineStep[];
|
|
140
141
|
readonly postSynthSteps?: PipelineStep[];
|
|
142
|
+
/**
|
|
143
|
+
* Versioning configuration
|
|
144
|
+
*/
|
|
145
|
+
readonly versioning?: VersioningConfig;
|
|
141
146
|
}
|
|
142
147
|
/**
|
|
143
148
|
* The CDKPipeline class extends the Component class and sets up the necessary configuration for deploying AWS CDK (Cloud Development Kit) applications across multiple stages.
|
|
@@ -189,4 +194,20 @@ export declare abstract class CDKPipeline extends Component {
|
|
|
189
194
|
*/
|
|
190
195
|
protected createIndependentStage(stage: IndependentStage): void;
|
|
191
196
|
protected getCliStackPattern(stage: string): string;
|
|
197
|
+
/**
|
|
198
|
+
* Create version:fetch:<stage> task to fetch version data from deployed stack
|
|
199
|
+
*/
|
|
200
|
+
protected createVersionFetchTask(stage: NamedStageOptions): void;
|
|
201
|
+
/**
|
|
202
|
+
* Generate CDK application code for versioning
|
|
203
|
+
*/
|
|
204
|
+
generateVersioningAppCode(config: VersioningConfig): string;
|
|
205
|
+
/**
|
|
206
|
+
* Generate versioning imports for CDK application
|
|
207
|
+
*/
|
|
208
|
+
generateVersioningImports(): string;
|
|
209
|
+
/**
|
|
210
|
+
* Generate versioning utility functions for CDK application
|
|
211
|
+
*/
|
|
212
|
+
generateVersioningUtilities(): string;
|
|
192
213
|
}
|