token-injectable-docker-builder 1.0.0 → 1.0.1
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 +9 -9
- package/lib/index.js +6 -10
- package/package.json +1 -1
- package/src/index.ts +197 -0
- package/src/isComplete.js +97 -0
- package/src/onEvent.js +39 -0
package/.jsii
CHANGED
|
@@ -3927,7 +3927,7 @@
|
|
|
3927
3927
|
},
|
|
3928
3928
|
"locationInModule": {
|
|
3929
3929
|
"filename": "src/index.ts",
|
|
3930
|
-
"line":
|
|
3930
|
+
"line": 59
|
|
3931
3931
|
},
|
|
3932
3932
|
"parameters": [
|
|
3933
3933
|
{
|
|
@@ -3962,7 +3962,7 @@
|
|
|
3962
3962
|
"kind": "class",
|
|
3963
3963
|
"locationInModule": {
|
|
3964
3964
|
"filename": "src/index.ts",
|
|
3965
|
-
"line":
|
|
3965
|
+
"line": 47
|
|
3966
3966
|
},
|
|
3967
3967
|
"name": "TokenInjectableDockerBuilder",
|
|
3968
3968
|
"properties": [
|
|
@@ -3973,7 +3973,7 @@
|
|
|
3973
3973
|
"immutable": true,
|
|
3974
3974
|
"locationInModule": {
|
|
3975
3975
|
"filename": "src/index.ts",
|
|
3976
|
-
"line":
|
|
3976
|
+
"line": 48
|
|
3977
3977
|
},
|
|
3978
3978
|
"name": "containerImage",
|
|
3979
3979
|
"type": {
|
|
@@ -3987,7 +3987,7 @@
|
|
|
3987
3987
|
"immutable": true,
|
|
3988
3988
|
"locationInModule": {
|
|
3989
3989
|
"filename": "src/index.ts",
|
|
3990
|
-
"line":
|
|
3990
|
+
"line": 49
|
|
3991
3991
|
},
|
|
3992
3992
|
"name": "dockerImageCode",
|
|
3993
3993
|
"type": {
|
|
@@ -4008,7 +4008,7 @@
|
|
|
4008
4008
|
"kind": "interface",
|
|
4009
4009
|
"locationInModule": {
|
|
4010
4010
|
"filename": "src/index.ts",
|
|
4011
|
-
"line":
|
|
4011
|
+
"line": 14
|
|
4012
4012
|
},
|
|
4013
4013
|
"name": "TokenInjectableDockerBuilderProps",
|
|
4014
4014
|
"properties": [
|
|
@@ -4021,7 +4021,7 @@
|
|
|
4021
4021
|
"immutable": true,
|
|
4022
4022
|
"locationInModule": {
|
|
4023
4023
|
"filename": "src/index.ts",
|
|
4024
|
-
"line":
|
|
4024
|
+
"line": 18
|
|
4025
4025
|
},
|
|
4026
4026
|
"name": "path",
|
|
4027
4027
|
"type": {
|
|
@@ -4039,7 +4039,7 @@
|
|
|
4039
4039
|
"immutable": true,
|
|
4040
4040
|
"locationInModule": {
|
|
4041
4041
|
"filename": "src/index.ts",
|
|
4042
|
-
"line":
|
|
4042
|
+
"line": 29
|
|
4043
4043
|
},
|
|
4044
4044
|
"name": "buildArgs",
|
|
4045
4045
|
"optional": true,
|
|
@@ -4056,6 +4056,6 @@
|
|
|
4056
4056
|
"symbolId": "src/index:TokenInjectableDockerBuilderProps"
|
|
4057
4057
|
}
|
|
4058
4058
|
},
|
|
4059
|
-
"version": "1.0.
|
|
4060
|
-
"fingerprint": "
|
|
4059
|
+
"version": "1.0.1",
|
|
4060
|
+
"fingerprint": "bAw/kr8wy+8DBOatIsJQcEwY7gqDQMe9vQ1zuXwtsxU="
|
|
4061
4061
|
}
|
package/lib/index.js
CHANGED
|
@@ -3,7 +3,6 @@ var _a;
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.TokenInjectableDockerBuilder = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const path = require("path");
|
|
7
6
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
8
7
|
const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
|
|
9
8
|
const aws_ecr_1 = require("aws-cdk-lib/aws-ecr");
|
|
@@ -38,9 +37,6 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
38
37
|
constructor(scope, id, props) {
|
|
39
38
|
super(scope, id);
|
|
40
39
|
const { path: sourcePath, buildArgs } = props; // Default to linux/amd64
|
|
41
|
-
// Define absolute paths for Lambda handlers
|
|
42
|
-
const onEventHandlerPath = path.resolve(__dirname, './onEventHandler');
|
|
43
|
-
const isCompleteHandlerPath = path.resolve(__dirname, './isCompleteHandler');
|
|
44
40
|
// Create an ECR repository
|
|
45
41
|
this.ecrRepository = new aws_ecr_1.Repository(this, 'ECRRepository');
|
|
46
42
|
// Package the source code as an asset
|
|
@@ -109,8 +105,8 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
109
105
|
// Create Node.js Lambda function for onEvent
|
|
110
106
|
const onEventHandlerFunction = new aws_lambda_1.Function(this, 'OnEventHandlerFunction', {
|
|
111
107
|
runtime: aws_lambda_1.Runtime.NODEJS_LATEST, // Use Node.js runtime
|
|
112
|
-
code: aws_lambda_1.Code.fromAsset(
|
|
113
|
-
handler: '
|
|
108
|
+
code: aws_lambda_1.Code.fromAsset('.'), // Path to handler code
|
|
109
|
+
handler: 'onEvent.handler', // Entry point (adjust as needed)
|
|
114
110
|
timeout: aws_cdk_lib_1.Duration.minutes(15),
|
|
115
111
|
});
|
|
116
112
|
onEventHandlerFunction.addToRolePolicy(new aws_iam_1.PolicyStatement({
|
|
@@ -120,8 +116,8 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
120
116
|
// Create Node.js Lambda function for isComplete
|
|
121
117
|
const isCompleteHandlerFunction = new aws_lambda_1.Function(this, 'IsCompleteHandlerFunction', {
|
|
122
118
|
runtime: aws_lambda_1.Runtime.NODEJS_LATEST,
|
|
123
|
-
code: aws_lambda_1.Code.fromAsset(
|
|
124
|
-
handler: '
|
|
119
|
+
code: aws_lambda_1.Code.fromAsset('.'), // Path to handler code
|
|
120
|
+
handler: 'isComplete.handler', // Entry point (adjust as needed)
|
|
125
121
|
timeout: aws_cdk_lib_1.Duration.minutes(15),
|
|
126
122
|
});
|
|
127
123
|
isCompleteHandlerFunction.addToRolePolicy(new aws_iam_1.PolicyStatement({
|
|
@@ -155,5 +151,5 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
155
151
|
}
|
|
156
152
|
exports.TokenInjectableDockerBuilder = TokenInjectableDockerBuilder;
|
|
157
153
|
_a = JSII_RTTI_SYMBOL_1;
|
|
158
|
-
TokenInjectableDockerBuilder[_a] = { fqn: "token-injectable-docker-builder.TokenInjectableDockerBuilder", version: "1.0.
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsNkNBQThEO0FBQzlELDZEQUF3RjtBQUN4RixpREFBaUQ7QUFDakQsaURBQXFEO0FBQ3JELGlEQUFzRDtBQUN0RCx1REFBa0Y7QUFDbEYsNkRBQWtEO0FBQ2xELG1FQUF3RDtBQUN4RCwyQ0FBdUM7QUF3QnZDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFhLDRCQUE2QixTQUFRLHNCQUFTO0lBS3pEOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0M7UUFDaEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyx5QkFBeUI7UUFFeEUsNENBQTRDO1FBQzVDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUN2RSxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFFN0UsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxvQkFBVSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUUzRCxzQ0FBc0M7UUFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxxQkFBSyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7WUFDakQsSUFBSSxFQUFFLFVBQVUsRUFBRSx3Q0FBd0M7U0FDM0QsQ0FBQyxDQUFDO1FBRUgsNkRBQTZEO1FBQzdELE1BQU0sZUFBZSxHQUFHLFNBQVM7WUFDL0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO2lCQUN4QixHQUFH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Q0FBQztRQUMxRCxJQUFJLENBQUMsY0FBYyxHQUFHLHdCQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxlQUFlLEdBQUcsNEJBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7O0FBekpILG9FQTBKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgU3RhY2ssIER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUHJvamVjdCwgU291cmNlLCBMaW51eEJ1aWxkSW1hZ2UsIEJ1aWxkU3BlYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3InO1xuaW1wb3J0IHsgQ29udGFpbmVySW1hZ2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgUnVudGltZSwgQ29kZSwgRG9ja2VySW1hZ2VDb2RlLCBGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgYFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXJgIGNvbnN0cnVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBEb2NrZXJmaWxlIG9yIHNvdXJjZSBjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCdWlsZCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgRG9ja2VyIGJ1aWxkIHByb2Nlc3MuXG4gICAqIFRoZXNlIGFyZSB0cmFuc2Zvcm1lZCBpbnRvIGAtLWJ1aWxkLWFyZ2AgZmxhZ3MuXG4gICAqIEBleGFtcGxlXG4gICAqIHtcbiAgICogICBUT0tFTjogJ215LXNlY3JldC10b2tlbicsXG4gICAqICAgRU5WOiAncHJvZHVjdGlvbidcbiAgICogfVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRBcmdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuXG4vKipcbiAqIEEgQ0RLIGNvbnN0cnVjdCB0byBidWlsZCBhbmQgcHVzaCBEb2NrZXIgaW1hZ2VzIHRvIGFuIEVDUiByZXBvc2l0b3J5IHVzaW5nIENvZGVCdWlsZCBhbmQgTGFtYmRhIGN1c3RvbSByZXNvdXJjZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGRvY2tlckJ1aWxkZXIgPSBuZXcgVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlcih0aGlzLCAnRG9ja2VyQnVpbGRlcicsIHtcbiAqICAgcGF0aDogJy4vZG9ja2VyJyxcbiAqICAgYnVpbGRBcmdzOiB7XG4gKiAgICAgVE9LRU46ICdteS1zZWNyZXQtdG9rZW4nLFxuICogICAgIEVOVjogJ3Byb2R1Y3Rpb24nXG4gKiAgIH0sXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb250YWluZXJJbWFnZSA9IGRvY2tlckJ1aWxkZXIuZ2V0Q29udGFpbmVySW1hZ2UoKTtcbiAqL1xuZXhwb3J0IGNsYXNzIFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGFpbmVySW1hZ2U6IENvbnRhaW5lckltYWdlO1xuICBwdWJsaWMgcmVhZG9ubHkgZG9ja2VySW1hZ2VDb2RlOiBEb2NrZXJJbWFnZUNvZGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgZWNyUmVwb3NpdG9yeTogUmVwb3NpdG9yeTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBgVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlcmAgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdC9zdGFjay5cbiAgICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgSUQgb2YgdGhlIGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIHByb3BzIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIGNvbnN0cnVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgeyBwYXRoOiBzb3VyY2VQYXRoLCBidWlsZEFyZ3MgfSA9IHByb3BzOyAvLyBEZWZhdWx0IHRvIGxpbnV4L2FtZDY0XG5cbiAgICAvLyBEZWZpbmUgYWJzb2x1dGUgcGF0aHMgZm9yIExhbWJkYSBoYW5kbGVyc1xuICAgIGNvbnN0IG9uRXZlbnRIYW5kbGVyUGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuL29uRXZlbnRIYW5kbGVyJyk7XG4gICAgY29uc3QgaXNDb21wbGV0ZUhhbmRsZXJQYXRoID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4vaXNDb21wbGV0ZUhhbmRsZXInKTtcblxuICAgIC8vIENyZWF0ZSBhbiBFQ1IgcmVwb3NpdG9yeVxuICAgIHRoaXMuZWNyUmVwb3NpdG9yeSA9IG5ldyBSZXBvc2l0b3J5KHRoaXMsICdFQ1JSZXBvc2l0b3J5Jyk7XG5cbiAgICAvLyBQYWNrYWdlIHRoZSBzb3VyY2UgY29kZSBhcyBhbiBhc3NldFxuICAgIGNvbnN0IHNvdXJjZUFzc2V0ID0gbmV3IEFzc2V0KHRoaXMsICdTb3VyY2VBc3NldCcsIHtcbiAgICAgIHBhdGg6IHNvdXJjZVBhdGgsIC8vIFBhdGggdG8gdGhlIERvY2tlcmZpbGUgb3Igc291cmNlIGNvZGVcbiAgICB9KTtcblxuICAgIC8vIFRyYW5zZm9ybSBidWlsZEFyZ3MgaW50byBhIHN0cmluZyBvZiAtLWJ1aWxkLWFyZyBLRVk9VkFMVUVcbiAgICBjb25zdCBidWlsZEFyZ3NTdHJpbmcgPSBidWlsZEFyZ3NcbiAgICAgID8gT2JqZWN0LmVudHJpZXMoYnVpbGRBcmdzKVxuICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAtLWJ1aWxkLWFyZyAke2tleX09JHt2YWx1ZX1gKVxuICAgICAgICAuam9pbignICcpXG4gICAgICA6ICcnO1xuXG4gICAgLy8gUGFzcyB0aGUgYnVpbGRBcmdzU3RyaW5nIGFuZCBwbGF0Zm9ybSBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICBjb25zdCBlbnZpcm9ubWVudFZhcmlhYmxlczogeyBbbmFtZTogc3RyaW5nXTogeyB2YWx1ZTogc3RyaW5nIH0gfSA9IHtcbiAgICAgIEVDUl9SRVBPX1VSSTogeyB2YWx1ZTogdGhpcy5lY3JSZXBvc2l0b3J5LnJlcG9zaXRvcnlVcmkgfSxcbiAgICAgIEJVSUxEX0FSR1M6IHsgdmFsdWU6IGJ1aWxkQXJnc1N0cmluZyB9LFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgYSBDb2RlQnVpbGQgcHJvamVjdFxuICAgIGNvbnN0IGNvZGVCdWlsZFByb2plY3QgPSBuZXcgUHJvamVjdCh0aGlzLCAnVUlDb2RlQnVpbGRQcm9qZWN0Jywge1xuICAgICAgc291cmNlOiBTb3VyY2UuczMoe1xuICAgICAgICBidWNrZXQ6IHNvdXJjZUFzc2V0LmJ1Y2tldCxcbiAgICAgICAgcGF0aDogc291cmNlQXNzZXQuczNPYmplY3RLZXksXG4gICAgICB9KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QnVpbGRJbWFnZS5TVEFOREFSRF83XzAsXG4gICAgICAgIHByaXZpbGVnZWQ6IHRydWUsIC8vIFJlcXVpcmVkIGZvciBEb2NrZXIgYnVpbGRzXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IGVudmlyb25tZW50VmFyaWFibGVzLFxuICAgICAgYnVpbGRTcGVjOiBCdWlsZFNwZWMuZnJvbU9iamVjdCh7XG4gICAgICAgIHZlcnNpb246ICcwLjInLFxuICAgICAgICBwaGFzZXM6IHtcbiAgICAgICAgICBwcmVfYnVpbGQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgICAgICdlY2hvIFwiUmV0cmlldmluZyBBV1MgQWNjb3VudCBJRC4uLlwiJyxcbiAgICAgICAgICAgICAgJ2V4cG9ydCBBQ0NPVU5UX0lEPSQoYXdzIHN0cyBnZXQtY2FsbGVyLWlkZW50aXR5IC0tcXVlcnkgQWNjb3VudCAtLW91dHB1dCB0ZXh0KScsXG4gICAgICAgICAgICAgICdlY2hvIFwiTG9nZ2luZyBpbiB0byBBbWF6b24gRUNSLi4uXCInLFxuICAgICAgICAgICAgICAnYXdzIGVjciBnZXQtbG9naW4tcGFzc3dvcmQgLS1yZWdpb24gJEFXU19ERUZBVUxUX1JFR0lPTiB8IGRvY2tlciBsb2dpbiAtLXVzZXJuYW1lIEFXUyAtLXBhc3N3b3JkLXN0ZGluICRBQ0NPVU5UX0lELmRrci5lY3IuJEFXU19ERUZBVUxUX1JFR0lPTi5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBidWlsZDoge1xuICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgJ2VjaG8gQnVpbGQgcGhhc2U6IEJ1aWxkaW5nIHRoZSBEb2NrZXIgaW1hZ2UuLi4nLFxuICAgICAgICAgICAgICAnZG9ja2VyIGJ1aWxkICRCVUlMRF9BUkdTIC10ICRFQ1JfUkVQT19VUkk6bGF0ZXN0ICRDT0RFQlVJTERfU1JDX0RJUicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcG9zdF9idWlsZDoge1xuICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgJ2VjaG8gUG9zdC1idWlsZCBwaGFzZTogUHVzaGluZyB0aGUgRG9ja2VyIGltYWdlLi4uJyxcbiAgICAgICAgICAgICAgJ2RvY2tlciBwdXNoICRFQ1JfUkVQT19VUkk6bGF0ZXN0JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gaW50ZXJhY3Qgd2l0aCBFQ1JcbiAgICB0aGlzLmVjclJlcG9zaXRvcnkuZ3JhbnRQdWxsUHVzaChjb2RlQnVpbGRQcm9qZWN0KTtcblxuICAgIGNvZGVCdWlsZFByb2plY3Qucm9sZSEuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuJ10sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gQ29kZUJ1aWxkIGZvciBDbG91ZFdhdGNoIExvZ3NcbiAgICBjb2RlQnVpbGRQcm9qZWN0LnJvbGUhLmFkZFRvUHJpbmNpcGFsUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFsnbG9nczpQdXRMb2dFdmVudHMnLCAnbG9nczpDcmVhdGVMb2dHcm91cCcsICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbSddLFxuICAgICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czpsb2dzOiR7U3RhY2sub2YodGhpcykucmVnaW9ufToke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9OipgXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgTm9kZS5qcyBMYW1iZGEgZnVuY3Rpb24gZm9yIG9uRXZlbnRcbiAgICBjb25zdCBvbkV2ZW50SGFuZGxlckZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdPbkV2ZW50SGFuZGxlckZ1bmN0aW9uJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfTEFURVNULCAvLyBVc2UgTm9kZS5qcyBydW50aW1lXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChvbkV2ZW50SGFuZGxlclBhdGgpLCAvLyBQYXRoIHRvIGhhbmRsZXIgY29kZVxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLCAvLyBFbnRyeSBwb2ludCAoYWRqdXN0IGFzIG5lZWRlZClcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgIH0pO1xuXG4gICAgb25FdmVudEhhbmRsZXJGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydjb2RlYnVpbGQ6U3RhcnRCdWlsZCddLFxuICAgICAgICByZXNvdXJjZXM6IFtjb2RlQnVpbGRQcm9qZWN0LnByb2plY3RBcm5dLCAvLyBSZXN0cmljdCB0byBzcGVjaWZpYyBwcm9qZWN0XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIE5vZGUuanMgTGFtYmRhIGZ1bmN0aW9uIGZvciBpc0NvbXBsZXRlXG4gICAgY29uc3QgaXNDb21wbGV0ZUhhbmRsZXJGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbih0aGlzLCAnSXNDb21wbGV0ZUhhbmRsZXJGdW5jdGlvbicsIHtcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTX0xBVEVTVCxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KGlzQ29tcGxldGVIYW5kbGVyUGF0aCksXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICB9KTtcblxuICAgIGlzQ29tcGxldGVIYW5kbGVyRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnY29kZWJ1aWxkOkJhdGNoR2V0QnVpbGRzJyxcbiAgICAgICAgICAnY29kZWJ1aWxkOkxpc3RCdWlsZHNGb3JQcm9qZWN0JyxcbiAgICAgICAgICAnbG9nczpHZXRMb2dFdmVudHMnLFxuICAgICAgICAgICdsb2dzOkRlc2NyaWJlTG9nU3RyZWFtcycsXG4gICAgICAgICAgJ2xvZ3M6RGVzY3JpYmVMb2dHcm91cHMnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBhIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlclxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsICdDdXN0b21SZXNvdXJjZVByb3ZpZGVyJywge1xuICAgICAgb25FdmVudEhhbmRsZXI6IG9uRXZlbnRIYW5kbGVyRnVuY3Rpb24sXG4gICAgICBpc0NvbXBsZXRlSGFuZGxlcjogaXNDb21wbGV0ZUhhbmRsZXJGdW5jdGlvbixcbiAgICAgIHF1ZXJ5SW50ZXJ2YWw6IER1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgIH0pO1xuXG4gICAgLy8gRGVmaW5lIHRoZSBjdXN0b20gcmVzb3VyY2VcbiAgICBjb25zdCBidWlsZFRyaWdnZXJSZXNvdXJjZSA9IG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCAnQnVpbGRUcmlnZ2VyUmVzb3VyY2UnLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgUHJvamVjdE5hbWU6IGNvZGVCdWlsZFByb2plY3QucHJvamVjdE5hbWUsXG4gICAgICAgIFRyaWdnZXI6IGNyeXB0by5yYW5kb21VVUlEKCksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgYnVpbGRUcmlnZ2VyUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KGNvZGVCdWlsZFByb2plY3QpO1xuICAgIHRoaXMuY29udGFpbmVySW1hZ2UgPSBDb250YWluZXJJbWFnZS5mcm9tRWNyUmVwb3NpdG9yeSh0aGlzLmVjclJlcG9zaXRvcnkpO1xuICAgIHRoaXMuZG9ja2VySW1hZ2VDb2RlID0gRG9ja2VySW1hZ2VDb2RlLmZyb21FY3IodGhpcy5lY3JSZXBvc2l0b3J5KTtcbiAgfVxufVxuIl19
|
|
154
|
+
TokenInjectableDockerBuilder[_a] = { fqn: "token-injectable-docker-builder.TokenInjectableDockerBuilder", version: "1.0.1" };
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBOEQ7QUFDOUQsNkRBQXdGO0FBQ3hGLGlEQUFpRDtBQUNqRCxpREFBcUQ7QUFDckQsaURBQXNEO0FBQ3RELHVEQUFrRjtBQUNsRiw2REFBa0Q7QUFDbEQsbUVBQXdEO0FBQ3hELDJDQUF1QztBQXdCdkM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQWEsNEJBQTZCLFNBQVEsc0JBQVM7SUFLekQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QztRQUNoRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLHlCQUF5QjtRQUV4RSwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLG9CQUFVLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRTNELHNDQUFzQztRQUN0QyxNQUFNLFdBQVcsR0FBRyxJQUFJLHFCQUFLLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNqRCxJQUFJLEVBQUUsVUFBVSxFQUFFLHdDQUF3QztTQUMzRCxDQUFDLENBQUM7UUFFSCw2REFBNkQ7UUFDN0QsTUFBTSxlQUFlLEdBQUcsU0FBUztZQUMvQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7aUJBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztpQkFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNaLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFUCxpRUFBaUU7UUFDakUsTUFBTSxvQkFBb0IsR0FB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QUFDLENBQUM7SUFDckUsQ0FBQzs7QUFySkgsb0VBc0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIFN0YWNrLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFByb2plY3QsIFNvdXJjZSwgTGludXhCdWlsZEltYWdlLCBCdWlsZFNwZWMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCB7IENvbnRhaW5lckltYWdlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcyc7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFJ1bnRpbWUsIENvZGUsIERvY2tlckltYWdlQ29kZSwgRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIGBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyYCBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgRG9ja2VyZmlsZSBvciBzb3VyY2UgY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGQgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIERvY2tlciBidWlsZCBwcm9jZXNzLlxuICAgKiBUaGVzZSBhcmUgdHJhbnNmb3JtZWQgaW50byBgLS1idWlsZC1hcmdgIGZsYWdzLlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgVE9LRU46ICdteS1zZWNyZXQtdG9rZW4nLFxuICAgKiAgIEVOVjogJ3Byb2R1Y3Rpb24nXG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQXJncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cblxuLyoqXG4gKiBBIENESyBjb25zdHJ1Y3QgdG8gYnVpbGQgYW5kIHB1c2ggRG9ja2VyIGltYWdlcyB0byBhbiBFQ1IgcmVwb3NpdG9yeSB1c2luZyBDb2RlQnVpbGQgYW5kIExhbWJkYSBjdXN0b20gcmVzb3VyY2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkb2NrZXJCdWlsZGVyID0gbmV3IFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXIodGhpcywgJ0RvY2tlckJ1aWxkZXInLCB7XG4gKiAgIHBhdGg6ICcuL2RvY2tlcicsXG4gKiAgIGJ1aWxkQXJnczoge1xuICogICAgIFRPS0VOOiAnbXktc2VjcmV0LXRva2VuJyxcbiAqICAgICBFTlY6ICdwcm9kdWN0aW9uJ1xuICogICB9LFxuICogfSk7XG4gKlxuICogY29uc3QgY29udGFpbmVySW1hZ2UgPSBkb2NrZXJCdWlsZGVyLmdldENvbnRhaW5lckltYWdlKCk7XG4gKi9cbmV4cG9ydCBjbGFzcyBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lckltYWdlOiBDb250YWluZXJJbWFnZTtcbiAgcHVibGljIHJlYWRvbmx5IGRvY2tlckltYWdlQ29kZTogRG9ja2VySW1hZ2VDb2RlO1xuICBwcml2YXRlIHJlYWRvbmx5IGVjclJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXJgIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjb25zdHJ1Y3Qvc3RhY2suXG4gICAqIEBwYXJhbSBpZCBUaGUgdW5pcXVlIElEIG9mIHRoZSBjb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBwcm9wcyBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBjb25zdHJ1Y3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgcGF0aDogc291cmNlUGF0aCwgYnVpbGRBcmdzIH0gPSBwcm9wczsgLy8gRGVmYXVsdCB0byBsaW51eC9hbWQ2NFxuXG4gICAgLy8gQ3JlYXRlIGFuIEVDUiByZXBvc2l0b3J5XG4gICAgdGhpcy5lY3JSZXBvc2l0b3J5ID0gbmV3IFJlcG9zaXRvcnkodGhpcywgJ0VDUlJlcG9zaXRvcnknKTtcblxuICAgIC8vIFBhY2thZ2UgdGhlIHNvdXJjZSBjb2RlIGFzIGFuIGFzc2V0XG4gICAgY29uc3Qgc291cmNlQXNzZXQgPSBuZXcgQXNzZXQodGhpcywgJ1NvdXJjZUFzc2V0Jywge1xuICAgICAgcGF0aDogc291cmNlUGF0aCwgLy8gUGF0aCB0byB0aGUgRG9ja2VyZmlsZSBvciBzb3VyY2UgY29kZVxuICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIGJ1aWxkQXJncyBpbnRvIGEgc3RyaW5nIG9mIC0tYnVpbGQtYXJnIEtFWT1WQUxVRVxuICAgIGNvbnN0IGJ1aWxkQXJnc1N0cmluZyA9IGJ1aWxkQXJnc1xuICAgICAgPyBPYmplY3QuZW50cmllcyhidWlsZEFyZ3MpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYC0tYnVpbGQtYXJnICR7a2V5fT0ke3ZhbHVlfWApXG4gICAgICAgIC5qb2luKCcgJylcbiAgICAgIDogJyc7XG5cbiAgICAvLyBQYXNzIHRoZSBidWlsZEFyZ3NTdHJpbmcgYW5kIHBsYXRmb3JtIGFzIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGNvbnN0IGVudmlyb25tZW50VmFyaWFibGVzOiB7IFtuYW1lOiBzdHJpbmddOiB7IHZhbHVlOiBzdHJpbmcgfSB9ID0ge1xuICAgICAgRUNSX1JFUE9fVVJJOiB7IHZhbHVlOiB0aGlzLmVjclJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaSB9LFxuICAgICAgQlVJTERfQVJHUzogeyB2YWx1ZTogYnVpbGRBcmdzU3RyaW5nIH0sXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSBhIENvZGVCdWlsZCBwcm9qZWN0XG4gICAgY29uc3QgY29kZUJ1aWxkUHJvamVjdCA9IG5ldyBQcm9qZWN0KHRoaXMsICdVSUNvZGVCdWlsZFByb2plY3QnLCB7XG4gICAgICBzb3VyY2U6IFNvdXJjZS5zMyh7XG4gICAgICAgIGJ1Y2tldDogc291cmNlQXNzZXQuYnVja2V0LFxuICAgICAgICBwYXRoOiBzb3VyY2VBc3NldC5zM09iamVjdEtleSxcbiAgICAgIH0pLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgYnVpbGRJbWFnZTogTGludXhCdWlsZEltYWdlLlNUQU5EQVJEXzdfMCxcbiAgICAgICAgcHJpdmlsZWdlZDogdHJ1ZSwgLy8gUmVxdWlyZWQgZm9yIERvY2tlciBidWlsZHNcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczogZW52aXJvbm1lbnRWYXJpYWJsZXMsXG4gICAgICBidWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHtcbiAgICAgICAgdmVyc2lvbjogJzAuMicsXG4gICAgICAgIHBoYXNlczoge1xuICAgICAgICAgIHByZV9idWlsZDoge1xuICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgJ2VjaG8gXCJSZXRyaWV2aW5nIEFXUyBBY2NvdW50IElELi4uXCInLFxuICAgICAgICAgICAgICAnZXhwb3J0IEFDQ09VTlRfSUQ9JChhd3Mgc3RzIGdldC1jYWxsZXItaWRlbnRpdHkgLS1xdWVyeSBBY2NvdW50IC0tb3V0cHV0IHRleHQpJyxcbiAgICAgICAgICAgICAgJ2VjaG8gXCJMb2dnaW5nIGluIHRvIEFtYXpvbiBFQ1IuLi5cIicsXG4gICAgICAgICAgICAgICdhd3MgZWNyIGdldC1sb2dpbi1wYXNzd29yZCAtLXJlZ2lvbiAkQVdTX0RFRkFVTFRfUkVHSU9OIHwgZG9ja2VyIGxvZ2luIC0tdXNlcm5hbWUgQVdTIC0tcGFzc3dvcmQtc3RkaW4gJEFDQ09VTlRfSUQuZGtyLmVjci4kQVdTX0RFRkFVTFRfUkVHSU9OLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICAgICAnZWNobyBCdWlsZCBwaGFzZTogQnVpbGRpbmcgdGhlIERvY2tlciBpbWFnZS4uLicsXG4gICAgICAgICAgICAgICdkb2NrZXIgYnVpbGQgJEJVSUxEX0FSR1MgLXQgJEVDUl9SRVBPX1VSSTpsYXRlc3QgJENPREVCVUlMRF9TUkNfRElSJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwb3N0X2J1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICAgICAnZWNobyBQb3N0LWJ1aWxkIHBoYXNlOiBQdXNoaW5nIHRoZSBEb2NrZXIgaW1hZ2UuLi4nLFxuICAgICAgICAgICAgICAnZG9ja2VyIHB1c2ggJEVDUl9SRVBPX1VSSTpsYXRlc3QnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBpbnRlcmFjdCB3aXRoIEVDUlxuICAgIHRoaXMuZWNyUmVwb3NpdG9yeS5ncmFudFB1bGxQdXNoKGNvZGVCdWlsZFByb2plY3QpO1xuXG4gICAgY29kZUJ1aWxkUHJvamVjdC5yb2xlIS5hZGRUb1ByaW5jaXBhbFBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ2VjcjpHZXRBdXRob3JpemF0aW9uVG9rZW4nXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBDb2RlQnVpbGQgZm9yIENsb3VkV2F0Y2ggTG9nc1xuICAgIGNvZGVCdWlsZFByb2plY3Qucm9sZSEuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydsb2dzOlB1dExvZ0V2ZW50cycsICdsb2dzOkNyZWF0ZUxvZ0dyb3VwJywgJ2xvZ3M6Q3JlYXRlTG9nU3RyZWFtJ10sXG4gICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmxvZ3M6JHtTdGFjay5vZih0aGlzKS5yZWdpb259OiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06KmBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBOb2RlLmpzIExhbWJkYSBmdW5jdGlvbiBmb3Igb25FdmVudFxuICAgIGNvbnN0IG9uRXZlbnRIYW5kbGVyRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24odGhpcywgJ09uRXZlbnRIYW5kbGVyRnVuY3Rpb24nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU19MQVRFU1QsIC8vIFVzZSBOb2RlLmpzIHJ1bnRpbWVcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KCcuJyksIC8vIFBhdGggdG8gaGFuZGxlciBjb2RlXG4gICAgICBoYW5kbGVyOiAnb25FdmVudC5oYW5kbGVyJywgLy8gRW50cnkgcG9pbnQgKGFkanVzdCBhcyBuZWVkZWQpXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICB9KTtcblxuICAgIG9uRXZlbnRIYW5kbGVyRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFsnY29kZWJ1aWxkOlN0YXJ0QnVpbGQnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbY29kZUJ1aWxkUHJvamVjdC5wcm9qZWN0QXJuXSwgLy8gUmVzdHJpY3QgdG8gc3BlY2lmaWMgcHJvamVjdFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBOb2RlLmpzIExhbWJkYSBmdW5jdGlvbiBmb3IgaXNDb21wbGV0ZVxuICAgIGNvbnN0IGlzQ29tcGxldGVIYW5kbGVyRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24odGhpcywgJ0lzQ29tcGxldGVIYW5kbGVyRnVuY3Rpb24nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU19MQVRFU1QsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldCgnLicpLCAvLyBQYXRoIHRvIGhhbmRsZXIgY29kZVxuICAgICAgaGFuZGxlcjogJ2lzQ29tcGxldGUuaGFuZGxlcicsIC8vIEVudHJ5IHBvaW50IChhZGp1c3QgYXMgbmVlZGVkKVxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgfSk7XG5cbiAgICBpc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2NvZGVidWlsZDpCYXRjaEdldEJ1aWxkcycsXG4gICAgICAgICAgJ2NvZGVidWlsZDpMaXN0QnVpbGRzRm9yUHJvamVjdCcsXG4gICAgICAgICAgJ2xvZ3M6R2V0TG9nRXZlbnRzJyxcbiAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ1N0cmVhbXMnLFxuICAgICAgICAgICdsb2dzOkRlc2NyaWJlTG9nR3JvdXBzJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgYSBjdXN0b20gcmVzb3VyY2UgcHJvdmlkZXJcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCAnQ3VzdG9tUmVzb3VyY2VQcm92aWRlcicsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiBvbkV2ZW50SGFuZGxlckZ1bmN0aW9uLFxuICAgICAgaXNDb21wbGV0ZUhhbmRsZXI6IGlzQ29tcGxldGVIYW5kbGVyRnVuY3Rpb24sXG4gICAgICBxdWVyeUludGVydmFsOiBEdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICB9KTtcblxuICAgIC8vIERlZmluZSB0aGUgY3VzdG9tIHJlc291cmNlXG4gICAgY29uc3QgYnVpbGRUcmlnZ2VyUmVzb3VyY2UgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgJ0J1aWxkVHJpZ2dlclJlc291cmNlJywge1xuICAgICAgc2VydmljZVRva2VuOiBwcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFByb2plY3ROYW1lOiBjb2RlQnVpbGRQcm9qZWN0LnByb2plY3ROYW1lLFxuICAgICAgICBUcmlnZ2VyOiBjcnlwdG8ucmFuZG9tVVVJRCgpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGJ1aWxkVHJpZ2dlclJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeShjb2RlQnVpbGRQcm9qZWN0KTtcbiAgICB0aGlzLmNvbnRhaW5lckltYWdlID0gQ29udGFpbmVySW1hZ2UuZnJvbUVjclJlcG9zaXRvcnkodGhpcy5lY3JSZXBvc2l0b3J5KTtcbiAgICB0aGlzLmRvY2tlckltYWdlQ29kZSA9IERvY2tlckltYWdlQ29kZS5mcm9tRWNyKHRoaXMuZWNyUmVwb3NpdG9yeSk7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
package/src/index.ts
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { CustomResource, Stack, Duration } from 'aws-cdk-lib';
|
|
2
|
+
import { Project, Source, LinuxBuildImage, BuildSpec } from 'aws-cdk-lib/aws-codebuild';
|
|
3
|
+
import { Repository } from 'aws-cdk-lib/aws-ecr';
|
|
4
|
+
import { ContainerImage } from 'aws-cdk-lib/aws-ecs';
|
|
5
|
+
import { PolicyStatement } from 'aws-cdk-lib/aws-iam';
|
|
6
|
+
import { Runtime, Code, DockerImageCode, Function } from 'aws-cdk-lib/aws-lambda';
|
|
7
|
+
import { Asset } from 'aws-cdk-lib/aws-s3-assets';
|
|
8
|
+
import { Provider } from 'aws-cdk-lib/custom-resources';
|
|
9
|
+
import { Construct } from 'constructs';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Properties for the `TokenInjectableDockerBuilder` construct.
|
|
13
|
+
*/
|
|
14
|
+
export interface TokenInjectableDockerBuilderProps {
|
|
15
|
+
/**
|
|
16
|
+
* The path to the directory containing the Dockerfile or source code.
|
|
17
|
+
*/
|
|
18
|
+
readonly path: string;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Build arguments to pass to the Docker build process.
|
|
22
|
+
* These are transformed into `--build-arg` flags.
|
|
23
|
+
* @example
|
|
24
|
+
* {
|
|
25
|
+
* TOKEN: 'my-secret-token',
|
|
26
|
+
* ENV: 'production'
|
|
27
|
+
* }
|
|
28
|
+
*/
|
|
29
|
+
readonly buildArgs?: { [key: string]: string };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* A CDK construct to build and push Docker images to an ECR repository using CodeBuild and Lambda custom resources.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* const dockerBuilder = new TokenInjectableDockerBuilder(this, 'DockerBuilder', {
|
|
38
|
+
* path: './docker',
|
|
39
|
+
* buildArgs: {
|
|
40
|
+
* TOKEN: 'my-secret-token',
|
|
41
|
+
* ENV: 'production'
|
|
42
|
+
* },
|
|
43
|
+
* });
|
|
44
|
+
*
|
|
45
|
+
* const containerImage = dockerBuilder.getContainerImage();
|
|
46
|
+
*/
|
|
47
|
+
export class TokenInjectableDockerBuilder extends Construct {
|
|
48
|
+
public readonly containerImage: ContainerImage;
|
|
49
|
+
public readonly dockerImageCode: DockerImageCode;
|
|
50
|
+
private readonly ecrRepository: Repository;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Creates a new `TokenInjectableDockerBuilder` instance.
|
|
54
|
+
*
|
|
55
|
+
* @param scope The parent construct/stack.
|
|
56
|
+
* @param id The unique ID of the construct.
|
|
57
|
+
* @param props Configuration properties for the construct.
|
|
58
|
+
*/
|
|
59
|
+
constructor(scope: Construct, id: string, props: TokenInjectableDockerBuilderProps) {
|
|
60
|
+
super(scope, id);
|
|
61
|
+
|
|
62
|
+
const { path: sourcePath, buildArgs } = props; // Default to linux/amd64
|
|
63
|
+
|
|
64
|
+
// Create an ECR repository
|
|
65
|
+
this.ecrRepository = new Repository(this, 'ECRRepository');
|
|
66
|
+
|
|
67
|
+
// Package the source code as an asset
|
|
68
|
+
const sourceAsset = new Asset(this, 'SourceAsset', {
|
|
69
|
+
path: sourcePath, // Path to the Dockerfile or source code
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Transform buildArgs into a string of --build-arg KEY=VALUE
|
|
73
|
+
const buildArgsString = buildArgs
|
|
74
|
+
? Object.entries(buildArgs)
|
|
75
|
+
.map(([key, value]) => `--build-arg ${key}=${value}`)
|
|
76
|
+
.join(' ')
|
|
77
|
+
: '';
|
|
78
|
+
|
|
79
|
+
// Pass the buildArgsString and platform as environment variables
|
|
80
|
+
const environmentVariables: { [name: string]: { value: string } } = {
|
|
81
|
+
ECR_REPO_URI: { value: this.ecrRepository.repositoryUri },
|
|
82
|
+
BUILD_ARGS: { value: buildArgsString },
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
// Create a CodeBuild project
|
|
86
|
+
const codeBuildProject = new Project(this, 'UICodeBuildProject', {
|
|
87
|
+
source: Source.s3({
|
|
88
|
+
bucket: sourceAsset.bucket,
|
|
89
|
+
path: sourceAsset.s3ObjectKey,
|
|
90
|
+
}),
|
|
91
|
+
environment: {
|
|
92
|
+
buildImage: LinuxBuildImage.STANDARD_7_0,
|
|
93
|
+
privileged: true, // Required for Docker builds
|
|
94
|
+
},
|
|
95
|
+
environmentVariables: environmentVariables,
|
|
96
|
+
buildSpec: BuildSpec.fromObject({
|
|
97
|
+
version: '0.2',
|
|
98
|
+
phases: {
|
|
99
|
+
pre_build: {
|
|
100
|
+
commands: [
|
|
101
|
+
'echo "Retrieving AWS Account ID..."',
|
|
102
|
+
'export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)',
|
|
103
|
+
'echo "Logging in to Amazon ECR..."',
|
|
104
|
+
'aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com',
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
build: {
|
|
108
|
+
commands: [
|
|
109
|
+
'echo Build phase: Building the Docker image...',
|
|
110
|
+
'docker build $BUILD_ARGS -t $ECR_REPO_URI:latest $CODEBUILD_SRC_DIR',
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
post_build: {
|
|
114
|
+
commands: [
|
|
115
|
+
'echo Post-build phase: Pushing the Docker image...',
|
|
116
|
+
'docker push $ECR_REPO_URI:latest',
|
|
117
|
+
],
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
}),
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
// Grant permissions to interact with ECR
|
|
124
|
+
this.ecrRepository.grantPullPush(codeBuildProject);
|
|
125
|
+
|
|
126
|
+
codeBuildProject.role!.addToPrincipalPolicy(
|
|
127
|
+
new PolicyStatement({
|
|
128
|
+
actions: ['ecr:GetAuthorizationToken'],
|
|
129
|
+
resources: ['*'],
|
|
130
|
+
}),
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
// Grant permissions to CodeBuild for CloudWatch Logs
|
|
134
|
+
codeBuildProject.role!.addToPrincipalPolicy(
|
|
135
|
+
new PolicyStatement({
|
|
136
|
+
actions: ['logs:PutLogEvents', 'logs:CreateLogGroup', 'logs:CreateLogStream'],
|
|
137
|
+
resources: [`arn:aws:logs:${Stack.of(this).region}:${Stack.of(this).account}:*`],
|
|
138
|
+
}),
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
// Create Node.js Lambda function for onEvent
|
|
142
|
+
const onEventHandlerFunction = new Function(this, 'OnEventHandlerFunction', {
|
|
143
|
+
runtime: Runtime.NODEJS_LATEST, // Use Node.js runtime
|
|
144
|
+
code: Code.fromAsset('.'), // Path to handler code
|
|
145
|
+
handler: 'onEvent.handler', // Entry point (adjust as needed)
|
|
146
|
+
timeout: Duration.minutes(15),
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
onEventHandlerFunction.addToRolePolicy(
|
|
150
|
+
new PolicyStatement({
|
|
151
|
+
actions: ['codebuild:StartBuild'],
|
|
152
|
+
resources: [codeBuildProject.projectArn], // Restrict to specific project
|
|
153
|
+
}),
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
// Create Node.js Lambda function for isComplete
|
|
157
|
+
const isCompleteHandlerFunction = new Function(this, 'IsCompleteHandlerFunction', {
|
|
158
|
+
runtime: Runtime.NODEJS_LATEST,
|
|
159
|
+
code: Code.fromAsset('.'), // Path to handler code
|
|
160
|
+
handler: 'isComplete.handler', // Entry point (adjust as needed)
|
|
161
|
+
timeout: Duration.minutes(15),
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
isCompleteHandlerFunction.addToRolePolicy(
|
|
165
|
+
new PolicyStatement({
|
|
166
|
+
actions: [
|
|
167
|
+
'codebuild:BatchGetBuilds',
|
|
168
|
+
'codebuild:ListBuildsForProject',
|
|
169
|
+
'logs:GetLogEvents',
|
|
170
|
+
'logs:DescribeLogStreams',
|
|
171
|
+
'logs:DescribeLogGroups',
|
|
172
|
+
],
|
|
173
|
+
resources: ['*'],
|
|
174
|
+
}),
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
// Create a custom resource provider
|
|
178
|
+
const provider = new Provider(this, 'CustomResourceProvider', {
|
|
179
|
+
onEventHandler: onEventHandlerFunction,
|
|
180
|
+
isCompleteHandler: isCompleteHandlerFunction,
|
|
181
|
+
queryInterval: Duration.seconds(30),
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// Define the custom resource
|
|
185
|
+
const buildTriggerResource = new CustomResource(this, 'BuildTriggerResource', {
|
|
186
|
+
serviceToken: provider.serviceToken,
|
|
187
|
+
properties: {
|
|
188
|
+
ProjectName: codeBuildProject.projectName,
|
|
189
|
+
Trigger: crypto.randomUUID(),
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
buildTriggerResource.node.addDependency(codeBuildProject);
|
|
194
|
+
this.containerImage = ContainerImage.fromEcrRepository(this.ecrRepository);
|
|
195
|
+
this.dockerImageCode = DockerImageCode.fromEcr(this.ecrRepository);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
const { CodeBuildClient, ListBuildsForProjectCommand, BatchGetBuildsCommand } = require('@aws-sdk/client-codebuild');
|
|
2
|
+
const { CloudWatchLogsClient, GetLogEventsCommand } = require('@aws-sdk/client-cloudwatch-logs');
|
|
3
|
+
|
|
4
|
+
exports.handler = async (event, context) => {
|
|
5
|
+
console.log('isCompleteHandler Event:', JSON.stringify(event, null, 2));
|
|
6
|
+
|
|
7
|
+
// Initialize AWS SDK v3 clients
|
|
8
|
+
const codebuildClient = new CodeBuildClient({ region: process.env.AWS_REGION });
|
|
9
|
+
const cloudwatchlogsClient = new CloudWatchLogsClient({ region: process.env.AWS_REGION });
|
|
10
|
+
|
|
11
|
+
try {
|
|
12
|
+
const projectName = event.ResourceProperties.ProjectName;
|
|
13
|
+
|
|
14
|
+
if (!projectName) {
|
|
15
|
+
throw new Error('ProjectName is required in ResourceProperties');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
console.log(`Checking status for CodeBuild project: ${projectName}`);
|
|
19
|
+
|
|
20
|
+
// Retrieve the latest build for the given project
|
|
21
|
+
const listBuildsCommand = new ListBuildsForProjectCommand({
|
|
22
|
+
projectName: projectName,
|
|
23
|
+
sortOrder: 'DESCENDING',
|
|
24
|
+
maxResults: 1,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const listBuildsResp = await codebuildClient.send(listBuildsCommand);
|
|
28
|
+
const buildIds = listBuildsResp.ids;
|
|
29
|
+
|
|
30
|
+
if (!buildIds || buildIds.length === 0) {
|
|
31
|
+
throw new Error(`No builds found for project: ${projectName}`);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const buildId = buildIds[0];
|
|
35
|
+
console.log(`Latest Build ID: ${buildId}`);
|
|
36
|
+
|
|
37
|
+
// Get build details
|
|
38
|
+
const batchGetBuildsCommand = new BatchGetBuildsCommand({
|
|
39
|
+
ids: [buildId],
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const buildDetailsResp = await codebuildClient.send(batchGetBuildsCommand);
|
|
43
|
+
const build = buildDetailsResp.builds[0];
|
|
44
|
+
|
|
45
|
+
if (!build) {
|
|
46
|
+
throw new Error(`Build details not found for Build ID: ${buildId}`);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const buildStatus = build.buildStatus;
|
|
50
|
+
console.log(`Build Status: ${buildStatus}`);
|
|
51
|
+
|
|
52
|
+
if (buildStatus === 'IN_PROGRESS') {
|
|
53
|
+
// Build is still in progress
|
|
54
|
+
console.log('Build is still in progress.');
|
|
55
|
+
return { IsComplete: false };
|
|
56
|
+
} else if (buildStatus === 'SUCCEEDED') {
|
|
57
|
+
// Build succeeded
|
|
58
|
+
console.log('Build succeeded.');
|
|
59
|
+
return { IsComplete: true };
|
|
60
|
+
} else if (['FAILED', 'FAULT', 'STOPPED', 'TIMED_OUT'].includes(buildStatus)) {
|
|
61
|
+
// Build failed; retrieve last 5 log lines
|
|
62
|
+
const logsInfo = build.logs;
|
|
63
|
+
if (logsInfo && logsInfo.groupName && logsInfo.streamName) {
|
|
64
|
+
console.log(`Retrieving logs from CloudWatch Logs Group: ${logsInfo.groupName}, Stream: ${logsInfo.streamName}`);
|
|
65
|
+
|
|
66
|
+
const getLogEventsCommand = new GetLogEventsCommand({
|
|
67
|
+
logGroupName: logsInfo.groupName,
|
|
68
|
+
logStreamName: logsInfo.streamName,
|
|
69
|
+
startFromHead: false, // Start from the end to get latest logs
|
|
70
|
+
limit: 5,
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
const logEventsResp = await cloudwatchlogsClient.send(getLogEventsCommand);
|
|
74
|
+
const logEvents = logEventsResp.events;
|
|
75
|
+
const lastFiveMessages = logEvents.map((event) => event.message).reverse().join('\n');
|
|
76
|
+
|
|
77
|
+
const errorMessage = `Build failed with status: ${buildStatus}\nLast 5 build logs:\n${lastFiveMessages}`;
|
|
78
|
+
console.error(errorMessage);
|
|
79
|
+
|
|
80
|
+
// Throw an error to indicate failure to the CDK provider
|
|
81
|
+
throw new Error(errorMessage);
|
|
82
|
+
} else {
|
|
83
|
+
const errorMessage = `Build failed with status: ${buildStatus}, but logs are not available.`;
|
|
84
|
+
console.error(errorMessage);
|
|
85
|
+
throw new Error(errorMessage);
|
|
86
|
+
}
|
|
87
|
+
} else {
|
|
88
|
+
const errorMessage = `Unknown build status: ${buildStatus}`;
|
|
89
|
+
console.error(errorMessage);
|
|
90
|
+
throw new Error(errorMessage);
|
|
91
|
+
}
|
|
92
|
+
} catch (error) {
|
|
93
|
+
console.error('Error in isCompleteHandler:', error);
|
|
94
|
+
// Rethrow the error to inform the CDK provider of the failure
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
};
|
package/src/onEvent.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const { CodeBuildClient, StartBuildCommand } = require('@aws-sdk/client-codebuild');
|
|
2
|
+
|
|
3
|
+
exports.handler = async (event, context) => {
|
|
4
|
+
console.log('Event:', JSON.stringify(event, null, 2));
|
|
5
|
+
|
|
6
|
+
// Initialize the AWS SDK v3 CodeBuild client
|
|
7
|
+
const codebuildClient = new CodeBuildClient({ region: process.env.AWS_REGION });
|
|
8
|
+
|
|
9
|
+
// Set the PhysicalResourceId
|
|
10
|
+
let physicalResourceId = event.PhysicalResourceId || event.LogicalResourceId;
|
|
11
|
+
|
|
12
|
+
if (event.RequestType === 'Create' || event.RequestType === 'Update') {
|
|
13
|
+
const params = {
|
|
14
|
+
projectName: event.ResourceProperties.ProjectName,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
try {
|
|
18
|
+
const command = new StartBuildCommand(params); // Create the command
|
|
19
|
+
const build = await codebuildClient.send(command); // Send the command
|
|
20
|
+
console.log('Started build:', JSON.stringify(build, null, 2));
|
|
21
|
+
} catch (error) {
|
|
22
|
+
console.error('Error starting build:', error);
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
PhysicalResourceId: physicalResourceId,
|
|
26
|
+
Data: {},
|
|
27
|
+
Reason: error.message,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
} else if (event.RequestType === 'Delete') {
|
|
31
|
+
// No action needed for delete, but ensure PhysicalResourceId remains the same
|
|
32
|
+
console.log('Delete request received. No action required.');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
PhysicalResourceId: physicalResourceId,
|
|
37
|
+
Data: {},
|
|
38
|
+
};
|
|
39
|
+
};
|