@flit/cdk-pipeline 2.5.2 → 2.6.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flit/cdk-pipeline",
3
- "version": "2.5.2",
3
+ "version": "2.6.0",
4
4
  "description": "A highly customizable and extensible CI/CD pipeline intended as alternative to CDK's native CodePipeline",
5
5
  "keywords": [
6
6
  "aws",
package/src/index.ts CHANGED
@@ -4,7 +4,6 @@ export * from "./code-star-source-segment";
4
4
  export * from "./git-hub-source-segment";
5
5
  export * from "./pipeline-segment";
6
6
  export * from "./pipeline";
7
- export * from "./publish-assets-action";
8
7
  export * from "./s3-source-segment";
9
8
  export * from "./segment";
10
9
  export * from "./source-segment";
@@ -7,7 +7,8 @@ import {
7
7
  Project,
8
8
  ProjectProps,
9
9
  } from "aws-cdk-lib/aws-codebuild";
10
- import { Stack } from "aws-cdk-lib";
10
+ import { Duration, RemovalPolicy, Stack } from "aws-cdk-lib";
11
+ import { Cache } from "aws-cdk-lib/aws-codebuild";
11
12
  import { IAction } from "aws-cdk-lib/aws-codepipeline";
12
13
  import {
13
14
  CloudFormationExecuteChangeSetAction,
@@ -19,6 +20,7 @@ import { Artifact } from "./artifact";
19
20
  import { Segment, SegmentConstructed } from "./segment";
20
21
  import { Pipeline } from "./pipeline";
21
22
  import { PolicyStatement } from "aws-cdk-lib/aws-iam";
23
+ import { BlockPublicAccess, Bucket } from "aws-cdk-lib/aws-s3";
22
24
 
23
25
  export interface PipelineSegmentProps {
24
26
  /**
@@ -30,6 +32,7 @@ export interface PipelineSegmentProps {
30
32
  * @example "cdk synth StackName --strict --exclusively"
31
33
  */
32
34
  readonly project: ProjectProps;
35
+ readonly cache?: boolean;
33
36
  /**
34
37
  * The environmental variables for the build stage.
35
38
  */
@@ -76,6 +79,7 @@ export class PipelineSegment extends Segment {
76
79
  export interface PipelineSegmentConstructedProps {
77
80
  readonly stack: Stack;
78
81
  readonly project: ProjectProps;
82
+ readonly cache?: boolean;
79
83
  readonly environmentVariables?: { [key: string]: BuildEnvironmentVariable };
80
84
  readonly input: Artifact;
81
85
  readonly extraInputs?: Artifact[];
@@ -114,7 +118,7 @@ export class PipelineSegmentConstructed extends SegmentConstructed {
114
118
  commands: "npm install -g aws-cdk",
115
119
  },
116
120
  build: {
117
- commands: `npx cdk deploy ${props.stack.node.id} --app ./ --method prepare-change-set --change-set-name pipeline-${props.stack.node.id}-${this.name} --require-approval never`,
121
+ commands: `npx cdk deploy ${props.stack.node.id} --app ./ --exclusively --method prepare-change-set --change-set-name pipeline-${props.stack.node.id}-${this.name} --require-approval never`,
118
122
  },
119
123
  },
120
124
  cache: {
@@ -164,6 +168,16 @@ export class PipelineSegmentConstructed extends SegmentConstructed {
164
168
  environmentVariables: props.environmentVariables,
165
169
  project: new Project(this, "UpdateCodeBuild", {
166
170
  ...props.project,
171
+ cache: props.cache
172
+ ? Cache.bucket(
173
+ new Bucket(this, "CodeBuildCache", {
174
+ blockPublicAccess: BlockPublicAccess.BLOCK_ALL,
175
+ removalPolicy: RemovalPolicy.DESTROY,
176
+ autoDeleteObjects: true,
177
+ lifecycleRules: [{ expiration: Duration.days(30) }],
178
+ }),
179
+ )
180
+ : undefined,
167
181
  buildSpec: props.project.buildSpec
168
182
  ? mergeBuildSpecs(
169
183
  props.project.buildSpec,
@@ -173,13 +187,13 @@ export class PipelineSegmentConstructed extends SegmentConstructed {
173
187
  files: ["**/*"],
174
188
  },
175
189
  }),
176
- )
190
+ )
177
191
  : BuildSpec.fromObject({
178
192
  artifacts: {
179
193
  "base-directory": scope.buildDir,
180
194
  files: ["**/*"],
181
195
  },
182
- }),
196
+ }),
183
197
  }),
184
198
  }),
