token-injectable-docker-builder 1.0.10 → 1.1.0
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 +30 -22
- package/API.md +32 -24
- package/README.md +57 -2
- package/lib/index.d.ts +15 -19
- package/lib/index.js +62 -47
- package/lib/integ.default.d.ts +1 -0
- package/lib/integ.default.js +20 -0
- package/package.json +4 -2
package/.jsii
CHANGED
|
@@ -3898,7 +3898,7 @@
|
|
|
3898
3898
|
},
|
|
3899
3899
|
"name": "token-injectable-docker-builder",
|
|
3900
3900
|
"readme": {
|
|
3901
|
-
"markdown": "# TokenInjectableDockerBuilder\n\nThe `TokenInjectableDockerBuilder` is a flexible AWS CDK construct that enables the usage of AWS CDK tokens in the building, pushing, and deployment of Docker images to Amazon Elastic Container Registry (ECR). It leverages AWS CodeBuild and Lambda custom resources.\n\n## Why?\n\nAWS CDK already provides mechanisms for creating deployable assets using Docker, such as [DockerImageAsset](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecr_assets.DockerImageAsset.html) and [DockerImageCode](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.DockerImageCode.html), but these Constructs are limited because they cannot accept CDK tokens as build-args. With the TokenInjectableDockerBuilder, one can inject CDK tokens as build-time args into their Docker-based assets to satisfy a much larger range of dependency relationships.\n\nFor example, imagine a NextJS frontend Docker image that calls an API Gateway endpoint. Logically, one would first deploy the API Gateway, then deploy the NextJS frontend such that it has reference to the API Gateway endpoint through a [build-time environment variable](https://nextjs.org/docs/pages/building-your-application/configuring/environment-variables). In this case, building the Docker-based asset before deployment time doesn't work since it is dependent on the deployment of the API Gateway.\n\n## Features\n\n- Automatically builds and pushes Docker images to ECR.\n- Supports custom build arguments for Docker builds, including CDK tokens that are resolved at deployment time.\n- Retrieves the latest Docker image from ECR for use in ECS or Lambda.\n\n---\n\n## Installation\n\
|
|
3901
|
+
"markdown": "# TokenInjectableDockerBuilder\n\nThe `TokenInjectableDockerBuilder` is a flexible AWS CDK construct that enables the usage of AWS CDK tokens in the building, pushing, and deployment of Docker images to Amazon Elastic Container Registry (ECR). It leverages AWS CodeBuild and Lambda custom resources.\n\n## Why?\n\nAWS CDK already provides mechanisms for creating deployable assets using Docker, such as [DockerImageAsset](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecr_assets.DockerImageAsset.html) and [DockerImageCode](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.DockerImageCode.html), but these Constructs are limited because they cannot accept CDK tokens as build-args. With the TokenInjectableDockerBuilder, one can inject CDK tokens as build-time args into their Docker-based assets to satisfy a much larger range of dependency relationships.\n\nFor example, imagine a NextJS frontend Docker image that calls an API Gateway endpoint. Logically, one would first deploy the API Gateway, then deploy the NextJS frontend such that it has reference to the API Gateway endpoint through a [build-time environment variable](https://nextjs.org/docs/pages/building-your-application/configuring/environment-variables). In this case, building the Docker-based asset before deployment time doesn't work since it is dependent on the deployment of the API Gateway.\n\n## Features\n\n- Automatically builds and pushes Docker images to ECR.\n- Supports custom build arguments for Docker builds, including CDK tokens that are resolved at deployment time.\n- Retrieves the latest Docker image from ECR for use in ECS or Lambda.\n\n---\n\n## Installation\n\n### For NPM\n\nInstall the construct using NPM:\n\n```bash\nnpm install token-injectable-docker-builder\n```\n\n### For Python\n\nInstall the construct using pip:\n\n```bash\npip install token-injectable-docker-builder\n```\n\n---\n\n## Constructor\n\n### `TokenInjectableDockerBuilder`\n\n#### Parameters\n\n- **`scope`**: The construct's parent scope.\n- **`id`**: The construct ID.\n- **`props`**: Configuration properties.\n\n#### Properties in `TokenInjectableDockerBuilderProps`\n\n| Property | Type | Required | Description |\n|----------------|-----------------------------------|----------|------------------------------------------------------------|\n| `path` | `string` | Yes | The file path to the Dockerfile or source code directory. |\n| `buildArgs` | `{ [key: string]: string }` | No | Build arguments to pass to the Docker build process. |\n\n---\n\n## Usage Example\n\n### NPM/TypeScript Example\n\nHere is an example of how to use the `TokenInjectableDockerBuilder` in your AWS CDK application:\n\n```typescript\nimport * as cdk from 'aws-cdk-lib';\nimport { TokenInjectableDockerBuilder } from 'token-injectable-docker-builder';\n\nexport class MyStack extends cdk.Stack {\n constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {\n super(scope, id, props);\n\n // Create a TokenInjectableDockerBuilder construct\n const dockerBuilder = new TokenInjectableDockerBuilder(this, 'MyDockerBuilder', {\n path: './docker', // Path to the directory containing your Dockerfile\n buildArgs: {\n TOKEN: 'my-secret-token', // Example of a build argument\n ENV: 'production',\n },\n });\n\n // Retrieve the container image for ECS\n const containerImage = dockerBuilder.containerImage;\n\n // Retrieve the Docker image code for Lambda\n const dockerImageCode = dockerBuilder.dockerImageCode;\n\n // Example: Use the container image in an ECS service\n new ecs.FargateTaskDefinition(this, 'TaskDefinition', {\n containerImage,\n });\n\n // Example: Use the Docker image code in a Lambda function\n new lambda.Function(this, 'DockerLambdaFunction', {\n runtime: lambda.Runtime.FROM_IMAGE,\n code: dockerImageCode,\n handler: lambda.Handler.FROM_IMAGE,\n });\n }\n}\n```\n\n### Python Example\n\nHere is an example of how to use the `TokenInjectableDockerBuilder` in your AWS CDK application using Python:\n\n```python\nfrom aws_cdk import core as cdk\nfrom token_injectable_docker_builder import TokenInjectableDockerBuilder\nfrom aws_cdk import aws_ecs as ecs\nfrom aws_cdk import aws_lambda as lambda_\n\nclass MyStack(cdk.Stack):\n\n def __init__(self, scope: cdk.App, id: str, **kwargs):\n super().__init__(scope, id, **kwargs)\n\n # Create a TokenInjectableDockerBuilder construct\n docker_builder = TokenInjectableDockerBuilder(self, \"MyDockerBuilder\",\n path=\"./docker\", # Path to the directory containing your Dockerfile\n build_args={\n \"TOKEN\": \"my-secret-token\", # Example of a build argument\n \"ENV\": \"production\"\n }\n )\n\n # Retrieve the container image for ECS\n container_image = docker_builder.container_image\n\n # Retrieve the Docker image code for Lambda\n docker_image_code = docker_builder.docker_image_code\n\n # Example: Use the container image in an ECS service\n ecs.FargateTaskDefinition(self, \"TaskDefinition\",\n container_image=container_image\n )\n\n # Example: Use the Docker image code in a Lambda function\n lambda_.Function(self, \"DockerLambdaFunction\",\n runtime=lambda_.Runtime.FROM_IMAGE,\n code=docker_image_code,\n handler=lambda_.Handler.FROM_IMAGE\n )\n```\n\n---\n\n## How It Works\n\n1. **Docker Source**: The construct packages the source code or Dockerfile specified in the `path` property as an S3 asset.\n2. **CodeBuild Project**:\n - Uses the packaged asset and build arguments to build the Docker image.\n - Pushes the image to an ECR repository.\n3. **Custom Resource**:\n - Triggers the build process using a Lambda function (`onEvent`).\n - Monitors the build status using another Lambda function (`isComplete`).\n4. **Outputs**:\n - Provides the Docker image via `.containerImage` for ECS use.\n - Provides the Docker image code via `.dockerImageCode` for Lambda.\n\n---\n\n## IAM Permissions\n\nThis construct automatically grants the required IAM permissions for:\n- CodeBuild to pull and push images to ECR.\n- CodeBuild to write logs to CloudWatch.\n- Lambda functions to monitor the build status and retrieve logs.\n\n---\n\n## Notes\n\n- **Build Arguments**: Use the `buildArgs` property to pass custom arguments to the Docker build process. These are transformed into `--build-arg` flags.\n- **ECR Repository**: A new ECR repository is created automatically.\n- **Custom Resources**: Custom resources are used to handle lifecycle events and ensure the build is completed successfully.\n\n---\n\n## Prerequisites\n\nEnsure you have the following:\n1. Docker installed locally if you're testing builds.\n2. AWS CDK CLI installed (`npm install -g aws-cdk`).\n3. An AWS account and configured credentials.\n\n---\n\n## Troubleshooting\n\n1. **Build Errors**: Check the AWS CodeBuild logs in CloudWatch.\n2. **Lambda Function Errors**: Check the `onEvent` and `isComplete` Lambda logs in CloudWatch.\n3. **Permissions**: Ensure the IAM role for CodeBuild has the required permissions to interact with ECR and CloudWatch.\n\n---\n\n## Support\n\nOpen an issue on [GitHub](https://github.com/AlexTech314/TokenInjectableDockerBuilder) :)\n\n---\n\n## Reference Links\n[](https://constructs.dev/packages/token-injectable-docker-builder)\n"
|
|
3902
3902
|
},
|
|
3903
3903
|
"repository": {
|
|
3904
3904
|
"type": "git",
|
|
@@ -3919,43 +3919,32 @@
|
|
|
3919
3919
|
"assembly": "token-injectable-docker-builder",
|
|
3920
3920
|
"base": "constructs.Construct",
|
|
3921
3921
|
"docs": {
|
|
3922
|
-
"example": "const dockerBuilder = new TokenInjectableDockerBuilder(this, 'DockerBuilder', {\n path: './docker',\n buildArgs: {\n TOKEN: 'my-secret-token',\n ENV: 'production'\n },\n});\n\nconst containerImage = dockerBuilder.getContainerImage();",
|
|
3923
3922
|
"stability": "stable",
|
|
3924
3923
|
"summary": "A CDK construct to build and push Docker images to an ECR repository using CodeBuild and Lambda custom resources."
|
|
3925
3924
|
},
|
|
3926
3925
|
"fqn": "token-injectable-docker-builder.TokenInjectableDockerBuilder",
|
|
3927
3926
|
"initializer": {
|
|
3928
3927
|
"docs": {
|
|
3929
|
-
"stability": "stable"
|
|
3930
|
-
"summary": "Creates a new `TokenInjectableDockerBuilder` instance."
|
|
3928
|
+
"stability": "stable"
|
|
3931
3929
|
},
|
|
3932
3930
|
"locationInModule": {
|
|
3933
3931
|
"filename": "src/index.ts",
|
|
3934
|
-
"line":
|
|
3932
|
+
"line": 58
|
|
3935
3933
|
},
|
|
3936
3934
|
"parameters": [
|
|
3937
3935
|
{
|
|
3938
|
-
"docs": {
|
|
3939
|
-
"summary": "The parent construct/stack."
|
|
3940
|
-
},
|
|
3941
3936
|
"name": "scope",
|
|
3942
3937
|
"type": {
|
|
3943
3938
|
"fqn": "constructs.Construct"
|
|
3944
3939
|
}
|
|
3945
3940
|
},
|
|
3946
3941
|
{
|
|
3947
|
-
"docs": {
|
|
3948
|
-
"summary": "The unique ID of the construct."
|
|
3949
|
-
},
|
|
3950
3942
|
"name": "id",
|
|
3951
3943
|
"type": {
|
|
3952
3944
|
"primitive": "string"
|
|
3953
3945
|
}
|
|
3954
3946
|
},
|
|
3955
3947
|
{
|
|
3956
|
-
"docs": {
|
|
3957
|
-
"summary": "Configuration properties for the construct."
|
|
3958
|
-
},
|
|
3959
3948
|
"name": "props",
|
|
3960
3949
|
"type": {
|
|
3961
3950
|
"fqn": "token-injectable-docker-builder.TokenInjectableDockerBuilderProps"
|
|
@@ -3966,7 +3955,7 @@
|
|
|
3966
3955
|
"kind": "class",
|
|
3967
3956
|
"locationInModule": {
|
|
3968
3957
|
"filename": "src/index.ts",
|
|
3969
|
-
"line":
|
|
3958
|
+
"line": 53
|
|
3970
3959
|
},
|
|
3971
3960
|
"name": "TokenInjectableDockerBuilder",
|
|
3972
3961
|
"properties": [
|
|
@@ -3977,7 +3966,7 @@
|
|
|
3977
3966
|
"immutable": true,
|
|
3978
3967
|
"locationInModule": {
|
|
3979
3968
|
"filename": "src/index.ts",
|
|
3980
|
-
"line":
|
|
3969
|
+
"line": 55
|
|
3981
3970
|
},
|
|
3982
3971
|
"name": "containerImage",
|
|
3983
3972
|
"type": {
|
|
@@ -3991,7 +3980,7 @@
|
|
|
3991
3980
|
"immutable": true,
|
|
3992
3981
|
"locationInModule": {
|
|
3993
3982
|
"filename": "src/index.ts",
|
|
3994
|
-
"line":
|
|
3983
|
+
"line": 56
|
|
3995
3984
|
},
|
|
3996
3985
|
"name": "dockerImageCode",
|
|
3997
3986
|
"type": {
|
|
@@ -4012,7 +4001,7 @@
|
|
|
4012
4001
|
"kind": "interface",
|
|
4013
4002
|
"locationInModule": {
|
|
4014
4003
|
"filename": "src/index.ts",
|
|
4015
|
-
"line":
|
|
4004
|
+
"line": 17
|
|
4016
4005
|
},
|
|
4017
4006
|
"name": "TokenInjectableDockerBuilderProps",
|
|
4018
4007
|
"properties": [
|
|
@@ -4025,7 +4014,7 @@
|
|
|
4025
4014
|
"immutable": true,
|
|
4026
4015
|
"locationInModule": {
|
|
4027
4016
|
"filename": "src/index.ts",
|
|
4028
|
-
"line":
|
|
4017
|
+
"line": 21
|
|
4029
4018
|
},
|
|
4030
4019
|
"name": "path",
|
|
4031
4020
|
"type": {
|
|
@@ -4043,7 +4032,7 @@
|
|
|
4043
4032
|
"immutable": true,
|
|
4044
4033
|
"locationInModule": {
|
|
4045
4034
|
"filename": "src/index.ts",
|
|
4046
|
-
"line":
|
|
4035
|
+
"line": 32
|
|
4047
4036
|
},
|
|
4048
4037
|
"name": "buildArgs",
|
|
4049
4038
|
"optional": true,
|
|
@@ -4055,11 +4044,30 @@
|
|
|
4055
4044
|
"kind": "map"
|
|
4056
4045
|
}
|
|
4057
4046
|
}
|
|
4047
|
+
},
|
|
4048
|
+
{
|
|
4049
|
+
"abstract": true,
|
|
4050
|
+
"docs": {
|
|
4051
|
+
"example": "'arn:aws:secretsmanager:us-east-1:123456789012:secret:DockerLoginSecret'",
|
|
4052
|
+
"remarks": "This secret should store a JSON object with the following structure:\n```json\n{\n \"username\": \"my-docker-username\",\n \"password\": \"my-docker-password\"\n}\n```\nIf not provided, the construct will skip Docker login during the build process.",
|
|
4053
|
+
"stability": "stable",
|
|
4054
|
+
"summary": "The ARN of the AWS Secrets Manager secret containing Docker login credentials."
|
|
4055
|
+
},
|
|
4056
|
+
"immutable": true,
|
|
4057
|
+
"locationInModule": {
|
|
4058
|
+
"filename": "src/index.ts",
|
|
4059
|
+
"line": 47
|
|
4060
|
+
},
|
|
4061
|
+
"name": "dockerLoginSecretArn",
|
|
4062
|
+
"optional": true,
|
|
4063
|
+
"type": {
|
|
4064
|
+
"primitive": "string"
|
|
4065
|
+
}
|
|
4058
4066
|
}
|
|
4059
4067
|
],
|
|
4060
4068
|
"symbolId": "src/index:TokenInjectableDockerBuilderProps"
|
|
4061
4069
|
}
|
|
4062
4070
|
},
|
|
4063
|
-
"version": "1.0
|
|
4064
|
-
"fingerprint": "
|
|
4071
|
+
"version": "1.1.0",
|
|
4072
|
+
"fingerprint": "tuBirTpAO6ASw4WPNfkzISXmZhdg7pfV7DPI20Q87/M="
|
|
4065
4073
|
}
|
package/API.md
CHANGED
|
@@ -6,21 +6,6 @@
|
|
|
6
6
|
|
|
7
7
|
A CDK construct to build and push Docker images to an ECR repository using CodeBuild and Lambda custom resources.
|
|
8
8
|
|
|
9
|
-
*Example*
|
|
10
|
-
|
|
11
|
-
```typescript
|
|
12
|
-
const dockerBuilder = new TokenInjectableDockerBuilder(this, 'DockerBuilder', {
|
|
13
|
-
path: './docker',
|
|
14
|
-
buildArgs: {
|
|
15
|
-
TOKEN: 'my-secret-token',
|
|
16
|
-
ENV: 'production'
|
|
17
|
-
},
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
const containerImage = dockerBuilder.getContainerImage();
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
|
|
24
9
|
#### Initializers <a name="Initializers" id="token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer"></a>
|
|
25
10
|
|
|
26
11
|
```typescript
|
|
@@ -31,9 +16,9 @@ new TokenInjectableDockerBuilder(scope: Construct, id: string, props: TokenInjec
|
|
|
31
16
|
|
|
32
17
|
| **Name** | **Type** | **Description** |
|
|
33
18
|
| --- | --- | --- |
|
|
34
|
-
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> |
|
|
35
|
-
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.id">id</a></code> | <code>string</code> |
|
|
36
|
-
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.props">props</a></code> | <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilderProps">TokenInjectableDockerBuilderProps</a></code> |
|
|
19
|
+
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> | *No description.* |
|
|
20
|
+
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.id">id</a></code> | <code>string</code> | *No description.* |
|
|
21
|
+
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.props">props</a></code> | <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilderProps">TokenInjectableDockerBuilderProps</a></code> | *No description.* |
|
|
37
22
|
|
|
38
23
|
---
|
|
39
24
|
|
|
@@ -41,24 +26,18 @@ new TokenInjectableDockerBuilder(scope: Construct, id: string, props: TokenInjec
|
|
|
41
26
|
|
|
42
27
|
- *Type:* constructs.Construct
|
|
43
28
|
|
|
44
|
-
The parent construct/stack.
|
|
45
|
-
|
|
46
29
|
---
|
|
47
30
|
|
|
48
31
|
##### `id`<sup>Required</sup> <a name="id" id="token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.id"></a>
|
|
49
32
|
|
|
50
33
|
- *Type:* string
|
|
51
34
|
|
|
52
|
-
The unique ID of the construct.
|
|
53
|
-
|
|
54
35
|
---
|
|
55
36
|
|
|
56
37
|
##### `props`<sup>Required</sup> <a name="props" id="token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.props"></a>
|
|
57
38
|
|
|
58
39
|
- *Type:* <a href="#token-injectable-docker-builder.TokenInjectableDockerBuilderProps">TokenInjectableDockerBuilderProps</a>
|
|
59
40
|
|
|
60
|
-
Configuration properties for the construct.
|
|
61
|
-
|
|
62
41
|
---
|
|
63
42
|
|
|
64
43
|
#### Methods <a name="Methods" id="Methods"></a>
|
|
@@ -166,6 +145,7 @@ const tokenInjectableDockerBuilderProps: TokenInjectableDockerBuilderProps = { .
|
|
|
166
145
|
| --- | --- | --- |
|
|
167
146
|
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilderProps.property.path">path</a></code> | <code>string</code> | The path to the directory containing the Dockerfile or source code. |
|
|
168
147
|
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilderProps.property.buildArgs">buildArgs</a></code> | <code>{[ key: string ]: string}</code> | Build arguments to pass to the Docker build process. |
|
|
148
|
+
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilderProps.property.dockerLoginSecretArn">dockerLoginSecretArn</a></code> | <code>string</code> | The ARN of the AWS Secrets Manager secret containing Docker login credentials. |
|
|
169
149
|
|
|
170
150
|
---
|
|
171
151
|
|
|
@@ -205,5 +185,33 @@ These are transformed into `--build-arg` flags.
|
|
|
205
185
|
```
|
|
206
186
|
|
|
207
187
|
|
|
188
|
+
##### `dockerLoginSecretArn`<sup>Optional</sup> <a name="dockerLoginSecretArn" id="token-injectable-docker-builder.TokenInjectableDockerBuilderProps.property.dockerLoginSecretArn"></a>
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
public readonly dockerLoginSecretArn: string;
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
- *Type:* string
|
|
195
|
+
|
|
196
|
+
The ARN of the AWS Secrets Manager secret containing Docker login credentials.
|
|
197
|
+
|
|
198
|
+
This secret should store a JSON object with the following structure:
|
|
199
|
+
```json
|
|
200
|
+
{
|
|
201
|
+
"username": "my-docker-username",
|
|
202
|
+
"password": "my-docker-password"
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
If not provided, the construct will skip Docker login during the build process.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
*Example*
|
|
210
|
+
|
|
211
|
+
```typescript
|
|
212
|
+
'arn:aws:secretsmanager:us-east-1:123456789012:secret:DockerLoginSecret'
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
|
|
208
216
|
|
|
209
217
|
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# TokenInjectableDockerBuilder
|
|
2
2
|
|
|
3
|
-
The `TokenInjectableDockerBuilder` is a flexible AWS CDK construct that enables the usage of AWS CDK tokens in the building, pushing, and deployment of Docker images to Amazon Elastic Container Registry (ECR). It leverages AWS CodeBuild and Lambda custom resources.
|
|
3
|
+
The `TokenInjectableDockerBuilder` is a flexible AWS CDK construct that enables the usage of AWS CDK tokens in the building, pushing, and deployment of Docker images to Amazon Elastic Container Registry (ECR). It leverages AWS CodeBuild and Lambda custom resources.
|
|
4
4
|
|
|
5
5
|
## Why?
|
|
6
6
|
|
|
@@ -18,12 +18,22 @@ For example, imagine a NextJS frontend Docker image that calls an API Gateway en
|
|
|
18
18
|
|
|
19
19
|
## Installation
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
### For NPM
|
|
22
|
+
|
|
23
|
+
Install the construct using NPM:
|
|
22
24
|
|
|
23
25
|
```bash
|
|
24
26
|
npm install token-injectable-docker-builder
|
|
25
27
|
```
|
|
26
28
|
|
|
29
|
+
### For Python
|
|
30
|
+
|
|
31
|
+
Install the construct using pip:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pip install token-injectable-docker-builder
|
|
35
|
+
```
|
|
36
|
+
|
|
27
37
|
---
|
|
28
38
|
|
|
29
39
|
## Constructor
|
|
@@ -47,6 +57,8 @@ npm install token-injectable-docker-builder
|
|
|
47
57
|
|
|
48
58
|
## Usage Example
|
|
49
59
|
|
|
60
|
+
### NPM/TypeScript Example
|
|
61
|
+
|
|
50
62
|
Here is an example of how to use the `TokenInjectableDockerBuilder` in your AWS CDK application:
|
|
51
63
|
|
|
52
64
|
```typescript
|
|
@@ -87,6 +99,49 @@ export class MyStack extends cdk.Stack {
|
|
|
87
99
|
}
|
|
88
100
|
```
|
|
89
101
|
|
|
102
|
+
### Python Example
|
|
103
|
+
|
|
104
|
+
Here is an example of how to use the `TokenInjectableDockerBuilder` in your AWS CDK application using Python:
|
|
105
|
+
|
|
106
|
+
```python
|
|
107
|
+
from aws_cdk import core as cdk
|
|
108
|
+
from token_injectable_docker_builder import TokenInjectableDockerBuilder
|
|
109
|
+
from aws_cdk import aws_ecs as ecs
|
|
110
|
+
from aws_cdk import aws_lambda as lambda_
|
|
111
|
+
|
|
112
|
+
class MyStack(cdk.Stack):
|
|
113
|
+
|
|
114
|
+
def __init__(self, scope: cdk.App, id: str, **kwargs):
|
|
115
|
+
super().__init__(scope, id, **kwargs)
|
|
116
|
+
|
|
117
|
+
# Create a TokenInjectableDockerBuilder construct
|
|
118
|
+
docker_builder = TokenInjectableDockerBuilder(self, "MyDockerBuilder",
|
|
119
|
+
path="./docker", # Path to the directory containing your Dockerfile
|
|
120
|
+
build_args={
|
|
121
|
+
"TOKEN": "my-secret-token", # Example of a build argument
|
|
122
|
+
"ENV": "production"
|
|
123
|
+
}
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
# Retrieve the container image for ECS
|
|
127
|
+
container_image = docker_builder.container_image
|
|
128
|
+
|
|
129
|
+
# Retrieve the Docker image code for Lambda
|
|
130
|
+
docker_image_code = docker_builder.docker_image_code
|
|
131
|
+
|
|
132
|
+
# Example: Use the container image in an ECS service
|
|
133
|
+
ecs.FargateTaskDefinition(self, "TaskDefinition",
|
|
134
|
+
container_image=container_image
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
# Example: Use the Docker image code in a Lambda function
|
|
138
|
+
lambda_.Function(self, "DockerLambdaFunction",
|
|
139
|
+
runtime=lambda_.Runtime.FROM_IMAGE,
|
|
140
|
+
code=docker_image_code,
|
|
141
|
+
handler=lambda_.Handler.FROM_IMAGE
|
|
142
|
+
)
|
|
143
|
+
```
|
|
144
|
+
|
|
90
145
|
---
|
|
91
146
|
|
|
92
147
|
## How It Works
|
package/lib/index.d.ts
CHANGED
|
@@ -21,31 +21,27 @@ export interface TokenInjectableDockerBuilderProps {
|
|
|
21
21
|
readonly buildArgs?: {
|
|
22
22
|
[key: string]: string;
|
|
23
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* The ARN of the AWS Secrets Manager secret containing Docker login credentials.
|
|
26
|
+
* This secret should store a JSON object with the following structure:
|
|
27
|
+
* ```json
|
|
28
|
+
* {
|
|
29
|
+
* "username": "my-docker-username",
|
|
30
|
+
* "password": "my-docker-password"
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
* If not provided, the construct will skip Docker login during the build process.
|
|
34
|
+
*
|
|
35
|
+
* @example 'arn:aws:secretsmanager:us-east-1:123456789012:secret:DockerLoginSecret'
|
|
36
|
+
*/
|
|
37
|
+
readonly dockerLoginSecretArn?: string;
|
|
24
38
|
}
|
|
25
39
|
/**
|
|
26
40
|
* A CDK construct to build and push Docker images to an ECR repository using CodeBuild and Lambda custom resources.
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* const dockerBuilder = new TokenInjectableDockerBuilder(this, 'DockerBuilder', {
|
|
30
|
-
* path: './docker',
|
|
31
|
-
* buildArgs: {
|
|
32
|
-
* TOKEN: 'my-secret-token',
|
|
33
|
-
* ENV: 'production'
|
|
34
|
-
* },
|
|
35
|
-
* });
|
|
36
|
-
*
|
|
37
|
-
* const containerImage = dockerBuilder.getContainerImage();
|
|
38
41
|
*/
|
|
39
42
|
export declare class TokenInjectableDockerBuilder extends Construct {
|
|
43
|
+
private readonly ecrRepository;
|
|
40
44
|
readonly containerImage: ContainerImage;
|
|
41
45
|
readonly dockerImageCode: DockerImageCode;
|
|
42
|
-
private readonly ecrRepository;
|
|
43
|
-
/**
|
|
44
|
-
* Creates a new `TokenInjectableDockerBuilder` instance.
|
|
45
|
-
*
|
|
46
|
-
* @param scope The parent construct/stack.
|
|
47
|
-
* @param id The unique ID of the construct.
|
|
48
|
-
* @param props Configuration properties for the construct.
|
|
49
|
-
*/
|
|
50
46
|
constructor(scope: Construct, id: string, props: TokenInjectableDockerBuilderProps);
|
|
51
47
|
}
|
package/lib/index.js
CHANGED
|
@@ -10,40 +10,39 @@ const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
|
|
|
10
10
|
const aws_ecr_1 = require("aws-cdk-lib/aws-ecr");
|
|
11
11
|
const aws_ecs_1 = require("aws-cdk-lib/aws-ecs");
|
|
12
12
|
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
13
|
+
const aws_kms_1 = require("aws-cdk-lib/aws-kms");
|
|
13
14
|
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
14
15
|
const aws_s3_assets_1 = require("aws-cdk-lib/aws-s3-assets");
|
|
15
16
|
const custom_resources_1 = require("aws-cdk-lib/custom-resources");
|
|
16
17
|
const constructs_1 = require("constructs");
|
|
17
18
|
/**
|
|
18
19
|
* A CDK construct to build and push Docker images to an ECR repository using CodeBuild and Lambda custom resources.
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* const dockerBuilder = new TokenInjectableDockerBuilder(this, 'DockerBuilder', {
|
|
22
|
-
* path: './docker',
|
|
23
|
-
* buildArgs: {
|
|
24
|
-
* TOKEN: 'my-secret-token',
|
|
25
|
-
* ENV: 'production'
|
|
26
|
-
* },
|
|
27
|
-
* });
|
|
28
|
-
*
|
|
29
|
-
* const containerImage = dockerBuilder.getContainerImage();
|
|
30
20
|
*/
|
|
31
21
|
class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
32
|
-
/**
|
|
33
|
-
* Creates a new `TokenInjectableDockerBuilder` instance.
|
|
34
|
-
*
|
|
35
|
-
* @param scope The parent construct/stack.
|
|
36
|
-
* @param id The unique ID of the construct.
|
|
37
|
-
* @param props Configuration properties for the construct.
|
|
38
|
-
*/
|
|
39
22
|
constructor(scope, id, props) {
|
|
40
23
|
super(scope, id);
|
|
41
|
-
const { path: sourcePath, buildArgs } = props;
|
|
42
|
-
//
|
|
43
|
-
|
|
24
|
+
const { path: sourcePath, buildArgs, dockerLoginSecretArn } = props;
|
|
25
|
+
// Define a KMS key for ECR encryption
|
|
26
|
+
const encryptionKey = new aws_kms_1.Key(this, 'EcrEncryptionKey', {
|
|
27
|
+
enableKeyRotation: true,
|
|
28
|
+
});
|
|
29
|
+
// Create an ECR repository with lifecycle rules, encryption, and image scanning enabled
|
|
30
|
+
this.ecrRepository = new aws_ecr_1.Repository(this, 'ECRRepository', {
|
|
31
|
+
lifecycleRules: [
|
|
32
|
+
{
|
|
33
|
+
rulePriority: 1,
|
|
34
|
+
description: 'Remove untagged images after 30 days',
|
|
35
|
+
tagStatus: aws_ecr_1.TagStatus.UNTAGGED,
|
|
36
|
+
maxImageAge: aws_cdk_lib_1.Duration.days(1),
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
encryption: aws_ecr_1.RepositoryEncryption.KMS,
|
|
40
|
+
encryptionKey: encryptionKey,
|
|
41
|
+
imageScanOnPush: true,
|
|
42
|
+
});
|
|
44
43
|
// Package the source code as an asset
|
|
45
44
|
const sourceAsset = new aws_s3_assets_1.Asset(this, 'SourceAsset', {
|
|
46
|
-
path: sourcePath,
|
|
45
|
+
path: sourcePath,
|
|
47
46
|
});
|
|
48
47
|
// Transform buildArgs into a string of --build-arg KEY=VALUE
|
|
49
48
|
const buildArgsString = buildArgs
|
|
@@ -51,11 +50,16 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
51
50
|
.map(([key, value]) => `--build-arg ${key}=${value}`)
|
|
52
51
|
.join(' ')
|
|
53
52
|
: '';
|
|
54
|
-
//
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
// Conditional Dockerhub login commands
|
|
54
|
+
const dockerLoginCommands = dockerLoginSecretArn
|
|
55
|
+
? [
|
|
56
|
+
'echo "Retrieving Docker credentials from Secrets Manager..."',
|
|
57
|
+
`DOCKER_USERNAME=$(aws secretsmanager get-secret-value --secret-id ${dockerLoginSecretArn} --query SecretString --output text | jq -r .username)`,
|
|
58
|
+
`DOCKER_PASSWORD=$(aws secretsmanager get-secret-value --secret-id ${dockerLoginSecretArn} --query SecretString --output text | jq -r .password)`,
|
|
59
|
+
'echo "Logging in to Docker..."',
|
|
60
|
+
'echo $DOCKER_PASSWORD | docker login --username $DOCKER_USERNAME --password-stdin',
|
|
61
|
+
]
|
|
62
|
+
: ['echo "No Docker credentials provided. Skipping login step."'];
|
|
59
63
|
// Create a CodeBuild project
|
|
60
64
|
const codeBuildProject = new aws_codebuild_1.Project(this, 'UICodeBuildProject', {
|
|
61
65
|
source: aws_codebuild_1.Source.s3({
|
|
@@ -64,14 +68,18 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
64
68
|
}),
|
|
65
69
|
environment: {
|
|
66
70
|
buildImage: aws_codebuild_1.LinuxBuildImage.STANDARD_7_0,
|
|
67
|
-
privileged: true,
|
|
71
|
+
privileged: true,
|
|
72
|
+
},
|
|
73
|
+
environmentVariables: {
|
|
74
|
+
ECR_REPO_URI: { value: this.ecrRepository.repositoryUri },
|
|
75
|
+
BUILD_ARGS: { value: buildArgsString },
|
|
68
76
|
},
|
|
69
|
-
environmentVariables: environmentVariables,
|
|
70
77
|
buildSpec: aws_codebuild_1.BuildSpec.fromObject({
|
|
71
78
|
version: '0.2',
|
|
72
79
|
phases: {
|
|
73
80
|
pre_build: {
|
|
74
81
|
commands: [
|
|
82
|
+
...dockerLoginCommands,
|
|
75
83
|
'echo "Retrieving AWS Account ID..."',
|
|
76
84
|
'export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)',
|
|
77
85
|
'echo "Logging in to Amazon ECR..."',
|
|
@@ -93,33 +101,35 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
93
101
|
},
|
|
94
102
|
}),
|
|
95
103
|
});
|
|
96
|
-
// Grant permissions to
|
|
104
|
+
// Grant permissions to CodeBuild
|
|
97
105
|
this.ecrRepository.grantPullPush(codeBuildProject);
|
|
98
106
|
codeBuildProject.role.addToPrincipalPolicy(new aws_iam_1.PolicyStatement({
|
|
99
|
-
actions: ['ecr:GetAuthorizationToken'],
|
|
100
|
-
resources: [
|
|
101
|
-
}));
|
|
102
|
-
// Grant permissions to CodeBuild for CloudWatch Logs
|
|
103
|
-
codeBuildProject.role.addToPrincipalPolicy(new aws_iam_1.PolicyStatement({
|
|
104
|
-
actions: ['logs:PutLogEvents', 'logs:CreateLogGroup', 'logs:CreateLogStream'],
|
|
105
|
-
resources: [`arn:aws:logs:${aws_cdk_lib_1.Stack.of(this).region}:${aws_cdk_lib_1.Stack.of(this).account}:*`],
|
|
107
|
+
actions: ['ecr:GetAuthorizationToken', 'ecr:GetDownloadUrlForLayer', 'ecr:BatchCheckLayerAvailability'],
|
|
108
|
+
resources: [this.ecrRepository.repositoryArn],
|
|
106
109
|
}));
|
|
107
|
-
|
|
110
|
+
if (dockerLoginSecretArn) {
|
|
111
|
+
codeBuildProject.role.addToPrincipalPolicy(new aws_iam_1.PolicyStatement({
|
|
112
|
+
actions: ['secretsmanager:GetSecretValue'],
|
|
113
|
+
resources: [dockerLoginSecretArn],
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
// Grant CodeBuild access to the KMS key
|
|
117
|
+
encryptionKey.grantEncryptDecrypt(codeBuildProject.role);
|
|
118
|
+
// Create Lambda functions for onEvent and isComplete handlers
|
|
108
119
|
const onEventHandlerFunction = new aws_lambda_1.Function(this, 'OnEventHandlerFunction', {
|
|
109
|
-
runtime: aws_lambda_1.Runtime.
|
|
110
|
-
code: aws_lambda_1.Code.fromAsset(path.resolve(__dirname, '../onEvent')),
|
|
111
|
-
handler: 'onEvent.handler',
|
|
120
|
+
runtime: aws_lambda_1.Runtime.NODEJS_18_X,
|
|
121
|
+
code: aws_lambda_1.Code.fromAsset(path.resolve(__dirname, '../onEvent')),
|
|
122
|
+
handler: 'onEvent.handler',
|
|
112
123
|
timeout: aws_cdk_lib_1.Duration.minutes(15),
|
|
113
124
|
});
|
|
114
125
|
onEventHandlerFunction.addToRolePolicy(new aws_iam_1.PolicyStatement({
|
|
115
126
|
actions: ['codebuild:StartBuild'],
|
|
116
127
|
resources: [codeBuildProject.projectArn], // Restrict to specific project
|
|
117
128
|
}));
|
|
118
|
-
// Create Node.js Lambda function for isComplete
|
|
119
129
|
const isCompleteHandlerFunction = new aws_lambda_1.Function(this, 'IsCompleteHandlerFunction', {
|
|
120
|
-
runtime: aws_lambda_1.Runtime.
|
|
121
|
-
code: aws_lambda_1.Code.fromAsset(path.resolve(__dirname, '../isComplete')),
|
|
122
|
-
handler: 'isComplete.handler',
|
|
130
|
+
runtime: aws_lambda_1.Runtime.NODEJS_18_X,
|
|
131
|
+
code: aws_lambda_1.Code.fromAsset(path.resolve(__dirname, '../isComplete')),
|
|
132
|
+
handler: 'isComplete.handler',
|
|
123
133
|
timeout: aws_cdk_lib_1.Duration.minutes(15),
|
|
124
134
|
});
|
|
125
135
|
isCompleteHandlerFunction.addToRolePolicy(new aws_iam_1.PolicyStatement({
|
|
@@ -132,6 +142,11 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
132
142
|
],
|
|
133
143
|
resources: ['*'],
|
|
134
144
|
}));
|
|
145
|
+
// Grant Lambda functions access to KMS key and ECR
|
|
146
|
+
encryptionKey.grantEncryptDecrypt(onEventHandlerFunction);
|
|
147
|
+
encryptionKey.grantEncryptDecrypt(isCompleteHandlerFunction);
|
|
148
|
+
this.ecrRepository.grantPullPush(onEventHandlerFunction);
|
|
149
|
+
this.ecrRepository.grantPullPush(isCompleteHandlerFunction);
|
|
135
150
|
// Create a custom resource provider
|
|
136
151
|
const provider = new custom_resources_1.Provider(this, 'CustomResourceProvider', {
|
|
137
152
|
onEventHandler: onEventHandlerFunction,
|
|
@@ -153,5 +168,5 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
153
168
|
}
|
|
154
169
|
exports.TokenInjectableDockerBuilder = TokenInjectableDockerBuilder;
|
|
155
170
|
_a = JSII_RTTI_SYMBOL_1;
|
|
156
|
-
TokenInjectableDockerBuilder[_a] = { fqn: "token-injectable-docker-builder.TokenInjectableDockerBuilder", version: "1.0
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLDZDQUE4RDtBQUM5RCw2REFBd0Y7QUFDeEYsaURBQWlEO0FBQ2pELGlEQUFxRDtBQUNyRCxpREFBc0Q7QUFDdEQsdURBQWtGO0FBQ2xGLDZEQUFrRDtBQUNsRCxtRUFBd0Q7QUFDeEQsMkNBQXVDO0FBd0J2Qzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBYSw0QkFBNkIsU0FBUSxzQkFBUztJQUt6RDs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdDO1FBQ2hGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMseUJBQXlCO1FBRXhFLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksb0JBQVUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFM0Qsc0NBQXNDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUkscUJBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ2pELElBQUksRUFBRSxVQUFVLEVBQUUsd0NBQXdDO1NBQzNELENBQUMsQ0FBQztRQUVILDZEQUE2RDtRQUM3RCxNQUFNLGVBQWUsR0FBRyxTQUFTO1lBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztpQkFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLGVBQWUsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2lCQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ1osQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLGlF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aUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGVBQWUsR0FBRyw0QkFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckUsQ0FBQzs7QUFySkgsb0VBc0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIFN0YWNrLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFByb2plY3QsIFNvdXJjZSwgTGludXhCdWlsZEltYWdlLCBCdWlsZFNwZWMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCB7IENvbnRhaW5lckltYWdlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcyc7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFJ1bnRpbWUsIENvZGUsIERvY2tlckltYWdlQ29kZSwgRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIGBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyYCBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgRG9ja2VyZmlsZSBvciBzb3VyY2UgY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGQgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIERvY2tlciBidWlsZCBwcm9jZXNzLlxuICAgKiBUaGVzZSBhcmUgdHJhbnNmb3JtZWQgaW50byBgLS1idWlsZC1hcmdgIGZsYWdzLlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgVE9LRU46ICdteS1zZWNyZXQtdG9rZW4nLFxuICAgKiAgIEVOVjogJ3Byb2R1Y3Rpb24nXG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQXJncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cblxuLyoqXG4gKiBBIENESyBjb25zdHJ1Y3QgdG8gYnVpbGQgYW5kIHB1c2ggRG9ja2VyIGltYWdlcyB0byBhbiBFQ1IgcmVwb3NpdG9yeSB1c2luZyBDb2RlQnVpbGQgYW5kIExhbWJkYSBjdXN0b20gcmVzb3VyY2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkb2NrZXJCdWlsZGVyID0gbmV3IFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXIodGhpcywgJ0RvY2tlckJ1aWxkZXInLCB7XG4gKiAgIHBhdGg6ICcuL2RvY2tlcicsXG4gKiAgIGJ1aWxkQXJnczoge1xuICogICAgIFRPS0VOOiAnbXktc2VjcmV0LXRva2VuJyxcbiAqICAgICBFTlY6ICdwcm9kdWN0aW9uJ1xuICogICB9LFxuICogfSk7XG4gKlxuICogY29uc3QgY29udGFpbmVySW1hZ2UgPSBkb2NrZXJCdWlsZGVyLmdldENvbnRhaW5lckltYWdlKCk7XG4gKi9cbmV4cG9ydCBjbGFzcyBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lckltYWdlOiBDb250YWluZXJJbWFnZTtcbiAgcHVibGljIHJlYWRvbmx5IGRvY2tlckltYWdlQ29kZTogRG9ja2VySW1hZ2VDb2RlO1xuICBwcml2YXRlIHJlYWRvbmx5IGVjclJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXJgIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjb25zdHJ1Y3Qvc3RhY2suXG4gICAqIEBwYXJhbSBpZCBUaGUgdW5pcXVlIElEIG9mIHRoZSBjb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBwcm9wcyBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBjb25zdHJ1Y3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgcGF0aDogc291cmNlUGF0aCwgYnVpbGRBcmdzIH0gPSBwcm9wczsgLy8gRGVmYXVsdCB0byBsaW51eC9hbWQ2NFxuXG4gICAgLy8gQ3JlYXRlIGFuIEVDUiByZXBvc2l0b3J5XG4gICAgdGhpcy5lY3JSZXBvc2l0b3J5ID0gbmV3IFJlcG9zaXRvcnkodGhpcywgJ0VDUlJlcG9zaXRvcnknKTtcblxuICAgIC8vIFBhY2thZ2UgdGhlIHNvdXJjZSBjb2RlIGFzIGFuIGFzc2V0XG4gICAgY29uc3Qgc291cmNlQXNzZXQgPSBuZXcgQXNzZXQodGhpcywgJ1NvdXJjZUFzc2V0Jywge1xuICAgICAgcGF0aDogc291cmNlUGF0aCwgLy8gUGF0aCB0byB0aGUgRG9ja2VyZmlsZSBvciBzb3VyY2UgY29kZVxuICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIGJ1aWxkQXJncyBpbnRvIGEgc3RyaW5nIG9mIC0tYnVpbGQtYXJnIEtFWT1WQUxVRVxuICAgIGNvbnN0IGJ1aWxkQXJnc1N0cmluZyA9IGJ1aWxkQXJnc1xuICAgICAgPyBPYmplY3QuZW50cmllcyhidWlsZEFyZ3MpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYC0tYnVpbGQtYXJnICR7a2V5fT0ke3ZhbHVlfWApXG4gICAgICAgIC5qb2luKCcgJylcbiAgICAgIDogJyc7XG5cbiAgICAvLyBQYXNzIHRoZSBidWlsZEFyZ3NTdHJpbmcgYW5kIHBsYXRmb3JtIGFzIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGNvbnN0IGVudmlyb25tZW50VmFyaWFibGVzOiB7IFtuYW1lOiBzdHJpbmddOiB7IHZhbHVlOiBzdHJpbmcgfSB9ID0ge1xuICAgICAgRUNSX1JFUE9fVVJJOiB7IHZhbHVlOiB0aGlzLmVjclJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaSB9LFxuICAgICAgQlVJTERfQVJHUzogeyB2YWx1ZTogYnVpbGRBcmdzU3RyaW5nIH0sXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSBhIENvZGVCdWlsZCBwcm9qZWN0XG4gICAgY29uc3QgY29kZUJ1aWxkUHJvamVjdCA9IG5ldyBQcm9qZWN0KHRoaXMsICdVSUNvZGVCdWlsZFByb2plY3QnLCB7XG4gICAgICBzb3VyY2U6IFNvdXJjZS5zMyh7XG4gICAgICAgIGJ1Y2tldDogc291cmNlQXNzZXQuYnVja2V0LFxuICAgICAgICBwYXRoOiBzb3VyY2VBc3NldC5zM09iamVjdEtleSxcbiAgICAgIH0pLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgYnVpbGRJbWFnZTogTGludXhCdWlsZEltYWdlLlNUQU5EQVJEXzdfMCxcbiAgICAgICAgcHJpdmlsZWdlZDogdHJ1ZSwgLy8gUmVxdWlyZWQgZm9yIERvY2tlciBidWlsZHNcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczogZW52aXJvbm1lbnRWYXJpYWJsZXMsXG4gICAgICBidWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHtcbiAgICAgICAgdmVyc2lvbjogJzAuMicsXG4gICAgICAgIHBoYXNlczoge1xuICAgICAgICAgIHByZV9idWlsZDoge1xuICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgJ2VjaG8gXCJSZXRyaWV2aW5nIEFXUyBBY2NvdW50IElELi4uXCInLFxuICAgICAgICAgICAgICAnZXhwb3J0IEFDQ09VTlRfSUQ9JChhd3Mgc3RzIGdldC1jYWxsZXItaWRlbnRpdHkgLS1xdWVyeSBBY2NvdW50IC0tb3V0cHV0IHRleHQpJyxcbiAgICAgICAgICAgICAgJ2VjaG8gXCJMb2dnaW5nIGluIHRvIEFtYXpvbiBFQ1IuLi5cIicsXG4gICAgICAgICAgICAgICdhd3MgZWNyIGdldC1sb2dpbi1wYXNzd29yZCAtLXJlZ2lvbiAkQVdTX0RFRkFVTFRfUkVHSU9OIHwgZG9ja2VyIGxvZ2luIC0tdXNlcm5hbWUgQVdTIC0tcGFzc3dvcmQtc3RkaW4gJEFDQ09VTlRfSUQuZGtyLmVjci4kQVdTX0RFRkFVTFRfUkVHSU9OLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICAgICAnZWNobyBCdWlsZCBwaGFzZTogQnVpbGRpbmcgdGhlIERvY2tlciBpbWFnZS4uLicsXG4gICAgICAgICAgICAgICdkb2NrZXIgYnVpbGQgJEJVSUxEX0FSR1MgLXQgJEVDUl9SRVBPX1VSSTpsYXRlc3QgJENPREVCVUlMRF9TUkNfRElSJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwb3N0X2J1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICAgICAnZWNobyBQb3N0LWJ1aWxkIHBoYXNlOiBQdXNoaW5nIHRoZSBEb2NrZXIgaW1hZ2UuLi4nLFxuICAgICAgICAgICAgICAnZG9ja2VyIHB1c2ggJEVDUl9SRVBPX1VSSTpsYXRlc3QnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBpbnRlcmFjdCB3aXRoIEVDUlxuICAgIHRoaXMuZWNyUmVwb3NpdG9yeS5ncmFudFB1bGxQdXNoKGNvZGVCdWlsZFByb2plY3QpO1xuXG4gICAgY29kZUJ1aWxkUHJvamVjdC5yb2xlIS5hZGRUb1ByaW5jaXBhbFBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ2VjcjpHZXRBdXRob3JpemF0aW9uVG9rZW4nXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBDb2RlQnVpbGQgZm9yIENsb3VkV2F0Y2ggTG9nc1xuICAgIGNvZGVCdWlsZFByb2plY3Qucm9sZSEuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydsb2dzOlB1dExvZ0V2ZW50cycsICdsb2dzOkNyZWF0ZUxvZ0dyb3VwJywgJ2xvZ3M6Q3JlYXRlTG9nU3RyZWFtJ10sXG4gICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmxvZ3M6JHtTdGFjay5vZih0aGlzKS5yZWdpb259OiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06KmBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBOb2RlLmpzIExhbWJkYSBmdW5jdGlvbiBmb3Igb25FdmVudFxuICAgIGNvbnN0IG9uRXZlbnRIYW5kbGVyRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24odGhpcywgJ09uRXZlbnRIYW5kbGVyRnVuY3Rpb24nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU19MQVRFU1QsIC8vIFVzZSBOb2RlLmpzIHJ1bnRpbWVcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9vbkV2ZW50JykpLCAvLyBQYXRoIHRvIGhhbmRsZXIgY29kZVxuICAgICAgaGFuZGxlcjogJ29uRXZlbnQuaGFuZGxlcicsIC8vIEVudHJ5IHBvaW50IChhZGp1c3QgYXMgbmVlZGVkKVxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgfSk7XG5cbiAgICBvbkV2ZW50SGFuZGxlckZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ2NvZGVidWlsZDpTdGFydEJ1aWxkJ10sXG4gICAgICAgIHJlc291cmNlczogW2NvZGVCdWlsZFByb2plY3QucHJvamVjdEFybl0sIC8vIFJlc3RyaWN0IHRvIHNwZWNpZmljIHByb2plY3RcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgTm9kZS5qcyBMYW1iZGEgZnVuY3Rpb24gZm9yIGlzQ29tcGxldGVcbiAgICBjb25zdCBpc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdJc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfTEFURVNULFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uL2lzQ29tcGxldGUnKSksIC8vIFBhdGggdG8gaGFuZGxlciBjb2RlXG4gICAgICBoYW5kbGVyOiAnaXNDb21wbGV0ZS5oYW5kbGVyJywgLy8gRW50cnkgcG9pbnQgKGFkanVzdCBhcyBuZWVkZWQpXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICB9KTtcblxuICAgIGlzQ29tcGxldGVIYW5kbGVyRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnY29kZWJ1aWxkOkJhdGNoR2V0QnVpbGRzJyxcbiAgICAgICAgICAnY29kZWJ1aWxkOkxpc3RCdWlsZHNGb3JQcm9qZWN0JyxcbiAgICAgICAgICAnbG9nczpHZXRMb2dFdmVudHMnLFxuICAgICAgICAgICdsb2dzOkRlc2NyaWJlTG9nU3RyZWFtcycsXG4gICAgICAgICAgJ2xvZ3M6RGVzY3JpYmVMb2dHcm91cHMnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBhIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlclxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsICdDdXN0b21SZXNvdXJjZVByb3ZpZGVyJywge1xuICAgICAgb25FdmVudEhhbmRsZXI6IG9uRXZlbnRIYW5kbGVyRnVuY3Rpb24sXG4gICAgICBpc0NvbXBsZXRlSGFuZGxlcjogaXNDb21wbGV0ZUhhbmRsZXJGdW5jdGlvbixcbiAgICAgIHF1ZXJ5SW50ZXJ2YWw6IER1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgIH0pO1xuXG4gICAgLy8gRGVmaW5lIHRoZSBjdXN0b20gcmVzb3VyY2VcbiAgICBjb25zdCBidWlsZFRyaWdnZXJSZXNvdXJjZSA9IG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCAnQnVpbGRUcmlnZ2VyUmVzb3VyY2UnLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgUHJvamVjdE5hbWU6IGNvZGVCdWlsZFByb2plY3QucHJvamVjdE5hbWUsXG4gICAgICAgIFRyaWdnZXI6IGNyeXB0by5yYW5kb21VVUlEKCksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgYnVpbGRUcmlnZ2VyUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KGNvZGVCdWlsZFByb2plY3QpO1xuICAgIHRoaXMuY29udGFpbmVySW1hZ2UgPSBDb250YWluZXJJbWFnZS5mcm9tRWNyUmVwb3NpdG9yeSh0aGlzLmVjclJlcG9zaXRvcnkpO1xuICAgIHRoaXMuZG9ja2VySW1hZ2VDb2RlID0gRG9ja2VySW1hZ2VDb2RlLmZyb21FY3IodGhpcy5lY3JSZXBvc2l0b3J5KTtcbiAgfVxufVxuIl19
|
|
171
|
+
TokenInjectableDockerBuilder[_a] = { fqn: "token-injectable-docker-builder.TokenInjectableDockerBuilder", version: "1.1.0" };
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLDZDQUF1RDtBQUN2RCw2REFBd0Y7QUFDeEYsaURBQWtGO0FBQ2xGLGlEQUFxRDtBQUNyRCxpREFBc0Q7QUFDdEQsaURBQTBDO0FBQzFDLHVEQUFrRjtBQUNsRiw2REFBa0Q7QUFDbEQsbUVBQXdEO0FBQ3hELDJDQUF1QztBQXNDdkM7O0dBRUc7QUFDSCxNQUFhLDRCQUE2QixTQUFRLHNCQUFTO0lBS3pELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0M7UUFDaEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFcEUsc0NBQXNDO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBRyxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUN0RCxpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztRQUVILHdGQUF3RjtRQUN4RixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksb0JBQVUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQ3pELGNBQWMsRUFBRTtnQkFDZDtvQkFDRSxZQUFZLEVBQUUsQ0FBQztvQkFDZixXQUFXLEVBQUUsc0NBQXNDO29CQUNuRCxTQUFTLEVBQUUsbUJBQVMsQ0FBQyxRQUFRO29CQUM3QixXQUFXLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUM5QjthQUNGO1lBQ0QsVUFBVSxFQUFFLDhCQUFvQixDQUFDLEdBQUc7WUFDcEMsYUFBYSxFQUFFLGFBQWE7WUFDNUIsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FBQyxDQUFDO1FBRUgsc0NBQXNDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUkscUJBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ2pELElBQUksRUFBRSxVQUFVO1NBQ2pCLENBQUMsQ0FBQztRQUVILDZEQUE2RDtRQUM3RCxNQUFNLGVBQWUsR0FBRyxTQUFTO1lBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztpQkFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLGVBQWUsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2lCQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ1osQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLHVDQUF1QztRQUN2QyxNQUFNLG1CQUFtQixHQUFHLG9CQUFvQjtZQUM5QyxDQUFDLENBQUM7Z0JBQ0EsOERBQThEO2dCQUM5RCxxRUFBcUUsb0JBQW9CLHdEQUF3RDtnQkFDakoscUVBQXFFLG9CQUFvQix3REFBd0Q7Z0JBQ2pKLGdDQUFnQztnQkFDaEMsbUZBQW1GO2FBQ3BGO1lBQ0QsQ0FBQyxDQUFDLENBQUMsNkRBQTZELENBQUMsQ0FBQztRQUVwRSw2QkFBNkI7UUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLHVCQUFPLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQy9ELE1BQU0sRUFBRSxzQkFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO2dCQUMxQixJQUFJLEVBQUUsV0FBVyxDQUFDLFdBQVc7YUFDOUIsQ0FBQztZQUNGLFdBQVcsRUFBRTtnQkFDWCxVQUFVLEVBQUUsK0JBQWUsQ0FBQyxZQUFZO2dCQUN4QyxVQUFVLEVBQUUsSUFBSTthQUNqQjtZQUNELG9CQUFvQixFQUFFO2dCQUNwQixZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUU7Z0JBQ3pELFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7YUFDdkM7WUFDRCxTQUFTLEVBQUUseUJBQVMsQ0FBQyxVQUFVLENBQUM7Z0JBQzlCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE1BQU0sRUFBRTtvQkFDTixTQUFTLEVBQUU7d0JBQ1QsUUFBUSxFQUFFOzRCQUNSLEdBQUcsbUJBQW1COzRCQUN0QixxQ0FBcUM7NEJBQ3JDLGdGQUFnRjs0QkFDaEYsb0NBQW9DOzRCQUNwQyw4SkFBOEo7eUJBQy9KO3FCQUNGO29CQUNELEtBQUssRUFBRTt3QkFDTCxRQUFRLEVBQUU7NEJBQ1IsZ0RBQWdEOzRCQUNoRCxxRUFBcUU7eUJBQ3RFO3FCQUNGO29CQUNELFVBQVUsRUFBRTt3QkFDVixRQUFRLEVBQUU7NEJBQ1Isb0RBQW9EOzRCQUNwRCxrQ0FBa0M7eUJBQ25DO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILGlDQUFpQztRQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRW5ELGdCQUFnQixDQUFDLElBQUssQ0FBQyxvQkFBb0IsQ0FDekMsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLDJCQUEyQixFQUFFLDRCQUE0QixFQUFFLGlDQUFpQyxDQUFDO1lBQ3ZHLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO1NBQzlDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pCLGdCQUFnQixDQUFDLElBQUssQ0FBQyxvQkFBb0IsQ0FDekMsSUFBSSx5QkFBZSxDQUFDO2dCQUNsQixPQUFPLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztnQkFDMUMsU0FBUyxFQUFFLENBQUMsb0JBQW9CLENBQUM7YUFDbEMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBRUQsd0NBQXdDO1FBQ3hDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFLLENBQUMsQ0FBQztRQUUxRCw4REFBOEQ7UUFDOUQsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLHFCQUFRLENBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFFO1lBQzFFLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzNELE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUM5QixDQUFDLENBQUM7UUFFSCxzQkFBc0IsQ0FBQyxlQUFlLENBQ3BDLElBQUkseUJBQWUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztZQUNqQyxTQUFTLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSwrQkFBK0I7U0FDMUUsQ0FBQyxDQUNILENBQUM7UUFDRixNQUFNLHlCQUF5QixHQUFHLElBQUkscUJBQVEsQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUU7WUFDaEYsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDOUQsT0FBTyxFQUFFLG9CQUFvQjtZQUM3QixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1NBQzlCLENBQUMsQ0FBQztRQUVILHlCQUF5QixDQUFDLGVBQWUsQ0FDdkMsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRTtnQkFDUCwwQkFBMEI7Z0JBQzFCLGdDQUFnQztnQkFDaEMsbUJBQW1CO2dCQUNuQix5QkFBeUI7Z0JBQ3pCLHdCQUF3QjthQUN6QjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQztRQUVGLG1EQUFtRDtRQUNuRCxhQUFhLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMxRCxhQUFhLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFFNUQsb0NBQW9DO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksMkJBQVEsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7WUFDNUQsY0FBYyxFQUFFLHNCQUFzQjtZQUN0QyxpQkFBaUIsRUFBRSx5QkFBeUI7WUFDNUMsYUFBYSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNwQyxDQUFDLENBQUM7UUFFSCw2QkFBNkI7UUFDN0IsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO1lBQzVFLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxVQUFVLEVBQUU7Z0JBQ1YsV0FBVyxFQUFFLGdCQUFnQixDQUFDLFdBQVc7Z0JBQ3pDLE9BQU8sRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFO2FBQzdCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxjQUFjLEdBQUcsd0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGVBQWUsR0FBRyw0QkFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckUsQ0FBQzs7QUFoTEgsb0VBaUxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUHJvamVjdCwgU291cmNlLCBMaW51eEJ1aWxkSW1hZ2UsIEJ1aWxkU3BlYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSwgUmVwb3NpdG9yeUVuY3J5cHRpb24sIFRhZ1N0YXR1cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3InO1xuaW1wb3J0IHsgQ29udGFpbmVySW1hZ2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgS2V5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBSdW50aW1lLCBDb2RlLCBEb2NrZXJJbWFnZUNvZGUsIEZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBgVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlcmAgY29uc3RydWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIERvY2tlcmZpbGUgb3Igc291cmNlIGNvZGUuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBEb2NrZXIgYnVpbGQgcHJvY2Vzcy5cbiAgICogVGhlc2UgYXJlIHRyYW5zZm9ybWVkIGludG8gYC0tYnVpbGQtYXJnYCBmbGFncy5cbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIFRPS0VOOiAnbXktc2VjcmV0LXRva2VuJyxcbiAgICogICBFTlY6ICdwcm9kdWN0aW9uJ1xuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBidWlsZEFyZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBBV1MgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIERvY2tlciBsb2dpbiBjcmVkZW50aWFscy5cbiAgICogVGhpcyBzZWNyZXQgc2hvdWxkIHN0b3JlIGEgSlNPTiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbiAgICogYGBganNvblxuICAgKiB7XG4gICAqICAgXCJ1c2VybmFtZVwiOiBcIm15LWRvY2tlci11c2VybmFtZVwiLFxuICAgKiAgIFwicGFzc3dvcmRcIjogXCJteS1kb2NrZXItcGFzc3dvcmRcIlxuICAgKiB9XG4gICAqIGBgYFxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3Qgd2lsbCBza2lwIERvY2tlciBsb2dpbiBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuXG4gICAqXG4gICAqIEBleGFtcGxlICdhcm46YXdzOnNlY3JldHNtYW5hZ2VyOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6c2VjcmV0OkRvY2tlckxvZ2luU2VjcmV0J1xuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyTG9naW5TZWNyZXRBcm4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBDREsgY29uc3RydWN0IHRvIGJ1aWxkIGFuZCBwdXNoIERvY2tlciBpbWFnZXMgdG8gYW4gRUNSIHJlcG9zaXRvcnkgdXNpbmcgQ29kZUJ1aWxkIGFuZCBMYW1iZGEgY3VzdG9tIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGVjclJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG4gIHB1YmxpYyByZWFkb25seSBjb250YWluZXJJbWFnZTogQ29udGFpbmVySW1hZ2U7XG4gIHB1YmxpYyByZWFkb25seSBkb2NrZXJJbWFnZUNvZGU6IERvY2tlckltYWdlQ29kZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgcGF0aDogc291cmNlUGF0aCwgYnVpbGRBcmdzLCBkb2NrZXJMb2dpblNlY3JldEFybiB9ID0gcHJvcHM7XG5cbiAgICAvLyBEZWZpbmUgYSBLTVMga2V5IGZvciBFQ1IgZW5jcnlwdGlvblxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBuZXcgS2V5KHRoaXMsICdFY3JFbmNyeXB0aW9uS2V5Jywge1xuICAgICAgZW5hYmxlS2V5Um90YXRpb246IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgYW4gRUNSIHJlcG9zaXRvcnkgd2l0aCBsaWZlY3ljbGUgcnVsZXMsIGVuY3J5cHRpb24sIGFuZCBpbWFnZSBzY2FubmluZyBlbmFibGVkXG4gICAgdGhpcy5lY3JSZXBvc2l0b3J5ID0gbmV3IFJlcG9zaXRvcnkodGhpcywgJ0VDUlJlcG9zaXRvcnknLCB7XG4gICAgICBsaWZlY3ljbGVSdWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgcnVsZVByaW9yaXR5OiAxLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmVtb3ZlIHVudGFnZ2VkIGltYWdlcyBhZnRlciAzMCBkYXlzJyxcbiAgICAgICAgICB0YWdTdGF0dXM6IFRhZ1N0YXR1cy5VTlRBR0dFRCxcbiAgICAgICAgICBtYXhJbWFnZUFnZTogRHVyYXRpb24uZGF5cygxKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBlbmNyeXB0aW9uOiBSZXBvc2l0b3J5RW5jcnlwdGlvbi5LTVMsXG4gICAgICBlbmNyeXB0aW9uS2V5OiBlbmNyeXB0aW9uS2V5LFxuICAgICAgaW1hZ2VTY2FuT25QdXNoOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gUGFja2FnZSB0aGUgc291cmNlIGNvZGUgYXMgYW4gYXNzZXRcbiAgICBjb25zdCBzb3VyY2VBc3NldCA9IG5ldyBBc3NldCh0aGlzLCAnU291cmNlQXNzZXQnLCB7XG4gICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIGJ1aWxkQXJncyBpbnRvIGEgc3RyaW5nIG9mIC0tYnVpbGQtYXJnIEtFWT1WQUxVRVxuICAgIGNvbnN0IGJ1aWxkQXJnc1N0cmluZyA9IGJ1aWxkQXJnc1xuICAgICAgPyBPYmplY3QuZW50cmllcyhidWlsZEFyZ3MpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYC0tYnVpbGQtYXJnICR7a2V5fT0ke3ZhbHVlfWApXG4gICAgICAgIC5qb2luKCcgJylcbiAgICAgIDogJyc7XG5cbiAgICAvLyBDb25kaXRpb25hbCBEb2NrZXJodWIgbG9naW4gY29tbWFuZHNcbiAgICBjb25zdCBkb2NrZXJMb2dpbkNvbW1hbmRzID0gZG9ja2VyTG9naW5TZWNyZXRBcm5cbiAgICAgID8gW1xuICAgICAgICAnZWNobyBcIlJldHJpZXZpbmcgRG9ja2VyIGNyZWRlbnRpYWxzIGZyb20gU2VjcmV0cyBNYW5hZ2VyLi4uXCInLFxuICAgICAgICBgRE9DS0VSX1VTRVJOQU1FPSQoYXdzIHNlY3JldHNtYW5hZ2VyIGdldC1zZWNyZXQtdmFsdWUgLS1zZWNyZXQtaWQgJHtkb2NrZXJMb2dpblNlY3JldEFybn0gLS1xdWVyeSBTZWNyZXRTdHJpbmcgLS1vdXRwdXQgdGV4dCB8IGpxIC1yIC51c2VybmFtZSlgLFxuICAgICAgICBgRE9DS0VSX1BBU1NXT1JEPSQoYXdzIHNlY3JldHNtYW5hZ2VyIGdldC1zZWNyZXQtdmFsdWUgLS1zZWNyZXQtaWQgJHtkb2NrZXJMb2dpblNlY3JldEFybn0gLS1xdWVyeSBTZWNyZXRTdHJpbmcgLS1vdXRwdXQgdGV4dCB8IGpxIC1yIC5wYXNzd29yZClgLFxuICAgICAgICAnZWNobyBcIkxvZ2dpbmcgaW4gdG8gRG9ja2VyLi4uXCInLFxuICAgICAgICAnZWNobyAkRE9DS0VSX1BBU1NXT1JEIHwgZG9ja2VyIGxvZ2luIC0tdXNlcm5hbWUgJERPQ0tFUl9VU0VSTkFNRSAtLXBhc3N3b3JkLXN0ZGluJyxcbiAgICAgIF1cbiAgICAgIDogWydlY2hvIFwiTm8gRG9ja2VyIGNyZWRlbnRpYWxzIHByb3ZpZGVkLiBTa2lwcGluZyBsb2dpbiBzdGVwLlwiJ107XG5cbiAgICAvLyBDcmVhdGUgYSBDb2RlQnVpbGQgcHJvamVjdFxuICAgIGNvbnN0IGNvZGVCdWlsZFByb2plY3QgPSBuZXcgUHJvamVjdCh0aGlzLCAnVUlDb2RlQnVpbGRQcm9qZWN0Jywge1xuICAgICAgc291cmNlOiBTb3VyY2UuczMoe1xuICAgICAgICBidWNrZXQ6IHNvdXJjZUFzc2V0LmJ1Y2tldCxcbiAgICAgICAgcGF0aDogc291cmNlQXNzZXQuczNPYmplY3RLZXksXG4gICAgICB9KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QnVpbGRJbWFnZS5TVEFOREFSRF83XzAsXG4gICAgICAgIHByaXZpbGVnZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgRUNSX1JFUE9fVVJJOiB7IHZhbHVlOiB0aGlzLmVjclJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaSB9LFxuICAgICAgICBCVUlMRF9BUkdTOiB7IHZhbHVlOiBidWlsZEFyZ3NTdHJpbmcgfSxcbiAgICAgIH0sXG4gICAgICBidWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHtcbiAgICAgICAgdmVyc2lvbjogJzAuMicsXG4gICAgICAgIHBoYXNlczoge1xuICAgICAgICAgIHByZV9idWlsZDoge1xuICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgLi4uZG9ja2VyTG9naW5Db21tYW5kcyxcbiAgICAgICAgICAgICAgJ2VjaG8gXCJSZXRyaWV2aW5nIEFXUyBBY2NvdW50IElELi4uXCInLFxuICAgICAgICAgICAgICAnZXhwb3J0IEFDQ09VTlRfSUQ9JChhd3Mgc3RzIGdldC1jYWxsZXItaWRlbnRpdHkgLS1xdWVyeSBBY2NvdW50IC0tb3V0cHV0IHRleHQpJyxcbiAgICAgICAgICAgICAgJ2VjaG8gXCJMb2dnaW5nIGluIHRvIEFtYXpvbiBFQ1IuLi5cIicsXG4gICAgICAgICAgICAgICdhd3MgZWNyIGdldC1sb2dpbi1wYXNzd29yZCAtLXJlZ2lvbiAkQVdTX0RFRkFVTFRfUkVHSU9OIHwgZG9ja2VyIGxvZ2luIC0tdXNlcm5hbWUgQVdTIC0tcGFzc3dvcmQtc3RkaW4gJEFDQ09VTlRfSUQuZGtyLmVjci4kQVdTX0RFRkFVTFRfUkVHSU9OLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICAgICAnZWNobyBCdWlsZCBwaGFzZTogQnVpbGRpbmcgdGhlIERvY2tlciBpbWFnZS4uLicsXG4gICAgICAgICAgICAgICdkb2NrZXIgYnVpbGQgJEJVSUxEX0FSR1MgLXQgJEVDUl9SRVBPX1VSSTpsYXRlc3QgJENPREVCVUlMRF9TUkNfRElSJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwb3N0X2J1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICAgICAnZWNobyBQb3N0LWJ1aWxkIHBoYXNlOiBQdXNoaW5nIHRoZSBEb2NrZXIgaW1hZ2UuLi4nLFxuICAgICAgICAgICAgICAnZG9ja2VyIHB1c2ggJEVDUl9SRVBPX1VSSTpsYXRlc3QnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBDb2RlQnVpbGRcbiAgICB0aGlzLmVjclJlcG9zaXRvcnkuZ3JhbnRQdWxsUHVzaChjb2RlQnVpbGRQcm9qZWN0KTtcblxuICAgIGNvZGVCdWlsZFByb2plY3Qucm9sZSEuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuJywgJ2VjcjpHZXREb3dubG9hZFVybEZvckxheWVyJywgJ2VjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHknXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbdGhpcy5lY3JSZXBvc2l0b3J5LnJlcG9zaXRvcnlBcm5dLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGlmIChkb2NrZXJMb2dpblNlY3JldEFybikge1xuICAgICAgY29kZUJ1aWxkUHJvamVjdC5yb2xlIS5hZGRUb1ByaW5jaXBhbFBvbGljeShcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZSddLFxuICAgICAgICAgIHJlc291cmNlczogW2RvY2tlckxvZ2luU2VjcmV0QXJuXSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEdyYW50IENvZGVCdWlsZCBhY2Nlc3MgdG8gdGhlIEtNUyBrZXlcbiAgICBlbmNyeXB0aW9uS2V5LmdyYW50RW5jcnlwdERlY3J5cHQoY29kZUJ1aWxkUHJvamVjdC5yb2xlISk7XG5cbiAgICAvLyBDcmVhdGUgTGFtYmRhIGZ1bmN0aW9ucyBmb3Igb25FdmVudCBhbmQgaXNDb21wbGV0ZSBoYW5kbGVyc1xuICAgIGNvbnN0IG9uRXZlbnRIYW5kbGVyRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24odGhpcywgJ09uRXZlbnRIYW5kbGVyRnVuY3Rpb24nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18xOF9YLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uL29uRXZlbnQnKSksXG4gICAgICBoYW5kbGVyOiAnb25FdmVudC5oYW5kbGVyJyxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgIH0pO1xuXG4gICAgb25FdmVudEhhbmRsZXJGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydjb2RlYnVpbGQ6U3RhcnRCdWlsZCddLFxuICAgICAgICByZXNvdXJjZXM6IFtjb2RlQnVpbGRQcm9qZWN0LnByb2plY3RBcm5dLCAvLyBSZXN0cmljdCB0byBzcGVjaWZpYyBwcm9qZWN0XG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IGlzQ29tcGxldGVIYW5kbGVyRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24odGhpcywgJ0lzQ29tcGxldGVIYW5kbGVyRnVuY3Rpb24nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18xOF9YLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uL2lzQ29tcGxldGUnKSksXG4gICAgICBoYW5kbGVyOiAnaXNDb21wbGV0ZS5oYW5kbGVyJyxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgIH0pO1xuXG4gICAgaXNDb21wbGV0ZUhhbmRsZXJGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdjb2RlYnVpbGQ6QmF0Y2hHZXRCdWlsZHMnLFxuICAgICAgICAgICdjb2RlYnVpbGQ6TGlzdEJ1aWxkc0ZvclByb2plY3QnLFxuICAgICAgICAgICdsb2dzOkdldExvZ0V2ZW50cycsXG4gICAgICAgICAgJ2xvZ3M6RGVzY3JpYmVMb2dTdHJlYW1zJyxcbiAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ0dyb3VwcycsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gR3JhbnQgTGFtYmRhIGZ1bmN0aW9ucyBhY2Nlc3MgdG8gS01TIGtleSBhbmQgRUNSXG4gICAgZW5jcnlwdGlvbktleS5ncmFudEVuY3J5cHREZWNyeXB0KG9uRXZlbnRIYW5kbGVyRnVuY3Rpb24pO1xuICAgIGVuY3J5cHRpb25LZXkuZ3JhbnRFbmNyeXB0RGVjcnlwdChpc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uKTtcbiAgICB0aGlzLmVjclJlcG9zaXRvcnkuZ3JhbnRQdWxsUHVzaChvbkV2ZW50SGFuZGxlckZ1bmN0aW9uKTtcbiAgICB0aGlzLmVjclJlcG9zaXRvcnkuZ3JhbnRQdWxsUHVzaChpc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uKTtcblxuICAgIC8vIENyZWF0ZSBhIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlclxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsICdDdXN0b21SZXNvdXJjZVByb3ZpZGVyJywge1xuICAgICAgb25FdmVudEhhbmRsZXI6IG9uRXZlbnRIYW5kbGVyRnVuY3Rpb24sXG4gICAgICBpc0NvbXBsZXRlSGFuZGxlcjogaXNDb21wbGV0ZUhhbmRsZXJGdW5jdGlvbixcbiAgICAgIHF1ZXJ5SW50ZXJ2YWw6IER1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgIH0pO1xuXG4gICAgLy8gRGVmaW5lIHRoZSBjdXN0b20gcmVzb3VyY2VcbiAgICBjb25zdCBidWlsZFRyaWdnZXJSZXNvdXJjZSA9IG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCAnQnVpbGRUcmlnZ2VyUmVzb3VyY2UnLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgUHJvamVjdE5hbWU6IGNvZGVCdWlsZFByb2plY3QucHJvamVjdE5hbWUsXG4gICAgICAgIFRyaWdnZXI6IGNyeXB0by5yYW5kb21VVUlEKCksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgYnVpbGRUcmlnZ2VyUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KGNvZGVCdWlsZFByb2plY3QpO1xuICAgIHRoaXMuY29udGFpbmVySW1hZ2UgPSBDb250YWluZXJJbWFnZS5mcm9tRWNyUmVwb3NpdG9yeSh0aGlzLmVjclJlcG9zaXRvcnkpO1xuICAgIHRoaXMuZG9ja2VySW1hZ2VDb2RlID0gRG9ja2VySW1hZ2VDb2RlLmZyb21FY3IodGhpcy5lY3JSZXBvc2l0b3J5KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const path = require("path");
|
|
4
|
+
const cdk = require("aws-cdk-lib");
|
|
5
|
+
const index_1 = require("./index");
|
|
6
|
+
const app = new cdk.App();
|
|
7
|
+
const stack = new cdk.Stack(app, 'IntegTestingStack');
|
|
8
|
+
new index_1.TokenInjectableDockerBuilder(stack, 'Builder', {
|
|
9
|
+
path: path.resolve(__dirname, '../test-docker'),
|
|
10
|
+
buildArgs: {
|
|
11
|
+
SAMPLE_ARG_1: 'SAMPLE_VALUE_1',
|
|
12
|
+
SAMPLE_ARG_2: 'SAMPLE_VALUE_2',
|
|
13
|
+
SAMPLE_ARG_3: 'SAMPLE_VALUE_3',
|
|
14
|
+
SAMPLE_ARG_4: 'SAMPLE_VALUE_4',
|
|
15
|
+
SAMPLE_ARG_5: 'SAMPLE_VALUE_5',
|
|
16
|
+
SAMPLE_ARG_6: 'SAMPLE_VALUE_6',
|
|
17
|
+
},
|
|
18
|
+
dockerLoginSecretArn: 'arn:aws:secretsmanager:us-east-1:281318412783:secret:DockerLogin-jR8U8w',
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuZGVmYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkJBQTZCO0FBQzdCLG1DQUFtQztBQUNuQyxtQ0FBdUQ7QUFFdkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBRXRELElBQUksb0NBQTRCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNqRCxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUM7SUFDL0MsU0FBUyxFQUFFO1FBQ1QsWUFBWSxFQUFFLGdCQUFnQjtRQUM5QixZQUFZLEVBQUUsZ0JBQWdCO1FBQzlCLFlBQVksRUFBRSxnQkFBZ0I7UUFDOUIsWUFBWSxFQUFFLGdCQUFnQjtRQUM5QixZQUFZLEVBQUUsZ0JBQWdCO1FBQzlCLFlBQVksRUFBRSxnQkFBZ0I7S0FDL0I7SUFDRCxvQkFBb0IsRUFBRSx5RUFBeUU7Q0FDaEcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyIH0gZnJvbSAnLi9pbmRleCc7XG5cbmNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG5jb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soYXBwLCAnSW50ZWdUZXN0aW5nU3RhY2snKTtcblxubmV3IFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXIoc3RhY2ssICdCdWlsZGVyJywge1xuICBwYXRoOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4vdGVzdC1kb2NrZXInKSxcbiAgYnVpbGRBcmdzOiB7XG4gICAgU0FNUExFX0FSR18xOiAnU0FNUExFX1ZBTFVFXzEnLFxuICAgIFNBTVBMRV9BUkdfMjogJ1NBTVBMRV9WQUxVRV8yJyxcbiAgICBTQU1QTEVfQVJHXzM6ICdTQU1QTEVfVkFMVUVfMycsXG4gICAgU0FNUExFX0FSR180OiAnU0FNUExFX1ZBTFVFXzQnLFxuICAgIFNBTVBMRV9BUkdfNTogJ1NBTVBMRV9WQUxVRV81JyxcbiAgICBTQU1QTEVfQVJHXzY6ICdTQU1QTEVfVkFMVUVfNicsXG4gIH0sXG4gIGRvY2tlckxvZ2luU2VjcmV0QXJuOiAnYXJuOmF3czpzZWNyZXRzbWFuYWdlcjp1cy1lYXN0LTE6MjgxMzE4NDEyNzgzOnNlY3JldDpEb2NrZXJMb2dpbi1qUjhVOHcnLFxufSk7XG4iXX0=
|
package/package.json
CHANGED
|
@@ -28,7 +28,9 @@
|
|
|
28
28
|
"unbump": "npx projen unbump",
|
|
29
29
|
"upgrade": "npx projen upgrade",
|
|
30
30
|
"watch": "npx projen watch",
|
|
31
|
-
"projen": "npx projen"
|
|
31
|
+
"projen": "npx projen",
|
|
32
|
+
"local-deploy": "cdk deploy --app \"npx ts-node src/integ.default.ts\"",
|
|
33
|
+
"local-destroy": "cdk destroy --app \"npx ts-node src/integ.default.ts\""
|
|
32
34
|
},
|
|
33
35
|
"author": {
|
|
34
36
|
"name": "AlexTech314",
|
|
@@ -94,7 +96,7 @@
|
|
|
94
96
|
"publishConfig": {
|
|
95
97
|
"access": "public"
|
|
96
98
|
},
|
|
97
|
-
"version": "1.0
|
|
99
|
+
"version": "1.1.0",
|
|
98
100
|
"jest": {
|
|
99
101
|
"coverageProvider": "v8",
|
|
100
102
|
"testMatch": [
|