build-strap 3.0.0 → 4.0.0-dev.4
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 +1 -1
- package/README.md +3 -34
- package/ant.d.ts +19 -0
- package/ant.js +12 -37
- package/cert.d.ts +12 -0
- package/cert.js +89 -151
- package/clean.d.ts +4 -0
- package/clean.js +7 -16
- package/copy.d.ts +7 -0
- package/copy.js +49 -76
- package/cp.d.ts +17 -0
- package/cp.js +85 -170
- package/docker.container.d.ts +73 -0
- package/docker.container.js +219 -362
- package/docker.d.ts +68 -0
- package/docker.js +167 -347
- package/docker.network.d.ts +42 -0
- package/docker.network.js +69 -144
- package/docker.volume.d.ts +26 -0
- package/docker.volume.js +52 -126
- package/dockerCleanup.d.ts +38 -0
- package/dockerCleanup.js +66 -141
- package/dockerCompose.d.ts +154 -0
- package/dockerCompose.js +400 -727
- package/fs.d.ts +5 -0
- package/fs.js +38 -95
- package/git.d.ts +9 -0
- package/git.js +19 -30
- package/index.d.ts +20 -0
- package/index.js +20 -27
- package/maps.d.ts +33 -0
- package/maps.js +16 -87
- package/npm.d.ts +48 -0
- package/npm.js +133 -135
- package/package.json +23 -19
- package/pkg.d.ts +39 -0
- package/pkg.js +26 -74
- package/publish.d.ts +27 -0
- package/publish.js +52 -140
- package/run.d.ts +13 -0
- package/run.js +39 -85
- package/tgz.d.ts +13 -0
- package/tgz.js +61 -96
- package/version.d.ts +34 -0
- package/version.js +86 -127
- package/yarn.d.ts +44 -0
- package/yarn.js +150 -119
- package/ant.js.flow +0 -42
- package/artifactory.js +0 -617
- package/artifactory.js.flow +0 -616
- package/cert.conf +0 -20
- package/cert.js.flow +0 -152
- package/clean.js.flow +0 -19
- package/copy.js.flow +0 -79
- package/cp.js.flow +0 -172
- package/docker.container.js.flow +0 -389
- package/docker.js.flow +0 -367
- package/docker.network.js.flow +0 -159
- package/docker.volume.js.flow +0 -136
- package/dockerCleanup.js.flow +0 -151
- package/dockerCompose.js.flow +0 -765
- package/flow.js +0 -21
- package/flow.js.flow +0 -20
- package/fs.js.flow +0 -96
- package/git.js.flow +0 -34
- package/hg.js +0 -35
- package/hg.js.flow +0 -34
- package/index.js.flow +0 -26
- package/inline-resources.js +0 -158
- package/inline-resources.js.flow +0 -157
- package/maps.js.flow +0 -111
- package/npm.js.flow +0 -144
- package/pkg.js.flow +0 -80
- package/publish.js.flow +0 -144
- package/run.js.flow +0 -89
- package/src/ant.js +0 -42
- package/src/artifactory.js +0 -616
- package/src/cert.conf +0 -20
- package/src/cert.js +0 -152
- package/src/clean.js +0 -19
- package/src/copy.js +0 -79
- package/src/cp.js +0 -172
- package/src/docker.container.js +0 -389
- package/src/docker.js +0 -367
- package/src/docker.network.js +0 -159
- package/src/docker.volume.js +0 -136
- package/src/dockerCleanup.js +0 -151
- package/src/dockerCompose.js +0 -765
- package/src/flow.js +0 -20
- package/src/fs.js +0 -96
- package/src/git.js +0 -34
- package/src/hg.js +0 -34
- package/src/index.js +0 -26
- package/src/inline-resources.js +0 -157
- package/src/maps.js +0 -111
- package/src/npm.js +0 -144
- package/src/pkg.js +0 -80
- package/src/publish.js +0 -144
- package/src/run.js +0 -89
- package/src/test.js +0 -55
- package/src/tgz.js +0 -101
- package/src/version.js +0 -141
- package/src/yarn.js +0 -123
- package/test.js +0 -56
- package/test.js.flow +0 -55
- package/tgz.js.flow +0 -101
- package/version.js.flow +0 -141
- package/yarn.js.flow +0 -123
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface DockerNetwork {
|
|
2
|
+
IPv6: boolean;
|
|
3
|
+
created: Date;
|
|
4
|
+
driver: string;
|
|
5
|
+
exists: () => Promise<boolean>;
|
|
6
|
+
id: string;
|
|
7
|
+
labels: string[];
|
|
8
|
+
name: string;
|
|
9
|
+
rm: () => Promise<void>;
|
|
10
|
+
scope: string;
|
|
11
|
+
}
|
|
12
|
+
interface DockerNetworkLsOptions {
|
|
13
|
+
filter?: (network: DockerNetwork) => boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function unthrottledDockerNetworkLs({ filter, }?: DockerNetworkLsOptions): Promise<DockerNetwork[]>;
|
|
16
|
+
export declare const dockerNetworkLs: (options?: DockerNetworkLsOptions) => Promise<DockerNetwork[]> | undefined;
|
|
17
|
+
export declare function dockerNetworkFind(networkName: string, options?: DockerNetworkLsOptions): Promise<DockerNetwork | null>;
|
|
18
|
+
export interface DockerNetworkCreateOptions {
|
|
19
|
+
auxAddresses?: string[];
|
|
20
|
+
driver?: string;
|
|
21
|
+
driverOpts?: Record<string, string>;
|
|
22
|
+
gateways?: string[];
|
|
23
|
+
ingress?: boolean;
|
|
24
|
+
internal?: boolean;
|
|
25
|
+
ipRange?: string;
|
|
26
|
+
ipv6?: boolean;
|
|
27
|
+
labels?: string[];
|
|
28
|
+
subnets?: string[];
|
|
29
|
+
}
|
|
30
|
+
export declare function dockerNetworkCreate(networkName: string, { driver, driverOpts, ipRange, gateways, subnets, auxAddresses, ingress, internal, ipv6, labels, }?: DockerNetworkCreateOptions): Promise<DockerNetwork | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Removes a network by id
|
|
33
|
+
* @param {string} id The id of the network
|
|
34
|
+
*/
|
|
35
|
+
export declare function dockerNetworkRm(id: string): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Removes all networks with the given name
|
|
38
|
+
* @param {string} networkName The name of the network
|
|
39
|
+
*/
|
|
40
|
+
export declare function dockerNetworkDelete(networkName: string): Promise<void>;
|
|
41
|
+
export declare function dockerNetworkConnect(networkName: string, containerId: string, alias?: string | null): Promise<void>;
|
|
42
|
+
export {};
|
package/docker.network.js
CHANGED
|
@@ -1,160 +1,85 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var _docker = require("./docker");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
import { throttle } from 'lodash-es';
|
|
2
|
+
import { spawn } from './cp.js';
|
|
3
|
+
import { parseDockerDate } from './docker.js';
|
|
22
4
|
// calling this function in rapid succession can lead to errors.
|
|
23
5
|
// prefer throttled version
|
|
24
|
-
async function
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
id,
|
|
46
|
-
name,
|
|
47
|
-
driver,
|
|
48
|
-
scope,
|
|
49
|
-
created: (0, _docker.parseDockerDate)(CreatedAt),
|
|
50
|
-
IPv6: IPv6 === 'true',
|
|
51
|
-
labels: Labels.split(',').map((l) => l.trim()),
|
|
52
|
-
exists: async () => !!(await dockerNetworkFind(id)),
|
|
53
|
-
rm: async () => dockerNetworkRm(id) };
|
|
54
|
-
|
|
55
|
-
}).
|
|
56
|
-
filter((n) => n.id && (typeof filter === 'function' ? filter(n) : true));
|
|
6
|
+
export async function unthrottledDockerNetworkLs({ filter, } = {}) {
|
|
7
|
+
return (await spawn('docker', ['network', 'ls', '--format', '{{json .}}'], {
|
|
8
|
+
captureOutput: true,
|
|
9
|
+
})).output
|
|
10
|
+
.split('\n')
|
|
11
|
+
.filter((line) => !!line.trim())
|
|
12
|
+
.map((line) => {
|
|
13
|
+
const { CreatedAt, Driver: driver, ID: id, IPv6, Labels, Name: name, Scope: scope, } = JSON.parse(line.trim());
|
|
14
|
+
return {
|
|
15
|
+
IPv6: IPv6 === 'true',
|
|
16
|
+
created: parseDockerDate(CreatedAt),
|
|
17
|
+
driver,
|
|
18
|
+
exists: async () => !!(await dockerNetworkFind(id)),
|
|
19
|
+
id,
|
|
20
|
+
labels: Labels.split(',').map((l) => l.trim()),
|
|
21
|
+
name,
|
|
22
|
+
rm: async () => dockerNetworkRm(id),
|
|
23
|
+
scope,
|
|
24
|
+
};
|
|
25
|
+
})
|
|
26
|
+
.filter((n) => n.id && (typeof filter === 'function' ? filter(n) : true));
|
|
57
27
|
}
|
|
58
|
-
const dockerNetworkLs =
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
async function dockerNetworkFind(
|
|
65
|
-
networkName,
|
|
66
|
-
options)
|
|
67
|
-
{
|
|
68
|
-
return (await dockerNetworkLs(options)).find(
|
|
69
|
-
(n) => n.name === networkName || n.id === networkName);
|
|
70
|
-
|
|
28
|
+
export const dockerNetworkLs = throttle(unthrottledDockerNetworkLs, 500, {
|
|
29
|
+
trailing: false,
|
|
30
|
+
});
|
|
31
|
+
export async function dockerNetworkFind(networkName, options) {
|
|
32
|
+
return ((await dockerNetworkLs(options))?.find((n) => n.name === networkName || n.id === networkName) || null);
|
|
71
33
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
{
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
gateways = [],
|
|
93
|
-
subnets = [],
|
|
94
|
-
auxAddresses = [],
|
|
95
|
-
ingress,
|
|
96
|
-
internal,
|
|
97
|
-
ipv6,
|
|
98
|
-
labels = [] } =
|
|
99
|
-
{})
|
|
100
|
-
{
|
|
101
|
-
const existing = await dockerNetworkFind(networkName);
|
|
102
|
-
if (existing) return existing;
|
|
103
|
-
await (0, _cp.spawn)('docker', [
|
|
104
|
-
'network',
|
|
105
|
-
'create',
|
|
106
|
-
...labels.flatMap((l) => ['--label', l]),
|
|
107
|
-
...gateways.flatMap((g) => ['--gateway', g]),
|
|
108
|
-
...subnets.flatMap((s) => ['--subnet', s]),
|
|
109
|
-
...auxAddresses.flatMap((a) => ['--aux-address', a]),
|
|
110
|
-
...(ipRange ? ['--ip-range', ipRange] : []),
|
|
111
|
-
...(ingress ? ['--ingress'] : []),
|
|
112
|
-
...(internal ? ['--internal'] : []),
|
|
113
|
-
...(ipv6 ? ['--ipv6'] : []),
|
|
114
|
-
...(driver ? ['-d', driver] : []),
|
|
115
|
-
...Object.entries(driverOpts).flatMap(([k, v]) => [
|
|
116
|
-
'-o',
|
|
117
|
-
`${k}=${v}`]),
|
|
118
|
-
|
|
119
|
-
networkName]);
|
|
120
|
-
|
|
121
|
-
return dockerNetworkFind(networkName);
|
|
34
|
+
export async function dockerNetworkCreate(networkName, { driver, driverOpts = {}, ipRange, gateways = [], subnets = [], auxAddresses = [], ingress, internal, ipv6, labels = [], } = {}) {
|
|
35
|
+
const existing = await dockerNetworkFind(networkName);
|
|
36
|
+
if (existing)
|
|
37
|
+
return existing;
|
|
38
|
+
await spawn('docker', [
|
|
39
|
+
'network',
|
|
40
|
+
'create',
|
|
41
|
+
...labels.flatMap((l) => ['--label', l]),
|
|
42
|
+
...gateways.flatMap((g) => ['--gateway', g]),
|
|
43
|
+
...subnets.flatMap((s) => ['--subnet', s]),
|
|
44
|
+
...auxAddresses.flatMap((a) => ['--aux-address', a]),
|
|
45
|
+
...(ipRange ? ['--ip-range', ipRange] : []),
|
|
46
|
+
...(ingress ? ['--ingress'] : []),
|
|
47
|
+
...(internal ? ['--internal'] : []),
|
|
48
|
+
...(ipv6 ? ['--ipv6'] : []),
|
|
49
|
+
...(driver ? ['-d', driver] : []),
|
|
50
|
+
...Object.entries(driverOpts).flatMap(([k, v]) => ['-o', `${k}=${v}`]),
|
|
51
|
+
networkName,
|
|
52
|
+
]);
|
|
53
|
+
return dockerNetworkFind(networkName);
|
|
122
54
|
}
|
|
123
|
-
|
|
124
55
|
/**
|
|
125
56
|
* Removes a network by id
|
|
126
57
|
* @param {string} id The id of the network
|
|
127
58
|
*/
|
|
128
|
-
async function dockerNetworkRm(id) {
|
|
129
|
-
|
|
59
|
+
export async function dockerNetworkRm(id) {
|
|
60
|
+
await spawn('docker', ['network', 'rm', id]);
|
|
130
61
|
}
|
|
131
|
-
|
|
132
62
|
/**
|
|
133
63
|
* Removes all networks with the given name
|
|
134
64
|
* @param {string} networkName The name of the network
|
|
135
65
|
*/
|
|
136
|
-
async function dockerNetworkDelete(networkName) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
66
|
+
export async function dockerNetworkDelete(networkName) {
|
|
67
|
+
let existing;
|
|
68
|
+
// eslint-disable-next-line no-cond-assign, no-await-in-loop
|
|
69
|
+
while ((existing = await dockerNetworkFind(networkName))) {
|
|
70
|
+
// eslint-disable-next-line no-await-in-loop
|
|
71
|
+
await existing.rm();
|
|
72
|
+
}
|
|
143
73
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
...(alias ? ['--alias', alias] : []),
|
|
156
|
-
net.id,
|
|
157
|
-
containerId]);
|
|
158
|
-
|
|
74
|
+
export async function dockerNetworkConnect(networkName, containerId, alias) {
|
|
75
|
+
const net = await dockerNetworkCreate(networkName);
|
|
76
|
+
if (!net)
|
|
77
|
+
throw new Error('Failed to create docker network');
|
|
78
|
+
await spawn('docker', [
|
|
79
|
+
'network',
|
|
80
|
+
'connect',
|
|
81
|
+
...(alias ? ['--alias', alias] : []),
|
|
82
|
+
net.id,
|
|
83
|
+
containerId,
|
|
84
|
+
]);
|
|
159
85
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb2NrZXIubmV0d29yay5qcyJdLCJuYW1lcyI6WyJfZG9ja2VyTmV0d29ya0xzIiwiZmlsdGVyIiwiY2FwdHVyZU91dHB1dCIsInNwbGl0IiwibGluZSIsInRyaW0iLCJtYXAiLCJJRCIsImlkIiwiTmFtZSIsIm5hbWUiLCJEcml2ZXIiLCJkcml2ZXIiLCJTY29wZSIsInNjb3BlIiwiQ3JlYXRlZEF0IiwiSVB2NiIsIkxhYmVscyIsIkpTT04iLCJwYXJzZSIsImNyZWF0ZWQiLCJsYWJlbHMiLCJsIiwiZXhpc3RzIiwiZG9ja2VyTmV0d29ya0ZpbmQiLCJybSIsImRvY2tlck5ldHdvcmtSbSIsIm4iLCJkb2NrZXJOZXR3b3JrTHMiLCJ0cmFpbGluZyIsIm5ldHdvcmtOYW1lIiwib3B0aW9ucyIsImZpbmQiLCJkb2NrZXJOZXR3b3JrQ3JlYXRlIiwiZHJpdmVyT3B0cyIsImlwUmFuZ2UiLCJnYXRld2F5cyIsInN1Ym5ldHMiLCJhdXhBZGRyZXNzZXMiLCJpbmdyZXNzIiwiaW50ZXJuYWwiLCJpcHY2IiwiZXhpc3RpbmciLCJmbGF0TWFwIiwiZyIsInMiLCJhIiwiT2JqZWN0IiwiZW50cmllcyIsImsiLCJ2IiwiZG9ja2VyTmV0d29ya0RlbGV0ZSIsImRvY2tlck5ldHdvcmtDb25uZWN0IiwiY29udGFpbmVySWQiLCJhbGlhcyIsIm5ldCIsIkVycm9yIl0sIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBLGtDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkE7QUFDQTtBQUNPLGVBQWVBLGdCQUFmLENBQWdDO0FBQ3JDQyxFQUFBQSxNQURxQztBQUVYLEVBRnJCLEVBRW1EO0FBQ3hELFNBQU87QUFDTCxRQUFNLGVBQU0sUUFBTixFQUFnQixDQUFDLFNBQUQsRUFBWSxJQUFaLEVBQWtCLFVBQWxCLEVBQThCLFlBQTlCLENBQWhCLEVBQTZEO0FBQ2pFQyxJQUFBQSxhQUFhLEVBQUUsSUFEa0QsRUFBN0QsQ0FERDs7O0FBS0pDLEVBQUFBLEtBTEksQ0FLRSxJ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WSxRQUFKO0FBQ0E7QUFDQSxTQUFRQSxRQUFRLEdBQUcsTUFBTWxCLGlCQUFpQixDQUFDTSxXQUFELENBQTFDLEVBQTBEO0FBQ3hEO0FBQ0EsVUFBTVksUUFBUSxDQUFDakIsRUFBVCxFQUFOO0FBQ0Q7QUFDRjs7QUFFTSxlQUFlMkIsb0JBQWY7QUFDTHRCLFdBREs7QUFFTHVCLFdBRks7QUFHTEMsS0FISztBQUlMO0FBQ0EsUUFBTUMsR0FBRyxHQUFHLE1BQU10QixtQkFBbUIsQ0FBQ0gsV0FBRCxDQUFyQztBQUNBLE1BQUksQ0FBQ3lCLEdBQUwsRUFBVSxNQUFNLElBQUlDLEtBQUosQ0FBVSxpQ0FBVixDQUFOO0FBQ1YsUUFBTSxlQUFNLFFBQU4sRUFBZ0I7QUFDcEIsV0FEb0I7QUFFcEIsV0FGb0I7QUFHcEIsTUFBSUYsS0FBSyxHQUFHLENBQUMsU0FBRCxFQUFZQSxLQUFaLENBQUgsR0FBd0IsRUFBakMsQ0FIb0I7QUFJcEJDLEVBQUFBLEdBQUcsQ0FBQy9DLEVBSmdCO0FBS3BCNkMsRUFBQUEsV0FMb0IsQ0FBaEIsQ0FBTjs7QUFPRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSAnbG9kYXNoL3Rocm90dGxlJztcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnLi9jcCc7XG5pbXBvcnQgeyBwYXJzZURvY2tlckRhdGUgfSBmcm9tICcuL2RvY2tlcic7XG5cbmV4cG9ydCB0eXBlIERvY2tlck5ldHdvcmsgPSB7fFxuICBpZDogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRyaXZlcjogc3RyaW5nLFxuICBzY29wZTogc3RyaW5nLFxuICBjcmVhdGVkOiBEYXRlLFxuICBJUHY2OiBib29sZWFuLFxuICBsYWJlbHM6IHN0cmluZ1tdLFxuICBleGlzdHM6ICgpID0+IFByb21pc2U8Ym9vbGVhbj4sXG4gIHJtOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxufH07XG5cbnR5cGUgRG9ja2VyTmV0d29ya0xzT3B0aW9ucyA9IHtcbiAgZmlsdGVyPzogKG5ldHdvcms6IERvY2tlck5ldHdvcmspID0+IGJvb2xlYW4sXG59O1xuXG4vLyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaW4gcmFwaWQgc3VjY2Vzc2lvbiBjYW4gbGVhZCB0byBlcnJvcnMuXG4vLyBwcmVmZXIgdGhyb3R0bGVkIHZlcnNpb25cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfZG9ja2VyTmV0d29ya0xzKHtcbiAgZmlsdGVyLFxufTogRG9ja2VyTmV0d29ya0xzT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxEb2NrZXJOZXR3b3JrW10+IHtcbiAgcmV0dXJuIChcbiAgICBhd2FpdCBzcGF3bignZG9ja2VyJywgWyduZXR3b3JrJywgJ2xzJywgJy0tZm9ybWF0JywgJ3t7anNvbiAufX0nXSwge1xuICAgICAgY2FwdHVyZU91dHB1dDogdHJ1ZSxcbiAgICB9KVxuICApXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5maWx0ZXIoKGxpbmUpID0+ICEhbGluZS50cmltKCkpXG4gICAgLm1hcCgobGluZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBJRDogaWQsXG4gICAgICAgIE5hbWU6IG5hbWUsXG4gICAgICAgIERyaXZlcjogZHJpdmVyLFxuICAgICAgICBTY29wZTogc2NvcGUsXG4gICAgICAgIENyZWF0ZWRBdCxcbiAgICAgICAgSVB2NixcbiAgICAgICAgTGFiZWxzLFxuICAgICAgfSA9IEpTT04ucGFyc2UobGluZS50cmltKCkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRyaXZlcixcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGNyZWF0ZWQ6IHBhcnNlRG9ja2VyRGF0ZShDcmVhdGVkQXQpLFxuICAgICAgICBJUHY2OiBJUHY2ID09PSAndHJ1ZScsXG4gICAgICAgIGxhYmVsczogTGFiZWxzLnNwbGl0KCcsJykubWFwKChsKSA9PiBsLnRyaW0oKSksXG4gICAgICAgIGV4aXN0czogYXN5bmMgKCkgPT4gISEoYXdhaXQgZG9ja2VyTmV0d29ya0ZpbmQoaWQpKSxcbiAgICAgICAgcm06IGFzeW5jICgpID0+IGRvY2tlck5ldHdvcmtSbShpZCksXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcigobikgPT4gbi5pZCAmJiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJyA/IGZpbHRlcihuKSA6IHRydWUpKTtcbn1cbmV4cG9ydCBjb25zdCBkb2NrZXJOZXR3b3JrTHM6IChcbiAgRG9ja2VyTmV0d29ya0xzT3B0aW9ucyB8IHZvaWQsXG4pID0+IFByb21pc2U8RG9ja2VyTmV0d29ya1tdPiA9IHRocm90dGxlKF9kb2NrZXJOZXR3b3JrTHMsIDUwMCwge1xuICB0cmFpbGluZzogZmFsc2UsXG59KTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvY2tlck5ldHdvcmtGaW5kKFxuICBuZXR3b3JrTmFtZTogc3RyaW5nLFxuICBvcHRpb25zPzogRG9ja2VyTmV0d29ya0xzT3B0aW9ucyxcbik6IFByb21pc2U8P0RvY2tlck5ldHdvcms+IHtcbiAgcmV0dXJuIChhd2FpdCBkb2NrZXJOZXR3b3JrTHMob3B0aW9ucykpLmZpbmQoXG4gICAgKG4pID0+IG4ubmFtZSA9PT0gbmV0d29ya05hbWUgfHwgbi5pZCA9PT0gbmV0d29ya05hbWUsXG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIERvY2tlck5ldHdvcmtDcmVhdGVPcHRpb25zID0ge3xcbiAgZHJpdmVyPzogc3RyaW5nLFxuICBkcml2ZXJPcHRzPzogeyBbc3RyaW5nXTogc3RyaW5nIH0sXG4gIGlwUmFuZ2U/OiBzdHJpbmcsXG4gIGdhdGV3YXlzPzogc3RyaW5nW10sXG4gIHN1Ym5ldHM/OiBzdHJpbmdbXSxcbiAgYXV4QWRkcmVzc2VzPzogc3RyaW5nW10sXG4gIGluZ3Jlc3M/OiBib29sZWFuLFxuICBpbnRlcm5hbD86IGJvb2xlYW4sXG4gIGlwdjY/OiBib29sZWFuLFxuICBsYWJlbHM/OiBzdHJpbmdbXSxcbnx9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyTmV0d29ya0NyZWF0ZShcbiAgbmV0d29ya05hbWU6IHN0cmluZyxcbiAge1xuICAgIGRyaXZlcixcbiAgICBkcml2ZXJPcHRzID0ge30sXG4gICAgaXBSYW5nZSxcbiAgICBnYXRld2F5cyA9IFtdLFxuICAgIHN1Ym5ldHMgPSBbXSxcbiAgICBhdXhBZGRyZXNzZXMgPSBbXSxcbiAgICBpbmdyZXNzLFxuICAgIGludGVybmFsLFxuICAgIGlwdjYsXG4gICAgbGFiZWxzID0gW10sXG4gIH06IERvY2tlck5ldHdvcmtDcmVhdGVPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPD9Eb2NrZXJOZXR3b3JrPiB7XG4gIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgZG9ja2VyTmV0d29ya0ZpbmQobmV0d29ya05hbWUpO1xuICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcbiAgYXdhaXQgc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAnbmV0d29yaycsXG4gICAgJ2NyZWF0ZScsXG4gICAgLi4ubGFiZWxzLmZsYXRNYXAoKGwpID0+IFsnLS1sYWJlbCcsIGxdKSxcbiAgICAuLi5nYXRld2F5cy5mbGF0TWFwKChnKSA9PiBbJy0tZ2F0ZXdheScsIGddKSxcbiAgICAuLi5zdWJuZXRzLmZsYXRNYXAoKHMpID0+IFsnLS1zdWJuZXQnLCBzXSksXG4gICAgLi4uYXV4QWRkcmVzc2VzLmZsYXRNYXAoKGEpID0+IFsnLS1hdXgtYWRkcmVzcycsIGFdKSxcbiAgICAuLi4oaXBSYW5nZSA/IFsnLS1pcC1yYW5nZScsIGlwUmFuZ2VdIDogW10pLFxuICAgIC4uLihpbmdyZXNzID8gWyctLWluZ3Jlc3MnXSA6IFtdKSxcbiAgICAuLi4oaW50ZXJuYWwgPyBbJy0taW50ZXJuYWwnXSA6IFtdKSxcbiAgICAuLi4oaXB2NiA/IFsnLS1pcHY2J10gOiBbXSksXG4gICAgLi4uKGRyaXZlciA/IFsnLWQnLCBkcml2ZXJdIDogW10pLFxuICAgIC4uLk9iamVjdC5lbnRyaWVzKGRyaXZlck9wdHMpLmZsYXRNYXAoKFtrLCB2XSkgPT4gW1xuICAgICAgJy1vJyxcbiAgICAgIGAke2t9PSR7KHY6IGFueSl9YCxcbiAgICBdKSxcbiAgICBuZXR3b3JrTmFtZSxcbiAgXSk7XG4gIHJldHVybiBkb2NrZXJOZXR3b3JrRmluZChuZXR3b3JrTmFtZSk7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhIG5ldHdvcmsgYnkgaWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgaWQgb2YgdGhlIG5ldHdvcmtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvY2tlck5ldHdvcmtSbShpZDogc3RyaW5nKSB7XG4gIGF3YWl0IHNwYXduKCdkb2NrZXInLCBbJ25ldHdvcmsnLCAncm0nLCBpZF0pO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIG5ldHdvcmtzIHdpdGggdGhlIGdpdmVuIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXR3b3JrTmFtZSBUaGUgbmFtZSBvZiB0aGUgbmV0d29ya1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyTmV0d29ya0RlbGV0ZShuZXR3b3JrTmFtZTogc3RyaW5nKSB7XG4gIGxldCBleGlzdGluZztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbmQtYXNzaWduLCBuby1hd2FpdC1pbi1sb29wXG4gIHdoaWxlICgoZXhpc3RpbmcgPSBhd2FpdCBkb2NrZXJOZXR3b3JrRmluZChuZXR3b3JrTmFtZSkpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICBhd2FpdCBleGlzdGluZy5ybSgpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb2NrZXJOZXR3b3JrQ29ubmVjdChcbiAgbmV0d29ya05hbWU6IHN0cmluZyxcbiAgY29udGFpbmVySWQ6IHN0cmluZyxcbiAgYWxpYXM/OiA/c3RyaW5nLFxuKSB7XG4gIGNvbnN0IG5ldCA9IGF3YWl0IGRvY2tlck5ldHdvcmtDcmVhdGUobmV0d29ya05hbWUpO1xuICBpZiAoIW5ldCkgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIGRvY2tlciBuZXR3b3JrJyk7XG4gIGF3YWl0IHNwYXduKCdkb2NrZXInLCBbXG4gICAgJ25ldHdvcmsnLFxuICAgICdjb25uZWN0JyxcbiAgICAuLi4oYWxpYXMgPyBbJy0tYWxpYXMnLCBhbGlhc10gOiBbXSksXG4gICAgbmV0LmlkLFxuICAgIGNvbnRhaW5lcklkLFxuICBdKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
declare type DockerVolumeInspectOutput = Record<string, any>;
|
|
2
|
+
export interface DockerVolume {
|
|
3
|
+
driver: string;
|
|
4
|
+
inspect: () => Promise<null | DockerVolumeInspectOutput>;
|
|
5
|
+
labels: string[];
|
|
6
|
+
mountPoint: string;
|
|
7
|
+
name: string;
|
|
8
|
+
rm: () => Promise<void>;
|
|
9
|
+
scope: string;
|
|
10
|
+
}
|
|
11
|
+
interface DockerVolumeLsOptions {
|
|
12
|
+
filter?: (vol: DockerVolume) => boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function unthrottledDockerVolumeLs({ filter, }?: DockerVolumeLsOptions): Promise<DockerVolume[]>;
|
|
15
|
+
export declare const dockerVolumeLs: (options?: DockerVolumeLsOptions) => undefined | Promise<DockerVolume[]>;
|
|
16
|
+
export declare function dockerVolumeFind(search: string, options?: DockerVolumeLsOptions): Promise<null | DockerVolume>;
|
|
17
|
+
export interface DockerVolumeCreateOptions {
|
|
18
|
+
driver?: string;
|
|
19
|
+
driverOpts?: Record<string, string>;
|
|
20
|
+
labels?: string[];
|
|
21
|
+
}
|
|
22
|
+
export declare function dockerVolumeCreate(name: string, { labels, driver, driverOpts }?: DockerVolumeCreateOptions): Promise<null | DockerVolume>;
|
|
23
|
+
export declare function dockerVolumeRm(id: string | string[], ignoreErrors?: boolean): Promise<void>;
|
|
24
|
+
export declare function unthrottledDockerVolumeInspect(id: string | string[]): Promise<DockerVolumeInspectOutput[]>;
|
|
25
|
+
export declare const dockerVolumeInspect: (id: string | string[]) => undefined | Promise<DockerVolumeInspectOutput[]>;
|
|
26
|
+
export {};
|
package/docker.volume.js
CHANGED
|
@@ -1,136 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var _cp = require("./cp");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
1
|
+
import { throttle } from 'lodash-es';
|
|
2
|
+
import { spawn } from './cp.js';
|
|
23
3
|
// calling this function in rapid succession can lead to errors.
|
|
24
4
|
// prefer throttled version
|
|
25
|
-
async function
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return {
|
|
45
|
-
name,
|
|
46
|
-
driver,
|
|
47
|
-
scope,
|
|
48
|
-
labels: Labels.split(',').map((l) => l.trim()),
|
|
49
|
-
mountPoint,
|
|
50
|
-
inspect: async () => (await dockerVolumeInspect(name))[0],
|
|
51
|
-
rm: async () => dockerVolumeRm(name) };
|
|
52
|
-
|
|
53
|
-
}).
|
|
54
|
-
filter((v) => v.name && (typeof filter === 'function' ? filter(v) : true));
|
|
5
|
+
export async function unthrottledDockerVolumeLs({ filter, } = {}) {
|
|
6
|
+
return (await spawn('docker', ['volume', 'ls', '--format', '{{json .}}'], {
|
|
7
|
+
captureOutput: true,
|
|
8
|
+
})).output
|
|
9
|
+
.split('\n')
|
|
10
|
+
.filter((line) => !!line.trim())
|
|
11
|
+
.map((line) => {
|
|
12
|
+
const { Driver: driver, Labels, Mountpoint: mountPoint, Name: name, Scope: scope, } = JSON.parse(line.trim());
|
|
13
|
+
return {
|
|
14
|
+
driver,
|
|
15
|
+
inspect: async () => (await dockerVolumeInspect(name))?.[0] || null,
|
|
16
|
+
labels: Labels.split(',').map((l) => l.trim()),
|
|
17
|
+
mountPoint,
|
|
18
|
+
name,
|
|
19
|
+
rm: async () => dockerVolumeRm(name),
|
|
20
|
+
scope,
|
|
21
|
+
};
|
|
22
|
+
})
|
|
23
|
+
.filter((v) => v.name && (typeof filter === 'function' ? filter(v) : true));
|
|
55
24
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
async function dockerVolumeFind(
|
|
64
|
-
search,
|
|
65
|
-
options)
|
|
66
|
-
{
|
|
67
|
-
return (await dockerVolumeLs(options)).find(
|
|
68
|
-
(v) => v.name === search || v.name.startsWith(search));
|
|
69
|
-
|
|
25
|
+
export const dockerVolumeLs = throttle(unthrottledDockerVolumeLs, 500, {
|
|
26
|
+
trailing: false,
|
|
27
|
+
});
|
|
28
|
+
export async function dockerVolumeFind(search, options) {
|
|
29
|
+
return ((await dockerVolumeLs(options))?.find((v) => v.name === search || v.name.startsWith(search)) ?? null);
|
|
70
30
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
{
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
'volume',
|
|
85
|
-
'create',
|
|
86
|
-
...labels.flatMap((l) => ['--label', l]),
|
|
87
|
-
...(driver ? ['-d', driver] : []),
|
|
88
|
-
...Object.entries(driverOpts).flatMap(([k, v]) => [
|
|
89
|
-
'-o',
|
|
90
|
-
`${k}=${v}`]),
|
|
91
|
-
|
|
92
|
-
name]);
|
|
93
|
-
|
|
94
|
-
return dockerVolumeFind(name);
|
|
31
|
+
export async function dockerVolumeCreate(name, { labels = [], driver, driverOpts = {} } = {}) {
|
|
32
|
+
const existing = await dockerVolumeFind(name);
|
|
33
|
+
if (existing)
|
|
34
|
+
return existing;
|
|
35
|
+
await spawn('docker', [
|
|
36
|
+
'volume',
|
|
37
|
+
'create',
|
|
38
|
+
...labels.flatMap((l) => ['--label', l]),
|
|
39
|
+
...(driver ? ['-d', driver] : []),
|
|
40
|
+
...Object.entries(driverOpts).flatMap(([k, v]) => ['-o', `${k}=${v}`]),
|
|
41
|
+
name,
|
|
42
|
+
]);
|
|
43
|
+
return dockerVolumeFind(name);
|
|
95
44
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (!ignoreErrors) {
|
|
106
|
-
throw new Error(`Failed to remove volume(s): ${e.message}`);
|
|
45
|
+
export async function dockerVolumeRm(id, ignoreErrors = true) {
|
|
46
|
+
const ids = Array.isArray(id) ? id : [id];
|
|
47
|
+
try {
|
|
48
|
+
await spawn('docker', ['volume', 'rm', ...ids]);
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
if (!ignoreErrors) {
|
|
52
|
+
throw new Error(`Failed to remove volume(s): ${e.message}`);
|
|
53
|
+
}
|
|
107
54
|
}
|
|
108
|
-
}
|
|
109
55
|
}
|
|
110
|
-
|
|
111
56
|
// calling this function in rapid succession can lead to errors.
|
|
112
57
|
// prefer throttled version
|
|
113
|
-
async function
|
|
114
|
-
id)
|
|
115
|
-
{
|
|
116
|
-
const ids = Array.isArray(id) ? id : [id];
|
|
117
|
-
return (
|
|
118
|
-
JSON.parse(
|
|
119
|
-
(
|
|
120
|
-
await (0, _cp.spawn)(
|
|
121
|
-
'docker',
|
|
122
|
-
['volume', 'inspect', '--format', '{{json .}}', ...ids],
|
|
123
|
-
{ captureOutput: true })).
|
|
124
|
-
|
|
125
|
-
trim()) ||
|
|
126
|
-
[]);
|
|
127
|
-
|
|
58
|
+
export async function unthrottledDockerVolumeInspect(id) {
|
|
59
|
+
const ids = Array.isArray(id) ? id : [id];
|
|
60
|
+
return (JSON.parse((await spawn('docker', ['volume', 'inspect', '--format', '{{json .}}', ...ids], { captureOutput: true })).output.trim()) || []);
|
|
128
61
|
}
|
|
129
|
-
|
|
130
|
-
const dockerVolumeInspect =
|
|
131
|
-
|
|
132
|
-
(0, _throttle.default)(
|
|
133
|
-
_dockerVolumeInspect,
|
|
134
|
-
500,
|
|
135
|
-
{ trailing: true });exports.dockerVolumeInspect = dockerVolumeInspect;
|
|
136
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb2NrZXIudm9sdW1lLmpzIl0sIm5hbWVzIjpbIl9kb2NrZXJWb2x1bWVMcyIsImZpbHRlciIsImNhcHR1cmVPdXRwdXQiLCJzcGxpdCIsImxpbmUiLCJ0cmltIiwibWFwIiwiTmFtZSIsIm5hbWUiLCJEcml2ZXIiLCJkcml2ZXIiLCJTY29wZSIsInNjb3BlIiwiTGFiZWxzIiwiTW91bnRwb2ludCIsIm1vdW50UG9pbnQiLCJKU09OIiwicGFyc2UiLCJsYWJlbHMiLCJsIiwiaW5zcGVjdCIsImRvY2tlclZvbHVtZUluc3BlY3QiLCJybSIsImRvY2tlclZvbHVtZVJtIiwidiIsImRvY2tlclZvbHVtZUxzIiwidHJhaWxpbmciLCJkb2NrZXJWb2x1bWVGaW5kIiwic2VhcmNoIiwib3B0aW9ucyIsImZpbmQiLCJzdGFydHNXaXRoIiwiZG9ja2VyVm9sdW1lQ3JlYXRlIiwiZHJpdmVyT3B0cyIsImV4aXN0aW5nIiwiZmxhdE1hcCIsIk9iamVjdCIsImVudHJpZXMiLCJrIiwiaWQiLCJpZ25vcmVFcnJvcnMiLCJpZHMiLCJBcnJheSIsImlzQXJyYXkiLCJlIiwiRXJyb3IiLCJtZXNzYWdlIiwiX2RvY2tlclZvbHVtZUluc3BlY3QiXSwibWFwcGluZ3MiOiI7QUFDQTtBQUNBLDBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTtBQUNBO0FBQ08sZUFBZUEsZUFBZixDQUErQjtBQUNwQ0MsRUFBQUEsTUFEb0M7QUFFWCxFQUZwQixFQUVpRDtBQUN0RCxTQUFPO0FBQ0wsUUFBTSxlQUFNLFFBQU4sRUFBZ0IsQ0FBQyxRQUFELEVBQVcsSUFBWCxFQUFpQixVQUFqQixFQUE2QixZQUE3QixDQUFoQixFQUE0RDtBQUNoRUMsSUFBQUEsYUFBYSxFQUFFLElBRGlELEVBQTVELENBREQ7OztBQUtKQyxFQUFBQSxLQUxJLENBS0UsSUFMRjtBQU1KRixFQUFBQSxNQU5JLENBTUcsQ0FBQ0csSUFBRCxLQUFVLENBQUMsQ0FBQ0EsSUFBSSxDQUFDQyxJQUFMLEVBTmY7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QSxFQUFELENBQXJDO0FBQ0EsTUFBSTtBQUNGLFVBQU0sZUFBTSxRQUFOLEVBQWdCLENBQUMsUUFBRCxFQUFXLElBQVgsRUFBaUIsR0FBR0UsR0FBcEIsQ0FBaEIsQ0FBTjtBQUNELEdBRkQsQ0FFRSxPQUFPRyxDQUFQLEVBQVU7QUFDVixRQUFJLENBQUNKLFlBQUwsRUFBbUI7QUFDakIsWUFBTSxJQUFJSyxLQUFKLENBQVcsK0JBQThCRCxDQUFDLENBQUNFLE9BQVEsRUFBbkQsQ0FBTjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRDtBQUNBO0FBQ08sZUFBZUMsb0JBQWY7QUFDTFIsRUFESztBQUVpQztBQUN0QyxRQUFNRSxHQUFHLEdBQUdDLEtBQUssQ0FBQ0MsT0FBTixDQUFjSixFQUFkLElBQW9CQSxFQUFwQixHQUF5QixDQUFDQSxFQUFELENBQXJDO0FBQ0E7QUFDRXZCLElBQUFBLElBQUksQ0FBQ0MsS0FBTDtBQUNFO0FBQ0UsVUFBTTtBQUNKLFlBREk7QUFFSixLQUFDLFFBQUQsRUFBVyxTQUFYLEVBQXNCLFVBQXRCLEVBQWtDLFlBQWxDLEVBQWdELEdBQUd3QixHQUFuRCxDQUZJO0FBR0osTUFBRXZDLGFBQWEsRUFBRSxJQUFqQixFQUhJLENBRFI7O0FBTUVHLElBQUFBLElBTkYsRUFERjtBQVFLLE1BVFA7O0FBV0Q7O0FBRU0sTUFBTWdCLG1CQUU0Qjs7QUFBRztBQUMxQzBCLG9CQUQwQztBQUUxQyxHQUYwQztBQUcxQyxFQUFFckIsUUFBUSxFQUFFLElBQVosRUFIMEMsQ0FGckMsQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSAnbG9kYXNoL3Rocm90dGxlJztcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnLi9jcCc7XG5cbnR5cGUgRG9ja2VyVm9sdW1lSW5zcGVjdE91dHB1dCA9IHtcbiAgW3N0cmluZ106IGFueSxcbn07XG5cbmV4cG9ydCB0eXBlIERvY2tlclZvbHVtZSA9IHt8XG4gIG5hbWU6IHN0cmluZyxcbiAgZHJpdmVyOiBzdHJpbmcsXG4gIHNjb3BlOiBzdHJpbmcsXG4gIGxhYmVsczogc3RyaW5nW10sXG4gIG1vdW50UG9pbnQ6IHN0cmluZyxcbiAgaW5zcGVjdDogKCkgPT4gUHJvbWlzZTxEb2NrZXJWb2x1bWVJbnNwZWN0T3V0cHV0PixcbiAgcm06ICgpID0+IFByb21pc2U8dm9pZD4sXG58fTtcblxudHlwZSBEb2NrZXJWb2x1bWVMc09wdGlvbnMgPSB7XG4gIGZpbHRlcj86ICh2b2w6IERvY2tlclZvbHVtZSkgPT4gYm9vbGVhbixcbn07XG5cbi8vIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpbiByYXBpZCBzdWNjZXNzaW9uIGNhbiBsZWFkIHRvIGVycm9ycy5cbi8vIHByZWZlciB0aHJvdHRsZWQgdmVyc2lvblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9kb2NrZXJWb2x1bWVMcyh7XG4gIGZpbHRlcixcbn06IERvY2tlclZvbHVtZUxzT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxEb2NrZXJWb2x1bWVbXT4ge1xuICByZXR1cm4gKFxuICAgIGF3YWl0IHNwYXduKCdkb2NrZXInLCBbJ3ZvbHVtZScsICdscycsICctLWZvcm1hdCcsICd7e2pzb24gLn19J10sIHtcbiAgICAgIGNhcHR1cmVPdXRwdXQ6IHRydWUsXG4gICAgfSlcbiAgKVxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAuZmlsdGVyKChsaW5lKSA9PiAhIWxpbmUudHJpbSgpKVxuICAgIC5tYXAoKGxpbmUpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgTmFtZTogbmFtZSxcbiAgICAgICAgRHJpdmVyOiBkcml2ZXIsXG4gICAgICAgIFNjb3BlOiBzY29wZSxcbiAgICAgICAgTGFiZWxzLFxuICAgICAgICBNb3VudHBvaW50OiBtb3VudFBvaW50LFxuICAgICAgfSA9IEpTT04ucGFyc2UobGluZS50cmltKCkpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBkcml2ZXIsXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBsYWJlbHM6IExhYmVscy5zcGxpdCgnLCcpLm1hcCgobCkgPT4gbC50cmltKCkpLFxuICAgICAgICBtb3VudFBvaW50LFxuICAgICAgICBpbnNwZWN0OiBhc3luYyAoKSA9PiAoYXdhaXQgZG9ja2VyVm9sdW1lSW5zcGVjdChuYW1lKSlbMF0sXG4gICAgICAgIHJtOiBhc3luYyAoKSA9PiBkb2NrZXJWb2x1bWVSbShuYW1lKSxcbiAgICAgIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKCh2KSA9PiB2Lm5hbWUgJiYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicgPyBmaWx0ZXIodikgOiB0cnVlKSk7XG59XG5cbmV4cG9ydCBjb25zdCBkb2NrZXJWb2x1bWVMczogKFxuICBEb2NrZXJWb2x1bWVMc09wdGlvbnMgfCB2b2lkLFxuKSA9PiBQcm9taXNlPERvY2tlclZvbHVtZVtdPiA9IHRocm90dGxlKF9kb2NrZXJWb2x1bWVMcywgNTAwLCB7XG4gIHRyYWlsaW5nOiBmYWxzZSxcbn0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyVm9sdW1lRmluZChcbiAgc2VhcmNoOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBEb2NrZXJWb2x1bWVMc09wdGlvbnMsXG4pOiBQcm9taXNlPD9Eb2NrZXJWb2x1bWU+IHtcbiAgcmV0dXJuIChhd2FpdCBkb2NrZXJWb2x1bWVMcyhvcHRpb25zKSkuZmluZChcbiAgICAodikgPT4gdi5uYW1lID09PSBzZWFyY2ggfHwgdi5uYW1lLnN0YXJ0c1dpdGgoc2VhcmNoKSxcbiAgKTtcbn1cblxuZXhwb3J0IHR5cGUgRG9ja2VyVm9sdW1lQ3JlYXRlT3B0aW9ucyA9IHt8XG4gIGxhYmVscz86IHN0cmluZ1tdLFxuICBkcml2ZXI/OiBzdHJpbmcsXG4gIGRyaXZlck9wdHM/OiB7IFtzdHJpbmddOiBzdHJpbmcgfSxcbnx9O1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvY2tlclZvbHVtZUNyZWF0ZShcbiAgbmFtZTogc3RyaW5nLFxuICB7IGxhYmVscyA9IFtdLCBkcml2ZXIsIGRyaXZlck9wdHMgPSB7fSB9OiBEb2NrZXJWb2x1bWVDcmVhdGVPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPD9Eb2NrZXJWb2x1bWU+IHtcbiAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBkb2NrZXJWb2x1bWVGaW5kKG5hbWUpO1xuICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcbiAgYXdhaXQgc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAndm9sdW1lJyxcbiAgICAnY3JlYXRlJyxcbiAgICAuLi5sYWJlbHMuZmxhdE1hcCgobCkgPT4gWyctLWxhYmVsJywgbF0pLFxuICAgIC4uLihkcml2ZXIgPyBbJy1kJywgZHJpdmVyXSA6IFtdKSxcbiAgICAuLi5PYmplY3QuZW50cmllcyhkcml2ZXJPcHRzKS5mbGF0TWFwKChbaywgdl0pID0+IFtcbiAgICAgICctbycsXG4gICAgICBgJHtrfT0keyh2OiBhbnkpfWAsXG4gICAgXSksXG4gICAgbmFtZSxcbiAgXSk7XG4gIHJldHVybiBkb2NrZXJWb2x1bWVGaW5kKG5hbWUpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyVm9sdW1lUm0oXG4gIGlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgaWdub3JlRXJyb3JzOiBib29sZWFuID0gdHJ1ZSxcbikge1xuICBjb25zdCBpZHMgPSBBcnJheS5pc0FycmF5KGlkKSA/IGlkIDogW2lkXTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBzcGF3bignZG9ja2VyJywgWyd2b2x1bWUnLCAncm0nLCAuLi5pZHNdKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghaWdub3JlRXJyb3JzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZW1vdmUgdm9sdW1lKHMpOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGluIHJhcGlkIHN1Y2Nlc3Npb24gY2FuIGxlYWQgdG8gZXJyb3JzLlxuLy8gcHJlZmVyIHRocm90dGxlZCB2ZXJzaW9uXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2RvY2tlclZvbHVtZUluc3BlY3QoXG4gIGlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbik6IFByb21pc2U8RG9ja2VyVm9sdW1lSW5zcGVjdE91dHB1dFtdPiB7XG4gIGNvbnN0IGlkcyA9IEFycmF5LmlzQXJyYXkoaWQpID8gaWQgOiBbaWRdO1xuICByZXR1cm4gKFxuICAgIEpTT04ucGFyc2UoXG4gICAgICAoXG4gICAgICAgIGF3YWl0IHNwYXduKFxuICAgICAgICAgICdkb2NrZXInLFxuICAgICAgICAgIFsndm9sdW1lJywgJ2luc3BlY3QnLCAnLS1mb3JtYXQnLCAne3tqc29uIC59fScsIC4uLmlkc10sXG4gICAgICAgICAgeyBjYXB0dXJlT3V0cHV0OiB0cnVlIH0sXG4gICAgICAgIClcbiAgICAgICkudHJpbSgpLFxuICAgICkgfHwgW11cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IGRvY2tlclZvbHVtZUluc3BlY3Q6IChcbiAgc3RyaW5nIHwgc3RyaW5nW10sXG4pID0+IFByb21pc2U8RG9ja2VyVm9sdW1lSW5zcGVjdE91dHB1dFtdPiA9IHRocm90dGxlKFxuICBfZG9ja2VyVm9sdW1lSW5zcGVjdCxcbiAgNTAwLFxuICB7IHRyYWlsaW5nOiB0cnVlIH0sXG4pO1xuIl19
|
|
62
|
+
export const dockerVolumeInspect = throttle(unthrottledDockerVolumeInspect, 500, { trailing: true });
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
interface CommonDockerCleanupOptions {
|
|
2
|
+
/** print matched items to console instead of deleting */
|
|
3
|
+
dryRun?: boolean;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Purge stopped containers
|
|
7
|
+
*/
|
|
8
|
+
export declare const dockerContainerCleanup: ({ dryRun, }?: CommonDockerCleanupOptions) => Promise<void>;
|
|
9
|
+
interface DockerImageCleanupOptions extends CommonDockerCleanupOptions {
|
|
10
|
+
/** Image ids known to be produced by this build */
|
|
11
|
+
buildImageIds?: string[];
|
|
12
|
+
/** Explicit image names/ids to delete unconditionally */
|
|
13
|
+
images?: string[];
|
|
14
|
+
/**
|
|
15
|
+
* ignore default exclusions of :latest* and images < 1hr old
|
|
16
|
+
* this will delete all images in the given repos
|
|
17
|
+
*/
|
|
18
|
+
purgeAll?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* looks for other builds of the same repos
|
|
21
|
+
* this will still exclude :latest* and images < 1hr old
|
|
22
|
+
* useful to clean up after past builds that failed to clean themselves properly
|
|
23
|
+
*/
|
|
24
|
+
purgeOld?: boolean;
|
|
25
|
+
/** Image repositories to clean (defaults to the one configured in package.json) */
|
|
26
|
+
repos?: string[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Purge docker images created during build process
|
|
30
|
+
*/
|
|
31
|
+
export declare const dockerImageCleanup: ({ repos, buildImageIds, images, purgeAll, purgeOld, dryRun, }?: DockerImageCleanupOptions) => Promise<void>;
|
|
32
|
+
interface DockerCleanupOptions extends DockerImageCleanupOptions, CommonDockerCleanupOptions {
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Purge docker images created during build process
|
|
36
|
+
*/
|
|
37
|
+
export declare const dockerCleanup: ({ dryRun, ...rest }?: DockerCleanupOptions) => Promise<void>;
|
|
38
|
+
export default dockerCleanup;
|