@jcoreio/aws-ecr-utils 1.1.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/ImageManifestSchema.d.ts +58 -0
  2. package/ImageManifestSchema.js +22 -0
  3. package/ImageManifestSchema.mjs +15 -0
  4. package/checkECRImageAccess.d.ts +18 -0
  5. package/checkECRImageAccess.js +180 -0
  6. package/checkECRImageAccess.mjs +133 -0
  7. package/checkECRRepositoryPolicy.d.ts +20 -0
  8. package/checkECRRepositoryPolicy.js +132 -0
  9. package/checkECRRepositoryPolicy.mjs +100 -0
  10. package/copyECRImage.js +79 -104
  11. package/copyECRImage.mjs +67 -0
  12. package/ecrImageExists.js +51 -74
  13. package/ecrImageExists.mjs +31 -0
  14. package/formatECRImageUri.d.ts +6 -0
  15. package/formatECRImageUri.js +20 -0
  16. package/formatECRImageUri.mjs +13 -0
  17. package/formatECRRepositoryHostname.d.ts +5 -0
  18. package/formatECRRepositoryHostname.js +13 -0
  19. package/formatECRRepositoryHostname.mjs +7 -0
  20. package/index.d.ts +5 -0
  21. package/index.js +41 -13
  22. package/index.mjs +11 -0
  23. package/loginToECR.js +44 -65
  24. package/loginToECR.mjs +38 -0
  25. package/package.json +27 -105
  26. package/parseECRImageUri.d.ts +3 -2
  27. package/parseECRImageUri.js +6 -10
  28. package/parseECRImageUri.mjs +11 -0
  29. package/parseECRRepositoryHostname.d.ts +6 -0
  30. package/parseECRRepositoryHostname.js +22 -0
  31. package/parseECRRepositoryHostname.mjs +10 -0
  32. package/tagECRImage.js +81 -115
  33. package/tagECRImage.mjs +50 -0
  34. package/upsertECRRepository.js +45 -64
  35. package/upsertECRRepository.mjs +33 -0
  36. package/es/copyECRImage.d.ts +0 -13
  37. package/es/copyECRImage.js +0 -76
  38. package/es/ecrImageExists.d.ts +0 -9
  39. package/es/ecrImageExists.js +0 -45
  40. package/es/index.d.ts +0 -6
  41. package/es/index.js +0 -56
  42. package/es/loginToECR.d.ts +0 -8
  43. package/es/loginToECR.js +0 -56
  44. package/es/parseECRImageUri.d.ts +0 -6
  45. package/es/parseECRImageUri.js +0 -19
  46. package/es/tagECRImage.d.ts +0 -10
  47. package/es/tagECRImage.js +0 -65
  48. package/es/upsertECRRepository.d.ts +0 -6
  49. package/es/upsertECRRepository.js +0 -45
  50. /package/{es/copyECRImage.js.flow → copyECRImage.mjs.flow} +0 -0
  51. /package/{es/ecrImageExists.js.flow → ecrImageExists.mjs.flow} +0 -0
  52. /package/{es/index.js.flow → index.mjs.flow} +0 -0
  53. /package/{es/loginToECR.js.flow → loginToECR.mjs.flow} +0 -0
  54. /package/{es/parseECRImageUri.js.flow → parseECRImageUri.mjs.flow} +0 -0
  55. /package/{es/tagECRImage.js.flow → tagECRImage.mjs.flow} +0 -0
  56. /package/{es/upsertECRRepository.js.flow → upsertECRRepository.mjs.flow} +0 -0
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @prettier
3
+ */
4
+ import AWS from 'aws-sdk';
5
+ import parseECRImageUri from "./parseECRImageUri.mjs";
6
+ export default async function tagECRImage({
7
+ ecr,
8
+ awsConfig,
9
+ imageUri,
10
+ tags
11
+ }) {
12
+ const {
13
+ region,
14
+ repositoryName,
15
+ imageTag
16
+ } = parseECRImageUri(imageUri);
17
+ if (!ecr) ecr = new AWS.ECR({
18
+ ...awsConfig,
19
+ region
20
+ });
21
+ const imageManifest = await ecr.batchGetImage({
22
+ repositoryName,
23
+ imageIds: [{
24
+ imageTag
25
+ }]
26
+ }).promise().then(r => {
27
+ var _r$images;
28
+ return r === null || r === void 0 || (_r$images = r.images) === null || _r$images === void 0 || (_r$images = _r$images[0]) === null || _r$images === void 0 ? void 0 : _r$images.imageManifest;
29
+ });
30
+ if (!imageManifest) {
31
+ throw new Error(`failed to get image manifest for ${imageUri}`);
32
+ }
33
+ if (imageManifest) {
34
+ // add other tags to ECR
35
+ for (const tag of tags) {
36
+ // eslint-disable-next-line no-console
37
+ console.error(`Adding tag ${repositoryName}:${tag}`);
38
+ try {
39
+ await ecr.putImage({
40
+ repositoryName,
41
+ imageManifest,
42
+ imageTag: tag.substring(tag.indexOf(':') + 1)
43
+ }).promise();
44
+ } catch (error) {
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
+ if ((error === null || error === void 0 ? void 0 : error.code) !== 'ImageAlreadyExistsException') throw error;
47
+ }
48
+ }
49
+ }
50
+ }
@@ -1,87 +1,68 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports["default"] = upsertECRRepository;
9
-
10
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
-
14
10
  var _awsSdk = _interopRequireDefault(require("aws-sdk"));
15
-
16
11
  // @flow
17
12
  function upsertECRRepository(_x) {
18
13
  return _upsertECRRepository.apply(this, arguments);
19
14
  }
20
-
21
15
  function _upsertECRRepository() {
22
16
  _upsertECRRepository = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref) {
23
17
  var ecr, awsConfig, repositoryName, _yield$ecr$describeRe, repositories, _repository, _yield$ecr$createRepo, repository;
24
-
25
18
  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;
19
+ while (1) switch (_context.prev = _context.next) {
20
+ case 0:
21
+ ecr = _ref.ecr, awsConfig = _ref.awsConfig, repositoryName = _ref.repositoryName;
22
+ if (!ecr) ecr = new _awsSdk["default"].ECR(awsConfig);
23
+ _context.prev = 2;
24
+ _context.next = 5;
25
+ return ecr.describeRepositories({
26
+ repositoryNames: [repositoryName]
27
+ }).promise();
28
+ case 5:
29
+ _yield$ecr$describeRe = _context.sent;
30
+ repositories = _yield$ecr$describeRe.repositories;
31
+ _repository = repositories === null || repositories === void 0 ? void 0 : repositories[0];
32
+ if (!_repository) {
33
+ _context.next = 10;
51
34
  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
- }
35
+ }
36
+ return _context.abrupt("return", _repository);
37
+ case 10:
38
+ _context.next = 14;
39
+ break;
40
+ case 12:
41
+ _context.prev = 12;
42
+ _context.t0 = _context["catch"](2);
43
+ case 14:
44
+ // eslint-disable-next-line no-console
45
+ console.error("Creating ECR repository {bold ".concat(repositoryName, "}..."));
46
+ _context.next = 17;
47
+ return ecr.createRepository({
48
+ repositoryName: repositoryName
49
+ }).promise();
50
+ case 17:
51
+ _yield$ecr$createRepo = _context.sent;
52
+ repository = _yield$ecr$createRepo.repository;
53
+ if (repository) {
54
+ _context.next = 21;
55
+ break;
56
+ }
57
+ throw new Error("repository is missing from createRepository response");
58
+ case 21:
59
+ return _context.abrupt("return", repository);
60
+ case 22:
61
+ case "end":
62
+ return _context.stop();
83
63
  }
