@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 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
@@ -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: any,
7
- awsConfig: { ... },
8
- },
9
- to: {
6
+ ecr?: any,
7
+ awsConfig?: { ... },
8
+ |},
9
+ to: {|
10
10
  imageUri: string,
11
- ecr: any,
12
- awsConfig: { ... },
13
- },
11
+ ecr?: any,
12
+ awsConfig?: { ... },
13
+ |},
14
14
  |}): Promise<void>
@@ -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: any,
7
- awsConfig: { ... },
8
- },
9
- to: {
6
+ ecr?: any,
7
+ awsConfig?: { ... },
8
+ |},
9
+ to: {|
10
10
  imageUri: string,
11
- ecr: any,
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgYXMgY29weUVDUkltYWdlIH0gZnJvbSAnLi9jb3B5RUNSSW1hZ2UnXG5leHBvcnQgeyBkZWZhdWx0IGFzIGVjckltYWdlRXhpc3RzIH0gZnJvbSAnLi9lY3JJbWFnZUV4aXN0cydcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbG9naW5Ub0VDUiB9IGZyb20gJy4vbG9naW5Ub0VDUidcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGFnRUNSSW1hZ2UgfSBmcm9tICcuL3RhZ0VDUkltYWdlJ1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJzZUVDUkltYWdlVXJpIH0gZnJvbSAnLi9wYXJzZUVDUkltYWdlVXJpJ1xuIl19
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,6 @@
1
+ import AWS from 'aws-sdk';
2
+ export default function upsertECRRepository({ ecr, awsConfig, repositoryName, }: {
3
+ ecr?: AWS.ECR;
4
+ awsConfig?: AWS.ConfigurationOptions;
5
+ repositoryName: string;
6
+ }): Promise<AWS.ECR.Repository>;
@@ -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=
@@ -0,0 +1,7 @@
1
+ // @flow
2
+
3
+ declare export default function upsertECRRepository(options: {
4
+ ecr?: any,
5
+ awsConfig?: { ... },
6
+ repositoryName: string,
7
+ }): Promise<any>
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jcoreio/aws-ecr-utils",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
4
4
  "description": "utilities for working with AWS Elastic Container Registry",
5
5
  "main": "index.js",
6
6
  "sideEffects": false,
@@ -0,0 +1,6 @@
1
+ import AWS from 'aws-sdk';
2
+ export default function upsertECRRepository({ ecr, awsConfig, repositoryName, }: {
3
+ ecr?: AWS.ECR;
4
+ awsConfig?: AWS.ConfigurationOptions;
5
+ repositoryName: string;
6
+ }): Promise<AWS.ECR.Repository>;
@@ -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
+ }
@@ -0,0 +1,7 @@
1
+ // @flow
2
+
3
+ declare export default function upsertECRRepository(options: {
4
+ ecr?: any,
5
+ awsConfig?: { ... },
6
+ repositoryName: string,
7
+ }): Promise<any>