cdk-assets 0.0.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/NOTICE +2 -0
- package/README.md +195 -0
- package/bin/cdk-assets +2 -0
- package/bin/cdk-assets.d.ts +1 -0
- package/bin/cdk-assets.js +70 -0
- package/bin/docker-credential-cdk-assets +2 -0
- package/bin/docker-credential-cdk-assets.d.ts +13 -0
- package/bin/docker-credential-cdk-assets.js +39 -0
- package/bin/list.d.ts +3 -0
- package/bin/list.js +10 -0
- package/bin/logging.d.ts +4 -0
- package/bin/logging.js +28 -0
- package/bin/publish.d.ts +5 -0
- package/bin/publish.js +49 -0
- package/lib/asset-manifest.d.ts +162 -0
- package/lib/asset-manifest.js +245 -0
- package/lib/aws-types.d.ts +1660 -0
- package/lib/aws-types.js +138 -0
- package/lib/aws.d.ts +70 -0
- package/lib/aws.js +125 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +21 -0
- package/lib/private/archive.d.ts +3 -0
- package/lib/private/archive.js +87 -0
- package/lib/private/asset-handler.d.ts +54 -0
- package/lib/private/asset-handler.js +3 -0
- package/lib/private/docker-credentials.d.ts +35 -0
- package/lib/private/docker-credentials.js +89 -0
- package/lib/private/docker.d.ts +98 -0
- package/lib/private/docker.js +232 -0
- package/lib/private/fs-extra.d.ts +3 -0
- package/lib/private/fs-extra.js +37 -0
- package/lib/private/handlers/client-options.d.ts +3 -0
- package/lib/private/handlers/client-options.js +12 -0
- package/lib/private/handlers/container-images.d.ts +22 -0
- package/lib/private/handlers/container-images.js +224 -0
- package/lib/private/handlers/files.d.ts +14 -0
- package/lib/private/handlers/files.js +288 -0
- package/lib/private/handlers/index.d.ts +3 -0
- package/lib/private/handlers/index.js +16 -0
- package/lib/private/p-limit.d.ts +10 -0
- package/lib/private/p-limit.js +51 -0
- package/lib/private/placeholders.d.ts +10 -0
- package/lib/private/placeholders.js +34 -0
- package/lib/private/shell.d.ts +24 -0
- package/lib/private/shell.js +131 -0
- package/lib/private/util.d.ts +5 -0
- package/lib/private/util.js +16 -0
- package/lib/progress.d.ts +114 -0
- package/lib/progress.js +104 -0
- package/lib/publishing.d.ts +118 -0
- package/lib/publishing.js +193 -0
- package/package.json +103 -0
- package/scripts/manual-test-manifest.json +12 -0
- package/scripts/manual-test.sh +22 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AssetPublishing = void 0;
|
|
4
|
+
const docker_1 = require("./private/docker");
|
|
5
|
+
const handlers_1 = require("./private/handlers");
|
|
6
|
+
const p_limit_1 = require("./private/p-limit");
|
|
7
|
+
const progress_1 = require("./progress");
|
|
8
|
+
class AssetPublishing {
|
|
9
|
+
constructor(manifest, options) {
|
|
10
|
+
this.manifest = manifest;
|
|
11
|
+
this.options = options;
|
|
12
|
+
/**
|
|
13
|
+
* The message for the IPublishProgress interface
|
|
14
|
+
*/
|
|
15
|
+
this.message = 'Starting';
|
|
16
|
+
this.failures = new Array();
|
|
17
|
+
this.completedOperations = 0;
|
|
18
|
+
this.aborted = false;
|
|
19
|
+
this.handlerCache = new Map();
|
|
20
|
+
this.assets = manifest.entries;
|
|
21
|
+
this.totalOperations = this.assets.length;
|
|
22
|
+
this.publishInParallel = options.publishInParallel ?? false;
|
|
23
|
+
this.buildAssets = options.buildAssets ?? true;
|
|
24
|
+
this.publishAssets = options.publishAssets ?? true;
|
|
25
|
+
const self = this;
|
|
26
|
+
this.handlerHost = {
|
|
27
|
+
aws: this.options.aws,
|
|
28
|
+
get aborted() {
|
|
29
|
+
return self.aborted;
|
|
30
|
+
},
|
|
31
|
+
emitMessage(t, m) {
|
|
32
|
+
self.progressEvent(t, m);
|
|
33
|
+
},
|
|
34
|
+
dockerFactory: new docker_1.DockerFactory(),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Publish all assets from the manifest
|
|
39
|
+
*/
|
|
40
|
+
async publish(options = {}) {
|
|
41
|
+
if (this.publishInParallel) {
|
|
42
|
+
const limit = (0, p_limit_1.pLimit)(20);
|
|
43
|
+
// eslint-disable-next-line @cdklabs/promiseall-no-unbounded-parallelism
|
|
44
|
+
await Promise.all(this.assets.map((asset) => limit(async () => this.publishAsset(asset, options))));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
for (const asset of this.assets) {
|
|
48
|
+
if (!(await this.publishAsset(asset, options))) {
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if ((this.options.throwOnError ?? true) && this.failures.length > 0) {
|
|
54
|
+
throw new Error(`Error publishing: ${this.failures.map((e) => e.error.message)}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Build a single asset from the manifest
|
|
59
|
+
*/
|
|
60
|
+
async buildEntry(asset) {
|
|
61
|
+
try {
|
|
62
|
+
if (this.progressEvent(progress_1.EventType.START, `Building ${asset.id}`)) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
const handler = this.assetHandler(asset);
|
|
66
|
+
await handler.build();
|
|
67
|
+
if (this.aborted) {
|
|
68
|
+
throw new Error('Aborted');
|
|
69
|
+
}
|
|
70
|
+
this.completedOperations++;
|
|
71
|
+
if (this.progressEvent(progress_1.EventType.SUCCESS, `Built ${asset.id}`)) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
this.failures.push({ asset, error: e });
|
|
77
|
+
this.completedOperations++;
|
|
78
|
+
if (this.progressEvent(progress_1.EventType.FAIL, e.message)) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Publish a single asset from the manifest
|
|
86
|
+
*/
|
|
87
|
+
async publishEntry(asset, options = {}) {
|
|
88
|
+
try {
|
|
89
|
+
if (this.progressEvent(progress_1.EventType.START, `Publishing ${asset.id}`)) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
const handler = this.assetHandler(asset);
|
|
93
|
+
await handler.publish(options);
|
|
94
|
+
if (this.aborted) {
|
|
95
|
+
throw new Error('Aborted');
|
|
96
|
+
}
|
|
97
|
+
this.completedOperations++;
|
|
98
|
+
if (this.progressEvent(progress_1.EventType.SUCCESS, `Published ${asset.id}`)) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (e) {
|
|
103
|
+
this.failures.push({ asset, error: e });
|
|
104
|
+
this.completedOperations++;
|
|
105
|
+
if (this.progressEvent(progress_1.EventType.FAIL, e.message)) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Return whether a single asset is published
|
|
113
|
+
*/
|
|
114
|
+
isEntryPublished(asset) {
|
|
115
|
+
const handler = this.assetHandler(asset);
|
|
116
|
+
return handler.isPublished();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* publish an asset (used by 'publish()')
|
|
120
|
+
* @param asset The asset to publish
|
|
121
|
+
* @returns false when publishing should stop
|
|
122
|
+
*/
|
|
123
|
+
async publishAsset(asset, options = {}) {
|
|
124
|
+
try {
|
|
125
|
+
if (this.progressEvent(progress_1.EventType.START, `Publishing ${asset.id}`)) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
const handler = this.assetHandler(asset);
|
|
129
|
+
if (this.buildAssets) {
|
|
130
|
+
await handler.build();
|
|
131
|
+
}
|
|
132
|
+
if (this.publishAssets) {
|
|
133
|
+
await handler.publish(options);
|
|
134
|
+
}
|
|
135
|
+
if (this.aborted) {
|
|
136
|
+
throw new Error('Aborted');
|
|
137
|
+
}
|
|
138
|
+
this.completedOperations++;
|
|
139
|
+
if (this.progressEvent(progress_1.EventType.SUCCESS, `Published ${asset.id}`)) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch (e) {
|
|
144
|
+
this.failures.push({ asset, error: e });
|
|
145
|
+
this.completedOperations++;
|
|
146
|
+
if (this.progressEvent(progress_1.EventType.FAIL, e.message)) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
get percentComplete() {
|
|
153
|
+
if (this.totalOperations === 0) {
|
|
154
|
+
return 100;
|
|
155
|
+
}
|
|
156
|
+
return Math.floor((this.completedOperations / this.totalOperations) * 100);
|
|
157
|
+
}
|
|
158
|
+
abort() {
|
|
159
|
+
this.aborted = true;
|
|
160
|
+
}
|
|
161
|
+
get hasFailures() {
|
|
162
|
+
return this.failures.length > 0;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Publish a progress event to the listener, if present.
|
|
166
|
+
*
|
|
167
|
+
* Returns whether an abort is requested. Helper to get rid of repetitive code in publish().
|
|
168
|
+
*/
|
|
169
|
+
progressEvent(event, message) {
|
|
170
|
+
this.message = message;
|
|
171
|
+
if (this.options.progressListener) {
|
|
172
|
+
this.options.progressListener.onPublishEvent(event, this);
|
|
173
|
+
}
|
|
174
|
+
return this.aborted;
|
|
175
|
+
}
|
|
176
|
+
assetHandler(asset) {
|
|
177
|
+
const existing = this.handlerCache.get(asset);
|
|
178
|
+
if (existing) {
|
|
179
|
+
return existing;
|
|
180
|
+
}
|
|
181
|
+
if (this.options.quiet !== undefined && this.options.subprocessOutputDestination) {
|
|
182
|
+
throw new Error('Cannot set both quiet and subprocessOutputDestination. Please use only subprocessOutputDestination');
|
|
183
|
+
}
|
|
184
|
+
const subprocessOutputDestination = this.options.subprocessOutputDestination ?? (this.options.quiet ? 'ignore' : 'stdio');
|
|
185
|
+
const ret = (0, handlers_1.makeAssetHandler)(this.manifest, asset, this.handlerHost, {
|
|
186
|
+
subprocessOutputDestination,
|
|
187
|
+
});
|
|
188
|
+
this.handlerCache.set(asset, ret);
|
|
189
|
+
return ret;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
exports.AssetPublishing = AssetPublishing;
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInB1Ymxpc2hpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBUUEsNkNBQWlEO0FBQ2pELGlEQUFzRDtBQUN0RCwrQ0FBMkM7QUFDM0MseUNBQW1GO0FBdUVuRixNQUFhLGVBQWU7SUFzQjFCLFlBQ21CLFFBQXVCLEVBQ3ZCLE9BQStCO1FBRC9CLGFBQVEsR0FBUixRQUFRLENBQWU7UUFDdkIsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7UUF2QmxEOztXQUVHO1FBQ0ksWUFBTyxHQUFXLFVBQVUsQ0FBQztRQU1wQixhQUFRLEdBQUcsSUFBSSxLQUFLLEVBQWUsQ0FBQztRQUk1Qyx3QkFBbUIsR0FBVyxDQUFDLENBQUM7UUFDaEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUtQLGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7UUFNdkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDMUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxLQUFLLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztRQUMvQyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDO1FBRW5ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2pCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7WUFDckIsSUFBSSxPQUFPO2dCQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN0QixDQUFDO1lBQ0QsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxh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YixvR0FBb0csQ0FDckcsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLDJCQUEyQixHQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLDJCQUEyQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEYsTUFBTSxHQUFHLEdBQUcsSUFBQSwyQkFBZ0IsRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25FLDJCQUEyQjtTQUM1QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUFoT0QsMENBZ09DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNzZXRNYW5pZmVzdCwgSU1hbmlmZXN0RW50cnkgfSBmcm9tICcuL2Fzc2V0LW1hbmlmZXN0JztcbmltcG9ydCB7IElBd3MgfSBmcm9tICcuL2F3cyc7XG5pbXBvcnQge1xuICBJQXNzZXRIYW5kbGVyLFxuICBJSGFuZGxlckhvc3QsXG4gIHR5cGUgUHVibGlzaE9wdGlvbnMsXG4gIFN1YnByb2Nlc3NPdXRwdXREZXN0aW5hdGlvbixcbn0gZnJvbSAnLi9wcml2YXRlL2Fzc2V0LWhhbmRsZXInO1xuaW1wb3J0IHsgRG9ja2VyRmFjdG9yeSB9IGZyb20gJy4vcHJpdmF0ZS9kb2NrZXInO1xuaW1wb3J0IHsgbWFrZUFzc2V0SGFuZGxlciB9IGZyb20gJy4vcHJpdmF0ZS9oYW5kbGVycyc7XG5pbXBvcnQgeyBwTGltaXQgfSBmcm9tICcuL3ByaXZhdGUvcC1saW1pdCc7XG5pbXBvcnQgeyBFdmVudFR5cGUsIElQdWJsaXNoUHJvZ3Jlc3MsIElQdWJsaXNoUHJvZ3Jlc3NMaXN0ZW5lciB9IGZyb20gJy4vcHJvZ3Jlc3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0UHVibGlzaGluZ09wdGlvbnMge1xuICAvKipcbiAgICogRW50cnkgcG9pbnQgZm9yIEFXUyBjbGllbnRcbiAgICovXG4gIHJlYWRvbmx5IGF3czogSUF3cztcblxuICAvKipcbiAgICogTGlzdGVuZXIgZm9yIHByb2dyZXNzIGV2ZW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCBObyBsaXN0ZW5lclxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZ3Jlc3NMaXN0ZW5lcj86IElQdWJsaXNoUHJvZ3Jlc3NMaXN0ZW5lcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB0aHJvdyBhdCB0aGUgZW5kIGlmIHRoZXJlIHdlcmUgZXJyb3JzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHRocm93T25FcnJvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHVibGlzaCBpbiBwYXJhbGxlbCwgd2hlbiAncHVibGlzaCgpJyBpcyBjYWxsZWRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2hJblBhcmFsbGVsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBidWlsZCBhc3NldHMsIHdoZW4gJ3B1Ymxpc2goKScgaXMgY2FsbGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQXNzZXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBwdWJsaXNoIGFzc2V0cywgd2hlbiAncHVibGlzaCgpJyBpcyBjYWxsZWRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaEFzc2V0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgI3N1YnByb2Nlc3NPdXRwdXREZXN0aW5hdGlvbn0gaW5zdGVhZFxuICAgKi9cbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0byBzZW5kIG91dHB1dCBvZiBhIHN1YnByb2Nlc3Nlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAnc3RkaW8nXG4gICAqL1xuICBzdWJwcm9jZXNzT3V0cHV0RGVzdGluYXRpb24/OiBTdWJwcm9jZXNzT3V0cHV0RGVzdGluYXRpb247XG59XG5cbi8qKlxuICogQSBmYWlsdXJlIHRvIHB1Ymxpc2ggYW4gYXNzZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWlsZWRBc3NldCB7XG4gIC8qKlxuICAgKiBUaGUgYXNzZXQgdGhhdCBmYWlsZWQgdG8gcHVibGlzaFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXQ6IElNYW5pZmVzdEVudHJ5O1xuXG4gIC8qKlxuICAgKiBUaGUgZmFpbHVyZSB0aGF0IG9jY3VycmVkXG4gICAqL1xuICByZWFkb25seSBlcnJvcjogRXJyb3I7XG59XG5cbmV4cG9ydCBjbGFzcyBBc3NldFB1Ymxpc2hpbmcgaW1wbGVtZW50cyBJUHVibGlzaFByb2dyZXNzIHtcbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIGZvciB0aGUgSVB1Ymxpc2hQcm9ncmVzcyBpbnRlcmZhY2VcbiAgICovXG4gIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcgPSAnU3RhcnRpbmcnO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBhc3NldCBmb3IgdGhlIElQdWJsaXNoUHJvZ3Jlc3MgaW50ZXJmYWNlXG4gICAqL1xuICBwdWJsaWMgY3VycmVudEFzc2V0PzogSU1hbmlmZXN0RW50cnk7XG4gIHB1YmxpYyByZWFkb25seSBmYWlsdXJlcyA9IG5ldyBBcnJheTxGYWlsZWRBc3NldD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhc3NldHM6IElNYW5pZmVzdEVudHJ5W107XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0b3RhbE9wZXJhdGlvbnM6IG51bWJlcjtcbiAgcHJpdmF0ZSBjb21wbGV0ZWRPcGVyYXRpb25zOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIGFib3J0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVySG9zdDogSUhhbmRsZXJIb3N0O1xuICBwcml2YXRlIHJlYWRvbmx5IHB1Ymxpc2hJblBhcmFsbGVsOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkQXNzZXRzOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHB1Ymxpc2hBc3NldHM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlckNhY2hlID0gbmV3IE1hcDxJTWFuaWZlc3RFbnRyeSwgSUFzc2V0SGFuZGxlcj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1hbmlmZXN0OiBBc3NldE1hbmlmZXN0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogQXNzZXRQdWJsaXNoaW5nT3B0aW9ucyxcbiAgKSB7XG4gICAgdGhpcy5hc3NldHMgPSBtYW5pZmVzdC5lbnRyaWVzO1xuICAgIHRoaXMudG90YWxPcGVyYXRpb25zID0gdGhpcy5hc3NldHMubGVuZ3RoO1xuICAgIHRoaXMucHVibGlzaEluUGFyYWxsZWwgPSBvcHRpb25zLnB1Ymxpc2hJblBhcmFsbGVsID8/IGZhbHNlO1xuICAgIHRoaXMuYnVpbGRBc3NldHMgPSBvcHRpb25zLmJ1aWxkQXNzZXRzID8/IHRydWU7XG4gICAgdGhpcy5wdWJsaXNoQXNzZXRzID0gb3B0aW9ucy5wdWJsaXNoQXNzZXRzID8/IHRydWU7XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB0aGlzLmhhbmRsZXJIb3N0ID0ge1xuICAgICAgYXdzOiB0aGlzLm9wdGlvbnMuYXdzLFxuICAgICAgZ2V0IGFib3J0ZWQoKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmFib3J0ZWQ7XG4gICAgICB9LFxuICAgICAgZW1pdE1lc3NhZ2UodCwgbSkge1xuICAgICAgICBzZWxmLnByb2dyZXNzRXZlbnQodCwgbSk7XG4gICAgICB9LFxuICAgICAgZG9ja2VyRmFjdG9yeTogbmV3IERvY2tlckZhY3RvcnkoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2ggYWxsIGFzc2V0cyBmcm9tIHRoZSBtYW5pZmVzdFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHB1Ymxpc2gob3B0aW9uczogUHVibGlzaE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnB1Ymxpc2hJblBhcmFsbGVsKSB7XG4gICAgICBjb25zdCBsaW1pdCA9IHBMaW1pdCgyMCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvcHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc21cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICB0aGlzLmFzc2V0cy5tYXAoKGFzc2V0KSA9PiBsaW1pdChhc3luYyAoKSA9PiB0aGlzLnB1Ymxpc2hBc3NldChhc3NldCwgb3B0aW9ucykpKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgYXNzZXQgb2YgdGhpcy5hc3NldHMpIHtcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5wdWJsaXNoQXNzZXQoYXNzZXQsIG9wdGlvbnMpKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLm9wdGlvbnMudGhyb3dPbkVycm9yID8/IHRydWUpICYmIHRoaXMuZmFpbHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBwdWJsaXNoaW5nOiAke3RoaXMuZmFpbHVyZXMubWFwKChlKSA9PiBlLmVycm9yLm1lc3NhZ2UpfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIHNpbmdsZSBhc3NldCBmcm9tIHRoZSBtYW5pZmVzdFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGJ1aWxkRW50cnkoYXNzZXQ6IElNYW5pZmVzdEVudHJ5KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnByb2dyZXNzRXZlbnQoRXZlbnRUeXBlLlNUQVJULCBgQnVpbGRpbmcgJHthc3NldC5pZH1gKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmFzc2V0SGFuZGxlcihhc3NldCk7XG4gICAgICBhd2FpdCBoYW5kbGVyLmJ1aWxkKCk7XG5cbiAgICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29tcGxldGVkT3BlcmF0aW9ucysrO1xuICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NFdmVudChFdmVudFR5cGUuU1VDQ0VTUywgYEJ1aWx0ICR7YXNzZXQuaWR9YCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhpcy5mYWlsdXJlcy5wdXNoKHsgYXNzZXQsIGVycm9yOiBlIH0pO1xuICAgICAgdGhpcy5jb21wbGV0ZWRPcGVyYXRpb25zKys7XG4gICAgICBpZiAodGhpcy5wcm9ncmVzc0V2ZW50KEV2ZW50VHlwZS5GQUlMLCBlLm1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoIGEgc2luZ2xlIGFzc2V0IGZyb20gdGhlIG1hbmlmZXN0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHVibGlzaEVudHJ5KGFzc2V0OiBJTWFuaWZlc3RFbnRyeSwgb3B0aW9uczogUHVibGlzaE9wdGlvbnMgPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5wcm9ncmVzc0V2ZW50KEV2ZW50VHlwZS5TVEFSVCwgYFB1Ymxpc2hpbmcgJHthc3NldC5pZH1gKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmFzc2V0SGFuZGxlcihhc3NldCk7XG4gICAgICBhd2FpdCBoYW5kbGVyLnB1Ymxpc2gob3B0aW9ucyk7XG5cbiAgICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29tcGxldGVkT3BlcmF0aW9ucysrO1xuICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NFdmVudChFdmVudFR5cGUuU1VDQ0VTUywgYFB1Ymxpc2hlZCAke2Fzc2V0LmlkfWApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRoaXMuZmFpbHVyZXMucHVzaCh7IGFzc2V0LCBlcnJvcjogZSB9KTtcbiAgICAgIHRoaXMuY29tcGxldGVkT3BlcmF0aW9ucysrO1xuICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NFdmVudChFdmVudFR5cGUuRkFJTCwgZS5tZXNzYWdlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgYSBzaW5nbGUgYXNzZXQgaXMgcHVibGlzaGVkXG4gICAqL1xuICBwdWJsaWMgaXNFbnRyeVB1Ymxpc2hlZChhc3NldDogSU1hbmlmZXN0RW50cnkpIHtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5hc3NldEhhbmRsZXIoYXNzZXQpO1xuICAgIHJldHVybiBoYW5kbGVyLmlzUHVibGlzaGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogcHVibGlzaCBhbiBhc3NldCAodXNlZCBieSAncHVibGlzaCgpJylcbiAgICogQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBwdWJsaXNoXG4gICAqIEByZXR1cm5zIGZhbHNlIHdoZW4gcHVibGlzaGluZyBzaG91bGQgc3RvcFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwdWJsaXNoQXNzZXQoYXNzZXQ6IElNYW5pZmVzdEVudHJ5LCBvcHRpb25zOiBQdWJsaXNoT3B0aW9ucyA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnByb2dyZXNzRXZlbnQoRXZlbnRUeXBlLlNUQVJULCBgUHVibGlzaGluZyAke2Fzc2V0LmlkfWApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuYXNzZXRIYW5kbGVyKGFzc2V0KTtcblxuICAgICAgaWYgKHRoaXMuYnVpbGRBc3NldHMpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlci5idWlsZCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wdWJsaXNoQXNzZXRzKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZXIucHVibGlzaChvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0ZWQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb21wbGV0ZWRPcGVyYXRpb25zKys7XG4gICAgICBpZiAodGhpcy5wcm9ncmVzc0V2ZW50KEV2ZW50VHlwZS5TVUNDRVNTLCBgUHVibGlzaGVkICR7YXNzZXQuaWR9YCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhpcy5mYWlsdXJlcy5wdXNoKHsgYXNzZXQsIGVycm9yOiBlIH0pO1xuICAgICAgdGhpcy5jb21wbGV0ZWRPcGVyYXRpb25zKys7XG4gICAgICBpZiAodGhpcy5wcm9ncmVzc0V2ZW50KEV2ZW50VHlwZS5GQUlMLCBlLm1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGVyY2VudENvbXBsZXRlKCkge1xuICAgIGlmICh0aGlzLnRvdGFsT3BlcmF0aW9ucyA9PT0gMCkge1xuICAgICAgcmV0dXJuIDEwMDtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKHRoaXMuY29tcGxldGVkT3BlcmF0aW9ucyAvIHRoaXMudG90YWxPcGVyYXRpb25zKSAqIDEwMCk7XG4gIH1cblxuICBwdWJsaWMgYWJvcnQoKTogdm9pZCB7XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzRmFpbHVyZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmFpbHVyZXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoIGEgcHJvZ3Jlc3MgZXZlbnQgdG8gdGhlIGxpc3RlbmVyLCBpZiBwcmVzZW50LlxuICAgKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgYW4gYWJvcnQgaXMgcmVxdWVzdGVkLiBIZWxwZXIgdG8gZ2V0IHJpZCBvZiByZXBldGl0aXZlIGNvZGUgaW4gcHVibGlzaCgpLlxuICAgKi9cbiAgcHJpdmF0ZSBwcm9ncmVzc0V2ZW50KGV2ZW50OiBFdmVudFR5cGUsIG1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcm9ncmVzc0xpc3RlbmVyKSB7XG4gICAgICB0aGlzLm9wdGlvbnMucHJvZ3Jlc3NMaXN0ZW5lci5vblB1Ymxpc2hFdmVudChldmVudCwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFib3J0ZWQ7XG4gIH1cblxuICBwcml2YXRlIGFzc2V0SGFuZGxlcihhc3NldDogSU1hbmlmZXN0RW50cnkpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuaGFuZGxlckNhY2hlLmdldChhc3NldCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMucXVpZXQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMuc3VicHJvY2Vzc091dHB1dERlc3RpbmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3Qgc2V0IGJvdGggcXVpZXQgYW5kIHN1YnByb2Nlc3NPdXRwdXREZXN0aW5hdGlvbi4gUGxlYXNlIHVzZSBvbmx5IHN1YnByb2Nlc3NPdXRwdXREZXN0aW5hdGlvbicsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzdWJwcm9jZXNzT3V0cHV0RGVzdGluYXRpb24gPVxuICAgICAgdGhpcy5vcHRpb25zLnN1YnByb2Nlc3NPdXRwdXREZXN0aW5hdGlvbiA/PyAodGhpcy5vcHRpb25zLnF1aWV0ID8gJ2lnbm9yZScgOiAnc3RkaW8nKTtcbiAgICBjb25zdCByZXQgPSBtYWtlQXNzZXRIYW5kbGVyKHRoaXMubWFuaWZlc3QsIGFzc2V0LCB0aGlzLmhhbmRsZXJIb3N0LCB7XG4gICAgICBzdWJwcm9jZXNzT3V0cHV0RGVzdGluYXRpb24sXG4gICAgfSk7XG4gICAgdGhpcy5oYW5kbGVyQ2FjaGUuc2V0KGFzc2V0LCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cdk-assets",
|
|
3
|
+
"description": "CDK Asset Publishing Tool",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "https://github.com/aws/aws-cdk-cli",
|
|
7
|
+
"directory": "packages/cdk-assets"
|
|
8
|
+
},
|
|
9
|
+
"bin": {
|
|
10
|
+
"cdk-assets": "bin/cdk-assets",
|
|
11
|
+
"docker-credential-cdk-assets": "bin/docker-credential-cdk-assets"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "npx projen build",
|
|
15
|
+
"bump": "npx projen bump",
|
|
16
|
+
"check-for-updates": "npx projen check-for-updates",
|
|
17
|
+
"compile": "npx projen compile",
|
|
18
|
+
"default": "npx projen default",
|
|
19
|
+
"eslint": "npx projen eslint",
|
|
20
|
+
"gather-versions": "npx projen gather-versions",
|
|
21
|
+
"package": "npx projen package",
|
|
22
|
+
"post-compile": "npx projen post-compile",
|
|
23
|
+
"pre-compile": "npx projen pre-compile",
|
|
24
|
+
"shrinkwrap": "npx projen shrinkwrap",
|
|
25
|
+
"test": "npx projen test",
|
|
26
|
+
"test:watch": "npx projen test:watch",
|
|
27
|
+
"unbump": "npx projen unbump",
|
|
28
|
+
"watch": "npx projen watch",
|
|
29
|
+
"projen": "npx projen"
|
|
30
|
+
},
|
|
31
|
+
"author": {
|
|
32
|
+
"name": "Amazon Web Services",
|
|
33
|
+
"url": "https://aws.amazon.com",
|
|
34
|
+
"organization": true
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@cdklabs/eslint-plugin": "^1.3.2",
|
|
38
|
+
"@smithy/types": "^4.1.0",
|
|
39
|
+
"@smithy/util-stream": "^4.0.2",
|
|
40
|
+
"@stylistic/eslint-plugin": "^3.1.0",
|
|
41
|
+
"@types/archiver": "^6.0.3",
|
|
42
|
+
"@types/glob": "^8.1.0",
|
|
43
|
+
"@types/jest": "^29.5.14",
|
|
44
|
+
"@types/mime": "^2",
|
|
45
|
+
"@types/mock-fs": "^4",
|
|
46
|
+
"@types/node": "^16",
|
|
47
|
+
"@types/yargs": "^17.0.33",
|
|
48
|
+
"@typescript-eslint/eslint-plugin": "^8",
|
|
49
|
+
"@typescript-eslint/parser": "^8",
|
|
50
|
+
"aws-sdk-client-mock": "^4.1.0",
|
|
51
|
+
"aws-sdk-client-mock-jest": "^4.1.0",
|
|
52
|
+
"commit-and-tag-version": "^12",
|
|
53
|
+
"constructs": "^10.0.0",
|
|
54
|
+
"eslint": "^9",
|
|
55
|
+
"eslint-config-prettier": "^10.0.1",
|
|
56
|
+
"eslint-import-resolver-typescript": "^3.7.0",
|
|
57
|
+
"eslint-plugin-import": "^2.31.0",
|
|
58
|
+
"eslint-plugin-jest": "^28.11.0",
|
|
59
|
+
"eslint-plugin-prettier": "^5.2.3",
|
|
60
|
+
"fs-extra": "^11.3.0",
|
|
61
|
+
"graceful-fs": "^4.2.11",
|
|
62
|
+
"jest": "^29.7.0",
|
|
63
|
+
"jest-junit": "^15",
|
|
64
|
+
"jszip": "^3.10.1",
|
|
65
|
+
"mock-fs": "^5",
|
|
66
|
+
"prettier": "^2.8",
|
|
67
|
+
"projen": "^0.91.9",
|
|
68
|
+
"ts-jest": "^29.2.5",
|
|
69
|
+
"typescript": "5.6"
|
|
70
|
+
},
|
|
71
|
+
"dependencies": {
|
|
72
|
+
"@aws-cdk/cloud-assembly-schema": "^39.0.0",
|
|
73
|
+
"@aws-cdk/cx-api": "^2.178.2",
|
|
74
|
+
"@aws-sdk/client-ecr": "3.741",
|
|
75
|
+
"@aws-sdk/client-s3": "3.741",
|
|
76
|
+
"@aws-sdk/client-secrets-manager": "3.741",
|
|
77
|
+
"@aws-sdk/client-sts": "3.741",
|
|
78
|
+
"@aws-sdk/credential-providers": "^3.744.0",
|
|
79
|
+
"@aws-sdk/lib-storage": "^3.744.0",
|
|
80
|
+
"@smithy/config-resolver": "^4.0.1",
|
|
81
|
+
"@smithy/node-config-provider": "^4.0.1",
|
|
82
|
+
"archiver": "^7.0.1",
|
|
83
|
+
"glob": "^11.0.1",
|
|
84
|
+
"mime": "^2",
|
|
85
|
+
"yargs": "^17.7.2"
|
|
86
|
+
},
|
|
87
|
+
"keywords": [
|
|
88
|
+
"aws",
|
|
89
|
+
"cdk"
|
|
90
|
+
],
|
|
91
|
+
"engines": {
|
|
92
|
+
"node": ">= 16.0.0"
|
|
93
|
+
},
|
|
94
|
+
"main": "lib/index.js",
|
|
95
|
+
"license": "Apache-2.0",
|
|
96
|
+
"homepage": "https://github.com/aws/aws-cdk",
|
|
97
|
+
"publishConfig": {
|
|
98
|
+
"access": "public"
|
|
99
|
+
},
|
|
100
|
+
"version": "0.0.0",
|
|
101
|
+
"types": "lib/index.d.ts",
|
|
102
|
+
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
|
|
103
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -eu
|
|
3
|
+
scriptdir=$(cd $(dirname $0) && pwd)
|
|
4
|
+
|
|
5
|
+
path=$(realpath $1)
|
|
6
|
+
|
|
7
|
+
cat <<EOF > $scriptdir/manual-test-manifest.json
|
|
8
|
+
{
|
|
9
|
+
"version": "38.0.1",
|
|
10
|
+
"files": {
|
|
11
|
+
"asset1": {
|
|
12
|
+
"type": "file",
|
|
13
|
+
"source": { "path": "$path" },
|
|
14
|
+
"destinations": {
|
|
15
|
+
"dest1": { "bucketName": "$2", "objectKey": "$3" }
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
EOF
|
|
21
|
+
|
|
22
|
+
npx ts-node $scriptdir/../bin/cdk-assets.ts -v -p $scriptdir/manual-test-manifest.json publish
|