@jcoreio/aws-ecr-utils 1.0.0 → 1.1.1
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/README.md +28 -0
- package/copyECRImage.js.flow +8 -8
- package/es/copyECRImage.js.flow +8 -8
- package/es/index.d.ts +1 -0
- package/es/index.js +9 -1
- package/es/index.js.flow +1 -0
- package/es/upsertECRRepository.d.ts +6 -0
- package/es/upsertECRRepository.js +45 -0
- package/es/upsertECRRepository.js.flow +7 -0
- package/index.d.ts +1 -0
- package/index.js +9 -1
- package/index.js.flow +1 -0
- package/package.json +1 -1
- package/upsertECRRepository.d.ts +6 -0
- package/upsertECRRepository.js +87 -0
- package/upsertECRRepository.js.flow +7 -0
package/README.md
CHANGED
|
@@ -41,6 +41,12 @@
|
|
|
41
41
|
- [`options.imageUri` (`string`, **required**)](#optionsimageuri-string-required)
|
|
42
42
|
- [`options.tags` (`string[]`, **required**)](#optionstags-string-required)
|
|
43
43
|
- [Returns (`Promise<void>`)](#returns-promisevoid-2)
|
|
44
|
+
- [`upsertECRRepository(options)`](#upsertecrrepositoryoptions)
|
|
45
|
+
- [Options](#options-5)
|
|
46
|
+
- [`options.ecr` (`AWS.ECR`, _optional_)](#optionsecr-awsecr-optional-3)
|
|
47
|
+
- [`options.awsConfig` (`AWS.ConfigurationOptions`, _optional_)](#optionsawsconfig-awsconfigurationoptions-optional-3)
|
|
48
|
+
- [`options.repositoryName` (`string`, **required**)](#optionsrepositoryname-string-required)
|
|
49
|
+
- [Returns (`Promise<AWS.ECR.Repository>`)](#returns-promiseawsecrrepository)
|
|
44
50
|
|
|
45
51
|
## `copyECRImage(options)`
|
|
46
52
|
|
|
@@ -165,3 +171,25 @@ The tags to add to the ECR image
|
|
|
165
171
|
### Returns (`Promise<void>`)
|
|
166
172
|
|
|
167
173
|
A promise that will resolve once the tags have been added.
|
|
174
|
+
|
|
175
|
+
## `upsertECRRepository(options)`
|
|
176
|
+
|
|
177
|
+
Creates an ECR repository if it doesn't already exist.
|
|
178
|
+
|
|
179
|
+
### Options
|
|
180
|
+
|
|
181
|
+
#### `options.ecr` (`AWS.ECR`, _optional_)
|
|
182
|
+
|
|
183
|
+
The ECR client to use
|
|
184
|
+
|
|
185
|
+
#### `options.awsConfig` (`AWS.ConfigurationOptions`, _optional_)
|
|
186
|
+
|
|
187
|
+
The AWS service options to use if `options.ecr` isn't provided
|
|
188
|
+
|
|
189
|
+
#### `options.repositoryName` (`string`, **required**)
|
|
190
|
+
|
|
191
|
+
The name of the repository to upsert
|
|
192
|
+
|
|
193
|
+
### Returns (`Promise<AWS.ECR.Repository>`)
|
|
194
|
+
|
|
195
|
+
The found or created ECR repository
|
package/copyECRImage.js.flow
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// @flow
|
|
2
2
|
|
|
3
3
|
declare export default function copyECRImage(options: {|
|
|
4
|
-
from: {
|
|
4
|
+
from: {|
|
|
5
5
|
imageUri: string,
|
|
6
|
-
ecr
|
|
7
|
-
awsConfig
|
|
8
|
-
},
|
|
9
|
-
to: {
|
|
6
|
+
ecr?: any,
|
|
7
|
+
awsConfig?: { ... },
|
|
8
|
+
|},
|
|
9
|
+
to: {|
|
|
10
10
|
imageUri: string,
|
|
11
|
-
ecr
|
|
12
|
-
awsConfig
|
|
13
|
-
},
|
|
11
|
+
ecr?: any,
|
|
12
|
+
awsConfig?: { ... },
|
|
13
|
+
|},
|
|
14
14
|
|}): Promise<void>
|
package/es/copyECRImage.js.flow
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// @flow
|
|
2
2
|
|
|
3
3
|
declare export default function copyECRImage(options: {|
|
|
4
|
-
from: {
|
|
4
|
+
from: {|
|
|
5
5
|
imageUri: string,
|
|
6
|
-
ecr
|
|
7
|
-
awsConfig
|
|
8
|
-
},
|
|
9
|
-
to: {
|
|
6
|
+
ecr?: any,
|
|
7
|
+
awsConfig?: { ... },
|
|
8
|
+
|},
|
|
9
|
+
to: {|
|
|
10
10
|
imageUri: string,
|
|
11
|
-
ecr
|
|
12
|
-
awsConfig
|
|
13
|
-
},
|
|
11
|
+
ecr?: any,
|
|
12
|
+
awsConfig?: { ... },
|
|
13
|
+
|},
|
|
14
14
|
|}): Promise<void>
|
package/es/index.d.ts
CHANGED
|
@@ -3,3 +3,4 @@ export { default as ecrImageExists } from './ecrImageExists';
|
|
|
3
3
|
export { default as loginToECR } from './loginToECR';
|
|
4
4
|
export { default as tagECRImage } from './tagECRImage';
|
|
5
5
|
export { default as parseECRImageUri } from './parseECRImageUri';
|
|
6
|
+
export { default as upsertECRRepository } from './upsertECRRepository';
|
package/es/index.js
CHANGED
|
@@ -33,6 +33,12 @@ Object.defineProperty(exports, "tagECRImage", {
|
|
|
33
33
|
return _tagECRImage.default;
|
|
34
34
|
}
|
|
35
35
|
});
|
|
36
|
+
Object.defineProperty(exports, "upsertECRRepository", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function () {
|
|
39
|
+
return _upsertECRRepository.default;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
36
42
|
|
|
37
43
|
var _copyECRImage = _interopRequireDefault(require("./copyECRImage"));
|
|
38
44
|
|
|
@@ -44,5 +50,7 @@ var _tagECRImage = _interopRequireDefault(require("./tagECRImage"));
|
|
|
44
50
|
|
|
45
51
|
var _parseECRImageUri = _interopRequireDefault(require("./parseECRImageUri"));
|
|
46
52
|
|
|
53
|
+
var _upsertECRRepository = _interopRequireDefault(require("./upsertECRRepository"));
|
|
54
|
+
|
|
47
55
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
48
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgYXMgY29weUVDUkltYWdlIH0gZnJvbSAnLi9jb3B5RUNSSW1hZ2UnXG5leHBvcnQgeyBkZWZhdWx0IGFzIGVjckltYWdlRXhpc3RzIH0gZnJvbSAnLi9lY3JJbWFnZUV4aXN0cydcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbG9naW5Ub0VDUiB9IGZyb20gJy4vbG9naW5Ub0VDUidcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGFnRUNSSW1hZ2UgfSBmcm9tICcuL3RhZ0VDUkltYWdlJ1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJzZUVDUkltYWdlVXJpIH0gZnJvbSAnLi9wYXJzZUVDUkltYWdlVXJpJ1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1cHNlcnRFQ1JSZXBvc2l0b3J5IH0gZnJvbSAnLi91cHNlcnRFQ1JSZXBvc2l0b3J5J1xuIl19
|
package/es/index.js.flow
CHANGED
|
@@ -5,3 +5,4 @@ export { default as ecrImageExists } from './ecrImageExists'
|
|
|
5
5
|
export { default as loginToECR } from './loginToECR'
|
|
6
6
|
export { default as tagECRImage } from './tagECRImage'
|
|
7
7
|
export { default as parseECRImageUri } from './parseECRImageUri'
|
|
8
|
+
export { default as upsertECRRepository } from './upsertECRRepository'
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = upsertECRRepository;
|
|
7
|
+
|
|
8
|
+
var _awsSdk = _interopRequireDefault(require("aws-sdk"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
|
|
12
|
+
// @flow
|
|
13
|
+
async function upsertECRRepository({
|
|
14
|
+
ecr,
|
|
15
|
+
awsConfig,
|
|
16
|
+
repositoryName
|
|
17
|
+
}) {
|
|
18
|
+
if (!ecr) ecr = new _awsSdk.default.ECR(awsConfig);
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
const {
|
|
22
|
+
repositories
|
|
23
|
+
} = await ecr.describeRepositories({
|
|
24
|
+
repositoryNames: [repositoryName]
|
|
25
|
+
}).promise();
|
|
26
|
+
const repository = repositories === null || repositories === void 0 ? void 0 : repositories[0];
|
|
27
|
+
if (repository) return repository;
|
|
28
|
+
} catch (error) {// ignore
|
|
29
|
+
} // eslint-disable-next-line no-console
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
console.error(`Creating ECR repository {bold ${repositoryName}}...`);
|
|
33
|
+
const {
|
|
34
|
+
repository
|
|
35
|
+
} = await ecr.createRepository({
|
|
36
|
+
repositoryName
|
|
37
|
+
}).promise();
|
|
38
|
+
|
|
39
|
+
if (!repository) {
|
|
40
|
+
throw new Error(`repository is missing from createRepository response`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return repository;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91cHNlcnRFQ1JSZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbInVwc2VydEVDUlJlcG9zaXRvcnkiLCJlY3IiLCJhd3NDb25maWciLCJyZXBvc2l0b3J5TmFtZSIsIkFXUyIsIkVDUiIsInJlcG9zaXRvcmllcyIsImRlc2NyaWJlUmVwb3NpdG9yaWVzIiwicmVwb3NpdG9yeU5hbWVzIiwicHJvbWlzZSIsInJlcG9zaXRvcnkiLCJlcnJvciIsImNvbnNvbGUiLCJjcmVhdGVSZXBvc2l0b3J5IiwiRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQTs7OztBQUZBO0FBSWUsZUFBZUEsbUJBQWYsQ0FBbUM7QUFDaERDLEVBQUFBLEdBRGdEO0FBRWhEQyxFQUFBQSxTQUZnRDtBQUdoREMsRUFBQUE7QUFIZ0QsQ0FBbkMsRUFRaUI7QUFDOUIsTUFBSSxDQUFDRixHQUFMLEVBQVVBLEdBQUcsR0FBRyxJQUFJRyxnQkFBSUMsR0FBUixDQUFZSCxTQUFaLENBQU47O0FBQ1YsTUFBSTtBQUNGLFVBQU07QUFBRUksTUFBQUE7QUFBRixRQUFtQixNQUFNTCxHQUFHLENBQy9CTSxvQkFENEIsQ0FDUDtBQUFFQyxNQUFBQSxlQUFlLEVBQUUsQ0FBQ0wsY0FBRDtBQUFuQixLQURPLEVBRTVCTSxPQUY0QixFQUEvQjtBQUdBLFVBQU1DLFVBQVUsR0FBR0osWUFBSCxhQUFHQSxZQUFILHVCQUFHQSxZQUFZLENBQUcsQ0FBSCxDQUEvQjtBQUNBLFFBQUlJLFVBQUosRUFBZ0IsT0FBT0EsVUFBUDtBQUNqQixHQU5ELENBTUUsT0FBT0MsS0FBUCxFQUFjLENBQ2Q7QUFDRCxHQVY2QixDQVk5Qjs7O0FBQ0FDLEVBQUFBLE9BQU8sQ0FBQ0QsS0FBUixDQUFlLGlDQUFnQ1IsY0FBZSxNQUE5RDtBQUNBLFFBQU07QUFBRU8sSUFBQUE7QUFBRixNQUFpQixNQUFNVCxHQUFHLENBQzdCWSxnQkFEMEIsQ0FDVDtBQUFFVixJQUFBQTtBQUFGLEdBRFMsRUFFMUJNLE9BRjBCLEVBQTdCOztBQUdBLE1BQUksQ0FBQ0MsVUFBTCxFQUFpQjtBQUNmLFVBQU0sSUFBSUksS0FBSixDQUFXLHNEQUFYLENBQU47QUFDRDs7QUFDRCxTQUFPSixVQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuXG5pbXBvcnQgQVdTIGZyb20gJ2F3cy1zZGsnXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHVwc2VydEVDUlJlcG9zaXRvcnkoe1xuICBlY3IsXG4gIGF3c0NvbmZpZyxcbiAgcmVwb3NpdG9yeU5hbWUsXG59OiB7XG4gIGVjcj86IEFXUy5FQ1JcbiAgYXdzQ29uZmlnPzogQVdTLkNvbmZpZ3VyYXRpb25PcHRpb25zXG4gIHJlcG9zaXRvcnlOYW1lOiBzdHJpbmdcbn0pOiBQcm9taXNlPEFXUy5FQ1IuUmVwb3NpdG9yeT4ge1xuICBpZiAoIWVjcikgZWNyID0gbmV3IEFXUy5FQ1IoYXdzQ29uZmlnKVxuICB0cnkge1xuICAgIGNvbnN0IHsgcmVwb3NpdG9yaWVzIH0gPSBhd2FpdCBlY3JcbiAgICAgIC5kZXNjcmliZVJlcG9zaXRvcmllcyh7IHJlcG9zaXRvcnlOYW1lczogW3JlcG9zaXRvcnlOYW1lXSB9KVxuICAgICAgLnByb21pc2UoKVxuICAgIGNvbnN0IHJlcG9zaXRvcnkgPSByZXBvc2l0b3JpZXM/LlswXVxuICAgIGlmIChyZXBvc2l0b3J5KSByZXR1cm4gcmVwb3NpdG9yeVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIGlnbm9yZVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5lcnJvcihgQ3JlYXRpbmcgRUNSIHJlcG9zaXRvcnkge2JvbGQgJHtyZXBvc2l0b3J5TmFtZX19Li4uYClcbiAgY29uc3QgeyByZXBvc2l0b3J5IH0gPSBhd2FpdCBlY3JcbiAgICAuY3JlYXRlUmVwb3NpdG9yeSh7IHJlcG9zaXRvcnlOYW1lIH0pXG4gICAgLnByb21pc2UoKVxuICBpZiAoIXJlcG9zaXRvcnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlcG9zaXRvcnkgaXMgbWlzc2luZyBmcm9tIGNyZWF0ZVJlcG9zaXRvcnkgcmVzcG9uc2VgKVxuICB9XG4gIHJldHVybiByZXBvc2l0b3J5XG59XG4iXX0=
|
package/index.d.ts
CHANGED
|
@@ -3,3 +3,4 @@ export { default as ecrImageExists } from './ecrImageExists';
|
|
|
3
3
|
export { default as loginToECR } from './loginToECR';
|
|
4
4
|
export { default as tagECRImage } from './tagECRImage';
|
|
5
5
|
export { default as parseECRImageUri } from './parseECRImageUri';
|
|
6
|
+
export { default as upsertECRRepository } from './upsertECRRepository';
|
package/index.js
CHANGED
|
@@ -35,6 +35,12 @@ Object.defineProperty(exports, "tagECRImage", {
|
|
|
35
35
|
return _tagECRImage["default"];
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
|
+
Object.defineProperty(exports, "upsertECRRepository", {
|
|
39
|
+
enumerable: true,
|
|
40
|
+
get: function get() {
|
|
41
|
+
return _upsertECRRepository["default"];
|
|
42
|
+
}
|
|
43
|
+
});
|
|
38
44
|
|
|
39
45
|
var _copyECRImage = _interopRequireDefault(require("./copyECRImage"));
|
|
40
46
|
|
|
@@ -44,4 +50,6 @@ var _loginToECR = _interopRequireDefault(require("./loginToECR"));
|
|
|
44
50
|
|
|
45
51
|
var _tagECRImage = _interopRequireDefault(require("./tagECRImage"));
|
|
46
52
|
|
|
47
|
-
var _parseECRImageUri = _interopRequireDefault(require("./parseECRImageUri"));
|
|
53
|
+
var _parseECRImageUri = _interopRequireDefault(require("./parseECRImageUri"));
|
|
54
|
+
|
|
55
|
+
var _upsertECRRepository = _interopRequireDefault(require("./upsertECRRepository"));
|
package/index.js.flow
CHANGED
|
@@ -5,3 +5,4 @@ export { default as ecrImageExists } from './ecrImageExists'
|
|
|
5
5
|
export { default as loginToECR } from './loginToECR'
|
|
6
6
|
export { default as tagECRImage } from './tagECRImage'
|
|
7
7
|
export { default as parseECRImageUri } from './parseECRImageUri'
|
|
8
|
+
export { default as upsertECRRepository } from './upsertECRRepository'
|
package/package.json
CHANGED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = upsertECRRepository;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
|
|
14
|
+
var _awsSdk = _interopRequireDefault(require("aws-sdk"));
|
|
15
|
+
|
|
16
|
+
// @flow
|
|
17
|
+
function upsertECRRepository(_x) {
|
|
18
|
+
return _upsertECRRepository.apply(this, arguments);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function _upsertECRRepository() {
|
|
22
|
+
_upsertECRRepository = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref) {
|
|
23
|
+
var ecr, awsConfig, repositoryName, _yield$ecr$describeRe, repositories, _repository, _yield$ecr$createRepo, repository;
|
|
24
|
+
|
|
25
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
26
|
+
while (1) {
|
|
27
|
+
switch (_context.prev = _context.next) {
|
|
28
|
+
case 0:
|
|
29
|
+
ecr = _ref.ecr, awsConfig = _ref.awsConfig, repositoryName = _ref.repositoryName;
|
|
30
|
+
if (!ecr) ecr = new _awsSdk["default"].ECR(awsConfig);
|
|
31
|
+
_context.prev = 2;
|
|
32
|
+
_context.next = 5;
|
|
33
|
+
return ecr.describeRepositories({
|
|
34
|
+
repositoryNames: [repositoryName]
|
|
35
|
+
}).promise();
|
|
36
|
+
|
|
37
|
+
case 5:
|
|
38
|
+
_yield$ecr$describeRe = _context.sent;
|
|
39
|
+
repositories = _yield$ecr$describeRe.repositories;
|
|
40
|
+
_repository = repositories === null || repositories === void 0 ? void 0 : repositories[0];
|
|
41
|
+
|
|
42
|
+
if (!_repository) {
|
|
43
|
+
_context.next = 10;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return _context.abrupt("return", _repository);
|
|
48
|
+
|
|
49
|
+
case 10:
|
|
50
|
+
_context.next = 14;
|
|
51
|
+
break;
|
|
52
|
+
|
|
53
|
+
case 12:
|
|
54
|
+
_context.prev = 12;
|
|
55
|
+
_context.t0 = _context["catch"](2);
|
|
56
|
+
|
|
57
|
+
case 14:
|
|
58
|
+
// eslint-disable-next-line no-console
|
|
59
|
+
console.error("Creating ECR repository {bold ".concat(repositoryName, "}..."));
|
|
60
|
+
_context.next = 17;
|
|
61
|
+
return ecr.createRepository({
|
|
62
|
+
repositoryName: repositoryName
|
|
63
|
+
}).promise();
|
|
64
|
+
|
|
65
|
+
case 17:
|
|
66
|
+
_yield$ecr$createRepo = _context.sent;
|
|
67
|
+
repository = _yield$ecr$createRepo.repository;
|
|
68
|
+
|
|
69
|
+
if (repository) {
|
|
70
|
+
_context.next = 21;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
throw new Error("repository is missing from createRepository response");
|
|
75
|
+
|
|
76
|
+
case 21:
|
|
77
|
+
return _context.abrupt("return", repository);
|
|
78
|
+
|
|
79
|
+
case 22:
|
|
80
|
+
case "end":
|
|
81
|
+
return _context.stop();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}, _callee, null, [[2, 12]]);
|
|
85
|
+
}));
|
|
86
|
+
return _upsertECRRepository.apply(this, arguments);
|
|
87
|
+
}
|