@pipeline-builder/pipeline-core 3.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/LICENSE +202 -0
- package/README.md +32 -0
- package/lib/config/app-config.d.ts +81 -0
- package/lib/config/app-config.js +151 -0
- package/lib/config/billing-config.d.ts +17 -0
- package/lib/config/billing-config.js +95 -0
- package/lib/config/config-types.d.ts +213 -0
- package/lib/config/config-types.js +5 -0
- package/lib/config/infrastructure-config.d.ts +55 -0
- package/lib/config/infrastructure-config.js +200 -0
- package/lib/config/server-config.d.ts +53 -0
- package/lib/config/server-config.js +180 -0
- package/lib/core/artifact-manager.d.ts +62 -0
- package/lib/core/artifact-manager.js +86 -0
- package/lib/core/id-generator.d.ts +26 -0
- package/lib/core/id-generator.js +44 -0
- package/lib/core/metadata-builder.d.ts +13 -0
- package/lib/core/metadata-builder.js +81 -0
- package/lib/core/network-types.d.ts +200 -0
- package/lib/core/network-types.js +5 -0
- package/lib/core/network.d.ts +20 -0
- package/lib/core/network.js +84 -0
- package/lib/core/pipeline-helpers.d.ts +53 -0
- package/lib/core/pipeline-helpers.js +273 -0
- package/lib/core/pipeline-types.d.ts +136 -0
- package/lib/core/pipeline-types.js +140 -0
- package/lib/core/role-types.d.ts +254 -0
- package/lib/core/role-types.js +5 -0
- package/lib/core/role.d.ts +14 -0
- package/lib/core/role.js +118 -0
- package/lib/core/security-group-types.d.ts +84 -0
- package/lib/core/security-group-types.js +5 -0
- package/lib/core/security-group.d.ts +14 -0
- package/lib/core/security-group.js +34 -0
- package/lib/handlers/plugin-lookup-handler.d.ts +32 -0
- package/lib/handlers/plugin-lookup-handler.js +313 -0
- package/lib/handlers/pnpm-lock.yaml +12 -0
- package/lib/index.d.ts +54 -0
- package/lib/index.js +112 -0
- package/lib/pipeline/pipeline-builder.d.ts +82 -0
- package/lib/pipeline/pipeline-builder.js +292 -0
- package/lib/pipeline/pipeline-configuration.d.ts +72 -0
- package/lib/pipeline/pipeline-configuration.js +196 -0
- package/lib/pipeline/plugin-lookup.d.ts +100 -0
- package/lib/pipeline/plugin-lookup.js +247 -0
- package/lib/pipeline/source-builder.d.ts +47 -0
- package/lib/pipeline/source-builder.js +111 -0
- package/lib/pipeline/source-types.d.ts +191 -0
- package/lib/pipeline/source-types.js +5 -0
- package/lib/pipeline/stage-builder.d.ts +71 -0
- package/lib/pipeline/stage-builder.js +118 -0
- package/lib/pipeline/step-types.d.ts +307 -0
- package/lib/pipeline/step-types.js +5 -0
- package/package.json +137 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import type { SecretValue } from 'aws-cdk-lib';
|
|
2
|
+
import type { MetaDataType } from './pipeline-types';
|
|
3
|
+
import type { SecurityGroupConfig } from './security-group-types';
|
|
4
|
+
/**
|
|
5
|
+
* Network configuration using explicit subnet IDs
|
|
6
|
+
*
|
|
7
|
+
* Use when you know the exact subnet IDs where CodeBuild should run.
|
|
8
|
+
* Subnets are selected directly by ID; VPC is looked up from the provided vpcId.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const network: SubnetIdsNetwork = {
|
|
13
|
+
* type: 'subnetIds',
|
|
14
|
+
* options: {
|
|
15
|
+
* vpcId: 'vpc-0a1b2c3d4e5f6a7b8',
|
|
16
|
+
* subnetIds: ['subnet-0a1b2c3d', 'subnet-4e5f6a7b'],
|
|
17
|
+
* securityGroupIds: ['sg-12345678']
|
|
18
|
+
* }
|
|
19
|
+
* };
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export interface SubnetIdsNetwork {
|
|
23
|
+
readonly type: 'subnetIds';
|
|
24
|
+
readonly options: SubnetIdsNetworkOptions;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Network configuration using VPC lookup by ID
|
|
28
|
+
*
|
|
29
|
+
* Looks up an existing VPC by its ID and resolves subnets via subnetSelection filters.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const network: VpcIdNetwork = {
|
|
34
|
+
* type: 'vpcId',
|
|
35
|
+
* options: {
|
|
36
|
+
* vpcId: 'vpc-0a1b2c3d4e5f6a7b8',
|
|
37
|
+
* subnetType: 'PRIVATE_WITH_EGRESS',
|
|
38
|
+
* securityGroupIds: ['sg-12345678']
|
|
39
|
+
* }
|
|
40
|
+
* };
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export interface VpcIdNetwork {
|
|
44
|
+
readonly type: 'vpcId';
|
|
45
|
+
readonly options: VpcIdNetworkOptions;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Network configuration using VPC lookup by tags
|
|
49
|
+
*
|
|
50
|
+
* Looks up an existing VPC by tag filters and resolves subnets via subnetSelection filters.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const network: VpcLookupNetwork = {
|
|
55
|
+
* type: 'vpcLookup',
|
|
56
|
+
* options: {
|
|
57
|
+
* tags: { 'aws:cloudformation:stack-name': 'NetworkStack' },
|
|
58
|
+
* subnetType: 'PRIVATE_WITH_EGRESS',
|
|
59
|
+
* availabilityZones: ['us-east-1a', 'us-east-1b']
|
|
60
|
+
* }
|
|
61
|
+
* };
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export interface VpcLookupNetwork {
|
|
65
|
+
readonly type: 'vpcLookup';
|
|
66
|
+
readonly options: VpcLookupNetworkOptions;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Common subnet selection filters shared by VPC-based network options
|
|
70
|
+
*/
|
|
71
|
+
interface SubnetSelectionOptions {
|
|
72
|
+
/**
|
|
73
|
+
* Subnet type filter for subnet selection
|
|
74
|
+
* Maps to CDK SubnetType values
|
|
75
|
+
* @default 'PRIVATE_WITH_EGRESS'
|
|
76
|
+
*/
|
|
77
|
+
readonly subnetType?: SubnetTypeName;
|
|
78
|
+
/**
|
|
79
|
+
* Filter subnets to specific availability zones
|
|
80
|
+
* @example ['us-east-1a', 'us-east-1b']
|
|
81
|
+
*/
|
|
82
|
+
readonly availabilityZones?: string[];
|
|
83
|
+
/**
|
|
84
|
+
* Filter subnets by CDK subnet group name
|
|
85
|
+
* Matches the groupName assigned during VPC creation
|
|
86
|
+
*/
|
|
87
|
+
readonly subnetGroupName?: string;
|
|
88
|
+
/**
|
|
89
|
+
* Security group IDs to attach to CodeBuild projects
|
|
90
|
+
* @example ['sg-12345678']
|
|
91
|
+
*/
|
|
92
|
+
readonly securityGroupIds?: string[];
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Configuration options for explicit subnet ID network
|
|
96
|
+
*/
|
|
97
|
+
export interface SubnetIdsNetworkOptions {
|
|
98
|
+
/**
|
|
99
|
+
* VPC ID that contains the subnets.
|
|
100
|
+
* Required because CDK CodeBuildStep needs a vpc reference.
|
|
101
|
+
* Can be a plain string or a SecretValue (e.g. from Secrets Manager).
|
|
102
|
+
* @example 'vpc-0a1b2c3d4e5f6a7b8'
|
|
103
|
+
*/
|
|
104
|
+
readonly vpcId: SecretValue | string;
|
|
105
|
+
/**
|
|
106
|
+
* Explicit list of subnet IDs where CodeBuild projects will run
|
|
107
|
+
* @example ['subnet-0a1b2c3d', 'subnet-4e5f6a7b']
|
|
108
|
+
*/
|
|
109
|
+
readonly subnetIds: string[];
|
|
110
|
+
/**
|
|
111
|
+
* Security group IDs to attach to CodeBuild projects
|
|
112
|
+
* @example ['sg-12345678']
|
|
113
|
+
*/
|
|
114
|
+
readonly securityGroupIds?: string[];
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Configuration options for VPC lookup by ID
|
|
118
|
+
*/
|
|
119
|
+
export interface VpcIdNetworkOptions extends SubnetSelectionOptions {
|
|
120
|
+
/**
|
|
121
|
+
* VPC ID to look up
|
|
122
|
+
* Can be a plain string or a SecretValue (e.g. from Secrets Manager).
|
|
123
|
+
* @example 'vpc-0a1b2c3d4e5f6a7b8'
|
|
124
|
+
*/
|
|
125
|
+
readonly vpcId: SecretValue | string;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Configuration options for VPC lookup by tags
|
|
129
|
+
*/
|
|
130
|
+
export interface VpcLookupNetworkOptions extends SubnetSelectionOptions {
|
|
131
|
+
/**
|
|
132
|
+
* Tag key-value pairs to identify the VPC
|
|
133
|
+
* All tags must match for lookup to succeed
|
|
134
|
+
* @example { Environment: 'production', Team: 'platform' }
|
|
135
|
+
*/
|
|
136
|
+
readonly tags: Record<string, string>;
|
|
137
|
+
/**
|
|
138
|
+
* Optional VPC name (value of the 'Name' tag) for additional filtering
|
|
139
|
+
*/
|
|
140
|
+
readonly vpcName?: string;
|
|
141
|
+
/**
|
|
142
|
+
* Optional AWS region override for cross-region VPC lookup
|
|
143
|
+
* @example 'us-west-2'
|
|
144
|
+
*/
|
|
145
|
+
readonly region?: string;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Subnet type names corresponding to CDK SubnetType enum values
|
|
149
|
+
*
|
|
150
|
+
* @see https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.SubnetType.html
|
|
151
|
+
*/
|
|
152
|
+
export type SubnetTypeName = 'PRIVATE_WITH_EGRESS' | 'PRIVATE_WITH_NAT' | 'PRIVATE_ISOLATED' | 'PUBLIC';
|
|
153
|
+
/**
|
|
154
|
+
* Union type of all supported network configurations.
|
|
155
|
+
*
|
|
156
|
+
* Used at two independent levels:
|
|
157
|
+
* - Pipeline-level (`defaults.network`) — applies to all CodeBuild actions
|
|
158
|
+
* - Step-level (`synth.network`, `CodeBuildStepOptions.network`) — applies to an individual build step
|
|
159
|
+
*
|
|
160
|
+
* Each variant resolves to vpc, subnetSelection, and optional securityGroups:
|
|
161
|
+
* - SubnetIdsNetwork: VPC looked up by ID, subnets selected explicitly by ID
|
|
162
|
+
* - VpcIdNetwork: VPC looked up by ID, subnets resolved via subnetSelection filters
|
|
163
|
+
* - VpcLookupNetwork: VPC looked up by tags, subnets resolved via subnetSelection filters
|
|
164
|
+
*/
|
|
165
|
+
export type NetworkConfig = SubnetIdsNetwork | VpcIdNetwork | VpcLookupNetwork;
|
|
166
|
+
/**
|
|
167
|
+
* Pipeline-level CodeBuild defaults applied to every CodeBuild action
|
|
168
|
+
* (synth, self-mutation, asset publishing) via `codeBuildDefaults`.
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* ```typescript
|
|
172
|
+
* const defaults: CodeBuildDefaults = {
|
|
173
|
+
* network: {
|
|
174
|
+
* type: 'vpcId',
|
|
175
|
+
* options: { vpcId: 'vpc-abc123', subnetType: 'PRIVATE_WITH_EGRESS' }
|
|
176
|
+
* },
|
|
177
|
+
* metadata: {
|
|
178
|
+
* [MetadataKeys.PRIVILEGED]: true,
|
|
179
|
+
* },
|
|
180
|
+
* };
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
export interface CodeBuildDefaults {
|
|
184
|
+
/**
|
|
185
|
+
* Network configuration for all CodeBuild actions.
|
|
186
|
+
* Resolves to vpc, subnetSelection, and optional securityGroups.
|
|
187
|
+
*/
|
|
188
|
+
readonly network?: NetworkConfig;
|
|
189
|
+
/**
|
|
190
|
+
* Standalone security groups for all CodeBuild actions.
|
|
191
|
+
* Merged with any security groups resolved from network config.
|
|
192
|
+
*/
|
|
193
|
+
readonly securityGroups?: SecurityGroupConfig;
|
|
194
|
+
/**
|
|
195
|
+
* Metadata applied to all CodeBuild actions.
|
|
196
|
+
* Merged with step-level metadata; step-level keys take precedence.
|
|
197
|
+
*/
|
|
198
|
+
readonly metadata?: MetaDataType;
|
|
199
|
+
}
|
|
200
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL25ldHdvcmstdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBTZWNyZXRWYWx1ZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgTWV0YURhdGFUeXBlIH0gZnJvbSAnLi9waXBlbGluZS10eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFNlY3VyaXR5R3JvdXBDb25maWcgfSBmcm9tICcuL3NlY3VyaXR5LWdyb3VwLXR5cGVzJztcblxuLyoqXG4gKiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gdXNpbmcgZXhwbGljaXQgc3VibmV0IElEc1xuICpcbiAqIFVzZSB3aGVuIHlvdSBrbm93IHRoZSBleGFjdCBzdWJuZXQgSURzIHdoZXJlIENvZGVCdWlsZCBzaG91bGQgcnVuLlxuICogU3VibmV0cyBhcmUgc2VsZWN0ZWQgZGlyZWN0bHkgYnkgSUQ7IFZQQyBpcyBsb29rZWQgdXAgZnJvbSB0aGUgcHJvdmlkZWQgdnBjSWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG5ldHdvcms6IFN1Ym5ldElkc05ldHdvcmsgPSB7XG4gKiAgIHR5cGU6ICdzdWJuZXRJZHMnLFxuICogICBvcHRpb25zOiB7XG4gKiAgICAgdnBjSWQ6ICd2cGMtMGExYjJjM2Q0ZTVmNmE3YjgnLFxuICogICAgIHN1Ym5ldElkczogWydzdWJuZXQtMGExYjJjM2QnLCAnc3VibmV0LTRlNWY2YTdiJ10sXG4gKiAgICAgc2VjdXJpdHlHcm91cElkczogWydzZy0xMjM0NTY3OCddXG4gKiAgIH1cbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJuZXRJZHNOZXR3b3JrIHtcbiAgcmVhZG9ubHkgdHlwZTogJ3N1Ym5ldElkcyc7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IFN1Ym5ldElkc05ldHdvcmtPcHRpb25zO1xufVxuXG4vKipcbiAqIE5ldHdvcmsgY29uZmlndXJhdGlvbiB1c2luZyBWUEMgbG9va3VwIGJ5IElEXG4gKlxuICogTG9va3MgdXAgYW4gZXhpc3RpbmcgVlBDIGJ5IGl0cyBJRCBhbmQgcmVzb2x2ZXMgc3VibmV0cyB2aWEgc3VibmV0U2VsZWN0aW9uIGZpbHRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG5ldHdvcms6IFZwY0lkTmV0d29yayA9IHtcbiAqICAgdHlwZTogJ3ZwY0lkJyxcbiAqICAgb3B0aW9uczoge1xuICogICAgIHZwY0lkOiAndnBjLTBhMWIyYzNkNGU1ZjZhN2I4JyxcbiAqICAgICBzdWJuZXRUeXBlOiAnUFJJVkFURV9XSVRIX0VHUkVTUycsXG4gKiAgICAgc2VjdXJpdHlHcm91cElkczogWydzZy0xMjM0NTY3OCddXG4gKiAgIH1cbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNJZE5ldHdvcmsge1xuICByZWFkb25seSB0eXBlOiAndnBjSWQnO1xuICByZWFkb25seSBvcHRpb25zOiBWcGNJZE5ldHdvcmtPcHRpb25zO1xufVxuXG4vKipcbiAqIE5ldHdvcmsgY29uZmlndXJhdGlvbiB1c2luZyBWUEMgbG9va3VwIGJ5IHRhZ3NcbiAqXG4gKiBMb29rcyB1cCBhbiBleGlzdGluZyBWUEMgYnkgdGFnIGZpbHRlcnMgYW5kIHJlc29sdmVzIHN1Ym5ldHMgdmlhIHN1Ym5ldFNlbGVjdGlvbiBmaWx0ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBuZXR3b3JrOiBWcGNMb29rdXBOZXR3b3JrID0ge1xuICogICB0eXBlOiAndnBjTG9va3VwJyxcbiAqICAgb3B0aW9uczoge1xuICogICAgIHRhZ3M6IHsgJ2F3czpjbG91ZGZvcm1hdGlvbjpzdGFjay1uYW1lJzogJ05ldHdvcmtTdGFjaycgfSxcbiAqICAgICBzdWJuZXRUeXBlOiAnUFJJVkFURV9XSVRIX0VHUkVTUycsXG4gKiAgICAgYXZhaWxhYmlsaXR5Wm9uZXM6IFsndXMtZWFzdC0xYScsICd1cy1lYXN0LTFiJ11cbiAqICAgfVxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY0xvb2t1cE5ldHdvcmsge1xuICByZWFkb25seSB0eXBlOiAndnBjTG9va3VwJztcbiAgcmVhZG9ubHkgb3B0aW9uczogVnBjTG9va3VwTmV0d29ya09wdGlvbnM7XG59XG5cbi8qKlxuICogQ29tbW9uIHN1Ym5ldCBzZWxlY3Rpb24gZmlsdGVycyBzaGFyZWQgYnkgVlBDLWJhc2VkIG5ldHdvcmsgb3B0aW9uc1xuICovXG5pbnRlcmZhY2UgU3VibmV0U2VsZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdWJuZXQgdHlwZSBmaWx0ZXIgZm9yIHN1Ym5ldCBzZWxlY3Rpb25cbiAgICogTWFwcyB0byBDREsgU3VibmV0VHlwZSB2YWx1ZXNcbiAgICogQGRlZmF1bHQgJ1BSSVZBVEVfV0lUSF9FR1JFU1MnXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRUeXBlPzogU3VibmV0VHlwZU5hbWU7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBzdWJuZXRzIHRvIHNwZWNpZmljIGF2YWlsYWJpbGl0eSB6b25lc1xuICAgKiBAZXhhbXBsZSBbJ3VzLWVhc3QtMWEnLCAndXMtZWFzdC0xYiddXG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgc3VibmV0cyBieSBDREsgc3VibmV0IGdyb3VwIG5hbWVcbiAgICogTWF0Y2hlcyB0aGUgZ3JvdXBOYW1lIGFzc2lnbmVkIGR1cmluZyBWUEMgY3JlYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldEdyb3VwTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXAgSURzIHRvIGF0dGFjaCB0byBDb2RlQnVpbGQgcHJvamVjdHNcbiAgICogQGV4YW1wbGUgWydzZy0xMjM0NTY3OCddXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwSWRzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBleHBsaWNpdCBzdWJuZXQgSUQgbmV0d29ya1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym5ldElkc05ldHdvcmtPcHRpb25zIHtcbiAgLyoqXG4gICAqIFZQQyBJRCB0aGF0IGNvbnRhaW5zIHRoZSBzdWJuZXRzLlxuICAgKiBSZXF1aXJlZCBiZWNhdXNlIENESyBDb2RlQnVpbGRTdGVwIG5lZWRzIGEgdnBjIHJlZmVyZW5jZS5cbiAgICogQ2FuIGJlIGEgcGxhaW4gc3RyaW5nIG9yIGEgU2VjcmV0VmFsdWUgKGUuZy4gZnJvbSBTZWNyZXRzIE1hbmFnZXIpLlxuICAgKiBAZXhhbXBsZSAndnBjLTBhMWIyYzNkNGU1ZjZhN2I4J1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjSWQ6IFNlY3JldFZhbHVlIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHBsaWNpdCBsaXN0IG9mIHN1Ym5ldCBJRHMgd2hlcmUgQ29kZUJ1aWxkIHByb2plY3RzIHdpbGwgcnVuXG4gICAqIEBleGFtcGxlIFsnc3VibmV0LTBhMWIyYzNkJywgJ3N1Ym5ldC00ZTVmNmE3YiddXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRJZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBncm91cCBJRHMgdG8gYXR0YWNoIHRvIENvZGVCdWlsZCBwcm9qZWN0c1xuICAgKiBAZXhhbXBsZSBbJ3NnLTEyMzQ1Njc4J11cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJZHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFZQQyBsb29rdXAgYnkgSURcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNJZE5ldHdvcmtPcHRpb25zIGV4dGVuZHMgU3VibmV0U2VsZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBWUEMgSUQgdG8gbG9vayB1cFxuICAgKiBDYW4gYmUgYSBwbGFpbiBzdHJpbmcgb3IgYSBTZWNyZXRWYWx1ZSAoZS5nLiBmcm9tIFNlY3JldHMgTWFuYWdlcikuXG4gICAqIEBleGFtcGxlICd2cGMtMGExYjJjM2Q0ZTVmNmE3YjgnXG4gICAqL1xuICByZWFkb25seSB2cGNJZDogU2VjcmV0VmFsdWUgfCBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBWUEMgbG9va3VwIGJ5IHRhZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNMb29rdXBOZXR3b3JrT3B0aW9ucyBleHRlbmRzIFN1Ym5ldFNlbGVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGFnIGtleS12YWx1ZSBwYWlycyB0byBpZGVudGlmeSB0aGUgVlBDXG4gICAqIEFsbCB0YWdzIG11c3QgbWF0Y2ggZm9yIGxvb2t1cCB0byBzdWNjZWVkXG4gICAqIEBleGFtcGxlIHsgRW52aXJvbm1lbnQ6ICdwcm9kdWN0aW9uJywgVGVhbTogJ3BsYXRmb3JtJyB9XG4gICAqL1xuICByZWFkb25seSB0YWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBWUEMgbmFtZSAodmFsdWUgb2YgdGhlICdOYW1lJyB0YWcpIGZvciBhZGRpdGlvbmFsIGZpbHRlcmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgQVdTIHJlZ2lvbiBvdmVycmlkZSBmb3IgY3Jvc3MtcmVnaW9uIFZQQyBsb29rdXBcbiAgICogQGV4YW1wbGUgJ3VzLXdlc3QtMidcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdWJuZXQgdHlwZSBuYW1lcyBjb3JyZXNwb25kaW5nIHRvIENESyBTdWJuZXRUeXBlIGVudW0gdmFsdWVzXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2FwaS92Mi9kb2NzL2F3cy1jZGstbGliLmF3c19lYzIuU3VibmV0VHlwZS5odG1sXG4gKi9cbmV4cG9ydCB0eXBlIFN1Ym5ldFR5cGVOYW1lID1cbiAgfCAnUFJJVkFURV9XSVRIX0VHUkVTUydcbiAgfCAnUFJJVkFURV9XSVRIX05BVCdcbiAgfCAnUFJJVkFURV9JU09MQVRFRCdcbiAgfCAnUFVCTElDJztcblxuLyoqXG4gKiBVbmlvbiB0eXBlIG9mIGFsbCBzdXBwb3J0ZWQgbmV0d29yayBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBVc2VkIGF0IHR3byBpbmRlcGVuZGVudCBsZXZlbHM6XG4gKiAtIFBpcGVsaW5lLWxldmVsIChgZGVmYXVsdHMubmV0d29ya2ApIOKAlCBhcHBsaWVzIHRvIGFsbCBDb2RlQnVpbGQgYWN0aW9uc1xuICogLSBTdGVwLWxldmVsIChgc3ludGgubmV0d29ya2AsIGBDb2RlQnVpbGRTdGVwT3B0aW9ucy5uZXR3b3JrYCkg4oCUIGFwcGxpZXMgdG8gYW4gaW5kaXZpZHVhbCBidWlsZCBzdGVwXG4gKlxuICogRWFjaCB2YXJpYW50IHJlc29sdmVzIHRvIHZwYywgc3VibmV0U2VsZWN0aW9uLCBhbmQgb3B0aW9uYWwgc2VjdXJpdHlHcm91cHM6XG4gKiAtIFN1Ym5ldElkc05ldHdvcms6IFZQQyBsb29rZWQgdXAgYnkgSUQsIHN1Ym5ldHMgc2VsZWN0ZWQgZXhwbGljaXRseSBieSBJRFxuICogLSBWcGNJZE5ldHdvcms6IFZQQyBsb29rZWQgdXAgYnkgSUQsIHN1Ym5ldHMgcmVzb2x2ZWQgdmlhIHN1Ym5ldFNlbGVjdGlvbiBmaWx0ZXJzXG4gKiAtIFZwY0xvb2t1cE5ldHdvcms6IFZQQyBsb29rZWQgdXAgYnkgdGFncywgc3VibmV0cyByZXNvbHZlZCB2aWEgc3VibmV0U2VsZWN0aW9uIGZpbHRlcnNcbiAqL1xuZXhwb3J0IHR5cGUgTmV0d29ya0NvbmZpZyA9IFN1Ym5ldElkc05ldHdvcmsgfCBWcGNJZE5ldHdvcmsgfCBWcGNMb29rdXBOZXR3b3JrO1xuXG4vKipcbiAqIFBpcGVsaW5lLWxldmVsIENvZGVCdWlsZCBkZWZhdWx0cyBhcHBsaWVkIHRvIGV2ZXJ5IENvZGVCdWlsZCBhY3Rpb25cbiAqIChzeW50aCwgc2VsZi1tdXRhdGlvbiwgYXNzZXQgcHVibGlzaGluZykgdmlhIGBjb2RlQnVpbGREZWZhdWx0c2AuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGRlZmF1bHRzOiBDb2RlQnVpbGREZWZhdWx0cyA9IHtcbiAqICAgbmV0d29yazoge1xuICogICAgIHR5cGU6ICd2cGNJZCcsXG4gKiAgICAgb3B0aW9uczogeyB2cGNJZDogJ3ZwYy1hYmMxMjMnLCBzdWJuZXRUeXBlOiAnUFJJVkFURV9XSVRIX0VHUkVTUycgfVxuICogICB9LFxuICogICBtZXRhZGF0YToge1xuICogICAgIFtNZXRhZGF0YUtleXMuUFJJVklMRUdFRF06IHRydWUsXG4gKiAgIH0sXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1aWxkRGVmYXVsdHMge1xuICAvKipcbiAgICogTmV0d29yayBjb25maWd1cmF0aW9uIGZvciBhbGwgQ29kZUJ1aWxkIGFjdGlvbnMuXG4gICAqIFJlc29sdmVzIHRvIHZwYywgc3VibmV0U2VsZWN0aW9uLCBhbmQgb3B0aW9uYWwgc2VjdXJpdHlHcm91cHMuXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrPzogTmV0d29ya0NvbmZpZztcblxuICAvKipcbiAgICogU3RhbmRhbG9uZSBzZWN1cml0eSBncm91cHMgZm9yIGFsbCBDb2RlQnVpbGQgYWN0aW9ucy5cbiAgICogTWVyZ2VkIHdpdGggYW55IHNlY3VyaXR5IGdyb3VwcyByZXNvbHZlZCBmcm9tIG5ldHdvcmsgY29uZmlnLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM/OiBTZWN1cml0eUdyb3VwQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBhcHBsaWVkIHRvIGFsbCBDb2RlQnVpbGQgYWN0aW9ucy5cbiAgICogTWVyZ2VkIHdpdGggc3RlcC1sZXZlbCBtZXRhZGF0YTsgc3RlcC1sZXZlbCBrZXlzIHRha2UgcHJlY2VkZW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTWV0YURhdGFUeXBlO1xufVxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ISecurityGroup, IVpc, SubnetSelection } from 'aws-cdk-lib/aws-ec2';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
import { UniqueId } from './id-generator';
|
|
4
|
+
import type { NetworkConfig } from './network-types';
|
|
5
|
+
/** Resolved CDK network props ready to spread into CodeBuildStep or codeBuildDefaults */
|
|
6
|
+
export interface ResolvedNetwork {
|
|
7
|
+
vpc: IVpc;
|
|
8
|
+
subnetSelection: SubnetSelection;
|
|
9
|
+
securityGroups?: ISecurityGroup[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Resolve a NetworkConfig into CDK props for CodeBuildStep or codeBuildDefaults.
|
|
13
|
+
* Uses discriminated union narrowing to delegate to the appropriate CDK lookups.
|
|
14
|
+
*
|
|
15
|
+
* @param scope - CDK construct scope
|
|
16
|
+
* @param id - UniqueId instance for generating unique construct IDs
|
|
17
|
+
* @param network - Network configuration to resolve
|
|
18
|
+
* @returns Resolved network props ready to spread into CDK constructs
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveNetwork(scope: Construct, id: UniqueId, network: NetworkConfig): ResolvedNetwork;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.resolveNetwork = resolveNetwork;
|
|
6
|
+
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
7
|
+
const pipeline_helpers_1 = require("./pipeline-helpers");
|
|
8
|
+
/**
|
|
9
|
+
* Mapping from string subnet type names to CDK SubnetType enum values
|
|
10
|
+
*/
|
|
11
|
+
const SUBNET_TYPE_MAP = {
|
|
12
|
+
PRIVATE_WITH_EGRESS: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS,
|
|
13
|
+
PRIVATE_WITH_NAT: aws_ec2_1.SubnetType.PRIVATE_WITH_NAT,
|
|
14
|
+
PRIVATE_ISOLATED: aws_ec2_1.SubnetType.PRIVATE_ISOLATED,
|
|
15
|
+
PUBLIC: aws_ec2_1.SubnetType.PUBLIC,
|
|
16
|
+
};
|
|
17
|
+
const DEFAULT_SUBNET_TYPE = 'PRIVATE_WITH_EGRESS';
|
|
18
|
+
/**
|
|
19
|
+
* Resolve a NetworkConfig into CDK props for CodeBuildStep or codeBuildDefaults.
|
|
20
|
+
* Uses discriminated union narrowing to delegate to the appropriate CDK lookups.
|
|
21
|
+
*
|
|
22
|
+
* @param scope - CDK construct scope
|
|
23
|
+
* @param id - UniqueId instance for generating unique construct IDs
|
|
24
|
+
* @param network - Network configuration to resolve
|
|
25
|
+
* @returns Resolved network props ready to spread into CDK constructs
|
|
26
|
+
*/
|
|
27
|
+
function resolveNetwork(scope, id, network) {
|
|
28
|
+
switch (network.type) {
|
|
29
|
+
case 'subnetIds': {
|
|
30
|
+
const vpc = aws_ec2_1.Vpc.fromLookup(scope, id.generate('network:vpc'), {
|
|
31
|
+
vpcId: (0, pipeline_helpers_1.unwrapSecret)(network.options.vpcId),
|
|
32
|
+
});
|
|
33
|
+
const subnets = network.options.subnetIds.map((subnetId) => aws_ec2_1.Subnet.fromSubnetId(scope, id.generate('network:subnet'), subnetId));
|
|
34
|
+
return withSecurityGroups({ vpc, subnetSelection: { subnets } }, scope, id, network.options.securityGroupIds);
|
|
35
|
+
}
|
|
36
|
+
case 'vpcId': {
|
|
37
|
+
const vpc = aws_ec2_1.Vpc.fromLookup(scope, id.generate('network:vpc'), {
|
|
38
|
+
vpcId: (0, pipeline_helpers_1.unwrapSecret)(network.options.vpcId),
|
|
39
|
+
});
|
|
40
|
+
return withSecurityGroups({ vpc, subnetSelection: resolveSubnetSelection(network.options) }, scope, id, network.options.securityGroupIds);
|
|
41
|
+
}
|
|
42
|
+
case 'vpcLookup': {
|
|
43
|
+
const vpc = aws_ec2_1.Vpc.fromLookup(scope, id.generate('network:vpc'), {
|
|
44
|
+
tags: network.options.tags,
|
|
45
|
+
...(network.options.vpcName && { vpcName: network.options.vpcName }),
|
|
46
|
+
...(network.options.region && { region: network.options.region }),
|
|
47
|
+
});
|
|
48
|
+
return withSecurityGroups({ vpc, subnetSelection: resolveSubnetSelection(network.options) }, scope, id, network.options.securityGroupIds);
|
|
49
|
+
}
|
|
50
|
+
default: {
|
|
51
|
+
const _exhaustive = network;
|
|
52
|
+
throw new Error(`Unknown network config type: ${_exhaustive.type}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Attach resolved security groups to a network result when present.
|
|
58
|
+
*/
|
|
59
|
+
function withSecurityGroups(result, scope, id, securityGroupIds) {
|
|
60
|
+
const securityGroups = resolveSecurityGroups(scope, id, securityGroupIds);
|
|
61
|
+
return securityGroups ? { ...result, securityGroups } : result;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Build a SubnetSelection from options that carry subnetType, availabilityZones,
|
|
65
|
+
* and subnetGroupName. Shared by vpcId and vpcLookup branches.
|
|
66
|
+
*/
|
|
67
|
+
function resolveSubnetSelection(options) {
|
|
68
|
+
return {
|
|
69
|
+
subnetType: SUBNET_TYPE_MAP[options.subnetType ?? DEFAULT_SUBNET_TYPE],
|
|
70
|
+
...(options.availabilityZones && { availabilityZones: options.availabilityZones }),
|
|
71
|
+
...(options.subnetGroupName && { subnetGroupName: options.subnetGroupName }),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Resolve security group IDs into CDK security group references.
|
|
76
|
+
* Returns undefined when no IDs are provided.
|
|
77
|
+
*/
|
|
78
|
+
function resolveSecurityGroups(scope, id, securityGroupIds) {
|
|
79
|
+
if (!securityGroupIds?.length) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
return securityGroupIds.map((sgId) => aws_ec2_1.SecurityGroup.fromSecurityGroupId(scope, id.generate('network:sg'), sgId));
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL25ldHdvcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBdUN0Qyx3Q0FxREM7QUExRkQsaURBQW9IO0FBT3BILHlEQUFrRDtBQUVsRDs7R0FFRztBQUNILE1BQU0sZUFBZSxHQUF1QztJQUMxRCxtQkFBbUIsRUFBRSxvQkFBVSxDQUFDLG1CQUFtQjtJQUNuRCxnQkFBZ0IsRUFBRSxvQkFBVSxDQUFDLGdCQUFnQjtJQUM3QyxnQkFBZ0IsRUFBRSxvQkFBVSxDQUFDLGdCQUFnQjtJQUM3QyxNQUFNLEVBQUUsb0JBQVUsQ0FBQyxNQUFNO0NBQzFCLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFtQixxQkFBcUIsQ0FBQztBQVNsRTs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLGNBQWMsQ0FDNUIsS0FBZ0IsRUFDaEIsRUFBWSxFQUNaLE9BQXNCO0lBRXRCLFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNqQixNQUFNLEdBQUcsR0FBRyxhQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUM1RCxLQUFLLEVBQUUsSUFBQSwrQkFBWSxFQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2FBQzNDLENBQUMsQ0FBQztZQUVILE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FDM0MsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLGdCQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQ2xGLENBQUM7WUFFRixPQUFPLGtCQUFrQixDQUN2QixFQUFF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QUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUN6QixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsdUJBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FDcEYsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgSVNlY3VyaXR5R3JvdXAsIElWcGMsIFNlY3VyaXR5R3JvdXAsIFN1Ym5ldCwgU3VibmV0U2VsZWN0aW9uLCBTdWJuZXRUeXBlLCBWcGMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuL2lkLWdlbmVyYXRvcic7XG5pbXBvcnQgdHlwZSB7XG4gIE5ldHdvcmtDb25maWcsXG4gIFN1Ym5ldFR5cGVOYW1lLFxufSBmcm9tICcuL25ldHdvcmstdHlwZXMnO1xuaW1wb3J0IHsgdW53cmFwU2VjcmV0IH0gZnJvbSAnLi9waXBlbGluZS1oZWxwZXJzJztcblxuLyoqXG4gKiBNYXBwaW5nIGZyb20gc3RyaW5nIHN1Ym5ldCB0eXBlIG5hbWVzIHRvIENESyBTdWJuZXRUeXBlIGVudW0gdmFsdWVzXG4gKi9cbmNvbnN0IFNVQk5FVF9UWVBFX01BUDogUmVjb3JkPFN1Ym5ldFR5cGVOYW1lLCBTdWJuZXRUeXBlPiA9IHtcbiAgUFJJVkFURV9XSVRIX0VHUkVTUzogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTLFxuICBQUklWQVRFX1dJVEhfTkFUOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9OQVQsXG4gIFBSSVZBVEVfSVNPTEFURUQ6IFN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRCxcbiAgUFVCTElDOiBTdWJuZXRUeXBlLlBVQkxJQyxcbn07XG5cbmNvbnN0IERFRkFVTFRfU1VCTkVUX1RZUEU6IFN1Ym5ldFR5cGVOYW1lID0gJ1BSSVZBVEVfV0lUSF9FR1JFU1MnO1xuXG4vKiogUmVzb2x2ZWQgQ0RLIG5ldHdvcmsgcHJvcHMgcmVhZHkgdG8gc3ByZWFkIGludG8gQ29kZUJ1aWxkU3RlcCBvciBjb2RlQnVpbGREZWZhdWx0cyAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZE5ldHdvcmsge1xuICB2cGM6IElWcGM7XG4gIHN1Ym5ldFNlbGVjdGlvbjogU3VibmV0U2VsZWN0aW9uO1xuICBzZWN1cml0eUdyb3Vwcz86IElTZWN1cml0eUdyb3VwW107XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIE5ldHdvcmtDb25maWcgaW50byBDREsgcHJvcHMgZm9yIENvZGVCdWlsZFN0ZXAgb3IgY29kZUJ1aWxkRGVmYXVsdHMuXG4gKiBVc2VzIGRpc2NyaW1pbmF0ZWQgdW5pb24gbmFycm93aW5nIHRvIGRlbGVnYXRlIHRvIHRoZSBhcHByb3ByaWF0ZSBDREsgbG9va3Vwcy5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBDREsgY29uc3RydWN0IHNjb3BlXG4gKiBAcGFyYW0gaWQgLSBVbmlxdWVJZCBpbnN0YW5jZSBmb3IgZ2VuZXJhdGluZyB1bmlxdWUgY29uc3RydWN0IElEc1xuICogQHBhcmFtIG5ldHdvcmsgLSBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gdG8gcmVzb2x2ZVxuICogQHJldHVybnMgUmVzb2x2ZWQgbmV0d29yayBwcm9wcyByZWFkeSB0byBzcHJlYWQgaW50byBDREsgY29uc3RydWN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU5ldHdvcmsoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBVbmlxdWVJZCxcbiAgbmV0d29yazogTmV0d29ya0NvbmZpZyxcbik6IFJlc29sdmVkTmV0d29yayB7XG4gIHN3aXRjaCAobmV0d29yay50eXBlKSB7XG4gICAgY2FzZSAnc3VibmV0SWRzJzoge1xuICAgICAgY29uc3QgdnBjID0gVnBjLmZyb21Mb29rdXAoc2NvcGUsIGlkLmdlbmVyYXRlKCduZXR3b3JrOnZwYycpLCB7XG4gICAgICAgIHZwY0lkOiB1bndyYXBTZWNyZXQobmV0d29yay5vcHRpb25zLnZwY0lkKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzdWJuZXRzID0gbmV0d29yay5vcHRpb25zLnN1Ym5ldElkcy5tYXAoXG4gICAgICAgIChzdWJuZXRJZCkgPT4gU3VibmV0LmZyb21TdWJuZXRJZChzY29wZSwgaWQuZ2VuZXJhdGUoJ25ldHdvcms6c3VibmV0JyksIHN1Ym5ldElkKSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB3aXRoU2VjdXJpdHlHcm91cHMoXG4gICAgICAgIHsgdnBjLCBzdWJuZXRTZWxlY3Rpb246IHsgc3VibmV0cyB9IH0sXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBpZCxcbiAgICAgICAgbmV0d29yay5vcHRpb25zLnNlY3VyaXR5R3JvdXBJZHMsXG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlICd2cGNJZCc6IHtcbiAgICAgIGNvbnN0IHZwYyA9IFZwYy5mcm9tTG9va3VwKHNjb3BlLCBpZC5nZW5lcmF0ZSgnbmV0d29yazp2cGMnKSwge1xuICAgICAgICB2cGNJZDogdW53cmFwU2VjcmV0KG5ldHdvcmsub3B0aW9ucy52cGNJZCksXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHdpdGhTZWN1cml0eUdyb3VwcyhcbiAgICAgICAgeyB2cGMsIHN1Ym5ldFNlbGVjdGlvbjogcmVzb2x2ZVN1Ym5ldFNlbGVjdGlvbihuZXR3b3JrLm9wdGlvbnMpIH0sXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBpZCxcbiAgICAgICAgbmV0d29yay5vcHRpb25zLnNlY3VyaXR5R3JvdXBJZHMsXG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlICd2cGNMb29rdXAnOiB7XG4gICAgICBjb25zdCB2cGMgPSBWcGMuZnJvbUxvb2t1cChzY29wZSwgaWQuZ2VuZXJhdGUoJ25ldHdvcms6dnBjJyksIHtcbiAgICAgICAgdGFnczogbmV0d29yay5vcHRpb25zLnRhZ3MsXG4gICAgICAgIC4uLihuZXR3b3JrLm9wdGlvbnMudnBjTmFtZSAmJiB7IHZwY05hbWU6IG5ldHdvcmsub3B0aW9ucy52cGNOYW1lIH0pLFxuICAgICAgICAuLi4obmV0d29yay5vcHRpb25zLnJlZ2lvbiAmJiB7IHJlZ2lvbjogbmV0d29yay5vcHRpb25zLnJlZ2lvbiB9KSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gd2l0aFNlY3VyaXR5R3JvdXBzKFxuICAgICAgICB7IHZwYywgc3VibmV0U2VsZWN0aW9uOiByZXNvbHZlU3VibmV0U2VsZWN0aW9uKG5ldHdvcmsub3B0aW9ucykgfSxcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGlkLFxuICAgICAgICBuZXR3b3JrLm9wdGlvbnMuc2VjdXJpdHlHcm91cElkcyxcbiAgICAgICk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IG5ldHdvcms7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbmV0d29yayBjb25maWcgdHlwZTogJHsoX2V4aGF1c3RpdmUgYXMgTmV0d29ya0NvbmZpZykudHlwZX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRhY2ggcmVzb2x2ZWQgc2VjdXJpdHkgZ3JvdXBzIHRvIGEgbmV0d29yayByZXN1bHQgd2hlbiBwcmVzZW50LlxuICovXG5mdW5jdGlvbiB3aXRoU2VjdXJpdHlHcm91cHMoXG4gIHJlc3VsdDogT21pdDxSZXNvbHZlZE5ldHdvcmssICdzZWN1cml0eUdyb3Vwcyc+LFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogVW5pcXVlSWQsXG4gIHNlY3VyaXR5R3JvdXBJZHM/OiBzdHJpbmdbXSxcbik6IFJlc29sdmVkTmV0d29yayB7XG4gIGNvbnN0IHNlY3VyaXR5R3JvdXBzID0gcmVzb2x2ZVNlY3VyaXR5R3JvdXBzKHNjb3BlLCBpZCwgc2VjdXJpdHlHcm91cElkcyk7XG4gIHJldHVybiBzZWN1cml0eUdyb3VwcyA/IHsgLi4ucmVzdWx0LCBzZWN1cml0eUdyb3VwcyB9IDogcmVzdWx0O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgU3VibmV0U2VsZWN0aW9uIGZyb20gb3B0aW9ucyB0aGF0IGNhcnJ5IHN1Ym5ldFR5cGUsIGF2YWlsYWJpbGl0eVpvbmVzLFxuICogYW5kIHN1Ym5ldEdyb3VwTmFtZS4gU2hhcmVkIGJ5IHZwY0lkIGFuZCB2cGNMb29rdXAgYnJhbmNoZXMuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTdWJuZXRTZWxlY3Rpb24oXG4gIG9wdGlvbnM6IHsgc3VibmV0VHlwZT86IFN1Ym5ldFR5cGVOYW1lOyBhdmFpbGFiaWxpdHlab25lcz86IHN0cmluZ1tdOyBzdWJuZXRHcm91cE5hbWU/OiBzdHJpbmcgfSxcbik6IFN1Ym5ldFNlbGVjdGlvbiB7XG4gIHJldHVybiB7XG4gICAgc3VibmV0VHlwZTogU1VCTkVUX1RZUEVfTUFQW29wdGlvbnMuc3VibmV0VHlwZSA/PyBERUZBVUxUX1NVQk5FVF9UWVBFXSxcbiAgICAuLi4ob3B0aW9ucy5hdmFpbGFiaWxpdHlab25lcyAmJiB7IGF2YWlsYWJpbGl0eVpvbmVzOiBvcHRpb25zLmF2YWlsYWJpbGl0eVpvbmVzIH0pLFxuICAgIC4uLihvcHRpb25zLnN1Ym5ldEdyb3VwTmFtZSAmJiB7IHN1Ym5ldEdyb3VwTmFtZTogb3B0aW9ucy5zdWJuZXRHcm91cE5hbWUgfSksXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBzZWN1cml0eSBncm91cCBJRHMgaW50byBDREsgc2VjdXJpdHkgZ3JvdXAgcmVmZXJlbmNlcy5cbiAqIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gbm8gSURzIGFyZSBwcm92aWRlZC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNlY3VyaXR5R3JvdXBzKFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogVW5pcXVlSWQsXG4gIHNlY3VyaXR5R3JvdXBJZHM/OiBzdHJpbmdbXSxcbik6IElTZWN1cml0eUdyb3VwW10gfCB1bmRlZmluZWQge1xuICBpZiAoIXNlY3VyaXR5R3JvdXBJZHM/Lmxlbmd0aCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHNlY3VyaXR5R3JvdXBJZHMubWFwKFxuICAgIChzZ0lkKSA9PiBTZWN1cml0eUdyb3VwLmZyb21TZWN1cml0eUdyb3VwSWQoc2NvcGUsIGlkLmdlbmVyYXRlKCduZXR3b3JrOnNnJyksIHNnSWQpLFxuICApO1xufVxuIl19
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { SecretValue } from 'aws-cdk-lib';
|
|
2
|
+
import { ComputeType as CDKComputeType } from 'aws-cdk-lib/aws-codebuild';
|
|
3
|
+
import { CodeBuildStep, ManualApprovalStep, ShellStep } from 'aws-cdk-lib/pipelines';
|
|
4
|
+
import { MetaDataType } from './pipeline-types';
|
|
5
|
+
import type { CodeBuildStepOptions } from '../pipeline/step-types';
|
|
6
|
+
/**
|
|
7
|
+
* Merge multiple metadata objects into one. Later sources override earlier ones.
|
|
8
|
+
*/
|
|
9
|
+
export declare function merge(...sources: Array<Partial<MetaDataType>>): MetaDataType;
|
|
10
|
+
/**
|
|
11
|
+
* Extract non-namespaced metadata keys as environment variable strings.
|
|
12
|
+
* Keys starting with 'aws:cdk:' are reserved for CDK construct props
|
|
13
|
+
* (processed by metadata extraction functions) and are excluded here.
|
|
14
|
+
*
|
|
15
|
+
* All values are converted to strings for CodeBuild compatibility.
|
|
16
|
+
*/
|
|
17
|
+
export declare function extractMetadataEnv(metadata: MetaDataType): Record<string, string>;
|
|
18
|
+
/**
|
|
19
|
+
* Create a CodeBuild step or Shell step based on plugin configuration.
|
|
20
|
+
*
|
|
21
|
+
* Metadata merge order (last wins):
|
|
22
|
+
* 1. Step-level metadata (from options.metadata)
|
|
23
|
+
* 2. Plugin metadata (from plugin.metadata in database)
|
|
24
|
+
*
|
|
25
|
+
* Environment merge order (last wins):
|
|
26
|
+
* 1. Plugin env vars (from plugin.env)
|
|
27
|
+
* 2. Custom env vars (from options.env)
|
|
28
|
+
* 3. WORKDIR from merged metadata
|
|
29
|
+
*
|
|
30
|
+
* CDK prop spread order (last wins):
|
|
31
|
+
* programmatic defaults (input, commands, env, network) → metadata overrides
|
|
32
|
+
*
|
|
33
|
+
* This means metadata keys like `aws:cdk:pipelines:codebuildstep:commands`
|
|
34
|
+
* will override the plugin-derived commands when explicitly set.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createCodeBuildStep(options: CodeBuildStepOptions): ShellStep | CodeBuildStep | ManualApprovalStep;
|
|
37
|
+
/**
|
|
38
|
+
* Convert string or ComputeType enum to CDK ComputeType
|
|
39
|
+
*/
|
|
40
|
+
export declare function getComputeType(input?: string | CDKComputeType): CDKComputeType;
|
|
41
|
+
/**
|
|
42
|
+
* Replaces all characters that are not letters or numbers with the specified value
|
|
43
|
+
* @param input - The string to process
|
|
44
|
+
* @param replaceValue - The character(s) to replace non-alphanumeric characters with (default: '_')
|
|
45
|
+
* @returns The string with non-alphanumeric characters replaced
|
|
46
|
+
*/
|
|
47
|
+
export declare function replaceNonAlphanumeric(input: string, replaceValue?: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* Unwrap a SecretValue | string into a plain string.
|
|
50
|
+
* When a SecretValue is provided (e.g. from Secrets Manager), calls unsafeUnwrap()
|
|
51
|
+
* to extract the underlying value.
|
|
52
|
+
*/
|
|
53
|
+
export declare function unwrapSecret(value: SecretValue | string): string;
|