build-strap 3.0.0-dev.42 → 4.0.0-dev.2
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 +34 -0
- package/npm.js +97 -138
- 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 +26 -0
- package/yarn.js +70 -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
package/dockerCleanup.js
CHANGED
|
@@ -1,152 +1,77 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var _docker2 = require("./docker.container");
|
|
12
|
-
var _run = require("./run");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
|
|
13
|
-
|
|
1
|
+
import { uniq } from 'lodash-es';
|
|
2
|
+
import moment from 'moment';
|
|
3
|
+
import { dockerContainerLs } from './docker.container.js';
|
|
4
|
+
import { dockerImages, dockerRmi, getDockerRepo, getDockerTags, getUntaggedDockerIds, } from './docker.js';
|
|
5
|
+
import { buildLog } from './run.js';
|
|
14
6
|
// flattens arrays of promises and/or promises for arrays
|
|
15
7
|
// into a single array of (awaited) values
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
8
|
+
async function flatten(input) {
|
|
9
|
+
const result = await input;
|
|
10
|
+
return Array.isArray(result)
|
|
11
|
+
? [].concat(...(await Promise.all(result.map(flatten))))
|
|
12
|
+
: result;
|
|
13
|
+
}
|
|
32
14
|
/**
|
|
33
15
|
* Purge stopped containers
|
|
34
16
|
*/
|
|
35
|
-
const dockerContainerCleanup = async ({
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
17
|
+
export const dockerContainerCleanup = async ({ dryRun = process.argv.includes('--dry-run'), } = {}) => {
|
|
18
|
+
const toClean = await dockerContainerLs({
|
|
19
|
+
all: true,
|
|
20
|
+
filter: (c) => c.exited,
|
|
21
|
+
});
|
|
22
|
+
if (dryRun) {
|
|
23
|
+
if (toClean) {
|
|
24
|
+
buildLog(`Containers to delete (dry run):\n ${toClean
|
|
25
|
+
.map((c) => c.id)
|
|
26
|
+
.join('\n ')}`);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
buildLog('No containers to delete (dry run)');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else if (toClean) {
|
|
33
|
+
await Promise.all(toClean.map(async (c) => c.rm(true)));
|
|
34
|
+
}
|
|
35
|
+
};
|
|
74
36
|
/**
|
|
75
37
|
* Purge docker images created during build process
|
|
76
38
|
*/
|
|
77
|
-
const dockerImageCleanup = async ({
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
...(await flatten(
|
|
106
|
-
repos.map(async (r) => (0, _docker.getUntaggedDockerIds)(r, filterOld)))),
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
// images with no repo and no tag
|
|
110
|
-
...(
|
|
111
|
-
await (0, _docker.dockerImages)(
|
|
112
|
-
null,
|
|
113
|
-
(m) => m.repository === '<none>' && m.tag === '<none>' && filterOld(m))).
|
|
114
|
-
|
|
115
|
-
map((m) => m.id),
|
|
116
|
-
|
|
117
|
-
// any leftover tags from prior builds (only if purgeAll or purgeOld)
|
|
118
|
-
...(purgeAll || purgeOld ?
|
|
119
|
-
await flatten(
|
|
120
|
-
repos.map(async (r) => (0, _docker.getDockerTags)(null, r, true, filterOld))) :
|
|
121
|
-
|
|
122
|
-
[])]);
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
if (dryRun) {
|
|
126
|
-
(0, _run.buildLog)(`Images to delete (dry run):\n ${uniqueList.join('\n ')}`);
|
|
127
|
-
} else {
|
|
128
|
-
await (0, _docker.dockerRmi)(uniqueList, true);
|
|
129
|
-
}
|
|
130
|
-
};exports.dockerImageCleanup = dockerImageCleanup;
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
39
|
+
export const dockerImageCleanup = async ({ repos = [getDockerRepo()], buildImageIds = [], images = [], purgeAll = process.argv.includes('--purge-all'), purgeOld = !process.argv.includes('--keep-old'), dryRun = process.argv.includes('--dry-run'), } = {}) => {
|
|
40
|
+
// only match images without a :latest tag
|
|
41
|
+
const filterLatest = (m) => purgeAll || !m.tag.match(/^latest(-\w+)?$/);
|
|
42
|
+
// only match images more than an hour old, AND without a :latest* tag
|
|
43
|
+
const filterOld = (m) => purgeAll ||
|
|
44
|
+
(filterLatest(m) && moment().subtract(1, 'h').isAfter(m.created));
|
|
45
|
+
const uniqueList = uniq([
|
|
46
|
+
// the things that we know were just built by us
|
|
47
|
+
// remove all tags from the given repos with a matching `buildImageIds`, except for :latest*
|
|
48
|
+
...(await flatten(repos.map((r) => buildImageIds.map(async (b) => getDockerTags(b, r, true, filterLatest))))),
|
|
49
|
+
// unconditionally delete explicitly passed images/ids
|
|
50
|
+
...images,
|
|
51
|
+
// images in the given `repos` without a tag, older than 1hr
|
|
52
|
+
...(await flatten(repos.map(async (r) => getUntaggedDockerIds(r, filterOld)))),
|
|
53
|
+
// images with no repo and no tag
|
|
54
|
+
...(await dockerImages(null, (m) => m.repository === '<none>' && m.tag === '<none>' && filterOld(m))).map((m) => m.id),
|
|
55
|
+
// any leftover tags from prior builds (only if purgeAll or purgeOld)
|
|
56
|
+
...(purgeAll || purgeOld
|
|
57
|
+
? await flatten(repos.map(async (r) => getDockerTags(null, r, true, filterOld)))
|
|
58
|
+
: []),
|
|
59
|
+
]);
|
|
60
|
+
if (dryRun) {
|
|
61
|
+
buildLog(`Images to delete (dry run):\n ${uniqueList.join('\n ')}`);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
await dockerRmi(uniqueList, true);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
137
67
|
/**
|
|
138
68
|
* Purge docker images created during build process
|
|
139
69
|
*/
|
|
140
|
-
const dockerCleanup = async ({
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
};exports.dockerCleanup = dockerCleanup;var _default =
|
|
150
|
-
|
|
151
|
-
dockerCleanup;exports.default = _default;
|
|
152
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb2NrZXJDbGVhbnVwLmpzIl0sIm5hbWVzIjpbImZsYXR0ZW4iLCJpbnB1dCIsInJlc3VsdCIsIkFycmF5IiwiaXNBcnJheSIsImNvbmNhdCIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJkb2NrZXJDb250YWluZXJDbGVhbnVwIiwiZHJ5UnVuIiwicHJvY2VzcyIsImFyZ3YiLCJpbmNsdWRlcyIsInRvQ2xlYW4iLCJmaWx0ZXIiLCJjIiwiZXhpdGVkIiwiaWQiLCJqb2luIiwicm0iLCJkb2NrZXJJbWFnZUNsZWFudXAiLCJyZXBvcyIsImJ1aWxkSW1hZ2VJZHMiLCJpbWFnZXMiLCJwdXJnZUFsbCIsInB1cmdlT2xkIiwiZmlsdGVyTGF0ZXN0IiwibSIsInRhZyIsIm1hdGNoIiwiZmlsdGVyT2xkIiwiY3JlYXRlZCIsIkRhdGUiLCJub3ciLCJ1bmlxdWVMaXN0IiwiciIsImIiLCJyZXBvc2l0b3J5IiwiZG9ja2VyQ2xlYW51cCIsInJlc3QiXSwibWFwcGluZ3MiOiI7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0EsNEI7O0FBRUE7QUFDQTtBQUNBLE1BQU1BLE9BQU8sR0FBRyxPQUFPQyxLQUFQLEtBQWlCO0FBQy9CLFFBQU1DLE1BQU0sR0FBRyxNQUFNRCxLQUFyQjtBQUNBLFNBQU9FLEtBQUssQ0FBQ0MsT0FBTixDQUFjRixNQUFkO0FBQ0gsS0FBR0csTUFBSCxDQUFVLElBQUksTUFBTUMsT0FBTyxDQUFDQyxHQUFSLENBQVlMLE1BQU0sQ0FBQ00sR0FBUCxDQUFXUixPQUFYLENBQVosQ0FBVixDQUFWLENBREc7QUFFSEUsRUFBQUEsTUFGSjtBQUdELENBTEQ7Ozs7Ozs7Ozs7O0FBZ0JBO0FBQ0E7QUFDQTtBQUNPLE1BQU1PLHNCQUFzQixHQUFHLE9BQU87QUFDM0NDLEVBQUFBLE1BQU0sR0FBR0MsT0FBTyxDQUFDQyxJQUFSLENBQWFDLFFBQWIsQ0FBc0IsV0FBdEIsQ0FEa0M7QUFFVixFQUZHLEtBRUk7QUFDeEMsUUFBTUMsT0FBTyxHQUFH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QixFQUF1QixJQUF2QixFQUE2QkwsU0FBN0IsQ0FBdkIsQ0FEVyxDQURiOztBQUlBLElBSkosQ0ExQnNCLENBQUwsQ0FBbkI7OztBQWlDQSxNQUFJckIsTUFBSixFQUFZO0FBQ1YsdUJBQVUsa0NBQWlDeUIsVUFBVSxDQUFDaEIsSUFBWCxDQUFnQixNQUFoQixDQUF3QixFQUFuRTtBQUNELEdBRkQsTUFFTztBQUNMLFVBQU0sdUJBQVVnQixVQUFWLEVBQXNCLElBQXRCLENBQU47QUFDRDtBQUNGLENBckRNLEM7Ozs7Ozs7QUE0RFA7QUFDQTtBQUNBO0FBQ08sTUFBTUksYUFBYSxHQUFHLE9BQU87QUFDbEM3QixFQUFBQSxNQURrQztBQUVsQyxLQUFHOEIsSUFGK0I7QUFHVixFQUhHLEtBR0k7QUFDL0IsUUFBTS9CLHNCQUFzQixDQUFDLEVBQUVDLE1BQUYsRUFBRCxDQUE1QjtBQUNBLFFBQU1XLGtCQUFrQixDQUFDO0FBQ3ZCWCxJQUFBQSxNQUR1QjtBQUV2QixPQUFHOEIsSUFGb0IsRUFBRCxDQUF4Qjs7QUFJRCxDQVRNLEM7O0FBV1FELGEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoL3VuaXEnO1xuaW1wb3J0IHtcbiAgZG9ja2VySW1hZ2VzLFxuICBkb2NrZXJSbWksXG4gIGdldFVudGFnZ2VkRG9ja2VySWRzLFxuICBnZXREb2NrZXJUYWdzLFxuICBnZXREb2NrZXJSZXBvLFxufSBmcm9tICcuL2RvY2tlcic7XG5pbXBvcnQgdHlwZSB7IERvY2tlckltYWdlLCBEb2NrZXJJbWFnZUZpbHRlciB9IGZyb20gJy4vZG9ja2VyJztcbmltcG9ydCB7IGRvY2tlckNvbnRhaW5lckxzIH0gZnJvbSAnLi9kb2NrZXIuY29udGFpbmVyJztcbmltcG9ydCB7IGJ1aWxkTG9nIH0gZnJvbSAnLi9ydW4nO1xuXG4vLyBmbGF0dGVucyBhcnJheXMgb2YgcHJvbWlzZXMgYW5kL29yIHByb21pc2VzIGZvciBhcnJheXNcbi8vIGludG8gYSBzaW5nbGUgYXJyYXkgb2YgKGF3YWl0ZWQpIHZhbHVlc1xuY29uc3QgZmxhdHRlbiA9IGFzeW5jIChpbnB1dCkgPT4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnB1dDtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVzdWx0KVxuICAgID8gW10uY29uY2F0KC4uLihhd2FpdCBQcm9taXNlLmFsbChyZXN1bHQubWFwKGZsYXR0ZW4pKSkpXG4gICAgOiByZXN1bHQ7XG59O1xuXG50eXBlIENvbW1vbkRvY2tlckNsZWFudXBPcHRpb25zID0ge3xcbiAgLyoqIHByaW50IG1hdGNoZWQgaXRlbXMgdG8gY29uc29sZSBpbnN0ZWFkIG9mIGRlbGV0aW5nICovXG4gIGRyeVJ1bj86IGJvb2xlYW4sXG58fTtcblxudHlwZSBEb2NrZXJDb250YWluZXJDbGVhbnVwT3B0aW9ucyA9IHt8XG4gIC4uLkNvbW1vbkRvY2tlckNsZWFudXBPcHRpb25zLFxufH07XG5cbi8qKlxuICogUHVyZ2Ugc3RvcHBlZCBjb250YWluZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBkb2NrZXJDb250YWluZXJDbGVhbnVwID0gYXN5bmMgKHtcbiAgZHJ5UnVuID0gcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRyeS1ydW4nKSxcbn06IERvY2tlckNvbnRhaW5lckNsZWFudXBPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgdG9DbGVhbiA9IGF3YWl0IGRvY2tlckNvbnRhaW5lckxzKHtcbiAgICBhbGw6IHRydWUsXG4gICAgZmlsdGVyOiAoYykgPT4gYy5leGl0ZWQsXG4gIH0pO1xuICBpZiAoZHJ5UnVuKSB7XG4gICAgYnVpbGRMb2coXG4gICAgICBgQ29udGFpbmVycyB0byBkZWxldGUgKGRyeSBydW4pOlxcbiAgJHt0b0NsZWFuXG4gICAgICAgIC5tYXAoKGMpID0+IGMuaWQpXG4gICAgICAgIC5qb2luKCdcXG4gICcpfWAsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0b0NsZWFuLm1hcChhc3luYyAoYykgPT4gYy5ybSh0cnVlKSkpO1xuICB9XG59O1xuXG50eXBlIERvY2tlckltYWdlQ2xlYW51cE9wdGlvbnMgPSB7fFxuICAuLi5Db21tb25Eb2NrZXJDbGVhbnVwT3B0aW9ucyxcbiAgLyoqIEltYWdlIHJlcG9zaXRvcmllcyB0byBjbGVhbiAoZGVmYXVsdHMgdG8gdGhlIG9uZSBjb25maWd1cmVkIGluIHBhY2thZ2UuanNvbikgKi9cbiAgcmVwb3M/OiBzdHJpbmdbXSxcbiAgLyoqIEltYWdlIGlkcyBrbm93biB0byBiZSBwcm9kdWNlZCBieSB0aGlzIGJ1aWxkICovXG4gIGJ1aWxkSW1hZ2VJZHM/OiBzdHJpbmdbXSxcbiAgLyoqIEV4cGxpY2l0IGltYWdlIG5hbWVzL2lkcyB0byBkZWxldGUgdW5jb25kaXRpb25hbGx5ICovXG4gIGltYWdlcz86IHN0cmluZ1tdLFxuICAvKipcbiAgICogaWdub3JlIGRlZmF1bHQgZXhjbHVzaW9ucyBvZiA6bGF0ZXN0KiBhbmQgaW1hZ2VzIDwgMWhyIG9sZFxuICAgKiB0aGlzIHdpbGwgZGVsZXRlIGFsbCBpbWFnZXMgaW4gdGhlIGdpdmVuIHJlcG9zXG4gICAqL1xuICBwdXJnZUFsbD86IGJvb2xlYW4sXG4gIC8qKlxuICAgKiBsb29rcyBmb3Igb3RoZXIgYnVpbGRzIG9mIHRoZSBzYW1lIHJlcG9zXG4gICAqIHRoaXMgd2lsbCBzdGlsbCBleGNsdWRlIDpsYXRlc3QqIGFuZCBpbWFnZXMgPCAxaHIgb2xkXG4gICAqIHVzZWZ1bCB0byBjbGVhbiB1cCBhZnRlciBwYXN0IGJ1aWxkcyB0aGF0IGZhaWxlZCB0byBjbGVhbiB0aGVtc2VsdmVzIHByb3Blcmx5XG4gICAqL1xuICBwdXJnZU9sZD86IGJvb2xlYW4sXG58fTtcblxuLyoqXG4gKiBQdXJnZSBkb2NrZXIgaW1hZ2VzIGNyZWF0ZWQgZHVyaW5nIGJ1aWxkIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGNvbnN0IGRvY2tlckltYWdlQ2xlYW51cCA9IGFzeW5jICh7XG4gIHJlcG9zID0gW2dldERvY2tlclJlcG8oKV0sXG4gIGJ1aWxkSW1hZ2VJZHMgPSBbXSxcbiAgaW1hZ2VzID0gW10sXG4gIHB1cmdlQWxsID0gcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLXB1cmdlLWFsbCcpLFxuICBwdXJnZU9sZCA9ICFwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0ta2VlcC1vbGQnKSxcbiAgZHJ5UnVuID0gcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRyeS1ydW4nKSxcbn06IERvY2tlckltYWdlQ2xlYW51cE9wdGlvbnMgPSB7fSkgPT4ge1xuICAvLyBvbmx5IG1hdGNoIGltYWdlcyB3aXRob3V0IGEgOmxhdGVzdCB0YWdcbiAgY29uc3QgZmlsdGVyTGF0ZXN0OiBEb2NrZXJJbWFnZUZpbHRlciA9IChtOiBEb2NrZXJJbWFnZSkgPT5cbiAgICBwdXJnZUFsbCB8fCAhbS50YWcubWF0Y2goL15sYXRlc3QoLVxcdyspPyQvKTtcbiAgLy8gb25seSBtYXRjaCBpbWFnZXMgbW9yZSB0aGFuIGFuIGhvdXIgb2xkLCBBTkQgd2l0aG91dCBhIDpsYXRlc3QqIHRhZ1xuICBjb25zdCBmaWx0ZXJPbGQ6IERvY2tlckltYWdlRmlsdGVyID0gKG06IERvY2tlckltYWdlKSA9PlxuICAgIHB1cmdlQWxsIHx8IChmaWx0ZXJMYXRlc3QobSkgJiYgbS5jcmVhdGVkIDwgRGF0ZS5ub3coKSAtIDEwMDAgKiA2MCAqIDYwKTtcblxuICBjb25zdCB1bmlxdWVMaXN0ID0gdW5pcShbXG4gICAgLy8gdGhlIHRoaW5ncyB0aGF0IHdlIGtub3cgd2VyZSBqdXN0IGJ1aWx0IGJ5IHVzXG4gICAgLy8gcmVtb3ZlIGFsbCB0YWdzIGZyb20gdGhlIGdpdmVuIHJlcG9zIHdpdGggYSBtYXRjaGluZyBgYnVpbGRJbWFnZUlkc2AsIGV4Y2VwdCBmb3IgOmxhdGVzdCpcbiAgICAuLi4oYXdhaXQgZmxhdHRlbihcbiAgICAgIHJlcG9zLm1hcCgocikgPT5cbiAgICAgICAgYnVpbGRJbWFnZUlkcy5tYXAoYXN5bmMgKGIpID0+IGdldERvY2tlclRhZ3MoYiwgciwgdHJ1ZSwgZmlsdGVyTGF0ZXN0KSksXG4gICAgICApLFxuICAgICkpLFxuXG4gICAgLy8gdW5jb25kaXRpb25hbGx5IGRlbGV0ZSBleHBsaWNpdGx5IHBhc3NlZCBpbWFnZXMvaWRzXG4gICAgLi4uaW1hZ2VzLFxuXG4gICAgLy8gaW1hZ2VzIGluIHRoZSBnaXZlbiBgcmVwb3NgIHdpdGhvdXQgYSB0YWcsIG9sZGVyIHRoYW4gMWhyXG4gICAgLi4uKGF3YWl0IGZsYXR0ZW4oXG4gICAgICByZXBvcy5tYXAoYXN5bmMgKHIpID0+IGdldFVudGFnZ2VkRG9ja2VySWRzKHIsIGZpbHRlck9sZCkpLFxuICAgICkpLFxuXG4gICAgLy8gaW1hZ2VzIHdpdGggbm8gcmVwbyBhbmQgbm8gdGFnXG4gICAgLi4uKFxuICAgICAgYXdhaXQgZG9ja2VySW1hZ2VzKFxuICAgICAgICBudWxsLFxuICAgICAgICAobSkgPT4gbS5yZXBvc2l0b3J5ID09PSAnPG5vbmU+JyAmJiBtLnRhZyA9PT0gJzxub25lPicgJiYgZmlsdGVyT2xkKG0pLFxuICAgICAgKVxuICAgICkubWFwKChtKSA9PiBtLmlkKSxcblxuICAgIC8vIGFueSBsZWZ0b3ZlciB0YWdzIGZyb20gcHJpb3IgYnVpbGRzIChvbmx5IGlmIHB1cmdlQWxsIG9yIHB1cmdlT2xkKVxuICAgIC4uLihwdXJnZUFsbCB8fCBwdXJnZU9sZFxuICAgICAgPyBhd2FpdCBmbGF0dGVuKFxuICAgICAgICAgIHJlcG9zLm1hcChhc3luYyAocikgPT4gZ2V0RG9ja2VyVGFncyhudWxsLCByLCB0cnVlLCBmaWx0ZXJPbGQpKSxcbiAgICAgICAgKVxuICAgICAgOiBbXSksXG4gIF0pO1xuXG4gIGlmIChkcnlSdW4pIHtcbiAgICBidWlsZExvZyhgSW1hZ2VzIHRvIGRlbGV0ZSAoZHJ5IHJ1bik6XFxuICAke3VuaXF1ZUxpc3Quam9pbignXFxuICAnKX1gKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBkb2NrZXJSbWkodW5pcXVlTGlzdCwgdHJ1ZSk7XG4gIH1cbn07XG5cbnR5cGUgRG9ja2VyQ2xlYW51cE9wdGlvbnMgPSB7fFxuICAuLi5Eb2NrZXJJbWFnZUNsZWFudXBPcHRpb25zLFxuICAuLi5Eb2NrZXJDb250YWluZXJDbGVhbnVwT3B0aW9ucyxcbnx9O1xuXG4vKipcbiAqIFB1cmdlIGRvY2tlciBpbWFnZXMgY3JlYXRlZCBkdXJpbmcgYnVpbGQgcHJvY2Vzc1xuICovXG5leHBvcnQgY29uc3QgZG9ja2VyQ2xlYW51cCA9IGFzeW5jICh7XG4gIGRyeVJ1bixcbiAgLi4ucmVzdFxufTogRG9ja2VyQ2xlYW51cE9wdGlvbnMgPSB7fSkgPT4ge1xuICBhd2FpdCBkb2NrZXJDb250YWluZXJDbGVhbnVwKHsgZHJ5UnVuIH0pO1xuICBhd2FpdCBkb2NrZXJJbWFnZUNsZWFudXAoe1xuICAgIGRyeVJ1bixcbiAgICAuLi5yZXN0LFxuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRvY2tlckNsZWFudXA7XG4iXX0=
|
|
70
|
+
export const dockerCleanup = async ({ dryRun, ...rest } = {}) => {
|
|
71
|
+
await dockerContainerCleanup({ dryRun });
|
|
72
|
+
await dockerImageCleanup({
|
|
73
|
+
dryRun,
|
|
74
|
+
...rest,
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
export default dockerCleanup;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { DockerContainer } from './docker.container.js';
|
|
2
|
+
import { DockerNetwork, DockerNetworkCreateOptions } from './docker.network.js';
|
|
3
|
+
import { DockerVolume, DockerVolumeCreateOptions } from './docker.volume.js';
|
|
4
|
+
export declare type DockerComposeResourceTracker = {
|
|
5
|
+
cleaning: null | Promise<void>;
|
|
6
|
+
containers: Map<string, DockerContainer>;
|
|
7
|
+
networks: Map<string, DockerNetwork>;
|
|
8
|
+
services: Map<string, DockerComposeService>;
|
|
9
|
+
volumes: Map<string, DockerVolume>;
|
|
10
|
+
};
|
|
11
|
+
export declare const dockerComposeCreateResourceTracker: () => DockerComposeResourceTracker;
|
|
12
|
+
declare type DockerComposeEnvDef = string[] | Record<string, string>;
|
|
13
|
+
declare type DockerComposeULimitDef = number | {
|
|
14
|
+
hard: number;
|
|
15
|
+
soft: number;
|
|
16
|
+
};
|
|
17
|
+
declare type DockerComposeULimitsDef = Record<string, DockerComposeULimitDef>;
|
|
18
|
+
interface DockerComposeServiceDef {
|
|
19
|
+
command?: string[];
|
|
20
|
+
container_name?: string;
|
|
21
|
+
environment?: DockerComposeEnvDef;
|
|
22
|
+
image?: string;
|
|
23
|
+
links?: string[];
|
|
24
|
+
networks?: string[];
|
|
25
|
+
ports?: string[];
|
|
26
|
+
ulimits?: DockerComposeULimitsDef;
|
|
27
|
+
volumes?: string[];
|
|
28
|
+
}
|
|
29
|
+
interface DockerComposeVolumeDef extends DockerVolumeCreateOptions {
|
|
30
|
+
name?: string;
|
|
31
|
+
}
|
|
32
|
+
interface DockerComposeNetworkDef extends DockerNetworkCreateOptions {
|
|
33
|
+
name?: string;
|
|
34
|
+
}
|
|
35
|
+
interface DockerCompose {
|
|
36
|
+
networks?: Record<string, DockerComposeNetworkDef>;
|
|
37
|
+
services?: Record<string, DockerComposeServiceDef>;
|
|
38
|
+
version: string;
|
|
39
|
+
volumes?: Record<string, DockerComposeVolumeDef>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Parse a docker-compose.yml file into a pojo representation
|
|
43
|
+
* @param {string} filePath Path to the docker-compose.yml file
|
|
44
|
+
*/
|
|
45
|
+
export declare const dockerComposeParse: (filePath?: string) => Promise<DockerCompose>;
|
|
46
|
+
/**
|
|
47
|
+
* Get the main docker-compose.yml from the root of the repo
|
|
48
|
+
* @param {boolean} force Force reload from file
|
|
49
|
+
*/
|
|
50
|
+
export declare const dockerComposeGetMain: (force?: boolean) => Promise<DockerCompose>;
|
|
51
|
+
interface PortMap {
|
|
52
|
+
docker: number;
|
|
53
|
+
local: null | number;
|
|
54
|
+
localDefault: number;
|
|
55
|
+
}
|
|
56
|
+
interface UrlMap {
|
|
57
|
+
docker: null | string;
|
|
58
|
+
local: null | string;
|
|
59
|
+
}
|
|
60
|
+
interface ParsedPortInfo {
|
|
61
|
+
ports: PortMap[];
|
|
62
|
+
runArgs: string[];
|
|
63
|
+
}
|
|
64
|
+
interface ParsedVolumeInfo {
|
|
65
|
+
runArgs: string[];
|
|
66
|
+
volumes: string[];
|
|
67
|
+
}
|
|
68
|
+
interface ParsedNetworkInfo {
|
|
69
|
+
networks: string[];
|
|
70
|
+
runArgs: string[];
|
|
71
|
+
}
|
|
72
|
+
export declare const dockerComposeCreateNetworks: (names?: string[] | null | undefined, dockerCompose?: string | DockerCompose | null | undefined, tracker?: DockerComposeResourceTracker) => Promise<void>;
|
|
73
|
+
export declare const dockerComposeCreateVolumes: (names?: string[] | undefined, dockerCompose?: string | DockerCompose | null | undefined, tracker?: DockerComposeResourceTracker) => Promise<void>;
|
|
74
|
+
declare type HealthCheckFn = (result: UpResult) => Promise<void>;
|
|
75
|
+
interface UpOptions {
|
|
76
|
+
avoidConflicts?: boolean;
|
|
77
|
+
cmd?: string[];
|
|
78
|
+
healthCheck?: HealthCheckFn;
|
|
79
|
+
mapPorts?: boolean;
|
|
80
|
+
mapVolumes?: boolean;
|
|
81
|
+
tracker?: DockerComposeResourceTracker;
|
|
82
|
+
}
|
|
83
|
+
interface ServiceNameInfo {
|
|
84
|
+
aliases: string[];
|
|
85
|
+
name: string;
|
|
86
|
+
suffix: string;
|
|
87
|
+
}
|
|
88
|
+
interface UpResult {
|
|
89
|
+
aliases: string[];
|
|
90
|
+
container: DockerContainer;
|
|
91
|
+
containerName: string;
|
|
92
|
+
ports: PortMap[];
|
|
93
|
+
service: DockerComposeService;
|
|
94
|
+
urls: UrlMap[];
|
|
95
|
+
volumes: string[];
|
|
96
|
+
}
|
|
97
|
+
export declare class DockerComposeService {
|
|
98
|
+
#private;
|
|
99
|
+
constructor(name: string, serviceDef: DockerComposeServiceDef, dockerCompose?: null | (DockerCompose | string));
|
|
100
|
+
get name(): string;
|
|
101
|
+
get serviceDef(): DockerComposeServiceDef;
|
|
102
|
+
get image(): null | string;
|
|
103
|
+
get defaultContainerName(): string;
|
|
104
|
+
get cmd(): string[];
|
|
105
|
+
get envArgs(): string[];
|
|
106
|
+
/**
|
|
107
|
+
* Find (available) container name and alias(es)
|
|
108
|
+
* @param {boolean} avoidConflicts if `true`, find a container name that is unused
|
|
109
|
+
* @param {number} max maximum number of names to try
|
|
110
|
+
*/
|
|
111
|
+
getNames(avoidConflicts?: boolean, max?: number): Promise<ServiceNameInfo>;
|
|
112
|
+
getPorts(avoidConflicts?: boolean, mapLocal?: boolean): Promise<ParsedPortInfo>;
|
|
113
|
+
getDefaultPortInfo(): Promise<ParsedPortInfo>;
|
|
114
|
+
getDefaultPorts(): Promise<PortMap[]>;
|
|
115
|
+
getDefaultPortArgs(): Promise<string[]>;
|
|
116
|
+
getDefaultUrls(): Promise<UrlMap[]>;
|
|
117
|
+
getDefaultNetworkInfo(): Promise<ParsedNetworkInfo>;
|
|
118
|
+
getDefaultNetworks(): Promise<string[]>;
|
|
119
|
+
getDefaultNetworkArgs(): Promise<string[]>;
|
|
120
|
+
getDefaultVolumeInfo(): Promise<ParsedVolumeInfo>;
|
|
121
|
+
getDefaultVolumes(): Promise<string[]>;
|
|
122
|
+
getDefaultVolumeArgs(): Promise<string[]>;
|
|
123
|
+
pull(): Promise<void>;
|
|
124
|
+
getBaseRunArgs(): Promise<string[]>;
|
|
125
|
+
assembleRunArgs(containerName?: string, aliases?: string[], additionalArgs?: null | string[]): Promise<string[]>;
|
|
126
|
+
getRunArgs(avoidConflicts?: boolean, mapLocalPorts?: boolean): Promise<string[]>;
|
|
127
|
+
up({ healthCheck, avoidConflicts, mapVolumes, mapPorts, cmd, tracker, }?: UpOptions): Promise<UpResult>;
|
|
128
|
+
down({ includeDefaults, includeNetworks, includeVolumes, }?: {
|
|
129
|
+
includeDefaults?: boolean;
|
|
130
|
+
includeNetworks?: boolean;
|
|
131
|
+
includeVolumes?: boolean;
|
|
132
|
+
}): Promise<void>;
|
|
133
|
+
static parse(name: string, force?: boolean, dockerCompose?: null | (DockerCompose | string)): Promise<null | DockerComposeService>;
|
|
134
|
+
static getUrls(ports: PortMap[], alias: string): UrlMap[];
|
|
135
|
+
}
|
|
136
|
+
export declare function dockerComposeGetAllServices(dockerCompose?: null | (string | DockerCompose)): Promise<Record<string, null | DockerComposeService>>;
|
|
137
|
+
export declare function dockerComposeTeardown({ includeDefaults, includeVolumes, includeNetworks, dockerCompose, tracker, }?: {
|
|
138
|
+
dockerCompose?: null | (string | DockerCompose);
|
|
139
|
+
includeDefaults?: boolean;
|
|
140
|
+
includeNetworks?: boolean;
|
|
141
|
+
includeVolumes?: boolean;
|
|
142
|
+
tracker?: DockerComposeResourceTracker;
|
|
143
|
+
}): Promise<void>;
|
|
144
|
+
export interface DockerContainerInfo extends UpResult {
|
|
145
|
+
dockerPort?: null | number;
|
|
146
|
+
dockerUrl?: null | string;
|
|
147
|
+
id: string;
|
|
148
|
+
image: string;
|
|
149
|
+
name?: null | string;
|
|
150
|
+
port?: null | number;
|
|
151
|
+
url?: null | string;
|
|
152
|
+
}
|
|
153
|
+
export declare function dockerComposeRunService(key: string, upOptions?: UpOptions, dockerCompose?: null | string | DockerCompose): Promise<DockerContainerInfo>;
|
|
154
|
+
export {};
|