84
64
  }, _callee, null, [[2, 12]]);
85
65
  }));
86
66
  return _upsertECRRepository.apply(this, arguments);
87
- }
67
+ }
68
+ module.exports = exports.default;
@@ -0,0 +1,33 @@
1
+ // @flow
2
+
3
+ import AWS from 'aws-sdk';
4
+ export default async function upsertECRRepository({
5
+ ecr,
6
+ awsConfig,
7
+ repositoryName
8
+ }) {
9
+ if (!ecr) ecr = new AWS.ECR(awsConfig);
10
+ try {
11
+ const {
12
+ repositories
13
+ } = await ecr.describeRepositories({
14
+ repositoryNames: [repositoryName]
15
+ }).promise();
16
+ const repository = repositories === null || repositories === void 0 ? void 0 : repositories[0];
17
+ if (repository) return repository;
18
+ } catch (error) {
19
+ // ignore
20
+ }
21
+
22
+ // eslint-disable-next-line no-console
23
+ console.error(`Creating ECR repository {bold ${repositoryName}}...`);
24
+ const {
25
+ repository
26
+ } = await ecr.createRepository({
27
+ repositoryName
28
+ }).promise();
29
+ if (!repository) {
30
+ throw new Error(`repository is missing from createRepository response`);
31
+ }
32
+ return repository;
33
+ }
@@ -1,13 +0,0 @@
1
- import AWS from 'aws-sdk';
2
- export default function copyECRImage({ from, to, }: {
3
- from: {
4
- imageUri: string;
5
- ecr?: AWS.ECR;
6
- awsConfig?: AWS.ConfigurationOptions;
7
- };
8
- to: {
9
- imageUri: string;
10
- ecr?: AWS.ECR;
11
- awsConfig?: AWS.ConfigurationOptions;
12
- };
13
- }): Promise<void>;
@@ -1,76 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = copyECRImage;
7
-
8
- var _promisifyChildProcess = require("promisify-child-process");
9
-
10
- var _loginToECR = _interopRequireDefault(require("./loginToECR"));
11
-
12
- var _ecrImageExists = _interopRequireDefault(require("./ecrImageExists"));
13
-
14
- var _parseECRImageUri = _interopRequireDefault(require("./parseECRImageUri"));
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- async function copyECRImage({
19
- from,
20
- to
21
- }) {
22
- if (from.imageUri === to.imageUri) return;
23
- const srcRepositoryUri = from.imageUri.replace(/:.+/, '');
24
- const repositoryUri = to.imageUri.replace(/:.+/, '');
25
- const {
26
- region: fromRegion
27
- } = (0, _parseECRImageUri.default)(from.imageUri);
28
- const {
29
- region: toRegion,
30
- repositoryName,
31
- imageTag
32
- } = (0, _parseECRImageUri.default)(to.imageUri);
33
-
34
- if (await (0, _ecrImageExists.default)({
35
- awsConfig: { ...to.awsConfig,
36
- region: toRegion
37
- },
38
- ecr: to.ecr,
39
- repositoryName,
40
- imageTag
41
- })) {
42
- // eslint-disable-next-line no-console
43
- console.error(`Clarity image already exists in your ECR: ${repositoryName}:${imageTag}`);
44
- } else {
45
- // eslint-disable-next-line no-console
46
- console.error(`Logging into source ECR: ${srcRepositoryUri.replace(/\/.*/, '')}...`);
47
- await (0, _loginToECR.default)({
48
- ecr: from.ecr,
49
- awsConfig: { ...from.awsConfig,
50
- region: fromRegion
51
- }
52
- }); // eslint-disable-next-line no-console
53
-
54
- console.error(`Pulling ${from.imageUri}...`);
55
- await (0, _promisifyChildProcess.spawn)('docker', ['pull', from.imageUri], {
56
- stdio: 'inherit'
57
- }); // eslint-disable-next-line no-console
58
-
59
- console.error(`Logging into dest ECR: ${repositoryUri.replace(/\/.*/, '')}...`);
60
- await (0, _loginToECR.default)({
61
- ecr: to.ecr,
62
- awsConfig: { ...to.awsConfig,
63
- region: toRegion
64
- }
65
- }); // eslint-disable-next-line no-console
66
-
67
- console.error(`Pushing ${to.imageUri}...`);
68
- await (0, _promisifyChildProcess.spawn)('docker', ['tag', from.imageUri, to.imageUri], {
69
- stdio: 'inherit'
70
- });
71
- await (0, _promisifyChildProcess.spawn)('docker', ['push', to.imageUri], {
72
- stdio: 'inherit'
73
- });
74
- }
75
- }
76
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3B5RUNSSW1hZ2UudHMiXSwibmFtZXMiOlsiY29weUVDUkltYWdlIiwiZnJvbSIsInRvIiwiaW1hZ2VVcmkiLCJzcmNSZXBvc2l0b3J5VXJpIiwicmVwbGFjZSIsInJlcG9zaXRvcnlVcmkiLCJyZWdpb24iLCJmcm9tUmVnaW9uIiwidG9SZWdpb24iLCJyZXBvc2l0b3J5TmFtZSIsImltYWdlVGFnIiwiYXdzQ29uZmlnIiwiZWNyIiwiY29uc29sZSIsImVycm9yIiwic3RkaW8iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVlLGVBQWVBLFlBQWYsQ0FBNEI7QUFDekNDLEVBQUFBLElBRHlDO0FBRXpDQyxFQUFBQTtBQUZ5QyxDQUE1QixFQWNHO0FBQ2hCLE1BQUlELElBQUksQ0FBQ0UsUUFBTCxLQUFrQkQsRUFBRSxDQUFDQyxRQUF6QixFQUFtQztBQUNuQyxRQUFNQyxnQkFBZ0IsR0FBR0gsSUFBSSxDQUFDRSxRQUFMLENBQWNFLE9BQWQsQ0FBc0IsS0FBdEIsRUFBNkIsRUFBN0IsQ0FBekI7QUFDQSxRQUFNQyxhQUFhLEdBQUdKLEVBQUUsQ0FBQ0MsUUFBSCxDQUFZRSxPQUFaLENBQW9CLEtBQXBCLEVBQTJCLEVBQTNCLENBQXRCO0FBRUEsUUFBTTtBQUFFRSxJQUFBQSxNQUFNLEVBQUVDO0FBQVYsTUFBeUIsK0JBQWlCUCxJQUFJLENBQUNFLFFBQXRCLENBQS9CO0FBQ0EsUUFBTTtBQUNKSSxJQUFBQSxNQUFNLEVBQUVFLFFBREo7QUFFSkMsSUFBQUEsY0FGSTtBQUdKQyxJQUFBQTtBQUhJLE1BSUYsK0JBQWlCVCxFQUFFLENBQUNDLFFBQXBCLENBSko7O0FBTUEsTUFDRSxNQUFNLDZCQUFlO0FBQ25CUyxJQUFBQSxTQUFTLEVBQUUsRUFBRSxHQUFHVixFQUFFLENBQUNVLFNBQVI7QUFBbUJMLE1BQUFBLE1BQU0sRUFBRUU7QUFBM0IsS0FEUTtBQUVuQkksSUFBQUEsR0FBRyxFQUFFWCxFQUFFLENBQUNXLEdBRlc7QUFHbkJILElBQUFBLGNBSG1CO0FBSW5CQyxJQUFBQTtBQUptQixHQUFmLENBRFIsRUFPRTtBQUNBO0FBQ0FHLElBQUFBLE9BQU8sQ0FBQ0MsS0FBUixDQUNHLDZDQUE0Q0wsY0FBZSxJQUFHQyxRQUFTLEVBRDFFO0FBR0QsR0FaRCxNQVlPO0FBQ0w7QUFDQUcsSUFBQUEsT0FBTyxDQUFDQyxLQUFSLENBQ0csNEJBQTJCWCxnQkFBZ0IsQ0FBQ0MsT0FBakIsQ0FBeUIsTUFBekIsRUFBaUMsRUFBakMsQ0FBcUMsS0FEbkU7QUFJQSxVQUFNLHlCQUFXO0FBQ2ZRLE1BQUFBLEdBQUcsRUFBRVosSUFBSSxDQUFDWSxHQURLO0FBRWZELE1BQUFBLFNBQVMsRUFBRSxFQUFFLEdBQUdYLElBQUksQ0FBQ1csU0FBVjtBQUFxQkwsUUFBQUEsTUFBTSxFQUFFQztBQUE3QjtBQUZJLEtBQVgsQ0FBTixDQU5LLENBV0w7O0FBQ0FNLElBQUFBLE9BQU8sQ0FBQ0MsS0FBUixDQUFlLFdBQVVkLElBQUksQ0FBQ0UsUUFBUyxLQUF2QztBQUNBLFVBQU0sa0NBQU0sUUFBTixFQUFnQixDQUFDLE1BQUQsRUFBU0YsSUFBSSxDQUFDRSxRQUFkLENBQWhCLEVBQXlDO0FBQUVhLE1BQUFBLEtBQUssRUFBRTtBQUFULEtBQXpDLENBQU4sQ0FiSyxDQWVMOztBQUNBRixJQUFBQSxPQUFPLENBQUNDLEtBQVIsQ0FDRywwQkFBeUJULGFBQWEsQ0FBQ0QsT0FBZCxDQUFzQixNQUF0QixFQUE4QixFQUE5QixDQUFrQyxLQUQ5RDtBQUdBLFVBQU0seUJBQVc7QUFDZlEsTUFBQUEsR0FBRyxFQUFFWCxFQUFFLENBQUNXLEdBRE87QUFFZkQsTUFBQUEsU0FBUyxFQUFFLEVBQUUsR0FBR1YsRUFBRSxDQUFDVSxTQUFSO0FBQW1CTCxRQUFBQSxNQUFNLEVBQUVFO0FBQTNCO0FBRkksS0FBWCxDQUFOLENBbkJLLENBd0JMOztBQUNBSyxJQUFBQSxPQUFPLENBQUNDLEtBQVIsQ0FBZSxXQUFVYixFQUFFLENBQUNDLFFBQVMsS0FBckM7QUFDQSxVQUFNLGtDQUFNLFFBQU4sRUFBZ0IsQ0FBQyxLQUFELEVBQVFGLElBQUksQ0FBQ0UsUUFBYixFQUF1QkQsRUFBRSxDQUFDQyxRQUExQixDQUFoQixFQUFxRDtBQUN6RGEsTUFBQUEsS0FBSyxFQUFFO0FBRGtELEtBQXJELENBQU47QUFHQSxVQUFNLGtDQUFNLFFBQU4sRUFBZ0IsQ0FBQyxNQUFELEVBQVNkLEVBQUUsQ0FBQ0MsUUFBWixDQUFoQixFQUF1QztBQUFFYSxNQUFBQSxLQUFLLEVBQUU7QUFBVCxLQUF2QyxDQUFOO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBV1MgZnJvbSAnYXdzLXNkaydcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAncHJvbWlzaWZ5LWNoaWxkLXByb2Nlc3MnXG5pbXBvcnQgbG9naW5Ub0VDUiBmcm9tICcuL2xvZ2luVG9FQ1InXG5pbXBvcnQgZWNySW1hZ2VFeGlzdHMgZnJvbSAnLi9lY3JJbWFnZUV4aXN0cydcbmltcG9ydCBwYXJzZUVDUkltYWdlVXJpIGZyb20gJy4vcGFyc2VFQ1JJbWFnZVVyaSdcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gY29weUVDUkltYWdlKHtcbiAgZnJvbSxcbiAgdG8sXG59OiB7XG4gIGZyb206IHtcbiAgICBpbWFnZVVyaTogc3RyaW5nXG4gICAgZWNyPzogQVdTLkVDUlxuICAgIGF3c0NvbmZpZz86IEFXUy5Db25maWd1cmF0aW9uT3B0aW9uc1xuICB9XG4gIHRvOiB7XG4gICAgaW1hZ2VVcmk6IHN0cmluZ1xuICAgIGVjcj86IEFXUy5FQ1JcbiAgICBhd3NDb25maWc/OiBBV1MuQ29uZmlndXJhdGlvbk9wdGlvbnNcbiAgfVxufSk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoZnJvbS5pbWFnZVVyaSA9PT0gdG8uaW1hZ2VVcmkpIHJldHVyblxuICBjb25zdCBzcmNSZXBvc2l0b3J5VXJpID0gZnJvbS5pbWFnZVVyaS5yZXBsYWNlKC86LisvLCAnJylcbiAgY29uc3QgcmVwb3NpdG9yeVVyaSA9IHRvLmltYWdlVXJpLnJlcGxhY2UoLzouKy8sICcnKVxuXG4gIGNvbnN0IHsgcmVnaW9uOiBmcm9tUmVnaW9uIH0gPSBwYXJzZUVDUkltYWdlVXJpKGZyb20uaW1hZ2VVcmkpXG4gIGNvbnN0IHtcbiAgICByZWdpb246IHRvUmVnaW9uLFxuICAgIHJlcG9zaXRvcnlOYW1lLFxuICAgIGltYWdlVGFnLFxuICB9ID0gcGFyc2VFQ1JJbWFnZVVyaSh0by5pbWFnZVVyaSlcblxuICBpZiAoXG4gICAgYXdhaXQgZWNySW1hZ2VFeGlzdHMoe1xuICAgICAgYXdzQ29uZmlnOiB7IC4uLnRvLmF3c0NvbmZpZywgcmVnaW9uOiB0b1JlZ2lvbiB9LFxuICAgICAgZWNyOiB0by5lY3IsXG4gICAgICByZXBvc2l0b3J5TmFtZSxcbiAgICAgIGltYWdlVGFnLFxuICAgIH0pXG4gICkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBDbGFyaXR5IGltYWdlIGFscmVhZHkgZXhpc3RzIGluIHlvdXIgRUNSOiAke3JlcG9zaXRvcnlOYW1lfToke2ltYWdlVGFnfWBcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYExvZ2dpbmcgaW50byBzb3VyY2UgRUNSOiAke3NyY1JlcG9zaXRvcnlVcmkucmVwbGFjZSgvXFwvLiovLCAnJyl9Li4uYFxuICAgIClcblxuICAgIGF3YWl0IGxvZ2luVG9FQ1Ioe1xuICAgICAgZWNyOiBmcm9tLmVjcixcbiAgICAgIGF3c0NvbmZpZzogeyAuLi5mcm9tLmF3c0NvbmZpZywgcmVnaW9uOiBmcm9tUmVnaW9uIH0sXG4gICAgfSlcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5lcnJvcihgUHVsbGluZyAke2Zyb20uaW1hZ2VVcml9Li4uYClcbiAgICBhd2FpdCBzcGF3bignZG9ja2VyJywgWydwdWxsJywgZnJvbS5pbWFnZVVyaV0sIHsgc3RkaW86ICdpbmhlcml0JyB9KVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYExvZ2dpbmcgaW50byBkZXN0IEVDUjogJHtyZXBvc2l0b3J5VXJpLnJlcGxhY2UoL1xcLy4qLywgJycpfS4uLmBcbiAgICApXG4gICAgYXdhaXQgbG9naW5Ub0VDUih7XG4gICAgICBlY3I6IHRvLmVjcixcbiAgICAgIGF3c0NvbmZpZzogeyAuLi50by5hd3NDb25maWcsIHJlZ2lvbjogdG9SZWdpb24gfSxcbiAgICB9KVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKGBQdXNoaW5nICR7dG8uaW1hZ2VVcml9Li4uYClcbiAgICBhd2FpdCBzcGF3bignZG9ja2VyJywgWyd0YWcnLCBmcm9tLmltYWdlVXJpLCB0by5pbWFnZVVyaV0sIHtcbiAgICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgfSlcbiAgICBhd2FpdCBzcGF3bignZG9ja2VyJywgWydwdXNoJywgdG8uaW1hZ2VVcmldLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSlcbiAgfVxufVxuIl19
@@ -1,9 +0,0 @@
1
- import AWS from 'aws-sdk';
2
- export default function ecrImageExists({ ecr, awsConfig, imageUri, registryId, repositoryName, imageTag, }: {
3
- ecr?: AWS.ECR;
4
- awsConfig?: AWS.ConfigurationOptions;
5
- imageUri?: string;
6
- registryId?: string;
7
- repositoryName?: string;
8
- imageTag?: string;
9
- }): Promise<boolean>;
@@ -1,45 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = ecrImageExists;
7
-
8
- var _awsSdk = _interopRequireDefault(require("aws-sdk"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- async function ecrImageExists({
13
- ecr,
14
- awsConfig,
15
- imageUri,
16
- registryId,
17
- repositoryName,
18
- imageTag
19
- }) {
20
- let region;
21
-
22
- if (imageUri) {
23
- const match = /(\d+)\.dkr\.ecr\.(.+?)\.amazonaws\.com\/(.+?):(.+)/.exec(imageUri);
24
- if (!match) throw new Error(`failed to parse imageUri: ${imageUri}`);
25
- [, registryId, region, repositoryName, imageTag] = match;
26
- }
27
-
28
- if (!region) region = awsConfig === null || awsConfig === void 0 ? void 0 : awsConfig.region;
29
- if (!ecr) ecr = new _awsSdk.default.ECR({ ...awsConfig,
30
- region
31
- });
32
-
33
- if (!repositoryName || !imageTag) {
34
- throw new Error(`missing repositoryName/imageTag or imageUri`);
35
- }
36
-
37
- return await ecr.describeImages({
38
- registryId,
39
- repositoryName,
40
- imageIds: [{
41
- imageTag
42
- }]
43
- }).promise().then(() => true, () => false);
44
- }
45
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lY3JJbWFnZUV4aXN0cy50cyJdLCJuYW1lcyI6WyJlY3JJbWFnZUV4aXN0cyIsImVjciIsImF3c0NvbmZpZyIsImltYWdlVXJpIiwicmVnaXN0cnlJZCIsInJlcG9zaXRvcnlOYW1lIiwiaW1hZ2VUYWciLCJyZWdpb24iLCJtYXRjaCIsImV4ZWMiLCJFcnJvciIsIkFXUyIsIkVDUiIsImRlc2NyaWJlSW1hZ2VzIiwiaW1hZ2VJZHMiLCJwcm9taXNlIiwidGhlbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBRWUsZUFBZUEsY0FBZixDQUE4QjtBQUMzQ0MsRUFBQUEsR0FEMkM7QUFFM0NDLEVBQUFBLFNBRjJDO0FBRzNDQyxFQUFBQSxRQUgyQztBQUkzQ0MsRUFBQUEsVUFKMkM7QUFLM0NDLEVBQUFBLGNBTDJDO0FBTTNDQyxFQUFBQTtBQU4yQyxDQUE5QixFQWNNO0FBQ25CLE1BQUlDLE1BQUo7O0FBQ0EsTUFBSUosUUFBSixFQUFjO0FBQ1osVUFBTUssS0FBSyxHQUFHLHFEQUFxREMsSUFBckQsQ0FDWk4sUUFEWSxDQUFkO0FBR0EsUUFBSSxDQUFDSyxLQUFMLEVBQVksTUFBTSxJQUFJRSxLQUFKLENBQVcsNkJBQTRCUCxRQUFTLEVBQWhELENBQU47QUFDWCxPQUFHQyxVQUFILEVBQWVHLE1BQWYsRUFBdUJGLGNBQXZCLEVBQXVDQyxRQUF2QyxJQUFtREUsS0FBbkQ7QUFDRjs7QUFDRCxNQUFJLENBQUNELE1BQUwsRUFBYUEsTUFBTSxHQUFHTCxTQUFILGFBQUdBLFNBQUgsdUJBQUdBLFNBQVMsQ0FBRUssTUFBcEI7QUFDYixNQUFJLENBQUNOLEdBQUwsRUFBVUEsR0FBRyxHQUFHLElBQUlVLGdCQUFJQyxHQUFSLENBQVksRUFBRSxHQUFHVixTQUFMO0FBQWdCSyxJQUFBQTtBQUFoQixHQUFaLENBQU47O0FBRVYsTUFBSSxDQUFDRixjQUFELElBQW1CLENBQUNDLFFBQXhCLEVBQWtDO0FBQ2hDLFVBQU0sSUFBSUksS0FBSixDQUFXLDZDQUFYLENBQU47QUFDRDs7QUFDRCxTQUFPLE1BQU1ULEdBQUcsQ0FDYlksY0FEVSxDQUNLO0FBQ2RULElBQUFBLFVBRGM7QUFFZEMsSUFBQUEsY0FGYztBQUdkUyxJQUFBQSxRQUFRLEVBQUUsQ0FBQztBQUFFUixNQUFBQTtBQUFGLEtBQUQ7QUFISSxHQURMLEVBTVZTLE9BTlUsR0FPVkMsSUFQVSxDQVFULE1BQU0sSUFSRyxFQVNULE1BQU0sS0FURyxDQUFiO0FBV0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQVdTIGZyb20gJ2F3cy1zZGsnXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGVjckltYWdlRXhpc3RzKHtcbiAgZWNyLFxuICBhd3NDb25maWcsXG4gIGltYWdlVXJpLFxuICByZWdpc3RyeUlkLFxuICByZXBvc2l0b3J5TmFtZSxcbiAgaW1hZ2VUYWcsXG59OiB7XG4gIGVjcj86IEFXUy5FQ1JcbiAgYXdzQ29uZmlnPzogQVdTLkNvbmZpZ3VyYXRpb25PcHRpb25zXG4gIGltYWdlVXJpPzogc3RyaW5nXG4gIHJlZ2lzdHJ5SWQ/OiBzdHJpbmdcbiAgcmVwb3NpdG9yeU5hbWU/OiBzdHJpbmdcbiAgaW1hZ2VUYWc/OiBzdHJpbmdcbn0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgbGV0IHJlZ2lvblxuICBpZiAoaW1hZ2VVcmkpIHtcbiAgICBjb25zdCBtYXRjaCA9IC8oXFxkKylcXC5ka3JcXC5lY3JcXC4oLis/KVxcLmFtYXpvbmF3c1xcLmNvbVxcLyguKz8pOiguKykvLmV4ZWMoXG4gICAgICBpbWFnZVVyaVxuICAgIClcbiAgICBpZiAoIW1hdGNoKSB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBwYXJzZSBpbWFnZVVyaTogJHtpbWFnZVVyaX1gKVxuICAgIDtbLCByZWdpc3RyeUlkLCByZWdpb24sIHJlcG9zaXRvcnlOYW1lLCBpbWFnZVRhZ10gPSBtYXRjaFxuICB9XG4gIGlmICghcmVnaW9uKSByZWdpb24gPSBhd3NDb25maWc/LnJlZ2lvblxuICBpZiAoIWVjcikgZWNyID0gbmV3IEFXUy5FQ1IoeyAuLi5hd3NDb25maWcsIHJlZ2lvbiB9KVxuXG4gIGlmICghcmVwb3NpdG9yeU5hbWUgfHwgIWltYWdlVGFnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtaXNzaW5nIHJlcG9zaXRvcnlOYW1lL2ltYWdlVGFnIG9yIGltYWdlVXJpYClcbiAgfVxuICByZXR1cm4gYXdhaXQgZWNyXG4gICAgLmRlc2NyaWJlSW1hZ2VzKHtcbiAgICAgIHJlZ2lzdHJ5SWQsXG4gICAgICByZXBvc2l0b3J5TmFtZSxcbiAgICAgIGltYWdlSWRzOiBbeyBpbWFnZVRhZyB9XSxcbiAgICB9KVxuICAgIC5wcm9taXNlKClcbiAgICAudGhlbihcbiAgICAgICgpID0+IHRydWUsXG4gICAgICAoKSA9PiBmYWxzZVxuICAgIClcbn1cbiJdfQ==
package/es/index.d.ts DELETED
@@ -1,6 +0,0 @@
1
- export { default as copyECRImage } from './copyECRImage';
2
- export { default as ecrImageExists } from './ecrImageExists';
3
- export { default as loginToECR } from './loginToECR';
4
- export { default as tagECRImage } from './tagECRImage';
5
- export { default as parseECRImageUri } from './parseECRImageUri';
6
- export { default as upsertECRRepository } from './upsertECRRepository';
package/es/index.js DELETED
@@ -1,56 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "copyECRImage", {
7
- enumerable: true,
8
- get: function () {
9
- return _copyECRImage.default;
10
- }
11
- });
12
- Object.defineProperty(exports, "ecrImageExists", {
13
- enumerable: true,
14
- get: function () {
15
- return _ecrImageExists.default;
16
- }
17
- });
18
- Object.defineProperty(exports, "loginToECR", {
19
- enumerable: true,
20
- get: function () {
21
- return _loginToECR.default;
22
- }
23
- });
24
- Object.defineProperty(exports, "parseECRImageUri", {
25
- enumerable: true,
26
- get: function () {
27
- return _parseECRImageUri.default;
28
- }
29
- });
30
- Object.defineProperty(exports, "tagECRImage", {
31
- enumerable: true,
32
- get: function () {
33
- return _tagECRImage.default;
34
- }
35
- });
36
- Object.defineProperty(exports, "upsertECRRepository", {
37
- enumerable: true,
38
- get: function () {
39
- return _upsertECRRepository.default;
40
- }
41
- });
42
-
43
- var _copyECRImage = _interopRequireDefault(require("./copyECRImage"));
44
-
45
- var _ecrImageExists = _interopRequireDefault(require("./ecrImageExists"));
46
-
47
- var _loginToECR = _interopRequireDefault(require("./loginToECR"));
48
-
49
- var _tagECRImage = _interopRequireDefault(require("./tagECRImage"));
50
-
51
- var _parseECRImageUri = _interopRequireDefault(require("./parseECRImageUri"));
52
-
53
- var _upsertECRRepository = _interopRequireDefault(require("./upsertECRRepository"));
54
-
55
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
56
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgYXMgY29weUVDUkltYWdlIH0gZnJvbSAnLi9jb3B5RUNSSW1hZ2UnXG5leHBvcnQgeyBkZWZhdWx0IGFzIGVjckltYWdlRXhpc3RzIH0gZnJvbSAnLi9lY3JJbWFnZUV4aXN0cydcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbG9naW5Ub0VDUiB9IGZyb20gJy4vbG9naW5Ub0VDUidcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGFnRUNSSW1hZ2UgfSBmcm9tICcuL3RhZ0VDUkltYWdlJ1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJzZUVDUkltYWdlVXJpIH0gZnJvbSAnLi9wYXJzZUVDUkltYWdlVXJpJ1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1cHNlcnRFQ1JSZXBvc2l0b3J5IH0gZnJvbSAnLi91cHNlcnRFQ1JSZXBvc2l0b3J5J1xuIl19
@@ -1,8 +0,0 @@
1
- /**
2
- * @prettier
3
- */
4
- import AWS from 'aws-sdk';
5
- export default function loginToECR({ ecr, awsConfig, }: {
6
- ecr?: AWS.ECR;
7
- awsConfig?: AWS.ConfigurationOptions;
8
- }): Promise<void>;
package/es/loginToECR.js DELETED
@@ -1,56 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = loginToECR;
7
-
8
- var _awsSdk = _interopRequireDefault(require("aws-sdk"));
9
-
10
- var _promisifyChildProcess = require("promisify-child-process");
11
-
12
- var _base64Js = _interopRequireDefault(require("base64-js"));
13
-
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- /**
17
- * @prettier
18
- */
19
- async function loginToECR({
20
- ecr,
21
- awsConfig
22
- }) {
23
- if (!ecr) ecr = new _awsSdk.default.ECR(awsConfig);
24
- const {
25
- authorizationData
26
- } = await ecr.getAuthorizationToken().promise();
27
- const {
28
- authorizationToken,
29
- proxyEndpoint
30
- } = (authorizationData === null || authorizationData === void 0 ? void 0 : authorizationData[0]) || {};
31
-
32
- if (!authorizationToken) {
33
- throw new Error('failed to get authorizationToken from ECR');
34
- }
35
-
36
- if (!proxyEndpoint) {
37
- throw new Error('failed to get proxyEndpoint from ECR');
38
- } // this is silly...
39
-
40
-
41
- const decoded = new Buffer(_base64Js.default.toByteArray(authorizationToken)).toString('utf8');
42
- const [user, password] = decoded.split(/:/);
43
- const child = (0, _promisifyChildProcess.spawn)('docker', ['login', '-u', user, '--password-stdin', proxyEndpoint], {
44
- stdio: 'pipe',
45
- encoding: 'utf8'
46
- });
47
-
48
- if (!child.stdin) {
49
- throw new Error('expected child.stdin to be defined');
50
- }
51
-
52
- child.stdin.write(password);
53
- child.stdin.end();
54
- await child;
55
- }
56
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2dpblRvRUNSLnRzIl0sIm5hbWVzIjpbImxvZ2luVG9FQ1IiLCJlY3IiLCJhd3NDb25maWciLCJBV1MiLCJFQ1IiLCJhdXRob3JpemF0aW9uRGF0YSIsImdldEF1dGhvcml6YXRpb25Ub2tlbiIsInByb21pc2UiLCJhdXRob3JpemF0aW9uVG9rZW4iLCJwcm94eUVuZHBvaW50IiwiRXJyb3IiLCJkZWNvZGVkIiwiQnVmZmVyIiwiYmFzZTY0IiwidG9CeXRlQXJyYXkiLCJ0b1N0cmluZyIsInVzZXIiLCJwYXNzd29yZCIsInNwbGl0IiwiY2hpbGQiLCJzdGRpbyIsImVuY29kaW5nIiwic3RkaW4iLCJ3cml0ZSIsImVuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBOztBQUNBOztBQUNBOzs7O0FBTEE7QUFDQTtBQUNBO0FBS2UsZUFBZUEsVUFBZixDQUEwQjtBQUN2Q0MsRUFBQUEsR0FEdUM7QUFFdkNDLEVBQUFBO0FBRnVDLENBQTFCLEVBTUc7QUFDaEIsTUFBSSxDQUFDRCxHQUFMLEVBQVVBLEdBQUcsR0FBRyxJQUFJRSxnQkFBSUMsR0FBUixDQUFZRixTQUFaLENBQU47QUFDVixRQUFNO0FBQUVHLElBQUFBO0FBQUYsTUFBd0IsTUFBTUosR0FBRyxDQUFDSyxxQkFBSixHQUE0QkMsT0FBNUIsRUFBcEM7QUFDQSxRQUFNO0FBQUVDLElBQUFBLGtCQUFGO0FBQXNCQyxJQUFBQTtBQUF0QixNQUF3QyxDQUFBSixpQkFBaUIsU0FBakIsSUFBQUEsaUJBQWlCLFdBQWpCLFlBQUFBLGlCQUFpQixDQUFHLENBQUgsQ0FBakIsS0FBMEIsRUFBeEU7O0FBQ0EsTUFBSSxDQUFDRyxrQkFBTCxFQUF5QjtBQUN2QixVQUFNLElBQUlFLEtBQUosQ0FBVSwyQ0FBVixDQUFOO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFDRCxhQUFMLEVBQW9CO0FBQ2xCLFVBQU0sSUFBSUMsS0FBSixDQUFVLHNDQUFWLENBQU47QUFDRCxHQVRlLENBVWhCOzs7QUFDQSxRQUFNQyxPQUFPLEdBQUcsSUFBSUMsTUFBSixDQUFXQyxrQkFBT0MsV0FBUCxDQUFtQk4sa0JBQW5CLENBQVgsRUFBbURPLFFBQW5ELENBQ2QsTUFEYyxDQUFoQjtBQUdBLFFBQU0sQ0FBQ0MsSUFBRCxFQUFPQyxRQUFQLElBQW1CTixPQUFPLENBQUNPLEtBQVIsQ0FBYyxHQUFkLENBQXpCO0FBQ0EsUUFBTUMsS0FBSyxHQUFHLGtDQUNaLFFBRFksRUFFWixDQUFDLE9BQUQsRUFBVSxJQUFWLEVBQWdCSCxJQUFoQixFQUFzQixrQkFBdEIsRUFBMENQLGFBQTFDLENBRlksRUFHWjtBQUNFVyxJQUFBQSxLQUFLLEVBQUUsTUFEVDtBQUVFQyxJQUFBQSxRQUFRLEVBQUU7QUFGWixHQUhZLENBQWQ7O0FBUUEsTUFBSSxDQUFDRixLQUFLLENBQUNHLEtBQVgsRUFBa0I7QUFDaEIsVUFBTSxJQUFJWixLQUFKLENBQVUsb0NBQVYsQ0FBTjtBQUNEOztBQUNEUyxFQUFBQSxLQUFLLENBQUNHLEtBQU4sQ0FBWUMsS0FBWixDQUFrQk4sUUFBbEI7QUFDQUUsRUFBQUEsS0FBSyxDQUFDRyxLQUFOLENBQVlFLEdBQVo7QUFDQSxRQUFNTCxLQUFOO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgQVdTIGZyb20gJ2F3cy1zZGsnXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ3Byb21pc2lmeS1jaGlsZC1wcm9jZXNzJ1xuaW1wb3J0IGJhc2U2NCBmcm9tICdiYXNlNjQtanMnXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGxvZ2luVG9FQ1Ioe1xuICBlY3IsXG4gIGF3c0NvbmZpZyxcbn06IHtcbiAgZWNyPzogQVdTLkVDUlxuICBhd3NDb25maWc/OiBBV1MuQ29uZmlndXJhdGlvbk9wdGlvbnNcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFlY3IpIGVjciA9IG5ldyBBV1MuRUNSKGF3c0NvbmZpZylcbiAgY29uc3QgeyBhdXRob3JpemF0aW9uRGF0YSB9ID0gYXdhaXQgZWNyLmdldEF1dGhvcml6YXRpb25Ub2tlbigpLnByb21pc2UoKVxuICBjb25zdCB7IGF1dGhvcml6YXRpb25Ub2tlbiwgcHJveHlFbmRwb2ludCB9ID0gYXV0aG9yaXphdGlvbkRhdGE/LlswXSB8fCB7fVxuICBpZiAoIWF1dGhvcml6YXRpb25Ub2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGdldCBhdXRob3JpemF0aW9uVG9rZW4gZnJvbSBFQ1InKVxuICB9XG4gIGlmICghcHJveHlFbmRwb2ludCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGdldCBwcm94eUVuZHBvaW50IGZyb20gRUNSJylcbiAgfVxuICAvLyB0aGlzIGlzIHNpbGx5Li4uXG4gIGNvbnN0IGRlY29kZWQgPSBuZXcgQnVmZmVyKGJhc2U2NC50b0J5dGVBcnJheShhdXRob3JpemF0aW9uVG9rZW4pKS50b1N0cmluZyhcbiAgICAndXRmOCdcbiAgKVxuICBjb25zdCBbdXNlciwgcGFzc3dvcmRdID0gZGVjb2RlZC5zcGxpdCgvOi8pXG4gIGNvbnN0IGNoaWxkID0gc3Bhd24oXG4gICAgJ2RvY2tlcicsXG4gICAgWydsb2dpbicsICctdScsIHVzZXIsICctLXBhc3N3b3JkLXN0ZGluJywgcHJveHlFbmRwb2ludF0sXG4gICAge1xuICAgICAgc3RkaW86ICdwaXBlJyxcbiAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgfVxuICApXG4gIGlmICghY2hpbGQuc3RkaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGNoaWxkLnN0ZGluIHRvIGJlIGRlZmluZWQnKVxuICB9XG4gIGNoaWxkLnN0ZGluLndyaXRlKHBhc3N3b3JkKVxuICBjaGlsZC5zdGRpbi5lbmQoKVxuICBhd2FpdCBjaGlsZFxufVxuIl19
@@ -1,6 +0,0 @@
1
- export default function parseECRImageUri(imageUri: string): {
2
- registryId: string;
3
- region: string;
4
- repositoryName: string;
5
- imageTag: string;
6
- };
@@ -1,19 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = parseECRImageUri;
7
-
8
- function parseECRImageUri(imageUri) {
9
- const match = /(\d+)\.dkr\.ecr\.([^.]+)\.amazonaws\.com\/([^:]+):(.+)/.exec(imageUri);
10
- if (!match) throw new Error(`invalid imageUri: ${imageUri}`);
11
- const [, registryId, region, repositoryName, imageTag] = match;
12
- return {
13
- registryId,
14
- region,
15
- repositoryName,
16
- imageTag
17
- };
18
- }
19
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJzZUVDUkltYWdlVXJpLnRzIl0sIm5hbWVzIjpbInBhcnNlRUNSSW1hZ2VVcmkiLCJpbWFnZVVyaSIsIm1hdGNoIiwiZXhlYyIsIkVycm9yIiwicmVnaXN0cnlJZCIsInJlZ2lvbiIsInJlcG9zaXRvcnlOYW1lIiwiaW1hZ2VUYWciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBZSxTQUFTQSxnQkFBVCxDQUEwQkMsUUFBMUIsRUFLYjtBQUNBLFFBQU1DLEtBQUssR0FBRyx5REFBeURDLElBQXpELENBQ1pGLFFBRFksQ0FBZDtBQUdBLE1BQUksQ0FBQ0MsS0FBTCxFQUFZLE1BQU0sSUFBSUUsS0FBSixDQUFXLHFCQUFvQkgsUUFBUyxFQUF4QyxDQUFOO0FBQ1osUUFBTSxHQUFHSSxVQUFILEVBQWVDLE1BQWYsRUFBdUJDLGNBQXZCLEVBQXVDQyxRQUF2QyxJQUFtRE4sS0FBekQ7QUFDQSxTQUFPO0FBQUVHLElBQUFBLFVBQUY7QUFBY0MsSUFBQUEsTUFBZDtBQUFzQkMsSUFBQUEsY0FBdEI7QUFBc0NDLElBQUFBO0FBQXRDLEdBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlRUNSSW1hZ2VVcmkoaW1hZ2VVcmk6IHN0cmluZyk6IHtcbiAgcmVnaXN0cnlJZDogc3RyaW5nXG4gIHJlZ2lvbjogc3RyaW5nXG4gIHJlcG9zaXRvcnlOYW1lOiBzdHJpbmdcbiAgaW1hZ2VUYWc6IHN0cmluZ1xufSB7XG4gIGNvbnN0IG1hdGNoID0gLyhcXGQrKVxcLmRrclxcLmVjclxcLihbXi5dKylcXC5hbWF6b25hd3NcXC5jb21cXC8oW146XSspOiguKykvLmV4ZWMoXG4gICAgaW1hZ2VVcmlcbiAgKVxuICBpZiAoIW1hdGNoKSB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaW1hZ2VVcmk6ICR7aW1hZ2VVcml9YClcbiAgY29uc3QgWywgcmVnaXN0cnlJZCwgcmVnaW9uLCByZXBvc2l0b3J5TmFtZSwgaW1hZ2VUYWddID0gbWF0Y2hcbiAgcmV0dXJuIHsgcmVnaXN0cnlJZCwgcmVnaW9uLCByZXBvc2l0b3J5TmFtZSwgaW1hZ2VUYWcgfVxufVxuIl19
@@ -1,10 +0,0 @@
1
- /**
2
- * @prettier
3
- */
4
- import AWS from 'aws-sdk';
5
- export default function tagECRImage({ ecr, awsConfig, imageUri, tags, }: {
6
- ecr?: AWS.ECR;
7
- awsConfig?: AWS.ConfigurationOptions;
8
- imageUri: string;
9
- tags: string[];
10
- }): Promise<void>;
package/es/tagECRImage.js DELETED
@@ -1,65 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = tagECRImage;
7
-
8
- var _awsSdk = _interopRequireDefault(require("aws-sdk"));
9
-
10
- var _parseECRImageUri = _interopRequireDefault(require("./parseECRImageUri"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- /**
15
- * @prettier
16
- */
17
- async function tagECRImage({
18
- ecr,
19
- awsConfig,
20
- imageUri,
21
- tags
22
- }) {
23
- const {
24
- region,
25
- repositoryName,
26
- imageTag
27
- } = (0, _parseECRImageUri.default)(imageUri);
28
- if (!ecr) ecr = new _awsSdk.default.ECR({ ...awsConfig,
29
- region
30
- });
31
- const imageManifest = await ecr.batchGetImage({
32
- repositoryName,
33
- imageIds: [{
34
- imageTag
35
- }]
36
- }).promise().then(r => {
37
- var _r$images, _r$images$;
38
-
39
- return r === null || r === void 0 ? void 0 : (_r$images = r.images) === null || _r$images === void 0 ? void 0 : (_r$images$ = _r$images[0]) === null || _r$images$ === void 0 ? void 0 : _r$images$.imageManifest;
40
- });
41
-
42
- if (!imageManifest) {
43
- throw new Error(`failed to get image manifest for ${imageUri}`);
44
- }
45
-
46
- if (imageManifest) {
47
- // add other tags to ECR
48
- for (const tag of tags) {
49
- // eslint-disable-next-line no-console
50
- console.error(`Adding tag ${repositoryName}:${tag}`);
51
-
52
- try {
53
- await ecr.putImage({
54
- repositoryName,
55
- imageManifest,
56
- imageTag: tag.substring(tag.indexOf(':') + 1)
57
- }).promise();
58
- } catch (error) {
59
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
- if ((error === null || error === void 0 ? void 0 : error.code) !== 'ImageAlreadyExistsException') throw error;
61
- }
62
- }
63
- }
64
- }
65
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90YWdFQ1JJbWFnZS50cyJdLCJuYW1lcyI6WyJ0YWdFQ1JJbWFnZSIsImVjciIsImF3c0NvbmZpZyIsImltYWdlVXJpIiwidGFncyIsInJlZ2lvbiIsInJlcG9zaXRvcnlOYW1lIiwiaW1hZ2VUYWciLCJBV1MiLCJFQ1IiLCJpbWFnZU1hbmlmZXN0IiwiYmF0Y2hHZXRJbWFnZSIsImltYWdlSWRzIiwicHJvbWlzZSIsInRoZW4iLCJyIiwiaW1hZ2VzIiwiRXJyb3IiLCJ0YWciLCJjb25zb2xlIiwiZXJyb3IiLCJwdXRJbWFnZSIsInN1YnN0cmluZyIsImluZGV4T2YiLCJjb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0E7O0FBQ0E7Ozs7QUFKQTtBQUNBO0FBQ0E7QUFJZSxlQUFlQSxXQUFmLENBQTJCO0FBQ3hDQyxFQUFBQSxHQUR3QztBQUV4Q0MsRUFBQUEsU0FGd0M7QUFHeENDLEVBQUFBLFFBSHdDO0FBSXhDQyxFQUFBQTtBQUp3QyxDQUEzQixFQVVHO0FBQ2hCLFFBQU07QUFBRUMsSUFBQUEsTUFBRjtBQUFVQyxJQUFBQSxjQUFWO0FBQTBCQyxJQUFBQTtBQUExQixNQUF1QywrQkFBaUJKLFFBQWpCLENBQTdDO0FBQ0EsTUFBSSxDQUFDRixHQUFMLEVBQVVBLEdBQUcsR0FBRyxJQUFJTyxnQkFBSUMsR0FBUixDQUFZLEVBQUUsR0FBR1AsU0FBTDtBQUFnQkcsSUFBQUE7QUFBaEIsR0FBWixDQUFOO0FBRVYsUUFBTUssYUFBYSxHQUFHLE1BQU1ULEdBQUcsQ0FDNUJVLGFBRHlCLENBQ1g7QUFDYkwsSUFBQUEsY0FEYTtBQUViTSxJQUFBQSxRQUFRLEVBQUUsQ0FBQztBQUFFTCxNQUFBQTtBQUFGLEtBQUQ7QUFGRyxHQURXLEVBS3pCTSxPQUx5QixHQU16QkMsSUFOeUIsQ0FNbkJDLENBQUQ7QUFBQTs7QUFBQSxXQUFPQSxDQUFQLGFBQU9BLENBQVAsb0NBQU9BLENBQUMsQ0FBRUMsTUFBViw0REFBTyxVQUFZLENBQVosQ0FBUCwrQ0FBTyxXQUFnQk4sYUFBdkI7QUFBQSxHQU5vQixDQUE1Qjs7QUFRQSxNQUFJLENBQUNBLGFBQUwsRUFBb0I7QUFDbEIsVUFBTSxJQUFJTyxLQUFKLENBQVcsb0NBQW1DZCxRQUFTLEVBQXZELENBQU47QUFDRDs7QUFFRCxNQUFJTyxhQUFKLEVBQW1CO0FBQ2pCO0FBQ0EsU0FBSyxNQUFNUSxHQUFYLElBQWtCZCxJQUFsQixFQUF3QjtBQUN0QjtBQUNBZSxNQUFBQSxPQUFPLENBQUNDLEtBQVIsQ0FBZSxjQUFhZCxjQUFlLElBQUdZLEdBQUksRUFBbEQ7O0FBQ0EsVUFBSTtBQUNGLGNBQU1qQixHQUFHLENBQ05vQixRQURHLENBQ007QUFDUmYsVUFBQUEsY0FEUTtBQUVSSSxVQUFBQSxhQUZRO0FBR1JILFVBQUFBLFFBQVEsRUFBRVcsR0FBRyxDQUFDSSxTQUFKLENBQWNKLEdBQUcsQ0FBQ0ssT0FBSixDQUFZLEdBQVosSUFBbUIsQ0FBakM7QUFIRixTQUROLEVBTUhWLE9BTkcsRUFBTjtBQU9ELE9BUkQsQ0FRRSxPQUFPTyxLQUFQLEVBQWM7QUFDZDtBQUNBLFlBQUksQ0FBQ0EsS0FBRCxhQUFDQSxLQUFELHVCQUFDQSxLQUFELENBQWdCSSxJQUFoQixNQUF5Qiw2QkFBN0IsRUFBNEQsTUFBTUosS0FBTjtBQUM3RDtBQUNGO0FBQ0Y7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCBBV1MgZnJvbSAnYXdzLXNkaydcbmltcG9ydCBwYXJzZUVDUkltYWdlVXJpIGZyb20gJy4vcGFyc2VFQ1JJbWFnZVVyaSdcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gdGFnRUNSSW1hZ2Uoe1xuICBlY3IsXG4gIGF3c0NvbmZpZyxcbiAgaW1hZ2VVcmksXG4gIHRhZ3MsXG59OiB7XG4gIGVjcj86IEFXUy5FQ1JcbiAgYXdzQ29uZmlnPzogQVdTLkNvbmZpZ3VyYXRpb25PcHRpb25zXG4gIGltYWdlVXJpOiBzdHJpbmdcbiAgdGFnczogc3RyaW5nW11cbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyByZWdpb24sIHJlcG9zaXRvcnlOYW1lLCBpbWFnZVRhZyB9ID0gcGFyc2VFQ1JJbWFnZVVyaShpbWFnZVVyaSlcbiAgaWYgKCFlY3IpIGVjciA9IG5ldyBBV1MuRUNSKHsgLi4uYXdzQ29uZmlnLCByZWdpb24gfSlcblxuICBjb25zdCBpbWFnZU1hbmlmZXN0ID0gYXdhaXQgZWNyXG4gICAgLmJhdGNoR2V0SW1hZ2Uoe1xuICAgICAgcmVwb3NpdG9yeU5hbWUsXG4gICAgICBpbWFnZUlkczogW3sgaW1hZ2VUYWcgfV0sXG4gICAgfSlcbiAgICAucHJvbWlzZSgpXG4gICAgLnRoZW4oKHIpID0+IHI/LmltYWdlcz8uWzBdPy5pbWFnZU1hbmlmZXN0KVxuXG4gIGlmICghaW1hZ2VNYW5pZmVzdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGdldCBpbWFnZSBtYW5pZmVzdCBmb3IgJHtpbWFnZVVyaX1gKVxuICB9XG5cbiAgaWYgKGltYWdlTWFuaWZlc3QpIHtcbiAgICAvLyBhZGQgb3RoZXIgdGFncyB0byBFQ1JcbiAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihgQWRkaW5nIHRhZyAke3JlcG9zaXRvcnlOYW1lfToke3RhZ31gKVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZWNyXG4gICAgICAgICAgLnB1dEltYWdlKHtcbiAgICAgICAgICAgIHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgaW1hZ2VNYW5pZmVzdCxcbiAgICAgICAgICAgIGltYWdlVGFnOiB0YWcuc3Vic3RyaW5nKHRhZy5pbmRleE9mKCc6JykgKyAxKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5wcm9taXNlKClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGlmICgoZXJyb3IgYXMgYW55KT8uY29kZSAhPT0gJ0ltYWdlQWxyZWFkeUV4aXN0c0V4Y2VwdGlvbicpIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,6 +0,0 @@
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>;