projen-pipelines 0.0.1 → 0.0.3

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/API.md CHANGED
@@ -1,11 +1,199 @@
1
- # replace this
1
+ # Projen Pipelines
2
+
3
+ [![npm version](https://badge.fury.io/js/projen-pipelines.svg)](https://www.npmjs.com/package/projen-pipelines)
4
+
5
+
6
+ Projen Pipelines is a projen library that provides high-level abstractions for defining continuous delivery (CD) pipelines for AWS CDK applications.
7
+ It is specifically designed to work with the projen project configuration engine.
8
+
9
+ This library provides high-level abstractions for defining multi-environment and multi-account AWS CDK applications with ease.
10
+ With this library, you can handle complex deployment scenarios with less code and manage your AWS infrastructure in a more efficient and straightforward way.
11
+
12
+ ## Getting Started
13
+
14
+ ### Installation
15
+
16
+ To install the package, add the package `projen-pipelines` to your projects devDeps in your projen configuration file.
17
+
18
+
19
+ After installing the package, you can import and use the constructs to define your CDK Pipelines.
20
+
21
+ ### Usage
22
+
23
+ You can start using the constructs provided by Projen Pipelines in your AWS CDK applications. Here's a brief example:
24
+
25
+ ```typescript
26
+ import { awscdk } from 'projen';
27
+ import { CDKPipeline, CDKPipelineOptions } from 'projen-pipelines';
28
+
29
+ // Define your AWS CDK TypeScript App
30
+ const app = new awscdk.AwsCdkTypeScriptApp({
31
+ cdkVersion: '2.80.0',
32
+ name: 'my-awesome-app',
33
+ defaultReleaseBranch: 'main',
34
+ devDeps: [
35
+ 'projen-pipelines',
36
+ ],
37
+ });
38
+
39
+ // Create the pipeline
40
+ new CDKPipeline(app, {
41
+ stackPrefix: 'MyApp',
42
+ pkgNamespace: '@company-assemblies',
43
+ environments: {
44
+ dev: { account: '111111111111', region: 'eu-central-1' },
45
+ prod: { account: '222222222222', region: 'eu-central-1' },
46
+ },
47
+ });
48
+ ```
49
+
50
+ After running projen (`npx projen`) a new file called `src/app.ts` will be created and contain a specialized CDK App class for your project.
51
+
52
+ You can then use this in your `main.ts` to configure your deployment.
53
+
54
+ ```typescript
55
+ import { PipelineApp } from './app';
56
+ import { BackendStack } from './stack';
57
+
58
+ const app = new PipelineApp({
59
+ provideDevStack: (scope, id, props) => {
60
+ return new BackendStack(scope, id, {
61
+ ...props,
62
+ apiHostname: 'api-dev',
63
+ myConfigSetting: 'value-for-dev',
64
+ });
65
+ },
66
+ provideProdStack: (scope, id, props) => {
67
+ return new BackendStack(scope, id, {
68
+ ...props,
69
+ apiHostname: 'api',
70
+ myConfigSetting: 'value-for-prod',
71
+ });
72
+ },
73
+ providePersonalStack: (scope, id, props) => {
74
+ return new BackendStack(scope, id, {
75
+ ...props,
76
+ apiHostname: `api-${props.stageName}`,
77
+ myConfigSetting: 'value-for-personal-stage',
78
+ });
79
+ },
80
+ });
81
+
82
+ app.synth();
83
+ ```
84
+
85
+ ### Deployment
86
+
87
+ The `CDKPipeline` class creates and adds several tasks to the projen project that then can be used in your pipeline to deploy your application to AWS.
88
+
89
+ Here's a brief description of each one:
90
+
91
+ 1. **deploy:personal** - This task deploys the application's personal stage, which is a distinct, isolated deployment of the application. The personal stage is intended for personal use, such as testing and development.
92
+
93
+ 2. **watch:personal** - This task deploys the personal stage of the application in watch mode. In this mode, the AWS CDK monitors your application source files for changes, automatically re-synthesizing and deploying when it detects any changes.
94
+
95
+ 3. **diff:personal** - This task compares the deployed personal stage with the current state of the application code. It's used to understand what changes would be made if the application were deployed.
96
+
97
+ 4. **destroy:personal** - This task destroys the resources created for the personal stage of the application.
98
+
99
+ 5. **deploy:feature** - This task deploys the application's feature stage. The feature stage is used for new features testing before these are merged into the main branch.
100
+
101
+ 6. **diff:feature** - This task is similar to `diff:personal`, but for the feature stage.
102
+
103
+ 7. **destroy:feature** - This task destroys the resources created for the feature stage of the application.
104
+
105
+ 8. **deploy:<stageName>** - This task deploys a specific stage of the application (like 'dev' or 'prod').
106
+
107
+ 9. **diff:<stageName>** - This task compares the specified application stage with the current state of the application code.
108
+
109
+ 10. **publish:assets** - This task publishes the CDK assets to all accounts. This is useful when the CDK application uses assets like Docker images or files from the S3 bucket.
110
+
111
+ 11. **bump** - This task bumps the version based on the latest git tag and pushes the updated tag to the git repository.
112
+
113
+ 12. **release:push-assembly** - This task creates a manifest, bumps the version without creating a git tag, and publishes the cloud assembly to your registry.
114
+
115
+ 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.
116
+
117
+
118
+ ## Contributing
119
+
120
+ We welcome all contributions to Projen Pipelines! Here's how you can get started:
121
+
122
+ 1. **Fork the Repository**: Click the 'Fork' button at the top right of this page to duplicate this repository in your GitHub account.
123
+
124
+ 2. **Clone your Fork**: Clone the forked repository to your local machine.
125
+
126
+ ```bash
127
+ git clone https://github.com/<your_username>/projen-pipelines.git
128
+ ```
129
+
130
+ 3. **Create a Branch**: To keep your work organized, create a branch for your contribution.
131
+
132
+ ```bash
133
+ git checkout -b my-branch
134
+ ```
135
+
136
+ 4. **Make your Changes**: Make your changes, additions, or fixes to the codebase. Remember to follow the existing code style.
137
+
138
+ 5. **Test your Changes**: Before committing your changes, make sure to test them to ensure they work as expected and do not introduce bugs.
139
+
140
+ 6. **Commit your Changes**: Commit your changes with a descriptive commit message using conventional commit messages.
141
+
142
+ ```bash
143
+ git commit -m "feat: Your descriptive commit message"
144
+ ```
145
+
146
+ 7. **Push to your Fork**: Push your commits to the branch in your forked repository.
147
+
148
+ ```bash
149
+ git push origin my-branch
150
+ ```
151
+
152
+ 8. **Submit a Pull Request**: Once your changes are ready to be reviewed, create a pull request from your forked repository's branch into the `main` branch of this repository.
153
+
154
+ Your pull request will be reviewed and hopefully merged quickly. Thanks for contributing!
155
+
2
156
  # API Reference <a name="API Reference" id="api-reference"></a>
3
157
 
4
158
 
5
159
  ## Structs <a name="Structs" id="Structs"></a>
6
160
 
161
+ ### AssetUploadStageOptions <a name="AssetUploadStageOptions" id="projen-pipelines.AssetUploadStageOptions"></a>
162
+
163
+ #### Initializer <a name="Initializer" id="projen-pipelines.AssetUploadStageOptions.Initializer"></a>
164
+
165
+ ```typescript
166
+ import { AssetUploadStageOptions } from 'projen-pipelines'
167
+
168
+ const assetUploadStageOptions: AssetUploadStageOptions = { ... }
169
+ ```
170
+
171
+ #### Properties <a name="Properties" id="Properties"></a>
172
+
173
+ | **Name** | **Type** | **Description** |
174
+ | --- | --- | --- |
175
+ | <code><a href="#projen-pipelines.AssetUploadStageOptions.property.commands">commands</a></code> | <code>string[]</code> | *No description.* |
176
+
177
+ ---
178
+
179
+ ##### `commands`<sup>Required</sup> <a name="commands" id="projen-pipelines.AssetUploadStageOptions.property.commands"></a>
180
+
181
+ ```typescript
182
+ public readonly commands: string[];
183
+ ```
184
+
185
+ - *Type:* string[]
186
+
187
+ ---
188
+
7
189
  ### CDKPipelineOptions <a name="CDKPipelineOptions" id="projen-pipelines.CDKPipelineOptions"></a>
8
190
 
191
+ The CDKPipelineOptions interface is designed to provide configuration options for a CDK (Cloud Development Kit) pipeline.
192
+
193
+ It allows the definition
194
+ of settings such as the stack prefix and package namespace to be used in the
195
+ AWS stack, along with the environments configuration to be used.
196
+
9
197
  #### Initializer <a name="Initializer" id="projen-pipelines.CDKPipelineOptions.Initializer"></a>
10
198
 
11
199
  ```typescript
@@ -18,9 +206,15 @@ const cDKPipelineOptions: CDKPipelineOptions = { ... }
18
206
 
19
207
  | **Name** | **Type** | **Description** |
20
208
  | --- | --- | --- |
21
- | <code><a href="#projen-pipelines.CDKPipelineOptions.property.environments">environments</a></code> | <code><a href="#projen-pipelines.EnvironmentMap">EnvironmentMap</a></code> | *No description.* |
22
- | <code><a href="#projen-pipelines.CDKPipelineOptions.property.pkgNamespace">pkgNamespace</a></code> | <code>string</code> | *No description.* |
23
- | <code><a href="#projen-pipelines.CDKPipelineOptions.property.stackPrefix">stackPrefix</a></code> | <code>string</code> | *No description.* |
209
+ | <code><a href="#projen-pipelines.CDKPipelineOptions.property.environments">environments</a></code> | <code><a href="#projen-pipelines.EnvironmentMap">EnvironmentMap</a></code> | This is a map of environments to be used in the pipeline. |
210
+ | <code><a href="#projen-pipelines.CDKPipelineOptions.property.pkgNamespace">pkgNamespace</a></code> | <code>string</code> | This field determines the NPM namespace to be used when packaging CDK cloud assemblies. |
211
+ | <code><a href="#projen-pipelines.CDKPipelineOptions.property.deploymentType">deploymentType</a></code> | <code><a href="#projen-pipelines.DeploymentType">DeploymentType</a></code> | This field specifies the type of pipeline to create. |
212
+ | <code><a href="#projen-pipelines.CDKPipelineOptions.property.engine">engine</a></code> | <code><a href="#projen-pipelines.PipelineEngine">PipelineEngine</a></code> | This field determines the CI/CD tooling that will be used to run the pipeline. |
213
+ | <code><a href="#projen-pipelines.CDKPipelineOptions.property.githubConfig">githubConfig</a></code> | <code><a href="#projen-pipelines.GithubEngineConfig">GithubEngineConfig</a></code> | *No description.* |
214
+ | <code><a href="#projen-pipelines.CDKPipelineOptions.property.postSynthCommands">postSynthCommands</a></code> | <code>string[]</code> | *No description.* |
215
+ | <code><a href="#projen-pipelines.CDKPipelineOptions.property.preInstallCommands">preInstallCommands</a></code> | <code>string[]</code> | *No description.* |
216
+ | <code><a href="#projen-pipelines.CDKPipelineOptions.property.preSynthCommands">preSynthCommands</a></code> | <code>string[]</code> | *No description.* |
217
+ | <code><a href="#projen-pipelines.CDKPipelineOptions.property.stackPrefix">stackPrefix</a></code> | <code>string</code> | This field is used to define a prefix for the AWS Stack resources created during the pipeline's operation. |
24
218
 
25
219
  ---
26
220
 
@@ -32,6 +226,12 @@ public readonly environments: EnvironmentMap;
32
226
 
33
227
  - *Type:* <a href="#projen-pipelines.EnvironmentMap">EnvironmentMap</a>
34
228
 
229
+ This is a map of environments to be used in the pipeline.
230
+
231
+ It allows the
232
+ pipeline to deploy to different environments based on the stage of the
233
+ deployment process, whether that's a personal, feature, dev, or prod stage.
234
+
35
235
  ---
36
236
 
37
237
  ##### `pkgNamespace`<sup>Required</sup> <a name="pkgNamespace" id="projen-pipelines.CDKPipelineOptions.property.pkgNamespace"></a>
@@ -42,20 +242,155 @@ public readonly pkgNamespace: string;
42
242
 
43
243
  - *Type:* string
44
244
 
245
+ This field determines the NPM namespace to be used when packaging CDK cloud assemblies.
246
+
247
+ A namespace helps group related resources together, providing
248
+ better organization and ease of management.
249
+
250
+ ---
251
+
252
+ ##### `deploymentType`<sup>Optional</sup> <a name="deploymentType" id="projen-pipelines.CDKPipelineOptions.property.deploymentType"></a>
253
+
254
+ ```typescript
255
+ public readonly deploymentType: DeploymentType;
256
+ ```
257
+
258
+ - *Type:* <a href="#projen-pipelines.DeploymentType">DeploymentType</a>
259
+ - *Default:* CONTINUOUS_DELIVERY
260
+
261
+ This field specifies the type of pipeline to create.
262
+
263
+ If set to CONTINUOUS_DEPLOYMENT,
264
+ every commit is deployed as far as possible, hopefully into production. If set to
265
+ CONTINUOUS_DELIVERY, every commit is built and all assets are prepared for a later deployment.
266
+
267
+ ---
268
+
269
+ ##### `engine`<sup>Optional</sup> <a name="engine" id="projen-pipelines.CDKPipelineOptions.property.engine"></a>
270
+
271
+ ```typescript
272
+ public readonly engine: PipelineEngine;
273
+ ```
274
+
275
+ - *Type:* <a href="#projen-pipelines.PipelineEngine">PipelineEngine</a>
276
+ - *Default:* tries to derive it from the projects configuration
277
+
278
+ This field determines the CI/CD tooling that will be used to run the pipeline.
279
+
280
+ The component
281
+ will render workflows for the given system. Options include GitHub and GitLab.
282
+
283
+ ---
284
+
285
+ ##### `githubConfig`<sup>Optional</sup> <a name="githubConfig" id="projen-pipelines.CDKPipelineOptions.property.githubConfig"></a>
286
+
287
+ ```typescript
288
+ public readonly githubConfig: GithubEngineConfig;
289
+ ```
290
+
291
+ - *Type:* <a href="#projen-pipelines.GithubEngineConfig">GithubEngineConfig</a>
292
+
293
+ ---
294
+
295
+ ##### `postSynthCommands`<sup>Optional</sup> <a name="postSynthCommands" id="projen-pipelines.CDKPipelineOptions.property.postSynthCommands"></a>
296
+
297
+ ```typescript
298
+ public readonly postSynthCommands: string[];
299
+ ```
300
+
301
+ - *Type:* string[]
302
+
45
303
  ---
46
304
 
47
- ##### `stackPrefix`<sup>Required</sup> <a name="stackPrefix" id="projen-pipelines.CDKPipelineOptions.property.stackPrefix"></a>
305
+ ##### `preInstallCommands`<sup>Optional</sup> <a name="preInstallCommands" id="projen-pipelines.CDKPipelineOptions.property.preInstallCommands"></a>
306
+
307
+ ```typescript
308
+ public readonly preInstallCommands: string[];
309
+ ```
310
+
311
+ - *Type:* string[]
312
+
313
+ ---
314
+
315
+ ##### `preSynthCommands`<sup>Optional</sup> <a name="preSynthCommands" id="projen-pipelines.CDKPipelineOptions.property.preSynthCommands"></a>
316
+
317
+ ```typescript
318
+ public readonly preSynthCommands: string[];
319
+ ```
320
+
321
+ - *Type:* string[]
322
+
323
+ ---
324
+
325
+ ##### `stackPrefix`<sup>Optional</sup> <a name="stackPrefix" id="projen-pipelines.CDKPipelineOptions.property.stackPrefix"></a>
48
326
 
49
327
  ```typescript
50
328
  public readonly stackPrefix: string;
51
329
  ```
52
330
 
331
+ - *Type:* string
332
+ - *Default:* project name
333
+
334
+ This field is used to define a prefix for the AWS Stack resources created during the pipeline's operation.
335
+
336
+ ---
337
+
338
+ ### DeployStageOptions <a name="DeployStageOptions" id="projen-pipelines.DeployStageOptions"></a>
339
+
340
+ #### Initializer <a name="Initializer" id="projen-pipelines.DeployStageOptions.Initializer"></a>
341
+
342
+ ```typescript
343
+ import { DeployStageOptions } from 'projen-pipelines'
344
+
345
+ const deployStageOptions: DeployStageOptions = { ... }
346
+ ```
347
+
348
+ #### Properties <a name="Properties" id="Properties"></a>
349
+
350
+ | **Name** | **Type** | **Description** |
351
+ | --- | --- | --- |
352
+ | <code><a href="#projen-pipelines.DeployStageOptions.property.commands">commands</a></code> | <code>string[]</code> | *No description.* |
353
+ | <code><a href="#projen-pipelines.DeployStageOptions.property.env">env</a></code> | <code><a href="#projen-pipelines.Environment">Environment</a></code> | *No description.* |
354
+ | <code><a href="#projen-pipelines.DeployStageOptions.property.stageName">stageName</a></code> | <code>string</code> | *No description.* |
355
+
356
+ ---
357
+
358
+ ##### `commands`<sup>Required</sup> <a name="commands" id="projen-pipelines.DeployStageOptions.property.commands"></a>
359
+
360
+ ```typescript
361
+ public readonly commands: string[];
362
+ ```
363
+
364
+ - *Type:* string[]
365
+
366
+ ---
367
+
368
+ ##### `env`<sup>Required</sup> <a name="env" id="projen-pipelines.DeployStageOptions.property.env"></a>
369
+
370
+ ```typescript
371
+ public readonly env: Environment;
372
+ ```
373
+
374
+ - *Type:* <a href="#projen-pipelines.Environment">Environment</a>
375
+
376
+ ---
377
+
378
+ ##### `stageName`<sup>Required</sup> <a name="stageName" id="projen-pipelines.DeployStageOptions.property.stageName"></a>
379
+
380
+ ```typescript
381
+ public readonly stageName: string;
382
+ ```
383
+
53
384
  - *Type:* string
54
385
 
55
386
  ---
56
387
 
57
388
  ### Environment <a name="Environment" id="projen-pipelines.Environment"></a>
58
389
 
390
+ The Environment interface is designed to hold AWS related information for a specific deployment environment within your infrastructure.
391
+
392
+ Each environment requires a specific account and region for its resources.
393
+
59
394
  #### Initializer <a name="Initializer" id="projen-pipelines.Environment.Initializer"></a>
60
395
 
61
396
  ```typescript
@@ -68,8 +403,8 @@ const environment: Environment = { ... }
68
403
 
69
404
  | **Name** | **Type** | **Description** |
70
405
  | --- | --- | --- |
71
- | <code><a href="#projen-pipelines.Environment.property.account">account</a></code> | <code>string</code> | *No description.* |
72
- | <code><a href="#projen-pipelines.Environment.property.region">region</a></code> | <code>string</code> | *No description.* |
406
+ | <code><a href="#projen-pipelines.Environment.property.account">account</a></code> | <code>string</code> | The AWS Account ID associated with the environment. |
407
+ | <code><a href="#projen-pipelines.Environment.property.region">region</a></code> | <code>string</code> | The AWS Region for the environment. |
73
408
 
74
409
  ---
75
410
 
@@ -81,6 +416,12 @@ public readonly account: string;
81
416
 
82
417
  - *Type:* string
83
418
 
419
+ The AWS Account ID associated with the environment.
420
+
421
+ It's important because
422
+ different services or features could have distinct permissions and settings
423
+ in different accounts.
424
+
84
425
  ---
85
426
 
86
427
  ##### `region`<sup>Required</sup> <a name="region" id="projen-pipelines.Environment.property.region"></a>
@@ -91,10 +432,21 @@ public readonly region: string;
91
432
 
92
433
  - *Type:* string
93
434
 
435
+ The AWS Region for the environment.
436
+
437
+ This determines where your resources
438
+ are created and where your application will run. It can affect latency,
439
+ availability, and pricing.
440
+
94
441
  ---
95
442
 
96
443
  ### EnvironmentMap <a name="EnvironmentMap" id="projen-pipelines.EnvironmentMap"></a>
97
444
 
445
+ The EnvironmentMap interface is used to maintain a mapping of different types of environments used in the application.
446
+
447
+ Each type of environment - personal,
448
+ feature, dev, and prod, represents a different stage of development or usage.
449
+
98
450
  #### Initializer <a name="Initializer" id="projen-pipelines.EnvironmentMap.Initializer"></a>
99
451
 
100
452
  ```typescript
@@ -107,10 +459,10 @@ const environmentMap: EnvironmentMap = { ... }
107
459
 
108
460
  | **Name** | **Type** | **Description** |
109
461
  | --- | --- | --- |
110
- | <code><a href="#projen-pipelines.EnvironmentMap.property.dev">dev</a></code> | <code><a href="#projen-pipelines.Environment">Environment</a></code> | *No description.* |
111
- | <code><a href="#projen-pipelines.EnvironmentMap.property.feature">feature</a></code> | <code><a href="#projen-pipelines.Environment">Environment</a></code> | *No description.* |
112
- | <code><a href="#projen-pipelines.EnvironmentMap.property.personal">personal</a></code> | <code><a href="#projen-pipelines.Environment">Environment</a></code> | *No description.* |
113
- | <code><a href="#projen-pipelines.EnvironmentMap.property.prod">prod</a></code> | <code><a href="#projen-pipelines.Environment">Environment</a></code> | *No description.* |
462
+ | <code><a href="#projen-pipelines.EnvironmentMap.property.dev">dev</a></code> | <code><a href="#projen-pipelines.Environment">Environment</a></code> | The dev environment is a shared environment where developers integrate their feature changes. |
463
+ | <code><a href="#projen-pipelines.EnvironmentMap.property.feature">feature</a></code> | <code><a href="#projen-pipelines.Environment">Environment</a></code> | The feature environment is typically used for developing specific features in isolation from the main codebase. |
464
+ | <code><a href="#projen-pipelines.EnvironmentMap.property.personal">personal</a></code> | <code><a href="#projen-pipelines.Environment">Environment</a></code> | The personal environment is usually used for individual development and testing, allowing developers to freely test and experiment without affecting the shared development environment. |
465
+ | <code><a href="#projen-pipelines.EnvironmentMap.property.prod">prod</a></code> | <code><a href="#projen-pipelines.Environment">Environment</a></code> | The prod environment is where the live, user-facing application runs. |
114
466
 
115
467
  ---
116
468
 
@@ -122,6 +474,11 @@ public readonly dev: Environment;
122
474
 
123
475
  - *Type:* <a href="#projen-pipelines.Environment">Environment</a>
124
476
 
477
+ The dev environment is a shared environment where developers integrate their feature changes.
478
+
479
+ It represents the latest version of the application
480
+ but may not be as stable as the production environment.
481
+
125
482
  ---
126
483
 
127
484
  ##### `feature`<sup>Required</sup> <a name="feature" id="projen-pipelines.EnvironmentMap.property.feature"></a>
@@ -132,6 +489,12 @@ public readonly feature: Environment;
132
489
 
133
490
  - *Type:* <a href="#projen-pipelines.Environment">Environment</a>
134
491
 
492
+ The feature environment is typically used for developing specific features in isolation from the main codebase.
493
+
494
+ This allows developers to work on
495
+ individual features without impacting the stability of the dev or prod
496
+ environments.
497
+
135
498
  ---
136
499
 
137
500
  ##### `personal`<sup>Required</sup> <a name="personal" id="projen-pipelines.EnvironmentMap.property.personal"></a>
@@ -142,6 +505,8 @@ public readonly personal: Environment;
142
505
 
143
506
  - *Type:* <a href="#projen-pipelines.Environment">Environment</a>
144
507
 
508
+ The personal environment is usually used for individual development and testing, allowing developers to freely test and experiment without affecting the shared development environment.
509
+
145
510
  ---
146
511
 
147
512
  ##### `prod`<sup>Required</sup> <a name="prod" id="projen-pipelines.EnvironmentMap.property.prod"></a>
@@ -152,12 +517,244 @@ public readonly prod: Environment;
152
517
 
153
518
  - *Type:* <a href="#projen-pipelines.Environment">Environment</a>
154
519
 
520
+ The prod environment is where the live, user-facing application runs.
521
+
522
+ It should be stable and only receive thoroughly tested changes.
523
+
524
+ ---
525
+
526
+ ### GithubEngineConfig <a name="GithubEngineConfig" id="projen-pipelines.GithubEngineConfig"></a>
527
+
528
+ #### Initializer <a name="Initializer" id="projen-pipelines.GithubEngineConfig.Initializer"></a>
529
+
530
+ ```typescript
531
+ import { GithubEngineConfig } from 'projen-pipelines'
532
+
533
+ const githubEngineConfig: GithubEngineConfig = { ... }
534
+ ```
535
+
536
+ #### Properties <a name="Properties" id="Properties"></a>
537
+
538
+ | **Name** | **Type** | **Description** |
539
+ | --- | --- | --- |
540
+ | <code><a href="#projen-pipelines.GithubEngineConfig.property.awsRoleArnForAssetPublishing">awsRoleArnForAssetPublishing</a></code> | <code>string</code> | *No description.* |
541
+ | <code><a href="#projen-pipelines.GithubEngineConfig.property.awsRoleArnForDeployment">awsRoleArnForDeployment</a></code> | <code><a href="#projen-pipelines.RoleMap">RoleMap</a></code> | *No description.* |
542
+ | <code><a href="#projen-pipelines.GithubEngineConfig.property.awsRoleArnForSynth">awsRoleArnForSynth</a></code> | <code>string</code> | *No description.* |
543
+ | <code><a href="#projen-pipelines.GithubEngineConfig.property.defaultAwsRoleArn">defaultAwsRoleArn</a></code> | <code>string</code> | *No description.* |
544
+
545
+ ---
546
+
547
+ ##### `awsRoleArnForAssetPublishing`<sup>Optional</sup> <a name="awsRoleArnForAssetPublishing" id="projen-pipelines.GithubEngineConfig.property.awsRoleArnForAssetPublishing"></a>
548
+
549
+ ```typescript
550
+ public readonly awsRoleArnForAssetPublishing: string;
551
+ ```
552
+
553
+ - *Type:* string
554
+
555
+ ---
556
+
557
+ ##### `awsRoleArnForDeployment`<sup>Optional</sup> <a name="awsRoleArnForDeployment" id="projen-pipelines.GithubEngineConfig.property.awsRoleArnForDeployment"></a>
558
+
559
+ ```typescript
560
+ public readonly awsRoleArnForDeployment: RoleMap;
561
+ ```
562
+
563
+ - *Type:* <a href="#projen-pipelines.RoleMap">RoleMap</a>
564
+
565
+ ---
566
+
567
+ ##### `awsRoleArnForSynth`<sup>Optional</sup> <a name="awsRoleArnForSynth" id="projen-pipelines.GithubEngineConfig.property.awsRoleArnForSynth"></a>
568
+
569
+ ```typescript
570
+ public readonly awsRoleArnForSynth: string;
571
+ ```
572
+
573
+ - *Type:* string
574
+
575
+ ---
576
+
577
+ ##### `defaultAwsRoleArn`<sup>Optional</sup> <a name="defaultAwsRoleArn" id="projen-pipelines.GithubEngineConfig.property.defaultAwsRoleArn"></a>
578
+
579
+ ```typescript
580
+ public readonly defaultAwsRoleArn: string;
581
+ ```
582
+
583
+ - *Type:* string
584
+
585
+ ---
586
+
587
+ ### RoleMap <a name="RoleMap" id="projen-pipelines.RoleMap"></a>
588
+
589
+ #### Initializer <a name="Initializer" id="projen-pipelines.RoleMap.Initializer"></a>
590
+
591
+ ```typescript
592
+ import { RoleMap } from 'projen-pipelines'
593
+
594
+ const roleMap: RoleMap = { ... }
595
+ ```
596
+
597
+ #### Properties <a name="Properties" id="Properties"></a>
598
+
599
+ | **Name** | **Type** | **Description** |
600
+ | --- | --- | --- |
601
+ | <code><a href="#projen-pipelines.RoleMap.property.dev">dev</a></code> | <code>string</code> | *No description.* |
602
+ | <code><a href="#projen-pipelines.RoleMap.property.feature">feature</a></code> | <code>string</code> | *No description.* |
603
+ | <code><a href="#projen-pipelines.RoleMap.property.prod">prod</a></code> | <code>string</code> | *No description.* |
604
+
605
+ ---
606
+
607
+ ##### `dev`<sup>Optional</sup> <a name="dev" id="projen-pipelines.RoleMap.property.dev"></a>
608
+
609
+ ```typescript
610
+ public readonly dev: string;
611
+ ```
612
+
613
+ - *Type:* string
614
+
615
+ ---
616
+
617
+ ##### `feature`<sup>Optional</sup> <a name="feature" id="projen-pipelines.RoleMap.property.feature"></a>
618
+
619
+ ```typescript
620
+ public readonly feature: string;
621
+ ```
622
+
623
+ - *Type:* string
624
+
625
+ ---
626
+
627
+ ##### `prod`<sup>Optional</sup> <a name="prod" id="projen-pipelines.RoleMap.property.prod"></a>
628
+
629
+ ```typescript
630
+ public readonly prod: string;
631
+ ```
632
+
633
+ - *Type:* string
634
+
635
+ ---
636
+
637
+ ### SynthStageOptions <a name="SynthStageOptions" id="projen-pipelines.SynthStageOptions"></a>
638
+
639
+ #### Initializer <a name="Initializer" id="projen-pipelines.SynthStageOptions.Initializer"></a>
640
+
641
+ ```typescript
642
+ import { SynthStageOptions } from 'projen-pipelines'
643
+
644
+ const synthStageOptions: SynthStageOptions = { ... }
645
+ ```
646
+
647
+ #### Properties <a name="Properties" id="Properties"></a>
648
+
649
+ | **Name** | **Type** | **Description** |
650
+ | --- | --- | --- |
651
+ | <code><a href="#projen-pipelines.SynthStageOptions.property.commands">commands</a></code> | <code>string[]</code> | *No description.* |
652
+
653
+ ---
654
+
655
+ ##### `commands`<sup>Required</sup> <a name="commands" id="projen-pipelines.SynthStageOptions.property.commands"></a>
656
+
657
+ ```typescript
658
+ public readonly commands: string[];
659
+ ```
660
+
661
+ - *Type:* string[]
662
+
155
663
  ---
156
664
 
157
665
  ## Classes <a name="Classes" id="Classes"></a>
158
666
 
667
+ ### BaseEngine <a name="BaseEngine" id="projen-pipelines.BaseEngine"></a>
668
+
669
+ #### Initializers <a name="Initializers" id="projen-pipelines.BaseEngine.Initializer"></a>
670
+
671
+ ```typescript
672
+ import { BaseEngine } from 'projen-pipelines'
673
+
674
+ new BaseEngine(app: AwsCdkTypeScriptApp, props: CDKPipelineOptions, pipeline: CDKPipeline)
675
+ ```
676
+
677
+ | **Name** | **Type** | **Description** |
678
+ | --- | --- | --- |
679
+ | <code><a href="#projen-pipelines.BaseEngine.Initializer.parameter.app">app</a></code> | <code>projen.awscdk.AwsCdkTypeScriptApp</code> | *No description.* |
680
+ | <code><a href="#projen-pipelines.BaseEngine.Initializer.parameter.props">props</a></code> | <code><a href="#projen-pipelines.CDKPipelineOptions">CDKPipelineOptions</a></code> | *No description.* |
681
+ | <code><a href="#projen-pipelines.BaseEngine.Initializer.parameter.pipeline">pipeline</a></code> | <code><a href="#projen-pipelines.CDKPipeline">CDKPipeline</a></code> | *No description.* |
682
+
683
+ ---
684
+
685
+ ##### `app`<sup>Required</sup> <a name="app" id="projen-pipelines.BaseEngine.Initializer.parameter.app"></a>
686
+
687
+ - *Type:* projen.awscdk.AwsCdkTypeScriptApp
688
+
689
+ ---
690
+
691
+ ##### `props`<sup>Required</sup> <a name="props" id="projen-pipelines.BaseEngine.Initializer.parameter.props"></a>
692
+
693
+ - *Type:* <a href="#projen-pipelines.CDKPipelineOptions">CDKPipelineOptions</a>
694
+
695
+ ---
696
+
697
+ ##### `pipeline`<sup>Required</sup> <a name="pipeline" id="projen-pipelines.BaseEngine.Initializer.parameter.pipeline"></a>
698
+
699
+ - *Type:* <a href="#projen-pipelines.CDKPipeline">CDKPipeline</a>
700
+
701
+ ---
702
+
703
+ #### Methods <a name="Methods" id="Methods"></a>
704
+
705
+ | **Name** | **Description** |
706
+ | --- | --- |
707
+ | <code><a href="#projen-pipelines.BaseEngine.createAssetUpload">createAssetUpload</a></code> | *No description.* |
708
+ | <code><a href="#projen-pipelines.BaseEngine.createDeployment">createDeployment</a></code> | *No description.* |
709
+ | <code><a href="#projen-pipelines.BaseEngine.createSynth">createSynth</a></code> | *No description.* |
710
+
711
+ ---
712
+
713
+ ##### `createAssetUpload` <a name="createAssetUpload" id="projen-pipelines.BaseEngine.createAssetUpload"></a>
714
+
715
+ ```typescript
716
+ public createAssetUpload(options: AssetUploadStageOptions): void
717
+ ```
718
+
719
+ ###### `options`<sup>Required</sup> <a name="options" id="projen-pipelines.BaseEngine.createAssetUpload.parameter.options"></a>
720
+
721
+ - *Type:* <a href="#projen-pipelines.AssetUploadStageOptions">AssetUploadStageOptions</a>
722
+
723
+ ---
724
+
725
+ ##### `createDeployment` <a name="createDeployment" id="projen-pipelines.BaseEngine.createDeployment"></a>
726
+
727
+ ```typescript
728
+ public createDeployment(options: DeployStageOptions): void
729
+ ```
730
+
731
+ ###### `options`<sup>Required</sup> <a name="options" id="projen-pipelines.BaseEngine.createDeployment.parameter.options"></a>
732
+
733
+ - *Type:* <a href="#projen-pipelines.DeployStageOptions">DeployStageOptions</a>
734
+
735
+ ---
736
+
737
+ ##### `createSynth` <a name="createSynth" id="projen-pipelines.BaseEngine.createSynth"></a>
738
+
739
+ ```typescript
740
+ public createSynth(options: SynthStageOptions): void
741
+ ```
742
+
743
+ ###### `options`<sup>Required</sup> <a name="options" id="projen-pipelines.BaseEngine.createSynth.parameter.options"></a>
744
+
745
+ - *Type:* <a href="#projen-pipelines.SynthStageOptions">SynthStageOptions</a>
746
+
747
+ ---
748
+
749
+
750
+
751
+
159
752
  ### CDKPipeline <a name="CDKPipeline" id="projen-pipelines.CDKPipeline"></a>
160
753
 
754
+ The CDKPipeline class extends the Component class and sets up the necessary configuration for deploying AWS CDK (Cloud Development Kit) applications across multiple stages.
755
+
756
+ It also manages tasks such as publishing CDK assets, bumping version based on git tags, and cleaning up conflicting tasks.
757
+
161
758
  #### Initializers <a name="Initializers" id="projen-pipelines.CDKPipeline.Initializer"></a>
162
759
 
163
760
  ```typescript
@@ -227,6 +824,8 @@ Synthesizes files to the project output directory.
227
824
  | **Name** | **Type** | **Description** |
228
825
  | --- | --- | --- |
229
826
  | <code><a href="#projen-pipelines.CDKPipeline.property.project">project</a></code> | <code>projen.Project</code> | *No description.* |
827
+ | <code><a href="#projen-pipelines.CDKPipeline.property.engine">engine</a></code> | <code><a href="#projen-pipelines.BaseEngine">BaseEngine</a></code> | *No description.* |
828
+ | <code><a href="#projen-pipelines.CDKPipeline.property.stackPrefix">stackPrefix</a></code> | <code>string</code> | *No description.* |
230
829
 
231
830
  ---
232
831
 
@@ -240,5 +839,169 @@ public readonly project: Project;
240
839
 
241
840
  ---
242
841
 
842
+ ##### `engine`<sup>Required</sup> <a name="engine" id="projen-pipelines.CDKPipeline.property.engine"></a>
243
843
 
844
+ ```typescript
845
+ public readonly engine: BaseEngine;
846
+ ```
847
+
848
+ - *Type:* <a href="#projen-pipelines.BaseEngine">BaseEngine</a>
849
+
850
+ ---
851
+
852
+ ##### `stackPrefix`<sup>Required</sup> <a name="stackPrefix" id="projen-pipelines.CDKPipeline.property.stackPrefix"></a>
853
+
854
+ ```typescript
855
+ public readonly stackPrefix: string;
856
+ ```
857
+
858
+ - *Type:* string
859
+
860
+ ---
861
+
862
+
863
+ ### GitHubEngine <a name="GitHubEngine" id="projen-pipelines.GitHubEngine"></a>
864
+
865
+ #### Initializers <a name="Initializers" id="projen-pipelines.GitHubEngine.Initializer"></a>
866
+
867
+ ```typescript
868
+ import { GitHubEngine } from 'projen-pipelines'
869
+
870
+ new GitHubEngine(app: AwsCdkTypeScriptApp, props: CDKPipelineOptions, pipeline: CDKPipeline)
871
+ ```
872
+
873
+ | **Name** | **Type** | **Description** |
874
+ | --- | --- | --- |
875
+ | <code><a href="#projen-pipelines.GitHubEngine.Initializer.parameter.app">app</a></code> | <code>projen.awscdk.AwsCdkTypeScriptApp</code> | *No description.* |
876
+ | <code><a href="#projen-pipelines.GitHubEngine.Initializer.parameter.props">props</a></code> | <code><a href="#projen-pipelines.CDKPipelineOptions">CDKPipelineOptions</a></code> | *No description.* |
877
+ | <code><a href="#projen-pipelines.GitHubEngine.Initializer.parameter.pipeline">pipeline</a></code> | <code><a href="#projen-pipelines.CDKPipeline">CDKPipeline</a></code> | *No description.* |
878
+
879
+ ---
880
+
881
+ ##### `app`<sup>Required</sup> <a name="app" id="projen-pipelines.GitHubEngine.Initializer.parameter.app"></a>
882
+
883
+ - *Type:* projen.awscdk.AwsCdkTypeScriptApp
884
+
885
+ ---
886
+
887
+ ##### `props`<sup>Required</sup> <a name="props" id="projen-pipelines.GitHubEngine.Initializer.parameter.props"></a>
888
+
889
+ - *Type:* <a href="#projen-pipelines.CDKPipelineOptions">CDKPipelineOptions</a>
890
+
891
+ ---
892
+
893
+ ##### `pipeline`<sup>Required</sup> <a name="pipeline" id="projen-pipelines.GitHubEngine.Initializer.parameter.pipeline"></a>
894
+
895
+ - *Type:* <a href="#projen-pipelines.CDKPipeline">CDKPipeline</a>
896
+
897
+ ---
898
+
899
+ #### Methods <a name="Methods" id="Methods"></a>
900
+
901
+ | **Name** | **Description** |
902
+ | --- | --- |
903
+ | <code><a href="#projen-pipelines.GitHubEngine.createAssetUpload">createAssetUpload</a></code> | *No description.* |
904
+ | <code><a href="#projen-pipelines.GitHubEngine.createDeployment">createDeployment</a></code> | *No description.* |
905
+ | <code><a href="#projen-pipelines.GitHubEngine.createSynth">createSynth</a></code> | *No description.* |
906
+
907
+ ---
908
+
909
+ ##### `createAssetUpload` <a name="createAssetUpload" id="projen-pipelines.GitHubEngine.createAssetUpload"></a>
910
+
911
+ ```typescript
912
+ public createAssetUpload(options: AssetUploadStageOptions): void
913
+ ```
914
+
915
+ ###### `options`<sup>Required</sup> <a name="options" id="projen-pipelines.GitHubEngine.createAssetUpload.parameter.options"></a>
916
+
917
+ - *Type:* <a href="#projen-pipelines.AssetUploadStageOptions">AssetUploadStageOptions</a>
918
+
919
+ ---
920
+
921
+ ##### `createDeployment` <a name="createDeployment" id="projen-pipelines.GitHubEngine.createDeployment"></a>
922
+
923
+ ```typescript
924
+ public createDeployment(options: DeployStageOptions): void
925
+ ```
926
+
927
+ ###### `options`<sup>Required</sup> <a name="options" id="projen-pipelines.GitHubEngine.createDeployment.parameter.options"></a>
928
+
929
+ - *Type:* <a href="#projen-pipelines.DeployStageOptions">DeployStageOptions</a>
930
+
931
+ ---
932
+
933
+ ##### `createSynth` <a name="createSynth" id="projen-pipelines.GitHubEngine.createSynth"></a>
934
+
935
+ ```typescript
936
+ public createSynth(options: SynthStageOptions): void
937
+ ```
938
+
939
+ ###### `options`<sup>Required</sup> <a name="options" id="projen-pipelines.GitHubEngine.createSynth.parameter.options"></a>
940
+
941
+ - *Type:* <a href="#projen-pipelines.SynthStageOptions">SynthStageOptions</a>
942
+
943
+ ---
944
+
945
+
946
+
947
+
948
+
949
+ ## Enums <a name="Enums" id="Enums"></a>
950
+
951
+ ### DeploymentType <a name="DeploymentType" id="projen-pipelines.DeploymentType"></a>
952
+
953
+ Describes the type of pipeline that will be created.
954
+
955
+ #### Members <a name="Members" id="Members"></a>
956
+
957
+ | **Name** | **Description** |
958
+ | --- | --- |
959
+ | <code><a href="#projen-pipelines.DeploymentType.CONTINUOUS_DEPLOYMENT">CONTINUOUS_DEPLOYMENT</a></code> | Deploy every commit as far as possible; |
960
+ | <code><a href="#projen-pipelines.DeploymentType.CONTINUOUS_DELIVERY">CONTINUOUS_DELIVERY</a></code> | Build every commit and prepare all assets for a later deployment. |
961
+
962
+ ---
963
+
964
+ ##### `CONTINUOUS_DEPLOYMENT` <a name="CONTINUOUS_DEPLOYMENT" id="projen-pipelines.DeploymentType.CONTINUOUS_DEPLOYMENT"></a>
965
+
966
+ Deploy every commit as far as possible;
967
+
968
+ hopefully into production
969
+
970
+ ---
971
+
972
+
973
+ ##### `CONTINUOUS_DELIVERY` <a name="CONTINUOUS_DELIVERY" id="projen-pipelines.DeploymentType.CONTINUOUS_DELIVERY"></a>
974
+
975
+ Build every commit and prepare all assets for a later deployment.
976
+
977
+ ---
978
+
979
+
980
+ ### PipelineEngine <a name="PipelineEngine" id="projen-pipelines.PipelineEngine"></a>
981
+
982
+ The CI/CD tooling used to run your pipeline.
983
+
984
+ The component will render workflows for the given system
985
+
986
+ #### Members <a name="Members" id="Members"></a>
987
+
988
+ | **Name** | **Description** |
989
+ | --- | --- |
990
+ | <code><a href="#projen-pipelines.PipelineEngine.GITHUB">GITHUB</a></code> | Create GitHub actions. |
991
+ | <code><a href="#projen-pipelines.PipelineEngine.GITLAB">GITLAB</a></code> | Create a .gitlab-ci.yaml file. |
992
+
993
+ ---
994
+
995
+ ##### `GITHUB` <a name="GITHUB" id="projen-pipelines.PipelineEngine.GITHUB"></a>
996
+
997
+ Create GitHub actions.
998
+
999
+ ---
1000
+
1001
+
1002
+ ##### `GITLAB` <a name="GITLAB" id="projen-pipelines.PipelineEngine.GITLAB"></a>
1003
+
1004
+ Create a .gitlab-ci.yaml file.
1005
+
1006
+ ---
244
1007