projen-pipelines 0.2.12 → 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/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,233 @@ 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
+
206
435
  ### Feature Branch Deployments
207
436
 
208
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.
@@ -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.12" };
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.12" };
84
+ GitHubAssignApprover[_a] = { fqn: "projen-pipelines.GitHubAssignApprover", version: "0.2.13" };
85
85
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Fzc2lnbi1hcHByb3Zlci9naXRodWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSx1RUFBa0Y7QUFDbEYsaUNBQStEO0FBYS9ELE1BQWEsb0JBQXFCLFNBQVEscUJBQWM7SUFJdEQsWUFBWSxLQUFvQixFQUFFLE9BQW9DO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdkIsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU8sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNmLGlCQUFpQixFQUFFO2dCQUNqQixLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUM7YUFDdEM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCO1FBQ3RCLE9BQU87WUFDTCxZQUFZLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBRVMsYUFBYTtRQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWhFLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFFbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7WUFDdEMsTUFBTSxFQUFFLFVBQVU7WUFDbEIsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUNyQyxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsSUFBSSxFQUFFLGlDQUFpQztvQkFDdkMsSUFBSSxFQUFFLDBCQUEwQjtvQkFDaEMsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSxxQkFBcUI7cUJBQzlCO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsNkJBQTZCO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZTthQUNwRCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDN0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQjthQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVkLE9BQU87Ozs7RUFJVCxjQUFjLEdBQUcsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdkMsZ0JBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxQjlCLENBQUM7SUFDRCxDQUFDOztBQXBGSCxvREFxRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHaXRIdWJQcm9qZWN0LCBHaXRodWJXb3JrZmxvdyB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViJztcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24sIEpvYlBlcm1pc3Npb25zIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IEFzc2lnbkFwcHJvdmVyLCBBc3NpZ25BcHByb3Zlck9wdGlvbnMgfSBmcm9tICcuL2Jhc2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdpdEh1YkFzc2lnbkFwcHJvdmVyT3B0aW9ucyBleHRlbmRzIEFzc2lnbkFwcHJvdmVyT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIHJ1bm5lciB0YWdzIHRvIHVzZSB0byBzZWxlY3QgcnVubmVyc1xuICAgKlxuICAgKiBAZGVmYXVsdCBbJ3VidW50dS1sYXRlc3QnXVxuICAgKi9cbiAgcmVhZG9ubHkgcnVubmVyVGFncz86IHN0cmluZ1tdO1xuXG59XG5cbmV4cG9ydCBjbGFzcyBHaXRIdWJBc3NpZ25BcHByb3ZlciBleHRlbmRzIEFzc2lnbkFwcHJvdmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvdzogR2l0aHViV29ya2Zsb3c7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogR2l0SHViQXNzaWduQXBwcm92ZXJPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBHaXRIdWJQcm9qZWN0LCBvcHRpb25zOiBHaXRIdWJBc3NpZ25BcHByb3Zlck9wdGlvbnMpIHtcbiAgICBzdXBlcihzY29wZSwgb3B0aW9ucyk7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGRlcGxveW1lbnQgd29ya2Zsb3cgb24gR2l0SHViLlxuICAgIHRoaXMud29ya2Zsb3cgPSBzY29wZS5naXRodWIhLmFkZFdvcmtmbG93KCdhc3NpZ24tYXBwcm92ZXInKTtcbiAgICB0aGlzLndvcmtmbG93Lm9uKHtcbiAgICAgIHB1bGxSZXF1ZXN0VGFyZ2V0OiB7XG4gICAgICAgIHR5cGVzOiBbJ29wZW5lZCcsICdyZWFkeV9mb3JfcmV2aWV3J10sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZXR1cFdvcmtmbG93KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyBmb3IgdGhlIEdpdEh1YiB3b3JrZmxvd1xuICAgKi9cbiAgcHVibGljIHJlbmRlclBlcm1pc3Npb25zKCk6IEpvYlBlcm1pc3Npb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbFJlcXVlc3RzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBXb3JrZmxvdygpOiB2b2lkIHtcbiAgICBjb25zdCBydW5uZXJUYWdzID0gdGhpcy5vcHRpb25zLnJ1bm5lclRhZ3MgPz8gWyd1YnVudHUtbGF0ZXN0J107XG5cbiAgICBjb25zdCBhcHByb3Zlck1hcHBpbmdTY3JpcHQgPSB0aGlzLmdlbmVyYXRlQXBwcm92ZXJNYXBwaW5nU2NyaXB0KCk7XG5cbiAgICB0aGlzLndvcmtmbG93LmFkZEpvYignYXNzaWduLWFwcHJvdmVyJywge1xuICAgICAgcnVuc09uOiBydW5uZXJUYWdzLFxuICAgICAgcGVybWlzc2lvbnM6IHRoaXMucmVuZGVyUGVybWlzc2lvbnMoKSxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQXNzaWduIGFwcHJvdmVyIGJhc2VkIG9uIGF1dGhvcicsXG4gICAgICAgICAgdXNlczogJ2FjdGlvbnMvZ2l0aHViLXNjcmlwdEB2NycsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgc2NyaXB0OiBhcHByb3Zlck1hcHBpbmdTY3JpcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVBcHByb3Zlck1hcHBpbmdTY3JpcHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXBwaW5nRW50cmllcyA9IHRoaXMuYmFzZU9wdGlvbnMuYXBwcm92ZXJNYXBwaW5nXG4gICAgICAubWFwKG1hcHBpbmcgPT4gYCAgJyR7bWFwcGluZy5hdXRob3J9JzogWyR7bWFwcGluZy5hcHByb3ZlcnMubWFwKGEgPT4gYCcke2F9J2ApLmpvaW4oJywgJyl9XWApXG4gICAgICAuam9pbignLFxcbicpO1xuXG4gICAgY29uc3QgZGVmYXVsdEFwcHJvdmVycyA9IHRoaXMuYmFzZU9wdGlvbnMuZGVmYXVsdEFwcHJvdmVyc1xuICAgICAgLm1hcChhID0+IGAnJHthfSdgKVxuICAgICAgLmpvaW4oJywgJyk7XG5cbiAgICByZXR1cm4gYGNvbnN0IGF1dGhvciA9IGNvbnRleHQucGF5bG9hZC5wdWxsX3JlcXVlc3QudXNlci5sb2dpbjtcblxuLy8gRGVmaW5lIGFwcHJvdmVyIG1hcHBpbmdcbmNvbnN0IGFwcHJvdmVyTWFwcGluZyA9IHtcbiR7bWFwcGluZ0VudHJpZXN9JHttYXBwaW5nRW50cmllcy5sZW5ndGggPiAwID8gJywnIDogJyd9XG4gICdkZWZhdWx0JzogWyR7ZGVmYXVsdEFwcHJvdmVyc31dIC8vIERlZmF1bHQgYXBwcm92ZXIocykgaWYgYXV0aG9yIG5vdCBpbiBtYXBwaW5nXG59O1xuXG4vLyBHZXQgYXBwcm92ZXJzIGZvciB0aGUgUFIgYXV0aG9yXG5jb25zdCBhcHByb3ZlcnMgPSBhcHByb3Zlck1hcHBpbmdbYXV0aG9yXSB8fCBhcHByb3Zlck1hcHBpbmdbJ2RlZmF1bHQnXTtcblxuLy8gRmlsdGVyIG91dCB0aGUgYXV0aG9yIGZyb20gYXBwcm92ZXJzIGxpc3QgKGNhbid0IGFwcHJvdmUgb3duIFBSKVxuY29uc3QgZmlsdGVyZWRBcHByb3ZlcnMgPSBhcHByb3ZlcnMuZmlsdGVyKGFwcHJvdmVyID0+IGFwcHJvdmVyICE9PSBhdXRob3IpO1xuXG5pZiAoZmlsdGVyZWRBcHByb3ZlcnMubGVuZ3RoID4gMCkge1xuICAvLyBSZXF1ZXN0IHJldmlld3MgZnJvbSB0aGUgYXBwcm92ZXJzXG4gIGF3YWl0IGdpdGh1Yi5yZXN0LnB1bGxzLnJlcXVlc3RSZXZpZXdlcnMoe1xuICAgIG93bmVyOiBjb250ZXh0LnJlcG8ub3duZXIsXG4gICAgcmVwbzogY29udGV4dC5yZXBvLnJlcG8sXG4gICAgcHVsbF9udW1iZXI6IGNvbnRleHQuaXNzdWUubnVtYmVyLFxuICAgIHJldmlld2VyczogZmlsdGVyZWRBcHByb3ZlcnNcbiAgfSk7XG4gIFxuICBjb25zb2xlLmxvZyhcXGBBc3NpZ25lZCByZXZpZXdlcnM6IFxcJHtmaWx0ZXJlZEFwcHJvdmVycy5qb2luKCcsICcpfVxcYCk7XG59IGVsc2Uge1xuICBjb25zb2xlLmxvZygnTm8gZWxpZ2libGUgcmV2aWV3ZXJzIGZvdW5kIGZvciB0aGlzIFBSIGF1dGhvcicpO1xufWA7XG4gIH1cbn1cbiJdfQ==
@@ -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
  }