185
199
  new CodeBuildAction({
@@ -194,7 +208,7 @@ export class PipelineSegmentConstructed extends SegmentConstructed {
194
208
  actionName: "ApproveChanges",
195
209
  runOrder: 3,
196
210
  }),
197
- ]
211
+ ]
198
212
  : []),
199
213
  new CloudFormationExecuteChangeSetAction({
200
214
  actionName: "ExecuteChanges",
@@ -130,12 +130,12 @@ export class StackSegmentConstructed extends SegmentConstructed {
130
130
  files: [path.join(scope.buildDir, "**/*")],
131
131
  },
132
132
  }),
133
- )
133
+ )
134
134
  : BuildSpec.fromObject({
135
135
  artifacts: {
136
136
  files: [path.join(scope.buildDir, "**/*")],
137
137
  },
138
- }),
138
+ }),
139
139
  });
140
140
 
141
141
  Object.entries(
@@ -168,7 +168,7 @@ export class StackSegmentConstructed extends SegmentConstructed {
168
168
  ? v.value.split(":").slice(0, 7).join(":")
169
169
  : `arn:aws:secretsmanager:*:${
170
170
  Stack.of(this).account
171
- }:secret:${v.value}-*`,
171
+ }:secret:${v.value}-*`,
172
172
  ],
173
173
  }),
174
174
  );
@@ -191,7 +191,7 @@ export class StackSegmentConstructed extends SegmentConstructed {
191
191
  commands: "npm install -g aws-cdk",
192
192
  },
193
193
  build: {
194
- commands: `npx cdk deploy ${props.stack.node.id} --app ./ --method prepare-change-set --change-set-name pipeline-${props.stack.node.id}-${this.name} --require-approval never`,
194
+ commands: `npx cdk deploy ${props.stack.node.id} --app ./ --exclusively --method prepare-change-set --change-set-name pipeline-${props.stack.node.id}-${this.name} --require-approval never`,
195
195
  },
196
196
  },
197
197
  cache: {
@@ -243,7 +243,7 @@ export class StackSegmentConstructed extends SegmentConstructed {
243
243
  environmentVariables: props.environmentVariables,
244
244
  project: codeBuildProject,
245
245
  }),
246
- ]
246
+ ]
247
247
  : []),
248
248
  new CodeBuildAction({
249
249
  actionName: `${this.name}PrepareChanges`,
@@ -257,7 +257,7 @@ export class StackSegmentConstructed extends SegmentConstructed {
257
257
  actionName: `${this.name}ApproveChanges`,
258
258
  runOrder: buildArtifact ? 3 : 2,
259
259
  }),
260
- ]
260
+ ]
261
261
  : []),
262
262
  new CloudFormationExecuteChangeSetAction({
263
263
  actionName: `${this.name}ExecuteChanges`,
@@ -266,8 +266,8 @@ export class StackSegmentConstructed extends SegmentConstructed {
266
266
  ? 4
267
267
  : 3
268
268
  : buildArtifact
269
- ? 3
270
- : 2,
269
+ ? 3
270
+ : 2,
271
271
  stackName: props.stack.stackName,
272
272
  account: props.stack.account,
273
273
  region: props.stack.region,
@@ -276,8 +276,8 @@ export class StackSegmentConstructed extends SegmentConstructed {
276
276
  outputFileName: props.outputFileName
277
277
  ? props.outputFileName
278
278
  : props.stackOutput
279
- ? "artifact.json"
280
- : undefined,
279
+ ? "artifact.json"
280
+ : undefined,
281
281
  }),
282
282
  ];
283
283
  }
@@ -1,16 +0,0 @@
1
- import { Construct } from "constructs";
2
- import { ActionBindOptions, ActionConfig, ActionProperties, Artifact, IAction, IStage } from "aws-cdk-lib/aws-codepipeline";
3
- import { IRuleTarget, RuleProps, Rule } from "aws-cdk-lib/aws-events";
4
- export interface PublishAssetsActionProps {
5
- readonly actionName: string;
6
- readonly input: Artifact;
7
- readonly manifestPath: string;
8
- readonly runOrder?: number;
9
- }
10
- export declare class PublishAssetsAction extends Construct implements IAction {
11
- readonly actionProperties: ActionProperties;
12
- bound(scope: Construct, stage: IStage, options: ActionBindOptions): ActionConfig;
13
- bind(scope: Construct, stage: IStage, options: ActionBindOptions): ActionConfig;
14
- onStateChange(name: string, target?: IRuleTarget | undefined, options?: RuleProps | undefined): Rule;
15
- constructor(scope: Construct, id: string, props: PublishAssetsActionProps);
16
- }
@@ -1,77 +0,0 @@
1
- "use strict";
2
- var _a;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.PublishAssetsAction = void 0;
5
- const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const aws_cdk_lib_1 = require("aws-cdk-lib");
7
- const constructs_1 = require("constructs");
8
- const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
9
- const aws_codepipeline_actions_1 = require("aws-cdk-lib/aws-codepipeline-actions");
10
- const aws_iam_1 = require("aws-cdk-lib/aws-iam");
11
- const path = require("path");
12
- class PublishAssetsAction extends constructs_1.Construct {
13
- bound(scope, stage, options) {
14
- throw new Error(`Method not implemented.${!scope && !stage && options}`);
15
- }
16
- bind(scope, stage, options) {
17
- throw new Error(`Method not implemented.${!scope && !stage && options}`);
18
- }
19
- onStateChange(name, target, options) {
20
- throw new Error(`Method not implemented.${!name && !target && options}`);
21
- }
22
- constructor(scope, id, props) {
23
- super(scope, id);
24
- const codeBuild = new aws_codepipeline_actions_1.CodeBuildAction({
25
- ...props,
26
- input: props.input,
27
- project: new aws_codebuild_1.Project(this, id, {
28
- environment: {
29
- buildImage: aws_codebuild_1.LinuxBuildImage.AMAZON_LINUX_2_5,
30
- },
31
- role: new aws_iam_1.Role(this, "UpdatePipelineCodeCuildRole", {
32
- assumedBy: new aws_iam_1.CompositePrincipal(new aws_iam_1.ServicePrincipal("codebuild.amazonaws.com"), new aws_iam_1.AccountPrincipal(aws_cdk_lib_1.Stack.of(this).account)),
33
- inlinePolicies: {
34
- selfMutation: new aws_iam_1.PolicyDocument({
35
- statements: [
36
- new aws_iam_1.PolicyStatement({
37
- actions: ["sts:AssumeRole"],
38
- resources: [`arn:*:iam::${aws_cdk_lib_1.Stack.of(this).account}:role/*`],
39
- conditions: {
40
- "ForAnyValue:StringEquals": {
41
- "iam:ResourceTag/aws-cdk:bootstrap-role": [
42
- "image-publishing",
43
- "file-publishing",
44
- "deploy",
45
- ],
46
- },
47
- },
48
- }),
49
- ],
50
- }),
51
- },
52
- }),
53
- buildSpec: aws_codebuild_1.BuildSpec.fromObject({
54
- version: "0.2",
55
- phases: {
56
- install: {
57
- "runtime-versions": {
58
- nodejs: "latest",
59
- },
60
- commands: ["npm i -g @flit/publish-cdk-assets@latest"],
61
- },
62
- build: {
63
- commands: `pca ${props.manifestPath ? path.normalize(props.manifestPath) : "."}`,
64
- },
65
- },
66
- }),
67
- }),
68
- });
69
- this.actionProperties = codeBuild.actionProperties;
70
- this.bind = (scope, stage, options) => codeBuild.bind(scope, stage, options);
71
- this.onStateChange = (name, target, options) => codeBuild.onStateChange(name, target, options);
72
- }
73
- }
74
- exports.PublishAssetsAction = PublishAssetsAction;
75
- _a = JSII_RTTI_SYMBOL_1;
76
- PublishAssetsAction[_a] = { fqn: "@flit/cdk-pipeline.PublishAssetsAction", version: "2.5.2" };
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaC1hc3NldHMtYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3B1Ymxpc2gtYXNzZXRzLWFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUFvQztBQUNwQywyQ0FBdUM7QUFTdkMsNkRBQWdGO0FBQ2hGLG1GQUF1RTtBQUN2RSxpREFPNkI7QUFFN0IsNkJBQTZCO0FBUzdCLE1BQWEsbUJBQW9CLFNBQVEsc0JBQVM7SUFHakQsS0FBSyxDQUNKLEtBQWdCLEVBQ2hCLEtBQWEsRUFDYixPQUEwQjtRQUUxQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLEtBQUssSUFBSSxDQUFDLEtBQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxJQUFJLENBQ0gsS0FBZ0IsRUFDaEIsS0FBYSxFQUNiLE9BQTBCO1FBRTFCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBTSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGFBQWEsQ0FDWixJQUFZLEVBQ1osTUFBZ0MsRUFDaEMsT0FBK0I7UUFFL0IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFPLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN4RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sU0FBUyxHQUFHLElBQUksMENBQWUsQ0FBQztZQUNyQyxHQUFHLEtBQUs7WUFDUixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsT0FBTyxFQUFFLElBQUksdUJBQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO2dCQUM5QixXQUFXLEVBQUU7b0JBQ1osVUFBVSxFQUFFLCtCQUFlLENBQUMsZ0JBQWdCO2lCQUM1QztnQkFDRCxJQUFJLEVBQUUsSUFBSSxjQUFJLENBQUMsSUFBSSxFQUFFLDZCQUE2QixFQUFFO29CQUNuRCxTQUFTLEVBQUUsSUFBSSw0QkFBa0IsQ0FDaEMsSUFBSSwwQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQyxFQUMvQyxJQUFJLDBCQUFnQixDQUFDLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUM1QztvQkFDRCxjQUFjLEVBQUU7d0JBQ2YsWUFBWSxFQUFFLElBQUksd0JBQWMsQ0FBQzs0QkFDaEMsVUFBVSxFQUFFO2dDQUNYLElBQUkseUJBQWUsQ0FBQztvQ0FDbkIsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0NBQzNCLFNBQVMsRUFBRSxDQUFDLGNBQWMsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxTQUFTLENBQUM7b0NBQzFELFVBQVUsRUFBRTt3Q0FDWCwwQkFBMEIsRUFBRTs0Q0FDM0Isd0NBQXdDLEVBQUU7Z0RBQ3pDLGtCQUFrQjtnREFDbEIsaUJBQWlCO2dEQUNqQixRQUFROzZDQUNSO3lDQUNEO3FDQUNEO2lDQUNELENBQUM7NkJBQ0Y7eUJBQ0QsQ0FBQztxQkFDRjtpQkFDRCxDQUFDO2dCQUNGLFNBQVMsRUFBRSx5QkFBUyxDQUFDLFVBQVUsQ0FBQztvQkFDL0IsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsTUFBTSxFQUFFO3dCQUNQLE9BQU8sRUFBRTs0QkFDUixrQkFBa0IsRUFBRTtnQ0FDbkIsTUFBTSxFQUFFLFFBQVE7NkJBQ2hCOzRCQUNELFFBQVEsRUFBRSxDQUFDLDBDQUEwQyxDQUFDO3lCQUN0RDt3QkFDRCxLQUFLLEVBQUU7NEJBQ04sUUFBUSxFQUFFLE9BQ1QsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQzNELEVBQUU7eUJBQ0Y7cUJBQ0Q7aUJBQ0QsQ0FBQzthQUNGLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FDWCxLQUFnQixFQUNoQixLQUFhLEVBQ2IsT0FBMEIsRUFDWCxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FDcEIsSUFBWSxFQUNaLE1BQW9CLEVBQ3BCLE9BQW1CLEVBQ1osRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzRCxDQUFDOztBQTNGRixrREE0RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG5cdEFjdGlvbkJpbmRPcHRpb25zLFxuXHRBY3Rpb25Db25maWcsXG5cdEFjdGlvblByb3BlcnRpZXMsXG5cdEFydGlmYWN0LFxuXHRJQWN0aW9uLFxuXHRJU3RhZ2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lXCI7XG5pbXBvcnQgeyBCdWlsZFNwZWMsIExpbnV4QnVpbGRJbWFnZSwgUHJvamVjdCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkXCI7XG5pbXBvcnQgeyBDb2RlQnVpbGRBY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zXCI7XG5pbXBvcnQge1xuXHRBY2NvdW50UHJpbmNpcGFsLFxuXHRDb21wb3NpdGVQcmluY2lwYWwsXG5cdFBvbGljeURvY3VtZW50LFxuXHRQb2xpY3lTdGF0ZW1lbnQsXG5cdFJvbGUsXG5cdFNlcnZpY2VQcmluY2lwYWwsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBJUnVsZVRhcmdldCwgUnVsZVByb3BzLCBSdWxlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQdWJsaXNoQXNzZXRzQWN0aW9uUHJvcHMge1xuXHRyZWFkb25seSBhY3Rpb25OYW1lOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGlucHV0OiBBcnRpZmFjdDtcblx0cmVhZG9ubHkgbWFuaWZlc3RQYXRoOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHJ1bk9yZGVyPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUHVibGlzaEFzc2V0c0FjdGlvbiBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElBY3Rpb24ge1xuXHRwdWJsaWMgcmVhZG9ubHkgYWN0aW9uUHJvcGVydGllczogQWN0aW9uUHJvcGVydGllcztcblxuXHRib3VuZChcblx0XHRzY29wZTogQ29uc3RydWN0LFxuXHRcdHN0YWdlOiBJU3RhZ2UsXG5cdFx0b3B0aW9uczogQWN0aW9uQmluZE9wdGlvbnMsXG5cdCk6IEFjdGlvbkNvbmZpZyB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBNZXRob2Qgbm90IGltcGxlbWVudGVkLiR7IXNjb3BlICYmICFzdGFnZSEgJiYgb3B0aW9uc31gKTtcblx0fVxuXG5cdGJpbmQoXG5cdFx0c2NvcGU6IENvbnN0cnVjdCxcblx0XHRzdGFnZTogSVN0YWdlLFxuXHRcdG9wdGlvbnM6IEFjdGlvbkJpbmRPcHRpb25zLFxuXHQpOiBBY3Rpb25Db25maWcge1xuXHRcdHRocm93IG5ldyBFcnJvcihgTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4keyFzY29wZSAmJiAhc3RhZ2UhICYmIG9wdGlvbnN9YCk7XG5cdH1cblxuXHRvblN0YXRlQ2hhbmdlKFxuXHRcdG5hbWU6IHN0cmluZyxcblx0XHR0YXJnZXQ/OiBJUnVsZVRhcmdldCB8IHVuZGVmaW5lZCxcblx0XHRvcHRpb25zPzogUnVsZVByb3BzIHwgdW5kZWZpbmVkLFxuXHQpOiBSdWxlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCBub3QgaW1wbGVtZW50ZWQuJHshbmFtZSAmJiAhdGFyZ2V0ISAmJiBvcHRpb25zfWApO1xuXHR9XG5cblx0Y29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFB1Ymxpc2hBc3NldHNBY3Rpb25Qcm9wcykge1xuXHRcdHN1cGVyKHNjb3BlLCBpZCk7XG5cdFx0Y29uc3QgY29kZUJ1aWxkID0gbmV3IENvZGVCdWlsZEFjdGlvbih7XG5cdFx0XHQuLi5wcm9wcyxcblx0XHRcdGlucHV0OiBwcm9wcy5pbnB1dCxcblx0XHRcdHByb2plY3Q6IG5ldyBQcm9qZWN0KHRoaXMsIGlkLCB7XG5cdFx0XHRcdGVudmlyb25tZW50OiB7XG5cdFx0XHRcdFx0YnVpbGRJbWFnZTogTGludXhCdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yXzUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJvbGU6IG5ldyBSb2xlKHRoaXMsIFwiVXBkYXRlUGlwZWxpbmVDb2RlQ3VpbGRSb2xlXCIsIHtcblx0XHRcdFx0XHRhc3N1bWVkQnk6IG5ldyBDb21wb3NpdGVQcmluY2lwYWwoXG5cdFx0XHRcdFx0XHRuZXcgU2VydmljZVByaW5jaXBhbChcImNvZGVidWlsZC5hbWF6b25hd3MuY29tXCIpLFxuXHRcdFx0XHRcdFx0bmV3IEFjY291bnRQcmluY2lwYWwoU3RhY2sub2YodGhpcykuYWNjb3VudCksXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRpbmxpbmVQb2xpY2llczoge1xuXHRcdFx0XHRcdFx0c2VsZk11dGF0aW9uOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuXHRcdFx0XHRcdFx0XHRzdGF0ZW1lbnRzOiBbXG5cdFx0XHRcdFx0XHRcdFx0bmV3IFBvbGljeVN0YXRlbWVudCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb25zOiBbXCJzdHM6QXNzdW1lUm9sZVwiXSxcblx0XHRcdFx0XHRcdFx0XHRcdHJlc291cmNlczogW2Bhcm46KjppYW06OiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06cm9sZS8qYF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25kaXRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiRm9yQW55VmFsdWU6U3RyaW5nRXF1YWxzXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImlhbTpSZXNvdXJjZVRhZy9hd3MtY2RrOmJvb3RzdHJhcC1yb2xlXCI6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiaW1hZ2UtcHVibGlzaGluZ1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJmaWxlLXB1Ymxpc2hpbmdcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiZGVwbG95XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9KSxcblx0XHRcdFx0YnVpbGRTcGVjOiBCdWlsZFNwZWMuZnJvbU9iamVjdCh7XG5cdFx0XHRcdFx0dmVyc2lvbjogXCIwLjJcIixcblx0XHRcdFx0XHRwaGFzZXM6IHtcblx0XHRcdFx0XHRcdGluc3RhbGw6IHtcblx0XHRcdFx0XHRcdFx0XCJydW50aW1lLXZlcnNpb25zXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRub2RlanM6IFwibGF0ZXN0XCIsXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmRzOiBbXCJucG0gaSAtZyBAZmxpdC9wdWJsaXNoLWNkay1hc3NldHNAbGF0ZXN0XCJdLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGJ1aWxkOiB7XG5cdFx0XHRcdFx0XHRcdGNvbW1hbmRzOiBgcGNhICR7XG5cdFx0XHRcdFx0XHRcdFx0cHJvcHMubWFuaWZlc3RQYXRoID8gcGF0aC5ub3JtYWxpemUocHJvcHMubWFuaWZlc3RQYXRoKSA6IFwiLlwiXG5cdFx0XHRcdFx0XHRcdH1gLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9KSxcblx0XHRcdH0pLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5hY3Rpb25Qcm9wZXJ0aWVzID0gY29kZUJ1aWxkLmFjdGlvblByb3BlcnRpZXM7XG5cdFx0dGhpcy5iaW5kID0gKFxuXHRcdFx0c2NvcGU6IENvbnN0cnVjdCxcblx0XHRcdHN0YWdlOiBJU3RhZ2UsXG5cdFx0XHRvcHRpb25zOiBBY3Rpb25CaW5kT3B0aW9ucyxcblx0XHQpOiBBY3Rpb25Db25maWcgPT4gY29kZUJ1aWxkLmJpbmQoc2NvcGUsIHN0YWdlLCBvcHRpb25zKTtcblx0XHR0aGlzLm9uU3RhdGVDaGFuZ2UgPSAoXG5cdFx0XHRuYW1lOiBzdHJpbmcsXG5cdFx0XHR0YXJnZXQ/OiBJUnVsZVRhcmdldCxcblx0XHRcdG9wdGlvbnM/OiBSdWxlUHJvcHMsXG5cdFx0KTogUnVsZSA9PiBjb2RlQnVpbGQub25TdGF0ZUNoYW5nZShuYW1lLCB0YXJnZXQsIG9wdGlvbnMpO1xuXHR9XG59XG4iXX0=
@@ -1,123 +0,0 @@
1
- import { Stack } from "aws-cdk-lib";
2
- import { Construct } from "constructs";
3
- import {
4
- ActionBindOptions,
5
- ActionConfig,
6
- ActionProperties,
7
- Artifact,
8
- IAction,
9
- IStage,
10
- } from "aws-cdk-lib/aws-codepipeline";
11
- import { BuildSpec, LinuxBuildImage, Project } from "aws-cdk-lib/aws-codebuild";
12
- import { CodeBuildAction } from "aws-cdk-lib/aws-codepipeline-actions";
13
- import {
14
- AccountPrincipal,
15
- CompositePrincipal,
16
- PolicyDocument,
17
- PolicyStatement,
18
- Role,
19
- ServicePrincipal,
20
- } from "aws-cdk-lib/aws-iam";
21
- import { IRuleTarget, RuleProps, Rule } from "aws-cdk-lib/aws-events";
22
- import * as path from "path";
23
-
24
- export interface PublishAssetsActionProps {
25
- readonly actionName: string;
26
- readonly input: Artifact;
27
- readonly manifestPath: string;
28
- readonly runOrder?: number;
29
- }
30
-
31
- export class PublishAssetsAction extends Construct implements IAction {
32
- public readonly actionProperties: ActionProperties;
33
-
34
- bound(
35
- scope: Construct,
36
- stage: IStage,
37
- options: ActionBindOptions,
38
- ): ActionConfig {
39
- throw new Error(`Method not implemented.${!scope && !stage! && options}`);
40
- }
41
-
42
- bind(
43
- scope: Construct,
44
- stage: IStage,
45
- options: ActionBindOptions,
46
- ): ActionConfig {
47
- throw new Error(`Method not implemented.${!scope && !stage! && options}`);
48
- }
49
-
50
- onStateChange(
51
- name: string,
52
- target?: IRuleTarget | undefined,
53
- options?: RuleProps | undefined,
54
- ): Rule {
55
- throw new Error(`Method not implemented.${!name && !target! && options}`);
56
- }
57
-
58
- constructor(scope: Construct, id: string, props: PublishAssetsActionProps) {
59
- super(scope, id);
60
- const codeBuild = new CodeBuildAction({
61
- ...props,
62
- input: props.input,
63
- project: new Project(this, id, {
64
- environment: {
65
- buildImage: LinuxBuildImage.AMAZON_LINUX_2_5,
66
- },
67
- role: new Role(this, "UpdatePipelineCodeCuildRole", {
68
- assumedBy: new CompositePrincipal(
69
- new ServicePrincipal("codebuild.amazonaws.com"),
70
- new AccountPrincipal(Stack.of(this).account),
71
- ),
72
- inlinePolicies: {
73
- selfMutation: new PolicyDocument({
74
- statements: [
75
- new PolicyStatement({
76
- actions: ["sts:AssumeRole"],
77
- resources: [`arn:*:iam::${Stack.of(this).account}:role/*`],
78
- conditions: {
79
- "ForAnyValue:StringEquals": {
80
- "iam:ResourceTag/aws-cdk:bootstrap-role": [
81
- "image-publishing",
82
- "file-publishing",
83
- "deploy",
84
- ],
85
- },
86
- },
87
- }),
88
- ],
89
- }),
90
- },
91
- }),
92
- buildSpec: BuildSpec.fromObject({
93
- version: "0.2",
94
- phases: {
95
- install: {
96
- "runtime-versions": {
97
- nodejs: "latest",
98
- },
99
- commands: ["npm i -g @flit/publish-cdk-assets@latest"],
100
- },
101
- build: {
102
- commands: `pca ${
103
- props.manifestPath ? path.normalize(props.manifestPath) : "."
104
- }`,
105
- },
106
- },
107
- }),
108
- }),
109
- });
110
-
111
- this.actionProperties = codeBuild.actionProperties;
112
- this.bind = (
113
- scope: Construct,
114
- stage: IStage,
115
- options: ActionBindOptions,
116
- ): ActionConfig => codeBuild.bind(scope, stage, options);
117
- this.onStateChange = (
118
- name: string,
119
- target?: IRuleTarget,
120
- options?: RuleProps,
121
- ): Rule => codeBuild.onStateChange(name, target, options);
122
- }
123
- }