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/.jsii +803 -29
- package/API.md +774 -11
- package/README.md +154 -1
- package/lib/engine/base.d.ts +22 -0
- package/lib/engine/base.js +16 -0
- package/lib/engine/github.d.ts +22 -0
- package/lib/engine/github.js +100 -0
- package/lib/engine/index.d.ts +2 -0
- package/lib/engine/index.js +19 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/pipeline.d.ts +129 -1
- package/lib/pipeline.js +138 -25
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1 +1,154 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Projen Pipelines
|
|
2
|
+
|
|
3
|
+
[](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!
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { awscdk } from 'projen';
|
|
2
|
+
import { CDKPipeline, CDKPipelineOptions, Environment } from '../pipeline';
|
|
3
|
+
export interface SynthStageOptions {
|
|
4
|
+
readonly commands: string[];
|
|
5
|
+
}
|
|
6
|
+
export interface AssetUploadStageOptions {
|
|
7
|
+
readonly commands: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface DeployStageOptions {
|
|
10
|
+
readonly stageName: string;
|
|
11
|
+
readonly commands: string[];
|
|
12
|
+
readonly env: Environment;
|
|
13
|
+
}
|
|
14
|
+
export declare abstract class BaseEngine {
|
|
15
|
+
protected app: awscdk.AwsCdkTypeScriptApp;
|
|
16
|
+
protected props: CDKPipelineOptions;
|
|
17
|
+
protected pipeline: CDKPipeline;
|
|
18
|
+
constructor(app: awscdk.AwsCdkTypeScriptApp, props: CDKPipelineOptions, pipeline: CDKPipeline);
|
|
19
|
+
abstract createSynth(options: SynthStageOptions): void;
|
|
20
|
+
abstract createAssetUpload(options: AssetUploadStageOptions): void;
|
|
21
|
+
abstract createDeployment(options: DeployStageOptions): void;
|
|
22
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BaseEngine = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
class BaseEngine {
|
|
7
|
+
constructor(app, props, pipeline) {
|
|
8
|
+
this.app = app;
|
|
9
|
+
this.props = props;
|
|
10
|
+
this.pipeline = pipeline;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
14
|
+
BaseEngine[_a] = { fqn: "projen-pipelines.BaseEngine", version: "0.0.3" };
|
|
15
|
+
exports.BaseEngine = BaseEngine;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbmdpbmUvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWlCQSxNQUFzQixVQUFVO0lBQzlCLFlBQXNCLEdBQStCLEVBQVksS0FBeUIsRUFBWSxRQUFxQjtRQUFyRyxRQUFHLEdBQUgsR0FBRyxDQUE0QjtRQUFZLFVBQUssR0FBTCxLQUFLLENBQW9CO1FBQVksYUFBUSxHQUFSLFFBQVEsQ0FBYTtJQUczSCxDQUFDOzs7O0FBSm1CLGdDQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzY2RrIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IENES1BpcGVsaW5lLCBDREtQaXBlbGluZU9wdGlvbnMsIEVudmlyb25tZW50IH0gZnJvbSAnLi4vcGlwZWxpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN5bnRoU3RhZ2VPcHRpb25zIHtcbiAgcmVhZG9ubHkgY29tbWFuZHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0VXBsb2FkU3RhZ2VPcHRpb25zIHtcbiAgcmVhZG9ubHkgY29tbWFuZHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveVN0YWdlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBjb21tYW5kczogc3RyaW5nW107XG4gIHJlYWRvbmx5IGVudjogRW52aXJvbm1lbnQ7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRW5naW5lIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGFwcDogYXdzY2RrLkF3c0Nka1R5cGVTY3JpcHRBcHAsIHByb3RlY3RlZCBwcm9wczogQ0RLUGlwZWxpbmVPcHRpb25zLCBwcm90ZWN0ZWQgcGlwZWxpbmU6IENES1BpcGVsaW5lKSB7XG5cblxuICB9XG5cbiAgYWJzdHJhY3QgY3JlYXRlU3ludGgob3B0aW9uczogU3ludGhTdGFnZU9wdGlvbnMpOiB2b2lkO1xuICBhYnN0cmFjdCBjcmVhdGVBc3NldFVwbG9hZChvcHRpb25zOiBBc3NldFVwbG9hZFN0YWdlT3B0aW9ucyk6IHZvaWQ7XG4gIGFic3RyYWN0IGNyZWF0ZURlcGxveW1lbnQob3B0aW9uczogRGVwbG95U3RhZ2VPcHRpb25zKTogdm9pZDtcblxufSJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { awscdk } from 'projen';
|
|
2
|
+
import { AssetUploadStageOptions, BaseEngine, DeployStageOptions, SynthStageOptions } from './base';
|
|
3
|
+
import { CDKPipeline, CDKPipelineOptions } from '../pipeline';
|
|
4
|
+
export interface RoleMap {
|
|
5
|
+
readonly feature?: string;
|
|
6
|
+
readonly dev?: string;
|
|
7
|
+
readonly prod?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface GithubEngineConfig {
|
|
10
|
+
readonly defaultAwsRoleArn?: string;
|
|
11
|
+
readonly awsRoleArnForSynth?: string;
|
|
12
|
+
readonly awsRoleArnForAssetPublishing?: string;
|
|
13
|
+
readonly awsRoleArnForDeployment?: RoleMap;
|
|
14
|
+
}
|
|
15
|
+
export declare class GitHubEngine extends BaseEngine {
|
|
16
|
+
private deploymentWorkflow;
|
|
17
|
+
private deploymentStages;
|
|
18
|
+
constructor(app: awscdk.AwsCdkTypeScriptApp, props: CDKPipelineOptions, pipeline: CDKPipeline);
|
|
19
|
+
createSynth(options: SynthStageOptions): void;
|
|
20
|
+
createAssetUpload(options: AssetUploadStageOptions): void;
|
|
21
|
+
createDeployment(options: DeployStageOptions): void;
|
|
22
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.GitHubEngine = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const workflows_model_1 = require("projen/lib/github/workflows-model");
|
|
7
|
+
const base_1 = require("./base");
|
|
8
|
+
class GitHubEngine extends base_1.BaseEngine {
|
|
9
|
+
constructor(app, props, pipeline) {
|
|
10
|
+
super(app, props, pipeline);
|
|
11
|
+
this.deploymentStages = [];
|
|
12
|
+
this.deploymentWorkflow = this.app.github.addWorkflow('deploy');
|
|
13
|
+
this.deploymentWorkflow.on({
|
|
14
|
+
push: {
|
|
15
|
+
branches: ['main'], // TODO use defaultReleaseBranch
|
|
16
|
+
},
|
|
17
|
+
workflowDispatch: {},
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
createSynth(options) {
|
|
21
|
+
const steps = [{
|
|
22
|
+
name: 'Checkout',
|
|
23
|
+
uses: 'actions/checkout@v2',
|
|
24
|
+
env: {
|
|
25
|
+
CI: 'true',
|
|
26
|
+
},
|
|
27
|
+
}];
|
|
28
|
+
if (this.props.githubConfig?.awsRoleArnForSynth) {
|
|
29
|
+
steps.push({
|
|
30
|
+
name: 'AWS Credentials',
|
|
31
|
+
uses: 'aws-actions/configure-aws-credentials@master',
|
|
32
|
+
with: {
|
|
33
|
+
'role-to-assume': this.props.githubConfig.awsRoleArnForSynth,
|
|
34
|
+
'role-session-name': 'GitHubAction',
|
|
35
|
+
'aws-region': 'us-east-1',
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
steps.push(...options.commands.map(cmd => ({
|
|
40
|
+
run: cmd,
|
|
41
|
+
})));
|
|
42
|
+
this.deploymentWorkflow.addJob('synth', {
|
|
43
|
+
name: 'Synth CDK application',
|
|
44
|
+
runsOn: ['ubuntu-latest'],
|
|
45
|
+
permissions: { idToken: workflows_model_1.JobPermission.WRITE, contents: workflows_model_1.JobPermission.READ },
|
|
46
|
+
steps,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
createAssetUpload(options) {
|
|
50
|
+
this.deploymentWorkflow.addJob('assetUpload', {
|
|
51
|
+
name: 'Publish assets to AWS',
|
|
52
|
+
needs: ['synth'],
|
|
53
|
+
runsOn: ['ubuntu-latest'],
|
|
54
|
+
permissions: { idToken: workflows_model_1.JobPermission.WRITE, contents: workflows_model_1.JobPermission.READ },
|
|
55
|
+
steps: [{
|
|
56
|
+
name: 'Checkout',
|
|
57
|
+
uses: 'actions/checkout@v2',
|
|
58
|
+
}, {
|
|
59
|
+
name: 'AWS Credentials',
|
|
60
|
+
uses: 'aws-actions/configure-aws-credentials@master',
|
|
61
|
+
with: {
|
|
62
|
+
'role-to-assume': this.props.githubConfig?.awsRoleArnForAssetPublishing ?? this.props.githubConfig?.defaultAwsRoleArn,
|
|
63
|
+
'role-session-name': 'GitHubAction',
|
|
64
|
+
'aws-region': 'us-east-1',
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
...options.commands.map(cmd => ({
|
|
68
|
+
run: cmd,
|
|
69
|
+
}))],
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
createDeployment(options) {
|
|
73
|
+
this.deploymentWorkflow.addJob(`deploy-${options.stageName}`, {
|
|
74
|
+
name: `Deploy stage ${options.stageName} to AWS`,
|
|
75
|
+
needs: this.deploymentStages.length > 0 ? ['assetUpload', `deploy-${this.deploymentStages.at(-1)}`] : ['assetUpload'],
|
|
76
|
+
runsOn: ['ubuntu-latest'],
|
|
77
|
+
permissions: { idToken: workflows_model_1.JobPermission.WRITE, contents: workflows_model_1.JobPermission.READ },
|
|
78
|
+
steps: [{
|
|
79
|
+
name: 'Checkout',
|
|
80
|
+
uses: 'actions/checkout@v2',
|
|
81
|
+
}, {
|
|
82
|
+
name: 'AWS Credentials',
|
|
83
|
+
uses: 'aws-actions/configure-aws-credentials@master',
|
|
84
|
+
with: {
|
|
85
|
+
'role-to-assume': this.props.githubConfig?.awsRoleArnForDeployment?.[options.stageName] ?? this.props.githubConfig?.defaultAwsRoleArn,
|
|
86
|
+
'role-session-name': 'GitHubAction',
|
|
87
|
+
'aws-region': options.env.region,
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
...options.commands.map(cmd => ({
|
|
91
|
+
run: cmd,
|
|
92
|
+
}))],
|
|
93
|
+
});
|
|
94
|
+
this.deploymentStages.push(options.stageName);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
98
|
+
GitHubEngine[_a] = { fqn: "projen-pipelines.GitHubEngine", version: "0.0.3" };
|
|
99
|
+
exports.GitHubEngine = GitHubEngine;
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VuZ2luZS9naXRodWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSx1RUFBMkU7QUFDM0UsaUNBQW9HO0FBZ0JwRyxNQUFhLFlBQWEsU0FBUSxpQkFBVTtJQUsxQyxZQUFZLEdBQStCLEVBQUUsS0FBeUIsRUFBRSxRQUFxQjtRQUMzRixLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUh0QixxQkFBZ0IsR0FBYSxFQUFFLENBQUM7UUFLdEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1lBQ3pCLElBQUksRUFBRTtnQkFDSixRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxnQ0FBZ0M7YUFDckQ7WUFDRCxnQkFBZ0IsRUFBRSxFQUFFO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBMEI7UUFDM0MsTUFBTSxLQUFLLEdBQWMsQ0FBQztnQkFDeEIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLEdBQUcsRUFBRTtvQkFDSCxFQUFFLEVBQUUsTUFBTTtpQkFDWDthQUNGLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUU7WUFDL0MsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDVCxJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixJQUFJLEVBQUUsOENBQThDO2dCQUNwRCxJQUFJLEVBQUU7b0JBQ0osZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsa0JBQWtCO29CQUM1RCxtQkFBbUIsRUFBRSxjQUFjO29CQUNuQyxZQUFZLEVBQUUsV0FBVztpQkFDMUI7YUFDRixDQUFDLENBQUM7U0FDSjtRQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekMsR0FBRyxFQUFFLEdBQUc7U0FDVCxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDdEMsSUFBSSxFQUFFLHVCQUF1QjtZQUM3QixNQUFNLEVBQUUsQ0FBQyxlQUFlLENBQUM7WUFDekIsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLCtCQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSwrQkFBYSxDQUFDLElBQUksRUFBRTtZQUMzRSxLQUFLO1NBQ04sQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGlCQUFpQixDQUFDLE9BQWdDO1FBQ3ZELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO1lBQzVDLElBQUksRUFBRSx1QkFBdUI7WUFDN0IsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDO1lBQ2hCLE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQztZQUN6QixXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsK0JBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLCtCQUFhLENBQUMsSUFBSSxFQUFFO1lBQzNFLEtBQUssRUFBRSxDQUFDO29CQUNOLElBQUksRUFBRSxVQUFVO29CQUNoQixJQUFJLEVBQUUscUJBQXFCO2lCQUM1QixFQUFFO29CQUNELElBQUksRUFBRSxpQkFBaUI7b0JBQ3ZCLElBQUksRUFBRSw4Q0FBOEM7b0JBQ3BELElBQUksRUFBRTt3QkFDSixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxpQkFBaUI7d0JBQ3JILG1CQUFtQixFQUFFLGNBQWM7d0JBQ25DLFlBQVksRUFBRSxXQUFXO3FCQUMxQjtpQkFDRjtnQkFDRCxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDOUIsR0FBRyxFQUFFLEdBQUc7aUJBQ1QsQ0FBQyxDQUFDLENBQUM7U0FDTCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsT0FBMkI7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxVQUFVLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUM1RCxJQUFJLEVBQUUsZ0JBQWdCLE9BQU8sQ0FBQyxTQUFTLFNBQVM7WUFDaEQsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxVQUFVLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ3RILE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQztZQUN6QixXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsK0JBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLCtCQUFhLENBQUMsSUFBSSxFQUFFO1lBQzNFLEtBQUssRUFBRSxDQUFDO29CQUNOLElBQUksRUFBRSxVQUFVO29CQUNoQixJQUFJLEVBQUUscUJBQXFCO2lCQUM1QixFQUFFO29CQUNELElBQUksRUFBRSxpQkFBaUI7b0JBQ3ZCLElBQUksRUFBRSw4Q0FBOEM7b0JBQ3BELElBQUksRUFBRTt3QkFDSixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUEwQixDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsaUJBQWlCO3dCQUN0SixtQkFBbUIsRUFBRSxjQUFjO3dCQUNuQyxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO3FCQUNqQztpQkFDRjtnQkFDRCxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDOUIsR0FBRyxFQUFFLEdBQUc7aUJBQ1QsQ0FBQyxDQUFDLENBQUM7U0FDTCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDOzs7O0FBakdVLG9DQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzY2RrIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEdpdGh1YldvcmtmbG93IH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiwgSm9iU3RlcCB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5pbXBvcnQgeyBBc3NldFVwbG9hZFN0YWdlT3B0aW9ucywgQmFzZUVuZ2luZSwgRGVwbG95U3RhZ2VPcHRpb25zLCBTeW50aFN0YWdlT3B0aW9ucyB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBDREtQaXBlbGluZSwgQ0RLUGlwZWxpbmVPcHRpb25zIH0gZnJvbSAnLi4vcGlwZWxpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvbGVNYXAge1xuICByZWFkb25seSBmZWF0dXJlPzogc3RyaW5nO1xuICByZWFkb25seSBkZXY/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb2Q/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2l0aHViRW5naW5lQ29uZmlnIHtcbiAgcmVhZG9ubHkgZGVmYXVsdEF3c1JvbGVBcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGF3c1JvbGVBcm5Gb3JTeW50aD86IHN0cmluZztcbiAgcmVhZG9ubHkgYXdzUm9sZUFybkZvckFzc2V0UHVibGlzaGluZz86IHN0cmluZztcbiAgcmVhZG9ubHkgYXdzUm9sZUFybkZvckRlcGxveW1lbnQ/OiBSb2xlTWFwO1xufVxuXG5leHBvcnQgY2xhc3MgR2l0SHViRW5naW5lIGV4dGVuZHMgQmFzZUVuZ2luZSB7XG5cbiAgcHJpdmF0ZSBkZXBsb3ltZW50V29ya2Zsb3c6IEdpdGh1YldvcmtmbG93O1xuICBwcml2YXRlIGRlcGxveW1lbnRTdGFnZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoYXBwOiBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCwgcHJvcHM6IENES1BpcGVsaW5lT3B0aW9ucywgcGlwZWxpbmU6IENES1BpcGVsaW5lKSB7XG4gICAgc3VwZXIoYXBwLCBwcm9wcywgcGlwZWxpbmUpO1xuXG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3cgPSB0aGlzLmFwcC5naXRodWIhLmFkZFdvcmtmbG93KCdkZXBsb3knKTtcbiAgICB0aGlzLmRlcGxveW1lbnRXb3JrZmxvdy5vbih7XG4gICAgICBwdXNoOiB7XG4gICAgICAgIGJyYW5jaGVzOiBbJ21haW4nXSwgLy8gVE9ETyB1c2UgZGVmYXVsdFJlbGVhc2VCcmFuY2hcbiAgICAgIH0sXG4gICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVTeW50aChvcHRpb25zOiBTeW50aFN0YWdlT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzOiBKb2JTdGVwW10gPSBbe1xuICAgICAgbmFtZTogJ0NoZWNrb3V0JyxcbiAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHYyJyxcbiAgICAgIGVudjoge1xuICAgICAgICBDSTogJ3RydWUnLFxuICAgICAgfSxcbiAgICB9XTtcblxuICAgIGlmICh0aGlzLnByb3BzLmdpdGh1YkNvbmZpZz8uYXdzUm9sZUFybkZvclN5bnRoKSB7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ0FXUyBDcmVkZW50aWFscycsXG4gICAgICAgIHVzZXM6ICdhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQG1hc3RlcicsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAncm9sZS10by1hc3N1bWUnOiB0aGlzLnByb3BzLmdpdGh1YkNvbmZpZy5hd3NSb2xlQXJuRm9yU3ludGgsXG4gICAgICAgICAgJ3JvbGUtc2Vzc2lvbi1uYW1lJzogJ0dpdEh1YkFjdGlvbicsXG4gICAgICAgICAgJ2F3cy1yZWdpb24nOiAndXMtZWFzdC0xJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0ZXBzLnB1c2goLi4ub3B0aW9ucy5jb21tYW5kcy5tYXAoY21kID0+ICh7XG4gICAgICBydW46IGNtZCxcbiAgICB9KSkpO1xuXG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3cuYWRkSm9iKCdzeW50aCcsIHtcbiAgICAgIG5hbWU6ICdTeW50aCBDREsgYXBwbGljYXRpb24nLFxuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7IGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUsIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQgfSxcbiAgICAgIHN0ZXBzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUFzc2V0VXBsb2FkKG9wdGlvbnM6IEFzc2V0VXBsb2FkU3RhZ2VPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3cuYWRkSm9iKCdhc3NldFVwbG9hZCcsIHtcbiAgICAgIG5hbWU6ICdQdWJsaXNoIGFzc2V0cyB0byBBV1MnLFxuICAgICAgbmVlZHM6IFsnc3ludGgnXSxcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBwZXJtaXNzaW9uczogeyBpZFRva2VuOiBKb2JQZXJtaXNzaW9uLldSSVRFLCBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFEIH0sXG4gICAgICBzdGVwczogW3tcbiAgICAgICAgbmFtZTogJ0NoZWNrb3V0JyxcbiAgICAgICAgdXNlczogJ2FjdGlvbnMvY2hlY2tvdXRAdjInLFxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnQVdTIENyZWRlbnRpYWxzJyxcbiAgICAgICAgdXNlczogJ2F3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNAbWFzdGVyJyxcbiAgICAgICAgd2l0aDoge1xuICAgICAgICAgICdyb2xlLXRvLWFzc3VtZSc6IHRoaXMucHJvcHMuZ2l0aHViQ29uZmlnPy5hd3NSb2xlQXJuRm9yQXNzZXRQdWJsaXNoaW5nID8/IHRoaXMucHJvcHMuZ2l0aHViQ29uZmlnPy5kZWZhdWx0QXdzUm9sZUFybixcbiAgICAgICAgICAncm9sZS1zZXNzaW9uLW5hbWUnOiAnR2l0SHViQWN0aW9uJyxcbiAgICAgICAgICAnYXdzLXJlZ2lvbic6ICd1cy1lYXN0LTEnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIC4uLm9wdGlvbnMuY29tbWFuZHMubWFwKGNtZCA9PiAoe1xuICAgICAgICBydW46IGNtZCxcbiAgICAgIH0pKV0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRGVwbG95bWVudChvcHRpb25zOiBEZXBsb3lTdGFnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLmRlcGxveW1lbnRXb3JrZmxvdy5hZGRKb2IoYGRlcGxveS0ke29wdGlvbnMuc3RhZ2VOYW1lfWAsIHtcbiAgICAgIG5hbWU6IGBEZXBsb3kgc3RhZ2UgJHtvcHRpb25zLnN0YWdlTmFtZX0gdG8gQVdTYCxcbiAgICAgIG5lZWRzOiB0aGlzLmRlcGxveW1lbnRTdGFnZXMubGVuZ3RoID4gMCA/IFsnYXNzZXRVcGxvYWQnLCBgZGVwbG95LSR7dGhpcy5kZXBsb3ltZW50U3RhZ2VzLmF0KC0xKSF9YF0gOiBbJ2Fzc2V0VXBsb2FkJ10sXG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgcGVybWlzc2lvbnM6IHsgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSwgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCB9LFxuICAgICAgc3RlcHM6IFt7XG4gICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHYyJyxcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ0FXUyBDcmVkZW50aWFscycsXG4gICAgICAgIHVzZXM6ICdhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQG1hc3RlcicsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAncm9sZS10by1hc3N1bWUnOiB0aGlzLnByb3BzLmdpdGh1YkNvbmZpZz8uYXdzUm9sZUFybkZvckRlcGxveW1lbnQ/LltvcHRpb25zLnN0YWdlTmFtZSBhcyBrZXlvZiBSb2xlTWFwXSA/PyB0aGlzLnByb3BzLmdpdGh1YkNvbmZpZz8uZGVmYXVsdEF3c1JvbGVBcm4sXG4gICAgICAgICAgJ3JvbGUtc2Vzc2lvbi1uYW1lJzogJ0dpdEh1YkFjdGlvbicsXG4gICAgICAgICAgJ2F3cy1yZWdpb24nOiBvcHRpb25zLmVudi5yZWdpb24sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgLi4ub3B0aW9ucy5jb21tYW5kcy5tYXAoY21kID0+ICh7XG4gICAgICAgIHJ1bjogY21kLFxuICAgICAgfSkpXSxcbiAgICB9KTtcbiAgICB0aGlzLmRlcGxveW1lbnRTdGFnZXMucHVzaChvcHRpb25zLnN0YWdlTmFtZSk7XG4gIH1cbn0iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./base"), exports);
|
|
18
|
+
__exportStar(require("./github"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW5naW5lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBdUI7QUFDdkIsMkNBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9iYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vZ2l0aHViJzsiXX0=
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./pipeline"), exports);
|
|
18
|
-
|
|
18
|
+
__exportStar(require("./engine"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUEyQjtBQUMzQiwyQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lJztcbmV4cG9ydCAqIGZyb20gJy4vZW5naW5lJzsiXX0=
|
package/lib/pipeline.d.ts
CHANGED
|
@@ -1,26 +1,154 @@
|
|
|
1
1
|
import { Component, awscdk } from 'projen';
|
|
2
|
+
import { BaseEngine, GithubEngineConfig } from './engine';
|
|
3
|
+
/**
|
|
4
|
+
* The Environment interface is designed to hold AWS related information
|
|
5
|
+
* for a specific deployment environment within your infrastructure.
|
|
6
|
+
* Each environment requires a specific account and region for its resources.
|
|
7
|
+
*/
|
|
2
8
|
export interface Environment {
|
|
9
|
+
/**
|
|
10
|
+
* The AWS Account ID associated with the environment. It's important because
|
|
11
|
+
* different services or features could have distinct permissions and settings
|
|
12
|
+
* in different accounts.
|
|
13
|
+
*/
|
|
3
14
|
readonly account: string;
|
|
15
|
+
/**
|
|
16
|
+
* The AWS Region for the environment. This determines where your resources
|
|
17
|
+
* are created and where your application will run. It can affect latency,
|
|
18
|
+
* availability, and pricing.
|
|
19
|
+
*/
|
|
4
20
|
readonly region: string;
|
|
5
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* The EnvironmentMap interface is used to maintain a mapping of different types
|
|
24
|
+
* of environments used in the application. Each type of environment - personal,
|
|
25
|
+
* feature, dev, and prod, represents a different stage of development or usage.
|
|
26
|
+
*/
|
|
6
27
|
export interface EnvironmentMap {
|
|
28
|
+
/**
|
|
29
|
+
* The personal environment is usually used for individual development and
|
|
30
|
+
* testing, allowing developers to freely test and experiment without
|
|
31
|
+
* affecting the shared development environment.
|
|
32
|
+
*/
|
|
7
33
|
readonly personal: Environment;
|
|
34
|
+
/**
|
|
35
|
+
* The feature environment is typically used for developing specific features
|
|
36
|
+
* in isolation from the main codebase. This allows developers to work on
|
|
37
|
+
* individual features without impacting the stability of the dev or prod
|
|
38
|
+
* environments.
|
|
39
|
+
*/
|
|
8
40
|
readonly feature: Environment;
|
|
41
|
+
/**
|
|
42
|
+
* The dev environment is a shared environment where developers integrate
|
|
43
|
+
* their feature changes. It represents the latest version of the application
|
|
44
|
+
* but may not be as stable as the production environment.
|
|
45
|
+
*/
|
|
9
46
|
readonly dev: Environment;
|
|
47
|
+
/**
|
|
48
|
+
* The prod environment is where the live, user-facing application runs.
|
|
49
|
+
* It should be stable and only receive thoroughly tested changes.
|
|
50
|
+
*/
|
|
10
51
|
readonly prod: Environment;
|
|
11
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* The CI/CD tooling used to run your pipeline.
|
|
55
|
+
* The component will render workflows for the given system
|
|
56
|
+
*/
|
|
57
|
+
export declare enum PipelineEngine {
|
|
58
|
+
/** Create GitHub actions */
|
|
59
|
+
GITHUB = 0,
|
|
60
|
+
/** Create a .gitlab-ci.yaml file */
|
|
61
|
+
GITLAB = 1
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Describes the type of pipeline that will be created
|
|
65
|
+
*/
|
|
66
|
+
export declare enum DeploymentType {
|
|
67
|
+
/** Deploy every commit as far as possible; hopefully into production */
|
|
68
|
+
CONTINUOUS_DEPLOYMENT = 0,
|
|
69
|
+
/** Build every commit and prepare all assets for a later deployment */
|
|
70
|
+
CONTINUOUS_DELIVERY = 1
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The CDKPipelineOptions interface is designed to provide configuration
|
|
74
|
+
* options for a CDK (Cloud Development Kit) pipeline. It allows the definition
|
|
75
|
+
* of settings such as the stack prefix and package namespace to be used in the
|
|
76
|
+
* AWS stack, along with the environments configuration to be used.
|
|
77
|
+
*/
|
|
12
78
|
export interface CDKPipelineOptions {
|
|
13
|
-
|
|
79
|
+
/**
|
|
80
|
+
* This field is used to define a prefix for the AWS Stack resources created
|
|
81
|
+
* during the pipeline's operation.
|
|
82
|
+
*
|
|
83
|
+
* @default project name
|
|
84
|
+
*/
|
|
85
|
+
readonly stackPrefix?: string;
|
|
86
|
+
/**
|
|
87
|
+
* This field determines the NPM namespace to be used when packaging CDK cloud
|
|
88
|
+
* assemblies. A namespace helps group related resources together, providing
|
|
89
|
+
* better organization and ease of management.
|
|
90
|
+
*/
|
|
14
91
|
readonly pkgNamespace: string;
|
|
92
|
+
/**
|
|
93
|
+
* This is a map of environments to be used in the pipeline. It allows the
|
|
94
|
+
* pipeline to deploy to different environments based on the stage of the
|
|
95
|
+
* deployment process, whether that's a personal, feature, dev, or prod stage.
|
|
96
|
+
*/
|
|
15
97
|
readonly environments: EnvironmentMap;
|
|
98
|
+
/**
|
|
99
|
+
* This field specifies the type of pipeline to create. If set to CONTINUOUS_DEPLOYMENT,
|
|
100
|
+
* every commit is deployed as far as possible, hopefully into production. If set to
|
|
101
|
+
* CONTINUOUS_DELIVERY, every commit is built and all assets are prepared for a later deployment.
|
|
102
|
+
*
|
|
103
|
+
* @default CONTINUOUS_DELIVERY
|
|
104
|
+
*/
|
|
105
|
+
readonly deploymentType?: DeploymentType;
|
|
106
|
+
/**
|
|
107
|
+
* This field determines the CI/CD tooling that will be used to run the pipeline. The component
|
|
108
|
+
* will render workflows for the given system. Options include GitHub and GitLab.
|
|
109
|
+
*
|
|
110
|
+
* @default - tries to derive it from the projects configuration
|
|
111
|
+
*/
|
|
112
|
+
readonly engine?: PipelineEngine;
|
|
113
|
+
readonly githubConfig?: GithubEngineConfig;
|
|
114
|
+
readonly preInstallCommands?: string[];
|
|
115
|
+
readonly preSynthCommands?: string[];
|
|
116
|
+
readonly postSynthCommands?: string[];
|
|
16
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* The CDKPipeline class extends the Component class and sets up the necessary configuration for deploying AWS CDK (Cloud Development Kit) applications across multiple stages.
|
|
120
|
+
* It also manages tasks such as publishing CDK assets, bumping version based on git tags, and cleaning up conflicting tasks.
|
|
121
|
+
*/
|
|
17
122
|
export declare class CDKPipeline extends Component {
|
|
18
123
|
private app;
|
|
19
124
|
private props;
|
|
125
|
+
readonly stackPrefix: string;
|
|
126
|
+
readonly engine: BaseEngine;
|
|
20
127
|
constructor(app: awscdk.AwsCdkTypeScriptApp, props: CDKPipelineOptions);
|
|
128
|
+
private createSynthStage;
|
|
129
|
+
/**
|
|
130
|
+
* This method generates the entry point for the application, including interfaces and classes
|
|
131
|
+
* necessary to set up the pipeline and define the AWS CDK stacks for different environments.
|
|
132
|
+
*/
|
|
21
133
|
private createApplicationEntrypoint;
|
|
134
|
+
/**
|
|
135
|
+
* This method sets up tasks to publish CDK assets to all accounts and handle versioning, including bumping the version
|
|
136
|
+
* based on the latest git tag and pushing the CDK assembly to the package repository.
|
|
137
|
+
*/
|
|
22
138
|
private createReleaseTasks;
|
|
139
|
+
/**
|
|
140
|
+
* This method sets up tasks for the personal deployment stage, including deployment, watching for changes,
|
|
141
|
+
* comparing changes (diff), and destroying the stack when no longer needed.
|
|
142
|
+
*/
|
|
23
143
|
private createPersonalStage;
|
|
144
|
+
/**
|
|
145
|
+
* This method sets up tasks for the feature deployment stage, including deployment, comparing changes (diff),
|
|
146
|
+
* and destroying the stack when no longer needed.
|
|
147
|
+
*/
|
|
24
148
|
private createFeatureStage;
|
|
149
|
+
/**
|
|
150
|
+
* This method sets up tasks for the general pipeline stages (dev, prod), including deployment and comparing changes (diff).
|
|
151
|
+
* @param {string} stageName - The name of the stage (e.g., 'dev', 'prod')
|
|
152
|
+
*/
|
|
25
153
|
private createPipelineStage;
|
|
26
154
|
}
|