cdk-ecr-deployment 3.2.1 → 3.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.
package/.jsii CHANGED
@@ -3457,7 +3457,7 @@
3457
3457
  "stability": "stable"
3458
3458
  },
3459
3459
  "homepage": "https://github.com/cdklabs/cdk-ecr-deployment",
3460
- "jsiiVersion": "5.1.12 (build 0675712)",
3460
+ "jsiiVersion": "5.7.8 (build 2bc6834)",
3461
3461
  "keywords": [
3462
3462
  "cdk"
3463
3463
  ],
@@ -3472,7 +3472,7 @@
3472
3472
  },
3473
3473
  "name": "cdk-ecr-deployment",
3474
3474
  "readme": {
3475
- "markdown": "# cdk-ecr-deployment\n\n[![Release](https://github.com/cdklabs/cdk-ecr-deployment/actions/workflows/release.yml/badge.svg)](https://github.com/cdklabs/cdk-ecr-deployment/actions/workflows/release.yml)\n[![npm version](https://img.shields.io/npm/v/cdk-ecr-deployment)](https://www.npmjs.com/package/cdk-ecr-deployment)\n[![PyPI](https://img.shields.io/pypi/v/cdk-ecr-deployment)](https://pypi.org/project/cdk-ecr-deployment)\n[![npm](https://img.shields.io/npm/dw/cdk-ecr-deployment?label=npm%20downloads)](https://www.npmjs.com/package/cdk-ecr-deployment)\n[![PyPI - Downloads](https://img.shields.io/pypi/dw/cdk-ecr-deployment?label=pypi%20downloads)](https://pypi.org/project/cdk-ecr-deployment)\n\nCDK construct to synchronize single docker image between docker registries.\n\n**Only use v3 of this package**\n\n⚠️ Version 2.* is no longer supported, as the Go.1.x runtime is no longer supported in AWS Lambda.\\\n⚠️ Version 1.* is no longer supported, as CDK v1 has reached the end-of-life\nstage.\n\n## Features\n\n- Copy image from ECR/external registry to (another) ECR/external registry\n- Copy an archive tarball image from s3 to ECR/external registry\n\n## Environment variables\n\nEnable flags: `true`, `1`. e.g. `export CI=1`\n\n- `CI` indicate if it's CI environment. This flag will enable building lambda from scratch.\n- `NO_PREBUILT_LAMBDA` disable using prebuilt lambda.\n- `FORCE_PREBUILT_LAMBDA` force using prebuilt lambda.\n\n⚠️ If you want to force using prebuilt lambda in CI environment to reduce build time. Try `export FORCE_PREBUILT_LAMBDA=1`.\n\n## Examples\n\n```ts\nimport { DockerImageAsset } from 'aws-cdk-lib/aws-ecr-assets';\n\nconst image = new DockerImageAsset(this, 'CDKDockerImage', {\n directory: path.join(__dirname, 'docker'),\n});\n\n// Copy from cdk docker image asset to another ECR.\nnew ecrdeploy.ECRDeployment(this, 'DeployDockerImage1', {\n src: new ecrdeploy.DockerImageName(image.imageUri),\n dest: new ecrdeploy.DockerImageName(`${cdk.Aws.ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/my-nginx:latest`),\n});\n\n// Copy from docker registry to ECR.\nnew ecrdeploy.ECRDeployment(this, 'DeployDockerImage2', {\n src: new ecrdeploy.DockerImageName('nginx:latest'),\n dest: new ecrdeploy.DockerImageName(`${cdk.Aws.ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/my-nginx2:latest`),\n});\n\n// Copy from private docker registry to ECR.\n// The format of secret in aws secrets manager must be either:\n// - plain text in format <username>:<password>\n// - json in format {\"username\":\"<username>\",\"password\":\"<password>\"}\nnew ecrdeploy.ECRDeployment(this, 'DeployDockerImage3', {\n src: new ecrdeploy.DockerImageName('javacs3/nginx:latest', 'username:password'),\n // src: new ecrdeploy.DockerImageName('javacs3/nginx:latest', 'aws-secrets-manager-secret-name'),\n // src: new ecrdeploy.DockerImageName('javacs3/nginx:latest', 'arn:aws:secretsmanager:us-west-2:000000000000:secret:id'),\n dest: new ecrdeploy.DockerImageName(`${cdk.Aws.ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/my-nginx3:latest`),\n}).addToPrincipalPolicy(new iam.PolicyStatement({\n effect: iam.Effect.ALLOW,\n actions: [\n 'secretsmanager:GetSecretValue',\n ],\n resources: ['*'],\n}));\n```\n\n## Sample: [test/example.ecr-deployment.ts](./test/example.ecr-deployment.ts)\n\n```shell\n# Run the following command to try the sample.\nNO_PREBUILT_LAMBDA=1 npx cdk deploy -a \"npx ts-node -P tsconfig.dev.json --prefer-ts-exts test/example.ecr-deployment.ts\"\n```\n\n## [API](./API.md)\n\n## Tech Details & Contribution\n\nThe core of this project relies on [containers/image](https://github.com/containers/image) which is used by [Skopeo](https://github.com/containers/skopeo).\nPlease take a look at those projects before contribution.\n\nTo support a new docker image source(like docker tarball in s3), you need to implement [image transport interface](https://github.com/containers/image/blob/master/types/types.go). You could take a look at [docker-archive](https://github.com/containers/image/blob/ccb87a8d0f45cf28846e307eb0ec2b9d38a458c2/docker/archive/transport.go) transport for a good start.\n\nTo test the `lambda` folder, `make test`.\n"
3475
+ "markdown": "# cdk-ecr-deployment\n\n[![Release](https://github.com/cdklabs/cdk-ecr-deployment/actions/workflows/release.yml/badge.svg)](https://github.com/cdklabs/cdk-ecr-deployment/actions/workflows/release.yml)\n[![npm version](https://img.shields.io/npm/v/cdk-ecr-deployment)](https://www.npmjs.com/package/cdk-ecr-deployment)\n[![PyPI](https://img.shields.io/pypi/v/cdk-ecr-deployment)](https://pypi.org/project/cdk-ecr-deployment)\n[![npm](https://img.shields.io/npm/dw/cdk-ecr-deployment?label=npm%20downloads)](https://www.npmjs.com/package/cdk-ecr-deployment)\n[![PyPI - Downloads](https://img.shields.io/pypi/dw/cdk-ecr-deployment?label=pypi%20downloads)](https://pypi.org/project/cdk-ecr-deployment)\n\nCDK construct to synchronize single docker image between docker registries.\n\n**Only use v3 of this package**\n\n⚠️ Version 2.* is no longer supported, as the Go.1.x runtime is no longer supported in AWS Lambda.\\\n⚠️ Version 1.* is no longer supported, as CDK v1 has reached the end-of-life\nstage.\n\n## Features\n\n- Copy image from ECR/external registry to (another) ECR/external registry\n- Copy an archive tarball image from s3 to ECR/external registry\n\n## Environment variables\n\nEnable flags: `true`, `1`. e.g. `export CI=1`\n\n- `CI` indicate if it's CI environment. This flag will enable building lambda from scratch.\n- `NO_PREBUILT_LAMBDA` disable using prebuilt lambda.\n- `FORCE_PREBUILT_LAMBDA` force using prebuilt lambda.\n\n⚠️ If you want to force using prebuilt lambda in CI environment to reduce build time. Try `export FORCE_PREBUILT_LAMBDA=1`.\n\n## Examples\n\n```ts\nimport { DockerImageAsset } from 'aws-cdk-lib/aws-ecr-assets';\n\nconst image = new DockerImageAsset(this, 'CDKDockerImage', {\n directory: path.join(__dirname, 'docker'),\n});\n\n// Copy from cdk docker image asset to another ECR.\nnew ecrdeploy.ECRDeployment(this, 'DeployDockerImage1', {\n src: new ecrdeploy.DockerImageName(image.imageUri),\n dest: new ecrdeploy.DockerImageName(`${cdk.Aws.ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/my-nginx:latest`),\n});\n\n// Copy from docker registry to ECR.\nnew ecrdeploy.ECRDeployment(this, 'DeployDockerImage2', {\n src: new ecrdeploy.DockerImageName('nginx:latest'),\n dest: new ecrdeploy.DockerImageName(`${cdk.Aws.ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/my-nginx2:latest`),\n});\n\n// Copy from private docker registry to ECR.\n// The format of secret in aws secrets manager must be either:\n// - plain text in format <username>:<password>\n// - json in format {\"username\":\"<username>\",\"password\":\"<password>\"}\nnew ecrdeploy.ECRDeployment(this, 'DeployDockerImage3', {\n src: new ecrdeploy.DockerImageName('javacs3/nginx:latest', 'username:password'),\n // src: new ecrdeploy.DockerImageName('javacs3/nginx:latest', 'aws-secrets-manager-secret-name'),\n // src: new ecrdeploy.DockerImageName('javacs3/nginx:latest', 'arn:aws:secretsmanager:us-west-2:000000000000:secret:id'),\n dest: new ecrdeploy.DockerImageName(`${cdk.Aws.ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com/my-nginx3:latest`),\n}).addToPrincipalPolicy(new iam.PolicyStatement({\n effect: iam.Effect.ALLOW,\n actions: [\n 'secretsmanager:GetSecretValue',\n ],\n resources: ['*'],\n}));\n```\n\n## Sample: [test/example.ecr-deployment.ts](./test/example.ecr-deployment.ts)\n\nAfter cloning the repository, install dependencies and run a full build:\n\n```console\nyarn --frozen-lockfile --check-files\nyarn build\n```\n\nThen run the example like this:\n\n```shell\n# Run the following command to try the sample.\nNO_PREBUILT_LAMBDA=1 npx cdk deploy -a \"npx ts-node -P tsconfig.dev.json --prefer-ts-exts test/example.ecr-deployment.ts\"\n```\n\nTo run the DockerHub example you will first need to setup a Secret in AWS Secrets Manager to provide DockerHub credentials.\nReplace `username:access-token` with your credentials.\n**Please note that Secrets will occur a cost.**\n\n```console\naws secretsmanager create-secret --name DockerHubCredentials --secret-string \"username:access-token\"\n```\n\nFrom the output, copy the ARN of your new secret and export it as env variable\n\n```console\nexport DOCKERHUB_SECRET_ARN=\"<ARN>\"\n```\n\nFinally run:\n\n```shell\n# Run the following command to try the sample.\nnpx cdk deploy -a \"npx ts-node -P tsconfig.dev.json --prefer-ts-exts test/dockerhub-example.ecr-deployment.ts\"\n```\n\nIf your Secret is encrypted, you might have to adjust the example to also grant decrypt permissions.\n\n## [API](./API.md)\n\n## Tech Details & Contribution\n\nThe core of this project relies on [containers/image](https://github.com/containers/image) which is used by [Skopeo](https://github.com/containers/skopeo).\nPlease take a look at those projects before contribution.\n\nTo support a new docker image source(like docker tarball in s3), you need to implement [image transport interface](https://github.com/containers/image/blob/master/types/types.go). You could take a look at [docker-archive](https://github.com/containers/image/blob/ccb87a8d0f45cf28846e307eb0ec2b9d38a458c2/docker/archive/transport.go) transport for a good start.\n\nAny error in the custom resource provider will show up in the CloudFormation error log as `Invalid PhysicalResourceId`, because of this: <https://github.com/aws/aws-lambda-go/issues/107>. You need to go into the CloudWatch Log Group to find the real error."
3476
3476
  },
3477
3477
  "repository": {
3478
3478
  "type": "git",
@@ -3515,10 +3515,13 @@
3515
3515
  },
3516
3516
  "locationInModule": {
3517
3517
  "filename": "src/index.ts",
3518
- "line": 152
3518
+ "line": 154
3519
3519
  },
3520
3520
  "parameters": [
3521
3521
  {
3522
+ "docs": {
3523
+ "summary": "- The name of the image, e.g. retrieved from `DockerImageAsset.imageUri`."
3524
+ },
3522
3525
  "name": "name",
3523
3526
  "type": {
3524
3527
  "primitive": "string"
@@ -3526,8 +3529,8 @@
3526
3529
  },
3527
3530
  {
3528
3531
  "docs": {
3529
- "remarks": "Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.\n\nIf specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or\nJSON (`{\"username\":\"<username>\",\"password\":\"<password>\"}`).\n\nFor more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html",
3530
- "summary": "The credentials of the docker image."
3532
+ "remarks": "Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.\nIf specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or\nJSON (`{\"username\":\"<username>\",\"password\":\"<password>\"}`).\nFor more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html",
3533
+ "summary": "- The credentials of the docker image."
3531
3534
  },
3532
3535
  "name": "creds",
3533
3536
  "optional": true,
@@ -3543,7 +3546,7 @@
3543
3546
  "kind": "class",
3544
3547
  "locationInModule": {
3545
3548
  "filename": "src/index.ts",
3546
- "line": 151
3549
+ "line": 146
3547
3550
  },
3548
3551
  "name": "DockerImageName",
3549
3552
  "properties": [
@@ -3556,7 +3559,7 @@
3556
3559
  "immutable": true,
3557
3560
  "locationInModule": {
3558
3561
  "filename": "src/index.ts",
3559
- "line": 153
3562
+ "line": 155
3560
3563
  },
3561
3564
  "name": "uri",
3562
3565
  "overrides": "cdk-ecr-deployment.IImageName",
@@ -3566,13 +3569,13 @@
3566
3569
  },
3567
3570
  {
3568
3571
  "docs": {
3569
- "remarks": "Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.\n\nIf specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or\nJSON (`{\"username\":\"<username>\",\"password\":\"<password>\"}`).\n\nFor more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html",
3572
+ "remarks": "Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.\nIf specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or\nJSON (`{\"username\":\"<username>\",\"password\":\"<password>\"}`).\nFor more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html",
3570
3573
  "stability": "stable",
3571
- "summary": "The credentials of the docker image."
3574
+ "summary": "- The credentials of the docker image."
3572
3575
  },
3573
3576
  "locationInModule": {
3574
3577
  "filename": "src/index.ts",
3575
- "line": 152
3578
+ "line": 154
3576
3579
  },
3577
3580
  "name": "creds",
3578
3581
  "optional": true,
@@ -3597,7 +3600,7 @@
3597
3600
  },
3598
3601
  "locationInModule": {
3599
3602
  "filename": "src/index.ts",
3600
- "line": 170
3603
+ "line": 181
3601
3604
  },
3602
3605
  "parameters": [
3603
3606
  {
@@ -3623,7 +3626,7 @@
3623
3626
  "kind": "class",
3624
3627
  "locationInModule": {
3625
3628
  "filename": "src/index.ts",
3626
- "line": 167
3629
+ "line": 178
3627
3630
  },
3628
3631
  "methods": [
3629
3632
  {
@@ -3632,7 +3635,7 @@
3632
3635
  },
3633
3636
  "locationInModule": {
3634
3637
  "filename": "src/index.ts",
3635
- "line": 239
3638
+ "line": 250
3636
3639
  },
3637
3640
  "name": "addToPrincipalPolicy",
3638
3641
  "parameters": [
@@ -3663,7 +3666,7 @@
3663
3666
  "kind": "interface",
3664
3667
  "locationInModule": {
3665
3668
  "filename": "src/index.ts",
3666
- "line": 13
3669
+ "line": 11
3667
3670
  },
3668
3671
  "name": "ECRDeploymentProps",
3669
3672
  "properties": [
@@ -3676,7 +3679,7 @@
3676
3679
  "immutable": true,
3677
3680
  "locationInModule": {
3678
3681
  "filename": "src/index.ts",
3679
- "line": 33
3682
+ "line": 31
3680
3683
  },
3681
3684
  "name": "dest",
3682
3685
  "type": {
@@ -3692,7 +3695,7 @@
3692
3695
  "immutable": true,
3693
3696
  "locationInModule": {
3694
3697
  "filename": "src/index.ts",
3695
- "line": 28
3698
+ "line": 26
3696
3699
  },
3697
3700
  "name": "src",
3698
3701
  "type": {
@@ -3710,7 +3713,7 @@
3710
3713
  "immutable": true,
3711
3714
  "locationInModule": {
3712
3715
  "filename": "src/index.ts",
3713
- "line": 24
3716
+ "line": 22
3714
3717
  },
3715
3718
  "name": "buildImage",
3716
3719
  "optional": true,
@@ -3727,7 +3730,7 @@
3727
3730
  "immutable": true,
3728
3731
  "locationInModule": {
3729
3732
  "filename": "src/index.ts",
3730
- "line": 109
3733
+ "line": 107
3731
3734
  },
3732
3735
  "name": "environment",
3733
3736
  "optional": true,
@@ -3751,7 +3754,7 @@
3751
3754
  "immutable": true,
3752
3755
  "locationInModule": {
3753
3756
  "filename": "src/index.ts",
3754
- "line": 46
3757
+ "line": 44
3755
3758
  },
3756
3759
  "name": "imageArch",
3757
3760
  "optional": true,
@@ -3774,7 +3777,7 @@
3774
3777
  "immutable": true,
3775
3778
  "locationInModule": {
3776
3779
  "filename": "src/index.ts",
3777
- "line": 104
3780
+ "line": 102
3778
3781
  },
3779
3782
  "name": "lambdaHandler",
3780
3783
  "optional": true,
@@ -3792,7 +3795,7 @@
3792
3795
  "immutable": true,
3793
3796
  "locationInModule": {
3794
3797
  "filename": "src/index.ts",
3795
- "line": 97
3798
+ "line": 95
3796
3799
  },
3797
3800
  "name": "lambdaRuntime",
3798
3801
  "optional": true,
@@ -3811,7 +3814,7 @@
3811
3814
  "immutable": true,
3812
3815
  "locationInModule": {
3813
3816
  "filename": "src/index.ts",
3814
- "line": 57
3817
+ "line": 55
3815
3818
  },
3816
3819
  "name": "memoryLimit",
3817
3820
  "optional": true,
@@ -3829,7 +3832,7 @@
3829
3832
  "immutable": true,
3830
3833
  "locationInModule": {
3831
3834
  "filename": "src/index.ts",
3832
- "line": 64
3835
+ "line": 62
3833
3836
  },
3834
3837
  "name": "role",
3835
3838
  "optional": true,
@@ -3848,7 +3851,7 @@
3848
3851
  "immutable": true,
3849
3852
  "locationInModule": {
3850
3853
  "filename": "src/index.ts",
3851
- "line": 90
3854
+ "line": 88
3852
3855
  },
3853
3856
  "name": "securityGroups",
3854
3857
  "optional": true,
@@ -3871,7 +3874,7 @@
3871
3874
  "immutable": true,
3872
3875
  "locationInModule": {
3873
3876
  "filename": "src/index.ts",
3874
- "line": 71
3877
+ "line": 69
3875
3878
  },
3876
3879
  "name": "vpc",
3877
3880
  "optional": true,
@@ -3890,7 +3893,7 @@
3890
3893
  "immutable": true,
3891
3894
  "locationInModule": {
3892
3895
  "filename": "src/index.ts",
3893
- "line": 79
3896
+ "line": 77
3894
3897
  },
3895
3898
  "name": "vpcSubnets",
3896
3899
  "optional": true,
@@ -3910,7 +3913,7 @@
3910
3913
  "kind": "interface",
3911
3914
  "locationInModule": {
3912
3915
  "filename": "src/index.ts",
3913
- "line": 112
3916
+ "line": 110
3914
3917
  },
3915
3918
  "name": "IImageName",
3916
3919
  "properties": [
@@ -3924,7 +3927,7 @@
3924
3927
  "immutable": true,
3925
3928
  "locationInModule": {
3926
3929
  "filename": "src/index.ts",
3927
- "line": 118
3930
+ "line": 116
3928
3931
  },
3929
3932
  "name": "uri",
3930
3933
  "type": {
@@ -3940,7 +3943,7 @@
3940
3943
  },
3941
3944
  "locationInModule": {
3942
3945
  "filename": "src/index.ts",
3943
- "line": 128
3946
+ "line": 126
3944
3947
  },
3945
3948
  "name": "creds",
3946
3949
  "optional": true,
@@ -3963,16 +3966,22 @@
3963
3966
  },
3964
3967
  "locationInModule": {
3965
3968
  "filename": "src/index.ts",
3966
- "line": 158
3969
+ "line": 169
3967
3970
  },
3968
3971
  "parameters": [
3969
3972
  {
3973
+ "docs": {
3974
+ "summary": "- the S3 bucket name and path of the archive (a S3 URI without the s3://)."
3975
+ },
3970
3976
  "name": "p",
3971
3977
  "type": {
3972
3978
  "primitive": "string"
3973
3979
  }
3974
3980
  },
3975
3981
  {
3982
+ "docs": {
3983
+ "summary": "- appended to the end of the name with a `:`, e.g. `:latest`."
3984
+ },
3976
3985
  "name": "ref",
3977
3986
  "optional": true,
3978
3987
  "type": {
@@ -3981,8 +3990,8 @@
3981
3990
  },
3982
3991
  {
3983
3992
  "docs": {
3984
- "remarks": "Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.\n\nIf specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or\nJSON (`{\"username\":\"<username>\",\"password\":\"<password>\"}`).\n\nFor more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html",
3985
- "summary": "The credentials of the docker image."
3993
+ "remarks": "Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.\nIf specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or\nJSON (`{\"username\":\"<username>\",\"password\":\"<password>\"}`).\nFor more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html",
3994
+ "summary": "- The credentials of the docker image."
3986
3995
  },
3987
3996
  "name": "creds",
3988
3997
  "optional": true,
@@ -3998,7 +4007,7 @@
3998
4007
  "kind": "class",
3999
4008
  "locationInModule": {
4000
4009
  "filename": "src/index.ts",
4001
- "line": 156
4010
+ "line": 158
4002
4011
  },
4003
4012
  "name": "S3ArchiveName",
4004
4013
  "properties": [
@@ -4011,7 +4020,7 @@
4011
4020
  "immutable": true,
4012
4021
  "locationInModule": {
4013
4022
  "filename": "src/index.ts",
4014
- "line": 164
4023
+ "line": 175
4015
4024
  },
4016
4025
  "name": "uri",
4017
4026
  "overrides": "cdk-ecr-deployment.IImageName",
@@ -4021,13 +4030,13 @@
4021
4030
  },
4022
4031
  {
4023
4032
  "docs": {
4024
- "remarks": "Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.\n\nIf specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or\nJSON (`{\"username\":\"<username>\",\"password\":\"<password>\"}`).\n\nFor more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html",
4033
+ "remarks": "Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.\nIf specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or\nJSON (`{\"username\":\"<username>\",\"password\":\"<password>\"}`).\nFor more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html",
4025
4034
  "stability": "stable",
4026
- "summary": "The credentials of the docker image."
4035
+ "summary": "- The credentials of the docker image."
4027
4036
  },
4028
4037
  "locationInModule": {
4029
4038
  "filename": "src/index.ts",
4030
- "line": 158
4039
+ "line": 169
4031
4040
  },
4032
4041
  "name": "creds",
4033
4042
  "optional": true,
@@ -4040,6 +4049,6 @@
4040
4049
  "symbolId": "src/index:S3ArchiveName"
4041
4050
  }
4042
4051
  },
4043
- "version": "3.2.1",
4044
- "fingerprint": "4bSRiKQ84kafoVB105sB4gNTjcd0Ck4yLU2zAoM2kKs="
4052
+ "version": "3.3.0",
4053
+ "fingerprint": "XzAPB9yugJfIoHB8jl1sQ52xAQaBBjCs+msSSUDDIjY="
4045
4054
  }
package/API.md CHANGED
@@ -331,8 +331,8 @@ new DockerImageName(name: string, creds?: string)
331
331
 
332
332
  | **Name** | **Type** | **Description** |
333
333
  | --- | --- | --- |
334
- | <code><a href="#cdk-ecr-deployment.DockerImageName.Initializer.parameter.name">name</a></code> | <code>string</code> | *No description.* |
335
- | <code><a href="#cdk-ecr-deployment.DockerImageName.Initializer.parameter.creds">creds</a></code> | <code>string</code> | The credentials of the docker image. |
334
+ | <code><a href="#cdk-ecr-deployment.DockerImageName.Initializer.parameter.name">name</a></code> | <code>string</code> | - The name of the image, e.g. retrieved from `DockerImageAsset.imageUri`. |
335
+ | <code><a href="#cdk-ecr-deployment.DockerImageName.Initializer.parameter.creds">creds</a></code> | <code>string</code> | - The credentials of the docker image. |
336
336
 
337
337
  ---
338
338
 
@@ -340,6 +340,8 @@ new DockerImageName(name: string, creds?: string)
340
340
 
341
341
  - *Type:* string
342
342
 
343
+ The name of the image, e.g. retrieved from `DockerImageAsset.imageUri`.
344
+
343
345
  ---
344
346
 
345
347
  ##### `creds`<sup>Optional</sup> <a name="creds" id="cdk-ecr-deployment.DockerImageName.Initializer.parameter.creds"></a>
@@ -349,10 +351,8 @@ new DockerImageName(name: string, creds?: string)
349
351
  The credentials of the docker image.
350
352
 
351
353
  Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.
352
-
353
354
  If specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or
354
355
  JSON (`{"username":"<username>","password":"<password>"}`).
355
-
356
356
  For more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html
357
357
 
358
358
  ---
@@ -364,7 +364,7 @@ For more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/lates
364
364
  | **Name** | **Type** | **Description** |
365
365
  | --- | --- | --- |
366
366
  | <code><a href="#cdk-ecr-deployment.DockerImageName.property.uri">uri</a></code> | <code>string</code> | The uri of the docker image. |
367
- | <code><a href="#cdk-ecr-deployment.DockerImageName.property.creds">creds</a></code> | <code>string</code> | The credentials of the docker image. |
367
+ | <code><a href="#cdk-ecr-deployment.DockerImageName.property.creds">creds</a></code> | <code>string</code> | - The credentials of the docker image. |
368
368
 
369
369
  ---
370
370
 
@@ -393,10 +393,8 @@ public readonly creds: string;
393
393
  The credentials of the docker image.
394
394
 
395
395
  Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.
396
-
397
396
  If specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or
398
397
  JSON (`{"username":"<username>","password":"<password>"}`).
399
-
400
398
  For more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html
401
399
 
402
400
  ---
@@ -416,9 +414,9 @@ new S3ArchiveName(p: string, ref?: string, creds?: string)
416
414
 
417
415
  | **Name** | **Type** | **Description** |
418
416
  | --- | --- | --- |
419
- | <code><a href="#cdk-ecr-deployment.S3ArchiveName.Initializer.parameter.p">p</a></code> | <code>string</code> | *No description.* |
420
- | <code><a href="#cdk-ecr-deployment.S3ArchiveName.Initializer.parameter.ref">ref</a></code> | <code>string</code> | *No description.* |
421
- | <code><a href="#cdk-ecr-deployment.S3ArchiveName.Initializer.parameter.creds">creds</a></code> | <code>string</code> | The credentials of the docker image. |
417
+ | <code><a href="#cdk-ecr-deployment.S3ArchiveName.Initializer.parameter.p">p</a></code> | <code>string</code> | - the S3 bucket name and path of the archive (a S3 URI without the s3://). |
418
+ | <code><a href="#cdk-ecr-deployment.S3ArchiveName.Initializer.parameter.ref">ref</a></code> | <code>string</code> | - appended to the end of the name with a `:`, e.g. `:latest`. |
419
+ | <code><a href="#cdk-ecr-deployment.S3ArchiveName.Initializer.parameter.creds">creds</a></code> | <code>string</code> | - The credentials of the docker image. |
422
420
 
423
421
  ---
424
422
 
@@ -426,12 +424,16 @@ new S3ArchiveName(p: string, ref?: string, creds?: string)
426
424
 
427
425
  - *Type:* string
428
426
 
427
+ the S3 bucket name and path of the archive (a S3 URI without the s3://).
428
+
429
429
  ---
430
430
 
431
431
  ##### `ref`<sup>Optional</sup> <a name="ref" id="cdk-ecr-deployment.S3ArchiveName.Initializer.parameter.ref"></a>
432
432
 
433
433
  - *Type:* string
434
434
 
435
+ appended to the end of the name with a `:`, e.g. `:latest`.
436
+
435
437
  ---
436
438
 
437
439
  ##### `creds`<sup>Optional</sup> <a name="creds" id="cdk-ecr-deployment.S3ArchiveName.Initializer.parameter.creds"></a>
@@ -441,10 +443,8 @@ new S3ArchiveName(p: string, ref?: string, creds?: string)
441
443
  The credentials of the docker image.
442
444
 
443
445
  Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.
444
-
445
446
  If specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or
446
447
  JSON (`{"username":"<username>","password":"<password>"}`).
447
-
448
448
  For more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html
449
449
 
450
450
  ---
@@ -456,7 +456,7 @@ For more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/lates
456
456
  | **Name** | **Type** | **Description** |
457
457
  | --- | --- | --- |
458
458
  | <code><a href="#cdk-ecr-deployment.S3ArchiveName.property.uri">uri</a></code> | <code>string</code> | The uri of the docker image. |
459
- | <code><a href="#cdk-ecr-deployment.S3ArchiveName.property.creds">creds</a></code> | <code>string</code> | The credentials of the docker image. |
459
+ | <code><a href="#cdk-ecr-deployment.S3ArchiveName.property.creds">creds</a></code> | <code>string</code> | - The credentials of the docker image. |
460
460
 
461
461
  ---
462
462
 
@@ -485,10 +485,8 @@ public readonly creds: string;
485
485
  The credentials of the docker image.
486
486
 
487
487
  Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.
488
-
489
488
  If specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or
490
489
  JSON (`{"username":"<username>","password":"<password>"}`).
491
-
492
490
  For more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html
493
491
 
494
492
  ---
package/README.md CHANGED
@@ -70,11 +70,43 @@ new ecrdeploy.ECRDeployment(this, 'DeployDockerImage3', {
70
70
 
71
71
  ## Sample: [test/example.ecr-deployment.ts](./test/example.ecr-deployment.ts)
72
72
 
73
+ After cloning the repository, install dependencies and run a full build:
74
+
75
+ ```console
76
+ yarn --frozen-lockfile --check-files
77
+ yarn build
78
+ ```
79
+
80
+ Then run the example like this:
81
+
73
82
  ```shell
74
83
  # Run the following command to try the sample.
75
84
  NO_PREBUILT_LAMBDA=1 npx cdk deploy -a "npx ts-node -P tsconfig.dev.json --prefer-ts-exts test/example.ecr-deployment.ts"
76
85
  ```
77
86
 
87
+ To run the DockerHub example you will first need to setup a Secret in AWS Secrets Manager to provide DockerHub credentials.
88
+ Replace `username:access-token` with your credentials.
89
+ **Please note that Secrets will occur a cost.**
90
+
91
+ ```console
92
+ aws secretsmanager create-secret --name DockerHubCredentials --secret-string "username:access-token"
93
+ ```
94
+
95
+ From the output, copy the ARN of your new secret and export it as env variable
96
+
97
+ ```console
98
+ export DOCKERHUB_SECRET_ARN="<ARN>"
99
+ ```
100
+
101
+ Finally run:
102
+
103
+ ```shell
104
+ # Run the following command to try the sample.
105
+ npx cdk deploy -a "npx ts-node -P tsconfig.dev.json --prefer-ts-exts test/dockerhub-example.ecr-deployment.ts"
106
+ ```
107
+
108
+ If your Secret is encrypted, you might have to adjust the example to also grant decrypt permissions.
109
+
78
110
  ## [API](./API.md)
79
111
 
80
112
  ## Tech Details & Contribution
@@ -84,4 +116,4 @@ Please take a look at those projects before contribution.
84
116
 
85
117
  To support a new docker image source(like docker tarball in s3), you need to implement [image transport interface](https://github.com/containers/image/blob/master/types/types.go). You could take a look at [docker-archive](https://github.com/containers/image/blob/ccb87a8d0f45cf28846e307eb0ec2b9d38a458c2/docker/archive/transport.go) transport for a good start.
86
118
 
87
- To test the `lambda` folder, `make test`.
119
+ Any error in the custom resource provider will show up in the CloudFormation error log as `Invalid PhysicalResourceId`, because of this: <https://github.com/aws/aws-lambda-go/issues/107>. You need to go into the CloudWatch Log Group to find the real error.
@@ -0,0 +1,12 @@
1
+ #!/bin/bash
2
+ set -eu
3
+
4
+ GOPROXY=${GOPROXY:-https://goproxy.io|https://goproxy.cn|direct}
5
+
6
+ # The build works as follows:
7
+ #
8
+ # Build the given Dockerfile to produce a file in a predefined location.
9
+ # We then start that container to run a single command to copy that file out, according to
10
+ # the CDK Asset Bundling protocol.
11
+ ${CDK_DOCKER:-docker} build -t cdk-ecr-deployment-lambda --build-arg GOPROXY="${GOPROXY}" lambda-src
12
+ ${CDK_DOCKER:-docker} run --rm -v $PWD/lambda-bin:/out cdk-ecr-deployment-lambda cp /asset/bootstrap /out
File without changes
Binary file
@@ -21,7 +21,7 @@ endif
21
21
  BUILDTAGS := exclude_graphdriver_devicemapper exclude_graphdriver_btrfs containers_image_openpgp lambda.norpc
22
22
  OUTPUT ?= cdk-ecr-deployment-handler
23
23
 
24
- all: test lambda
24
+ all: lambda test
25
25
 
26
26
  upgrade-deps:
27
27
  CGO_ENABLED=0 $(GPGME_ENV) $(GO) get -u -tags "$(BUILDTAGS)"
@@ -58,7 +58,7 @@ require (
58
58
  github.com/docker/go-connections v0.5.0 // indirect
59
59
  github.com/docker/go-units v0.5.0 // indirect
60
60
  github.com/felixge/httpsnoop v1.0.4 // indirect
61
- github.com/go-jose/go-jose/v4 v4.0.4 // indirect
61
+ github.com/go-jose/go-jose/v4 v4.0.5 // indirect
62
62
  github.com/go-logr/logr v1.4.2 // indirect
63
63
  github.com/go-logr/stdr v1.2.2 // indirect
64
64
  github.com/go-openapi/analysis v0.23.0 // indirect
@@ -119,8 +119,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m
119
119
  github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
120
120
  github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
121
121
  github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
122
- github.com/go-jose/go-jose/v4 v4.0.4 h1:VsjPI33J0SB9vQM6PLmNjoHqMQNGPiZ0rHL7Ni7Q6/E=
123
- github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
122
+ github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE=
123
+ github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA=
124
124
  github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
125
125
  github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
126
126
  github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
package/lib/config.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.shouldUsePrebuiltLambda = void 0;
3
+ exports.shouldUsePrebuiltLambda = shouldUsePrebuiltLambda;
4
4
  const TRUTHY = ['true', true, 1, '1'];
5
5
  function shouldUsePrebuiltLambda() {
6
6
  const { CI, NO_PREBUILT_LAMBDA, FORCE_PREBUILT_LAMBDA } = process.env;
@@ -9,5 +9,4 @@ function shouldUsePrebuiltLambda() {
9
9
  const isForcePrebuilt = FORCE_PREBUILT_LAMBDA && TRUTHY.includes(FORCE_PREBUILT_LAMBDA);
10
10
  return isForcePrebuilt || (!(isCI || isNoPrebuilt));
11
11
  }
12
- exports.shouldUsePrebuiltLambda = shouldUsePrebuiltLambda;
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRXRDLFNBQWdCLHVCQUF1QjtJQUNyQyxNQUFNLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUN0RSxNQUFNLElBQUksR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDL0UsTUFBTSxlQUFlLEdBQUcscUJBQXFCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRXhGLE9BQU8sZUFBZSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFQRCwwREFPQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFRSVVRIWSA9IFsndHJ1ZScsIHRydWUsIDEsICcxJ107XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRVc2VQcmVidWlsdExhbWJkYSgpOiBib29sZWFuIHtcbiAgY29uc3QgeyBDSSwgTk9fUFJFQlVJTFRfTEFNQkRBLCBGT1JDRV9QUkVCVUlMVF9MQU1CREEgfSA9IHByb2Nlc3MuZW52O1xuICBjb25zdCBpc0NJID0gQ0kgJiYgVFJVVEhZLmluY2x1ZGVzKENJKTtcbiAgY29uc3QgaXNOb1ByZWJ1aWx0ID0gTk9fUFJFQlVJTFRfTEFNQkRBICYmIFRSVVRIWS5pbmNsdWRlcyhOT19QUkVCVUlMVF9MQU1CREEpO1xuICBjb25zdCBpc0ZvcmNlUHJlYnVpbHQgPSBGT1JDRV9QUkVCVUlMVF9MQU1CREEgJiYgVFJVVEhZLmluY2x1ZGVzKEZPUkNFX1BSRUJVSUxUX0xBTUJEQSk7XG5cbiAgcmV0dXJuIGlzRm9yY2VQcmVidWlsdCB8fCAoIShpc0NJIHx8IGlzTm9QcmVidWlsdCkpO1xufSJdfQ==
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLDBEQU9DO0FBVEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUV0QyxTQUFnQix1QkFBdUI7SUFDckMsTUFBTSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDdEUsTUFBTSxJQUFJLEdBQUcsRUFBRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQy9FLE1BQU0sZUFBZSxHQUFHLHFCQUFxQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUV4RixPQUFPLGVBQWUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgVFJVVEhZID0gWyd0cnVlJywgdHJ1ZSwgMSwgJzEnXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFVzZVByZWJ1aWx0TGFtYmRhKCk6IGJvb2xlYW4ge1xuICBjb25zdCB7IENJLCBOT19QUkVCVUlMVF9MQU1CREEsIEZPUkNFX1BSRUJVSUxUX0xBTUJEQSB9ID0gcHJvY2Vzcy5lbnY7XG4gIGNvbnN0IGlzQ0kgPSBDSSAmJiBUUlVUSFkuaW5jbHVkZXMoQ0kpO1xuICBjb25zdCBpc05vUHJlYnVpbHQgPSBOT19QUkVCVUlMVF9MQU1CREEgJiYgVFJVVEhZLmluY2x1ZGVzKE5PX1BSRUJVSUxUX0xBTUJEQSk7XG4gIGNvbnN0IGlzRm9yY2VQcmVidWlsdCA9IEZPUkNFX1BSRUJVSUxUX0xBTUJEQSAmJiBUUlVUSFkuaW5jbHVkZXMoRk9SQ0VfUFJFQlVJTFRfTEFNQkRBKTtcblxuICByZXR1cm4gaXNGb3JjZVByZWJ1aWx0IHx8ICghKGlzQ0kgfHwgaXNOb1ByZWJ1aWx0KSk7XG59Il19
package/lib/index.d.ts CHANGED
@@ -110,12 +110,27 @@ export interface IImageName {
110
110
  export declare class DockerImageName implements IImageName {
111
111
  private name;
112
112
  creds?: string | undefined;
113
+ /**
114
+ * @param name - The name of the image, e.g. retrieved from `DockerImageAsset.imageUri`
115
+ * @param creds - The credentials of the docker image. Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.
116
+ * If specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or
117
+ * JSON (`{"username":"<username>","password":"<password>"}`).
118
+ * For more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html
119
+ */
113
120
  constructor(name: string, creds?: string | undefined);
114
121
  get uri(): string;
115
122
  }
116
123
  export declare class S3ArchiveName implements IImageName {
117
124
  creds?: string | undefined;
118
125
  private name;
126
+ /**
127
+ * @param p - the S3 bucket name and path of the archive (a S3 URI without the s3://)
128
+ * @param ref - appended to the end of the name with a `:`, e.g. `:latest`
129
+ * @param creds - The credentials of the docker image. Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.
130
+ * If specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or
131
+ * JSON (`{"username":"<username>","password":"<password>"}`).
132
+ * For more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html
133
+ */
119
134
  constructor(p: string, ref?: string, creds?: string | undefined);
120
135
  get uri(): string;
121
136
  }
package/lib/index.js CHANGED
@@ -5,7 +5,6 @@ exports.ECRDeployment = exports.S3ArchiveName = exports.DockerImageName = void 0
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
7
7
  // SPDX-License-Identifier: Apache-2.0
8
- const child_process = require("child_process");
9
8
  const path = require("path");
10
9
  const aws_cdk_lib_1 = require("aws-cdk-lib");
11
10
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
@@ -14,22 +13,27 @@ const config_1 = require("./config");
14
13
  function getCode(buildImage) {
15
14
  if ((0, config_1.shouldUsePrebuiltLambda)()) {
16
15
  try {
17
- const installScript = path.join(__dirname, '../lambda/install.js');
18
- const prebuiltPath = path.join(__dirname, '../lambda/out');
19
- child_process.execFileSync(process.argv0, [installScript, prebuiltPath]);
16
+ const prebuiltPath = path.join(__dirname, '../lambda-bin');
20
17
  return aws_cdk_lib_1.aws_lambda.Code.fromAsset(prebuiltPath);
21
18
  }
22
19
  catch (err) {
23
20
  console.warn(`Can not get prebuilt lambda: ${err}`);
24
21
  }
25
22
  }
26
- return aws_cdk_lib_1.aws_lambda.Code.fromDockerBuild(path.join(__dirname, '../lambda'), {
23
+ return aws_cdk_lib_1.aws_lambda.Code.fromDockerBuild(path.join(__dirname, '../lambda-src'), {
27
24
  buildArgs: {
28
25
  buildImage,
29
26
  },
30
27
  });
31
28
  }
32
29
  class DockerImageName {
30
+ /**
31
+ * @param name - The name of the image, e.g. retrieved from `DockerImageAsset.imageUri`
32
+ * @param creds - The credentials of the docker image. Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.
33
+ * If specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or
34
+ * JSON (`{"username":"<username>","password":"<password>"}`).
35
+ * For more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html
36
+ */
33
37
  constructor(name, creds) {
34
38
  this.name = name;
35
39
  this.creds = creds;
@@ -38,8 +42,16 @@ class DockerImageName {
38
42
  }
39
43
  exports.DockerImageName = DockerImageName;
40
44
  _a = JSII_RTTI_SYMBOL_1;
41
- DockerImageName[_a] = { fqn: "cdk-ecr-deployment.DockerImageName", version: "3.2.1" };
45
+ DockerImageName[_a] = { fqn: "cdk-ecr-deployment.DockerImageName", version: "3.3.0" };
42
46
  class S3ArchiveName {
47
+ /**
48
+ * @param p - the S3 bucket name and path of the archive (a S3 URI without the s3://)
49
+ * @param ref - appended to the end of the name with a `:`, e.g. `:latest`
50
+ * @param creds - The credentials of the docker image. Format `user:password` or `AWS Secrets Manager secret arn` or `AWS Secrets Manager secret name`.
51
+ * If specifying an AWS Secrets Manager secret, the format of the secret should be either plain text (`user:password`) or
52
+ * JSON (`{"username":"<username>","password":"<password>"}`).
53
+ * For more details on JSON format, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html
54
+ */
43
55
  constructor(p, ref, creds) {
44
56
  this.creds = creds;
45
57
  this.name = p;
@@ -51,7 +63,7 @@ class S3ArchiveName {
51
63
  }
52
64
  exports.S3ArchiveName = S3ArchiveName;
53
65
  _b = JSII_RTTI_SYMBOL_1;
54
- S3ArchiveName[_b] = { fqn: "cdk-ecr-deployment.S3ArchiveName", version: "3.2.1" };
66
+ S3ArchiveName[_b] = { fqn: "cdk-ecr-deployment.S3ArchiveName", version: "3.3.0" };
55
67
  class ECRDeployment extends constructs_1.Construct {
56
68
  constructor(scope, id, props) {
57
69
  super(scope, id);
@@ -59,7 +71,7 @@ class ECRDeployment extends constructs_1.Construct {
59
71
  this.handler = new aws_cdk_lib_1.aws_lambda.SingletonFunction(this, 'CustomResourceHandler', {
60
72
  uuid: this.renderSingletonUuid(memoryLimit),
61
73
  code: getCode(props.buildImage ?? 'public.ecr.aws/docker/library/golang:1'),
62
- runtime: props.lambdaRuntime ?? new aws_cdk_lib_1.aws_lambda.Runtime('provided.al2023', aws_lambda_1.RuntimeFamily.OTHER),
74
+ runtime: props.lambdaRuntime ?? new aws_cdk_lib_1.aws_lambda.Runtime('provided.al2023', aws_lambda_1.RuntimeFamily.OTHER), // not using Runtime.PROVIDED_AL2023 to support older CDK versions (< 2.105.0)
63
75
  handler: props.lambdaHandler ?? 'bootstrap',
64
76
  environment: props.environment,
65
77
  lambdaPurpose: 'Custom::CDKECRDeployment',
@@ -141,5 +153,5 @@ class ECRDeployment extends constructs_1.Construct {
141
153
  }
142
154
  exports.ECRDeployment = ECRDeployment;
143
155
  _c = JSII_RTTI_SYMBOL_1;
144
- ECRDeployment[_c] = { fqn: "cdk-ecr-deployment.ECRDeployment", version: "3.2.1" };
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBR3RDLCtDQUErQztBQUMvQyw2QkFBNkI7QUFDN0IsNkNBQW9IO0FBRXBILHVEQUF1RDtBQUN2RCwyQ0FBdUM7QUFDdkMscUNBQW1EO0FBd0huRCxTQUFTLE9BQU8sQ0FBQyxVQUFrQjtJQUNqQyxJQUFJLElBQUEsZ0NBQXVCLEdBQUUsRUFBRTtRQUM3QixJQUFJO1lBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUNuRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUMzRCxhQUFhLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUV6RSxPQUFPLHdCQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM1QztRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUNyRDtLQUNGO0lBRUQsT0FBTyx3QkFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLEVBQUU7UUFDcEUsU0FBUyxFQUFFO1lBQ1QsVUFBVTtTQUNYO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQWEsZUFBZTtJQUMxQixZQUEyQixJQUFZLEVBQVMsS0FBYztRQUFuQyxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBUztJQUFJLENBQUM7SUFDbkUsSUFBVyxHQUFH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MkVBQTJFO1FBQzNFLDRDQUE0QztRQUM1QyxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksbUJBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsbUhBQW1ILENBQUMsQ0FBQzthQUN0STtZQUVELElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO1NBQ3pDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQTlGSCxzQ0ErRkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cblxuaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBhd3NfZWMyIGFzIGVjMiwgYXdzX2lhbSBhcyBpYW0sIGF3c19sYW1iZGEgYXMgbGFtYmRhLCBEdXJhdGlvbiwgQ3VzdG9tUmVzb3VyY2UsIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50LCBBZGRUb1ByaW5jaXBhbFBvbGljeVJlc3VsdCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgUnVudGltZUZhbWlseSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBzaG91bGRVc2VQcmVidWlsdExhbWJkYSB9IGZyb20gJy4vY29uZmlnJztcblxuZXhwb3J0IGludGVyZmFjZSBFQ1JEZXBsb3ltZW50UHJvcHMge1xuXG4gIC8qKlxuICAgKiBJbWFnZSB0byB1c2UgdG8gYnVpbGQgR29sYW5nIGxhbWJkYSBmb3IgY3VzdG9tIHJlc291cmNlLCBpZiBkb3dubG9hZCBmYWlscyBvciBpcyBub3Qgd2FudGVkLlxuICAgKlxuICAgKiBNaWdodCBiZSBuZWVkZWQgZm9yIGxvY2FsIGJ1aWxkIGlmIGFsbCBpbWFnZXMgbmVlZCB0byBjb21lIGZyb20gb3duIHJlZ2lzdHJ5LlxuICAgKlxuICAgKiBOb3RlIHRoYXQgaW1hZ2Ugc2hvdWxkIHVzZSB5dW0gYXMgYSBwYWNrYWdlIG1hbmFnZXIgYW5kIGhhdmUgZ29sYW5nIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwdWJsaWMuZWNyLmF3cy9zYW0vYnVpbGQtZ28xLng6bGF0ZXN0XG4gICAqL1xuICByZWFkb25seSBidWlsZEltYWdlPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHNvdXJjZSBvZiB0aGUgZG9ja2VyIGltYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgc3JjOiBJSW1hZ2VOYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGRvY2tlciBpbWFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3Q6IElJbWFnZU5hbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSBhcmNoaXRlY3R1cmUgdG8gYmUgY29waWVkLlxuICAgKlxuICAgKiBUaGUgJ2FtZDY0JyBhcmNoaXRlY3R1cmUgd2lsbCBiZSBjb3BpZWQgYnkgZGVmYXVsdC4gU3BlY2lmeSB0aGVcbiAgICogYXJjaGl0ZWN0dXJlIG9yIGFyY2hpdGVjdHVyZXMgdG8gY29weSBoZXJlLlxuICAgKlxuICAgKiBJdCBpcyBjdXJyZW50bHkgbm90IHBvc3NpYmxlIHRvIGNvcHkgbW9yZSB0aGFuIG9uZSBhcmNoaXRlY3R1cmVcbiAgICogYXQgYSB0aW1lOiB0aGUgYXJyYXkgeW91IHNwZWNpZnkgbXVzdCBjb250YWluIGV4YWN0bHkgb25lIHN0cmluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgWydhbWQ2NCddXG4gICAqL1xuICByZWFkb25seSBpbWFnZUFyY2g/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiBtZW1vcnkgKGluIE1pQikgdG8gYWxsb2NhdGUgdG8gdGhlIEFXUyBMYW1iZGEgZnVuY3Rpb24gd2hpY2hcbiAgICogcmVwbGljYXRlcyB0aGUgZmlsZXMgZnJvbSB0aGUgQ0RLIGJ1Y2tldCB0byB0aGUgZGVzdGluYXRpb24gYnVja2V0LlxuICAgKlxuICAgKiBJZiB5b3UgYXJlIGRlcGxveWluZyBsYXJnZSBmaWxlcywgeW91IHdpbGwgbmVlZCB0byBpbmNyZWFzZSB0aGlzIG51bWJlclxuICAgKiBhY2NvcmRpbmdseS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSA1MTJcbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeUxpbWl0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRpb24gcm9sZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBmdW5jdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEEgcm9sZSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgbmV0d29yayB0byBwbGFjZSB0aGUgZGVwbG95bWVudCBsYW1iZGEgaGFuZGxlciBpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBlYzIuSVZwYztcblxuICAvKipcbiAgICogV2hlcmUgaW4gdGhlIFZQQyB0byBwbGFjZSB0aGUgZGVwbG95bWVudCBsYW1iZGEgaGFuZGxlci5cbiAgICogT25seSB1c2VkIGlmICd2cGMnIGlzIHN1cHBsaWVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBWcGMgZGVmYXVsdCBzdHJhdGVneSBpZiBub3Qgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB2cGNTdWJuZXRzPzogZWMyLlN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygc2VjdXJpdHkgZ3JvdXBzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBMYW1iZGEncyBuZXR3b3JrIGludGVyZmFjZXMuXG4gICAqXG4gICAqIE9ubHkgdXNlZCBpZiAndnBjJyBpcyBzdXBwbGllZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiB0aGUgZnVuY3Rpb24gaXMgcGxhY2VkIHdpdGhpbiBhIFZQQyBhbmQgYSBzZWN1cml0eSBncm91cCBpc1xuICAgKiBub3Qgc3BlY2lmaWVkLCBlaXRoZXIgYnkgdGhpcyBvciBzZWN1cml0eUdyb3VwIHByb3AsIGEgZGVkaWNhdGVkIHNlY3VyaXR5XG4gICAqIGdyb3VwIHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogZWMyLlNlY3VyaXR5R3JvdXBbXTtcblxuICAvKipcbiAgICogVGhlIGxhbWJkYSBmdW5jdGlvbiBydW50aW1lIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGxhbWJkYS5SdW50aW1lLlBST1ZJREVEX0FMMjAyM1xuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhUnVudGltZT86IGxhbWJkYS5SdW50aW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbGFtYmRhIGhhbmRsZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYm9vdHN0cmFwXG4gICAqL1xuICByZWFkb25seSBsYW1iZGFIYW5kbGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gc2V0XG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlTmFtZSB7XG4gIC8qKlxuICAgKiAgVGhlIHVyaSBvZiB0aGUgZG9ja2VyIGltYWdlLlxuICAgKlxuICAgKiAgVGhlIHVyaSBzcGVjIGZvbGxvd3MgaHR0cHM6Ly9naXRodWIuY29tL2NvbnRhaW5lcnMvc2tvcGVvXG4gICAqL1xuICByZWFkb25seSB1cmk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNyZWRlbnRpYWxzIG9mIHRoZSBkb2NrZXIgaW1hZ2UuIEZvcm1hdCBgdXNlcjpwYXNzd29yZGAgb3IgYEFXUyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGFybmAgb3IgYEFXUyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IG5hbWVgLlxuICAgKlxuICAgKiBJZiBzcGVjaWZ5aW5nIGFuIEFXUyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0LCB0aGUgZm9ybWF0IG9mIHRoZSBzZWNyZXQgc2hvdWxkIGJlIGVpdGhlciBwbGFpbiB0ZXh0IChgdXNlcjpwYXNzd29yZGApIG9yXG4gICAqIEpTT04gKGB7XCJ1c2VybmFtZVwiOlwiPHVzZXJuYW1lPlwiLFwicGFzc3dvcmRcIjpcIjxwYXNzd29yZD5cIn1gKS5cbiAgICpcbiAgICogRm9yIG1vcmUgZGV0YWlscyBvbiBKU09OIGZvcm1hdCwgc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3ByaXZhdGUtYXV0aC5odG1sXG4gICAqL1xuICBjcmVkcz86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0Q29kZShidWlsZEltYWdlOiBzdHJpbmcpOiBsYW1iZGEuQXNzZXRDb2RlIHtcbiAgaWYgKHNob3VsZFVzZVByZWJ1aWx0TGFtYmRhKCkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW5zdGFsbFNjcmlwdCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9sYW1iZGEvaW5zdGFsbC5qcycpO1xuICAgICAgY29uc3QgcHJlYnVpbHRQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9vdXQnKTtcbiAgICAgIGNoaWxkX3Byb2Nlc3MuZXhlY0ZpbGVTeW5jKHByb2Nlc3MuYXJndjAsIFtpbnN0YWxsU2NyaXB0LCBwcmVidWlsdFBhdGhdKTtcblxuICAgICAgcmV0dXJuIGxhbWJkYS5Db2RlLmZyb21Bc3NldChwcmVidWlsdFBhdGgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKGBDYW4gbm90IGdldCBwcmVidWlsdCBsYW1iZGE6ICR7ZXJyfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsYW1iZGEuQ29kZS5mcm9tRG9ja2VyQnVpbGQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYScpLCB7XG4gICAgYnVpbGRBcmdzOiB7XG4gICAgICBidWlsZEltYWdlLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgY2xhc3MgRG9ja2VySW1hZ2VOYW1lIGltcGxlbWVudHMgSUltYWdlTmFtZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG5hbWU6IHN0cmluZywgcHVibGljIGNyZWRzPzogc3RyaW5nKSB7IH1cbiAgcHVibGljIGdldCB1cmkoKTogc3RyaW5nIHsgcmV0dXJuIGBkb2NrZXI6Ly8ke3RoaXMubmFtZX1gOyB9XG59XG5cbmV4cG9ydCBjbGFzcyBTM0FyY2hpdmVOYW1lIGltcGxlbWVudHMgSUltYWdlTmFtZSB7XG4gIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgY29uc3RydWN0b3IocDogc3RyaW5nLCByZWY/OiBzdHJpbmcsIHB1YmxpYyBjcmVkcz86IHN0cmluZykge1xuICAgIHRoaXMubmFtZSA9IHA7XG4gICAgaWYgKHJlZikge1xuICAgICAgdGhpcy5uYW1lICs9ICc6JyArIHJlZjtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCB1cmkoKTogc3RyaW5nIHsgcmV0dXJuIGBzMzovLyR7dGhpcy5uYW1lfWA7IH1cbn1cblxuZXhwb3J0IGNsYXNzIEVDUkRlcGxveW1lbnQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIGhhbmRsZXI6IGxhbWJkYS5TaW5nbGV0b25GdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRUNSRGVwbG95bWVudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBjb25zdCBtZW1vcnlMaW1pdCA9IHByb3BzLm1lbW9yeUxpbWl0ID8/IDUxMjtcbiAgICB0aGlzLmhhbmRsZXIgPSBuZXcgbGFtYmRhLlNpbmdsZXRvbkZ1bmN0aW9uKHRoaXMsICdDdXN0b21SZXNvdXJjZUhhbmRsZXInLCB7XG4gICAgICB1dWlkOiB0aGlzLnJlbmRlclNpbmdsZXRvblV1aWQobWVtb3J5TGltaXQpLFxuICAgICAgY29kZTogZ2V0Q29kZShwcm9wcy5idWlsZEltYWdlID8/ICdwdWJsaWMuZWNyLmF3cy9kb2NrZXIvbGlicmFyeS9nb2xhbmc6MScpLFxuICAgICAgcnVudGltZTogcHJvcHMubGFtYmRhUnVudGltZSA/PyBuZXcgbGFtYmRhLlJ1bnRpbWUoJ3Byb3ZpZGVkLmFsMjAyMycsIFJ1bnRpbWVGYW1pbHkuT1RIRVIpLCAvLyBub3QgdXNpbmcgUnVudGltZS5QUk9WSURFRF9BTDIwMjMgdG8gc3VwcG9ydCBvbGRlciBDREsgdmVyc2lvbnMgKDwgMi4xMDUuMClcbiAgICAgIGhhbmRsZXI6IHByb3BzLmxhbWJkYUhhbmRsZXIgPz8gJ2Jvb3RzdHJhcCcsXG4gICAgICBlbnZpcm9ubWVudDogcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgICBsYW1iZGFQdXJwb3NlOiAnQ3VzdG9tOjpDREtFQ1JEZXBsb3ltZW50JyxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgcm9sZTogcHJvcHMucm9sZSxcbiAgICAgIG1lbW9yeVNpemU6IG1lbW9yeUxpbWl0LFxuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICB2cGNTdWJuZXRzOiBwcm9wcy52cGNTdWJuZXRzLFxuICAgICAgc2VjdXJpdHlHcm91cHM6IHByb3BzLnNlY3VyaXR5R3JvdXBzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaGFuZGxlclJvbGUgPSB0aGlzLmhhbmRsZXIucm9sZTtcbiAgICBpZiAoIWhhbmRsZXJSb2xlKSB7IHRocm93IG5ldyBFcnJvcignbGFtYmRhLlNpbmdsZXRvbkZ1bmN0aW9uIHNob3VsZCBoYXZlIGNyZWF0ZWQgYSBSb2xlJyk7IH1cblxuICAgIGhhbmRsZXJSb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnZWNyOkdldEF1dGhvcml6YXRpb25Ub2tlbicsXG4gICAgICAgICAgJ2VjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHknLFxuICAgICAgICAgICdlY3I6R2V0RG93bmxvYWRVcmxGb3JMYXllcicsXG4gICAgICAgICAgJ2VjcjpHZXRSZXBvc2l0b3J5UG9saWN5JyxcbiAgICAgICAgICAnZWNyOkRlc2NyaWJlUmVwb3NpdG9yaWVzJyxcbiAgICAgICAgICAnZWNyOkxpc3RJbWFnZXMnLFxuICAgICAgICAgICdlY3I6RGVzY3JpYmVJbWFnZXMnLFxuICAgICAgICAgICdlY3I6QmF0Y2hHZXRJbWFnZScsXG4gICAgICAgICAgJ2VjcjpMaXN0VGFnc0ZvclJlc291cmNlJyxcbiAgICAgICAgICAnZWNyOkRlc2NyaWJlSW1hZ2VTY2FuRmluZGluZ3MnLFxuICAgICAgICAgICdlY3I6SW5pdGlhdGVMYXllclVwbG9hZCcsXG4gICAgICAgICAgJ2VjcjpVcGxvYWRMYXllclBhcnQnLFxuICAgICAgICAgICdlY3I6Q29tcGxldGVMYXllclVwbG9hZCcsXG4gICAgICAgICAgJ2VjcjpQdXRJbWFnZScsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSk7XG4gICAgaGFuZGxlclJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnczM6R2V0T2JqZWN0JyxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pKTtcblxuICAgIGlmIChwcm9wcy5pbWFnZUFyY2ggJiYgcHJvcHMuaW1hZ2VBcmNoLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbWFnZUFyY2ggbXVzdCBjb250YWluIGV4YWN0bHkgMSBlbGVtZW50LCBnb3QgJHtKU09OLnN0cmluZ2lmeShwcm9wcy5pbWFnZUFyY2gpfWApO1xuICAgIH1cbiAgICBjb25zdCBpbWFnZUFyY2ggPSBwcm9wcy5pbWFnZUFyY2ggPyBwcm9wcy5pbWFnZUFyY2hbMF0gOiAnJztcblxuICAgIG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCAnQ3VzdG9tUmVzb3VyY2UnLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHRoaXMuaGFuZGxlci5mdW5jdGlvbkFybixcbiAgICAgIC8vIFRoaXMgaGFzIGJlZW4gY29weS9wYXN0ZWQgYW5kIGlzIGEgcHVyZSBsaWUsIGJ1dCBjaGFuZ2luZyBpdCBpcyBnb2luZyB0byBjaGFuZ2UgcGVvcGxlJ3MgaW5mcmEhISBYKFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpDREtCdWNrZXREZXBsb3ltZW50JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgU3JjSW1hZ2U6IHByb3BzLnNyYy51cmksXG4gICAgICAgIFNyY0NyZWRzOiBwcm9wcy5zcmMuY3JlZHMsXG4gICAgICAgIERlc3RJbWFnZTogcHJvcHMuZGVzdC51cmksXG4gICAgICAgIERlc3RDcmVkczogcHJvcHMuZGVzdC5jcmVkcyxcbiAgICAgICAgLi4uaW1hZ2VBcmNoID8geyBJbWFnZUFyY2g6IGltYWdlQXJjaCB9IDoge30sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZFRvUHJpbmNpcGFsUG9saWN5KHN0YXRlbWVudDogUG9saWN5U3RhdGVtZW50KTogQWRkVG9QcmluY2lwYWxQb2xpY3lSZXN1bHQge1xuICAgIGNvbnN0IGhhbmRsZXJSb2xlID0gdGhpcy5oYW5kbGVyLnJvbGU7XG4gICAgaWYgKCFoYW5kbGVyUm9sZSkgeyB0aHJvdyBuZXcgRXJyb3IoJ2xhbWJkYS5TaW5nbGV0b25GdW5jdGlvbiBzaG91bGQgaGF2ZSBjcmVhdGVkIGEgUm9sZScpOyB9XG5cbiAgICByZXR1cm4gaGFuZGxlclJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3koc3RhdGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyU2luZ2xldG9uVXVpZChtZW1vcnlMaW1pdD86IG51bWJlcikge1xuICAgIGxldCB1dWlkID0gJ2JkMDdjOTMwLWVkYjktNDExMi1hMjBmLTAzZjA5NmY1MzY2Nic7XG5cbiAgICAvLyBpZiB1c2VyIHNwZWNpZnkgYSBjdXN0b20gbWVtb3J5IGxpbWl0LCBkZWZpbmUgYW5vdGhlciBzaW5nbGV0b24gaGFuZGxlclxuICAgIC8vIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLiBvdGhlcndpc2UsIGl0IHdvbid0IGJlIHBvc3NpYmxlIHRvIHVzZSBtdWx0aXBsZVxuICAgIC8vIGNvbmZpZ3VyYXRpb25zIHNpbmNlIHdlIGhhdmUgYSBzaW5nbGV0b24uXG4gICAgaWYgKG1lbW9yeUxpbWl0KSB7XG4gICAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG1lbW9yeUxpbWl0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgdXNlIHRva2VucyB3aGVuIHNwZWNpZnlpbmcgXCJtZW1vcnlMaW1pdFwiIHNpbmNlIHdlIHVzZSBpdCB0byBpZGVudGlmeSB0aGUgc2luZ2xldG9uIGN1c3RvbSByZXNvdXJjZSBoYW5kbGVyJyk7XG4gICAgICB9XG5cbiAgICAgIHV1aWQgKz0gYC0ke21lbW9yeUxpbWl0LnRvU3RyaW5nKCl9TWlCYDtcbiAgICB9XG5cbiAgICByZXR1cm4gdXVpZDtcbiAgfVxufVxuIl19
156
+ ECRDeployment[_c] = { fqn: "cdk-ecr-deployment.ECRDeployment", version: "3.3.0" };
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBRXRDLDZCQUE2QjtBQUM3Qiw2Q0FBb0g7QUFFcEgsdURBQXVEO0FBQ3ZELDJDQUF1QztBQUN2QyxxQ0FBbUQ7QUF3SG5ELFNBQVMsT0FBTyxDQUFDLFVBQWtCO0lBQ2pDLElBQUksSUFBQSxnQ0FBdUIsR0FBRSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDM0QsT0FBTyx3QkFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyx3QkFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLEVBQUU7UUFDeEUsU0FBUyxFQUFFO1lBQ1QsVUFBVTtTQUNYO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQWEsZUFBZTtJQUMxQjs7Ozs7O09BTUc7SUFDSCxZQUEyQixJQUFZLEVBQVMsS0FBYztRQUFuQyxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBUztJQUFJLENBQUM7SUFDbkUsSUFBVyxHQUFHLEtBQWEsT0FBTyxZQUFZLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0FBVDlELDBDQVVDOzs7QUFFRCxNQUFhLGFBQWE7SUFHeEI7Ozs7Ozs7T0FPRztJQUNILFlBQW1CLENBQVMsRUFB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QUNoQixJQUFJLG1CQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUhBQW1ILENBQUMsQ0FBQztZQUN2SSxDQUFDO1lBRUQsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7UUFDMUMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7QUE5Rkgsc0NBK0ZDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgYXdzX2VjMiBhcyBlYzIsIGF3c19pYW0gYXMgaWFtLCBhd3NfbGFtYmRhIGFzIGxhbWJkYSwgRHVyYXRpb24sIEN1c3RvbVJlc291cmNlLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgQWRkVG9QcmluY2lwYWxQb2xpY3lSZXN1bHQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFJ1bnRpbWVGYW1pbHkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgc2hvdWxkVXNlUHJlYnVpbHRMYW1iZGEgfSBmcm9tICcuL2NvbmZpZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRUNSRGVwbG95bWVudFByb3BzIHtcblxuICAvKipcbiAgICogSW1hZ2UgdG8gdXNlIHRvIGJ1aWxkIEdvbGFuZyBsYW1iZGEgZm9yIGN1c3RvbSByZXNvdXJjZSwgaWYgZG93bmxvYWQgZmFpbHMgb3IgaXMgbm90IHdhbnRlZC5cbiAgICpcbiAgICogTWlnaHQgYmUgbmVlZGVkIGZvciBsb2NhbCBidWlsZCBpZiBhbGwgaW1hZ2VzIG5lZWQgdG8gY29tZSBmcm9tIG93biByZWdpc3RyeS5cbiAgICpcbiAgICogTm90ZSB0aGF0IGltYWdlIHNob3VsZCB1c2UgeXVtIGFzIGEgcGFja2FnZSBtYW5hZ2VyIGFuZCBoYXZlIGdvbGFuZyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHVibGljLmVjci5hd3Mvc2FtL2J1aWxkLWdvMS54OmxhdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRJbWFnZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzb3VyY2Ugb2YgdGhlIGRvY2tlciBpbWFnZS5cbiAgICovXG4gIHJlYWRvbmx5IHNyYzogSUltYWdlTmFtZTtcblxuICAvKipcbiAgICogVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBkb2NrZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBkZXN0OiBJSW1hZ2VOYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgYXJjaGl0ZWN0dXJlIHRvIGJlIGNvcGllZC5cbiAgICpcbiAgICogVGhlICdhbWQ2NCcgYXJjaGl0ZWN0dXJlIHdpbGwgYmUgY29waWVkIGJ5IGRlZmF1bHQuIFNwZWNpZnkgdGhlXG4gICAqIGFyY2hpdGVjdHVyZSBvciBhcmNoaXRlY3R1cmVzIHRvIGNvcHkgaGVyZS5cbiAgICpcbiAgICogSXQgaXMgY3VycmVudGx5IG5vdCBwb3NzaWJsZSB0byBjb3B5IG1vcmUgdGhhbiBvbmUgYXJjaGl0ZWN0dXJlXG4gICAqIGF0IGEgdGltZTogdGhlIGFycmF5IHlvdSBzcGVjaWZ5IG11c3QgY29udGFpbiBleGFjdGx5IG9uZSBzdHJpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsnYW1kNjQnXVxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VBcmNoPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgbWVtb3J5IChpbiBNaUIpIHRvIGFsbG9jYXRlIHRvIHRoZSBBV1MgTGFtYmRhIGZ1bmN0aW9uIHdoaWNoXG4gICAqIHJlcGxpY2F0ZXMgdGhlIGZpbGVzIGZyb20gdGhlIENESyBidWNrZXQgdG8gdGhlIGRlc3RpbmF0aW9uIGJ1Y2tldC5cbiAgICpcbiAgICogSWYgeW91IGFyZSBkZXBsb3lpbmcgbGFyZ2UgZmlsZXMsIHlvdSB3aWxsIG5lZWQgdG8gaW5jcmVhc2UgdGhpcyBudW1iZXJcbiAgICogYWNjb3JkaW5nbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gNTEyXG4gICAqL1xuICByZWFkb25seSBtZW1vcnlMaW1pdD86IG51bWJlcjtcblxuICAvKipcbiAgICogRXhlY3V0aW9uIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIHJvbGUgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSByb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIG5ldHdvcmsgdG8gcGxhY2UgdGhlIGRlcGxveW1lbnQgbGFtYmRhIGhhbmRsZXIgaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFdoZXJlIGluIHRoZSBWUEMgdG8gcGxhY2UgdGhlIGRlcGxveW1lbnQgbGFtYmRhIGhhbmRsZXIuXG4gICAqIE9ubHkgdXNlZCBpZiAndnBjJyBpcyBzdXBwbGllZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgVnBjIGRlZmF1bHQgc3RyYXRlZ3kgaWYgbm90IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHNlY3VyaXR5IGdyb3VwcyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgTGFtYmRhJ3MgbmV0d29yayBpbnRlcmZhY2VzLlxuICAgKlxuICAgKiBPbmx5IHVzZWQgaWYgJ3ZwYycgaXMgc3VwcGxpZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSWYgdGhlIGZ1bmN0aW9uIGlzIHBsYWNlZCB3aXRoaW4gYSBWUEMgYW5kIGEgc2VjdXJpdHkgZ3JvdXAgaXNcbiAgICogbm90IHNwZWNpZmllZCwgZWl0aGVyIGJ5IHRoaXMgb3Igc2VjdXJpdHlHcm91cCBwcm9wLCBhIGRlZGljYXRlZCBzZWN1cml0eVxuICAgKiBncm91cCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoaXMgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IGVjMi5TZWN1cml0eUdyb3VwW107XG5cbiAgLyoqXG4gICAqIFRoZSBsYW1iZGEgZnVuY3Rpb24gcnVudGltZSBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBsYW1iZGEuUnVudGltZS5QUk9WSURFRF9BTDIwMjNcbiAgICovXG4gIHJlYWRvbmx5IGxhbWJkYVJ1bnRpbWU/OiBsYW1iZGEuUnVudGltZTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGxhbWJkYSBoYW5kbGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGJvb3RzdHJhcFxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhSGFuZGxlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNldFxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbWFnZU5hbWUge1xuICAvKipcbiAgICogIFRoZSB1cmkgb2YgdGhlIGRvY2tlciBpbWFnZS5cbiAgICpcbiAgICogIFRoZSB1cmkgc3BlYyBmb2xsb3dzIGh0dHBzOi8vZ2l0aHViLmNvbS9jb250YWluZXJzL3Nrb3Blb1xuICAgKi9cbiAgcmVhZG9ubHkgdXJpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjcmVkZW50aWFscyBvZiB0aGUgZG9ja2VyIGltYWdlLiBGb3JtYXQgYHVzZXI6cGFzc3dvcmRgIG9yIGBBV1MgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBhcm5gIG9yIGBBV1MgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBuYW1lYC5cbiAgICpcbiAgICogSWYgc3BlY2lmeWluZyBhbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCwgdGhlIGZvcm1hdCBvZiB0aGUgc2VjcmV0IHNob3VsZCBiZSBlaXRoZXIgcGxhaW4gdGV4dCAoYHVzZXI6cGFzc3dvcmRgKSBvclxuICAgKiBKU09OIChge1widXNlcm5hbWVcIjpcIjx1c2VybmFtZT5cIixcInBhc3N3b3JkXCI6XCI8cGFzc3dvcmQ+XCJ9YCkuXG4gICAqXG4gICAqIEZvciBtb3JlIGRldGFpbHMgb24gSlNPTiBmb3JtYXQsIHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9wcml2YXRlLWF1dGguaHRtbFxuICAgKi9cbiAgY3JlZHM/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldENvZGUoYnVpbGRJbWFnZTogc3RyaW5nKTogbGFtYmRhLkFzc2V0Q29kZSB7XG4gIGlmIChzaG91bGRVc2VQcmVidWlsdExhbWJkYSgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByZWJ1aWx0UGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9sYW1iZGEtYmluJyk7XG4gICAgICByZXR1cm4gbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHByZWJ1aWx0UGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oYENhbiBub3QgZ2V0IHByZWJ1aWx0IGxhbWJkYTogJHtlcnJ9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxhbWJkYS5Db2RlLmZyb21Eb2NrZXJCdWlsZChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhLXNyYycpLCB7XG4gICAgYnVpbGRBcmdzOiB7XG4gICAgICBidWlsZEltYWdlLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgY2xhc3MgRG9ja2VySW1hZ2VOYW1lIGltcGxlbWVudHMgSUltYWdlTmFtZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBpbWFnZSwgZS5nLiByZXRyaWV2ZWQgZnJvbSBgRG9ja2VySW1hZ2VBc3NldC5pbWFnZVVyaWBcbiAgICogQHBhcmFtIGNyZWRzIC0gVGhlIGNyZWRlbnRpYWxzIG9mIHRoZSBkb2NrZXIgaW1hZ2UuIEZvcm1hdCBgdXNlcjpwYXNzd29yZGAgb3IgYEFXUyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGFybmAgb3IgYEFXUyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IG5hbWVgLlxuICAgKiAgICAgSWYgc3BlY2lmeWluZyBhbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCwgdGhlIGZvcm1hdCBvZiB0aGUgc2VjcmV0IHNob3VsZCBiZSBlaXRoZXIgcGxhaW4gdGV4dCAoYHVzZXI6cGFzc3dvcmRgKSBvclxuICAgKiAgICAgSlNPTiAoYHtcInVzZXJuYW1lXCI6XCI8dXNlcm5hbWU+XCIsXCJwYXNzd29yZFwiOlwiPHBhc3N3b3JkPlwifWApLlxuICAgKiAgICAgRm9yIG1vcmUgZGV0YWlscyBvbiBKU09OIGZvcm1hdCwgc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3ByaXZhdGUtYXV0aC5odG1sXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBuYW1lOiBzdHJpbmcsIHB1YmxpYyBjcmVkcz86IHN0cmluZykgeyB9XG4gIHB1YmxpYyBnZXQgdXJpKCk6IHN0cmluZyB7IHJldHVybiBgZG9ja2VyOi8vJHt0aGlzLm5hbWV9YDsgfVxufVxuXG5leHBvcnQgY2xhc3MgUzNBcmNoaXZlTmFtZSBpbXBsZW1lbnRzIElJbWFnZU5hbWUge1xuICBwcml2YXRlIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHBhcmFtIHAgLSB0aGUgUzMgYnVja2V0IG5hbWUgYW5kIHBhdGggb2YgdGhlIGFyY2hpdmUgKGEgUzMgVVJJIHdpdGhvdXQgdGhlIHMzOi8vKVxuICAgKiBAcGFyYW0gcmVmIC0gYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgbmFtZSB3aXRoIGEgYDpgLCBlLmcuIGA6bGF0ZXN0YFxuICAgKiBAcGFyYW0gY3JlZHMgLSBUaGUgY3JlZGVudGlhbHMgb2YgdGhlIGRvY2tlciBpbWFnZS4gRm9ybWF0IGB1c2VyOnBhc3N3b3JkYCBvciBgQVdTIFNlY3JldHMgTWFuYWdlciBzZWNyZXQgYXJuYCBvciBgQVdTIFNlY3JldHMgTWFuYWdlciBzZWNyZXQgbmFtZWAuXG4gICAqICAgICBJZiBzcGVjaWZ5aW5nIGFuIEFXUyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0LCB0aGUgZm9ybWF0IG9mIHRoZSBzZWNyZXQgc2hvdWxkIGJlIGVpdGhlciBwbGFpbiB0ZXh0IChgdXNlcjpwYXNzd29yZGApIG9yXG4gICAqICAgICBKU09OIChge1widXNlcm5hbWVcIjpcIjx1c2VybmFtZT5cIixcInBhc3N3b3JkXCI6XCI8cGFzc3dvcmQ+XCJ9YCkuXG4gICAqICAgICBGb3IgbW9yZSBkZXRhaWxzIG9uIEpTT04gZm9ybWF0LCBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcHJpdmF0ZS1hdXRoLmh0bWxcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwOiBzdHJpbmcsIHJlZj86IHN0cmluZywgcHVibGljIGNyZWRzPzogc3RyaW5nKSB7XG4gICAgdGhpcy5uYW1lID0gcDtcbiAgICBpZiAocmVmKSB7XG4gICAgICB0aGlzLm5hbWUgKz0gJzonICsgcmVmO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IHVyaSgpOiBzdHJpbmcgeyByZXR1cm4gYHMzOi8vJHt0aGlzLm5hbWV9YDsgfVxufVxuXG5leHBvcnQgY2xhc3MgRUNSRGVwbG95bWVudCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgaGFuZGxlcjogbGFtYmRhLlNpbmdsZXRvbkZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFQ1JEZXBsb3ltZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIGNvbnN0IG1lbW9yeUxpbWl0ID0gcHJvcHMubWVtb3J5TGltaXQgPz8gNTEyO1xuICAgIHRoaXMuaGFuZGxlciA9IG5ldyBsYW1iZGEuU2luZ2xldG9uRnVuY3Rpb24odGhpcywgJ0N1c3RvbVJlc291cmNlSGFuZGxlcicsIHtcbiAgICAgIHV1aWQ6IHRoaXMucmVuZGVyU2luZ2xldG9uVXVpZChtZW1vcnlMaW1pdCksXG4gICAgICBjb2RlOiBnZXRDb2RlKHByb3BzLmJ1aWxkSW1hZ2UgPz8gJ3B1YmxpYy5lY3IuYXdzL2RvY2tlci9saWJyYXJ5L2dvbGFuZzoxJyksXG4gICAgICBydW50aW1lOiBwcm9wcy5sYW1iZGFSdW50aW1lID8/IG5ldyBsYW1iZGEuUnVudGltZSgncHJvdmlkZWQuYWwyMDIzJywgUnVudGltZUZhbWlseS5PVEhFUiksIC8vIG5vdCB1c2luZyBSdW50aW1lLlBST1ZJREVEX0FMMjAyMyB0byBzdXBwb3J0IG9sZGVyIENESyB2ZXJzaW9ucyAoPCAyLjEwNS4wKVxuICAgICAgaGFuZGxlcjogcHJvcHMubGFtYmRhSGFuZGxlciA/PyAnYm9vdHN0cmFwJyxcbiAgICAgIGVudmlyb25tZW50OiBwcm9wcy5lbnZpcm9ubWVudCxcbiAgICAgIGxhbWJkYVB1cnBvc2U6ICdDdXN0b206OkNES0VDUkRlcGxveW1lbnQnLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICByb2xlOiBwcm9wcy5yb2xlLFxuICAgICAgbWVtb3J5U2l6ZTogbWVtb3J5TGltaXQsXG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHByb3BzLnZwY1N1Ym5ldHMsXG4gICAgICBzZWN1cml0eUdyb3VwczogcHJvcHMuc2VjdXJpdHlHcm91cHMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYW5kbGVyUm9sZSA9IHRoaXMuaGFuZGxlci5yb2xlO1xuICAgIGlmICghaGFuZGxlclJvbGUpIHsgdGhyb3cgbmV3IEVycm9yKCdsYW1iZGEuU2luZ2xldG9uRnVuY3Rpb24gc2hvdWxkIGhhdmUgY3JlYXRlZCBhIFJvbGUnKTsgfVxuXG4gICAgaGFuZGxlclJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuJyxcbiAgICAgICAgICAnZWNyOkJhdGNoQ2hlY2tMYXllckF2YWlsYWJpbGl0eScsXG4gICAgICAgICAgJ2VjcjpHZXREb3dubG9hZFVybEZvckxheWVyJyxcbiAgICAgICAgICAnZWNyOkdldFJlcG9zaXRvcnlQb2xpY3knLFxuICAgICAgICAgICdlY3I6RGVzY3JpYmVSZXBvc2l0b3JpZXMnLFxuICAgICAgICAgICdlY3I6TGlzdEltYWdlcycsXG4gICAgICAgICAgJ2VjcjpEZXNjcmliZUltYWdlcycsXG4gICAgICAgICAgJ2VjcjpCYXRjaEdldEltYWdlJyxcbiAgICAgICAgICAnZWNyOkxpc3RUYWdzRm9yUmVzb3VyY2UnLFxuICAgICAgICAgICdlY3I6RGVzY3JpYmVJbWFnZVNjYW5GaW5kaW5ncycsXG4gICAgICAgICAgJ2VjcjpJbml0aWF0ZUxheWVyVXBsb2FkJyxcbiAgICAgICAgICAnZWNyOlVwbG9hZExheWVyUGFydCcsXG4gICAgICAgICAgJ2VjcjpDb21wbGV0ZUxheWVyVXBsb2FkJyxcbiAgICAgICAgICAnZWNyOlB1dEltYWdlJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pKTtcbiAgICBoYW5kbGVyUm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgICdzMzpHZXRPYmplY3QnLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuXG4gICAgaWYgKHByb3BzLmltYWdlQXJjaCAmJiBwcm9wcy5pbWFnZUFyY2gubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGltYWdlQXJjaCBtdXN0IGNvbnRhaW4gZXhhY3RseSAxIGVsZW1lbnQsIGdvdCAke0pTT04uc3RyaW5naWZ5KHByb3BzLmltYWdlQXJjaCl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGltYWdlQXJjaCA9IHByb3BzLmltYWdlQXJjaCA/IHByb3BzLmltYWdlQXJjaFswXSA6ICcnO1xuXG4gICAgbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsICdDdXN0b21SZXNvdXJjZScsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5oYW5kbGVyLmZ1bmN0aW9uQXJuLFxuICAgICAgLy8gVGhpcyBoYXMgYmVlbiBjb3B5L3Bhc3RlZCBhbmQgaXMgYSBwdXJlIGxpZSwgYnV0IGNoYW5naW5nIGl0IGlzIGdvaW5nIHRvIGNoYW5nZSBwZW9wbGUncyBpbmZyYSEhIFgoXG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OkNES0J1Y2tldERlcGxveW1lbnQnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBTcmNJbWFnZTogcHJvcHMuc3JjLnVyaSxcbiAgICAgICAgU3JjQ3JlZHM6IHByb3BzLnNyYy5jcmVkcyxcbiAgICAgICAgRGVzdEltYWdlOiBwcm9wcy5kZXN0LnVyaSxcbiAgICAgICAgRGVzdENyZWRzOiBwcm9wcy5kZXN0LmNyZWRzLFxuICAgICAgICAuLi5pbWFnZUFyY2ggPyB7IEltYWdlQXJjaDogaW1hZ2VBcmNoIH0gOiB7fSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkVG9QcmluY2lwYWxQb2xpY3koc3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQpOiBBZGRUb1ByaW5jaXBhbFBvbGljeVJlc3VsdCB7XG4gICAgY29uc3QgaGFuZGxlclJvbGUgPSB0aGlzLmhhbmRsZXIucm9sZTtcbiAgICBpZiAoIWhhbmRsZXJSb2xlKSB7IHRocm93IG5ldyBFcnJvcignbGFtYmRhLlNpbmdsZXRvbkZ1bmN0aW9uIHNob3VsZCBoYXZlIGNyZWF0ZWQgYSBSb2xlJyk7IH1cblxuICAgIHJldHVybiBoYW5kbGVyUm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShzdGF0ZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJTaW5nbGV0b25VdWlkKG1lbW9yeUxpbWl0PzogbnVtYmVyKSB7XG4gICAgbGV0IHV1aWQgPSAnYmQwN2M5MzAtZWRiOS00MTEyLWEyMGYtMDNmMDk2ZjUzNjY2JztcblxuICAgIC8vIGlmIHVzZXIgc3BlY2lmeSBhIGN1c3RvbSBtZW1vcnkgbGltaXQsIGRlZmluZSBhbm90aGVyIHNpbmdsZXRvbiBoYW5kbGVyXG4gICAgLy8gd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24uIG90aGVyd2lzZSwgaXQgd29uJ3QgYmUgcG9zc2libGUgdG8gdXNlIG11bHRpcGxlXG4gICAgLy8gY29uZmlndXJhdGlvbnMgc2luY2Ugd2UgaGF2ZSBhIHNpbmdsZXRvbi5cbiAgICBpZiAobWVtb3J5TGltaXQpIHtcbiAgICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQobWVtb3J5TGltaXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCB1c2UgdG9rZW5zIHdoZW4gc3BlY2lmeWluZyBcIm1lbW9yeUxpbWl0XCIgc2luY2Ugd2UgdXNlIGl0IHRvIGlkZW50aWZ5IHRoZSBzaW5nbGV0b24gY3VzdG9tIHJlc291cmNlIGhhbmRsZXInKTtcbiAgICAgIH1cblxuICAgICAgdXVpZCArPSBgLSR7bWVtb3J5TGltaXQudG9TdHJpbmcoKX1NaUJgO1xuICAgIH1cblxuICAgIHJldHVybiB1dWlkO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -47,7 +47,7 @@
47
47
  "@aws-cdk/integ-runner": "latest",
48
48
  "@aws-cdk/integ-tests-alpha": "latest",
49
49
  "@stylistic/eslint-plugin": "^2",
50
- "@types/jest": "^27",
50
+ "@types/jest": "^29",
51
51
  "@types/node": "^18",
52
52
  "@typescript-eslint/eslint-plugin": "^8",
53
53
  "@typescript-eslint/parser": "^8",
@@ -56,19 +56,19 @@
56
56
  "commit-and-tag-version": "^12",
57
57
  "constructs": "10.0.5",
58
58
  "eslint": "^9",
59
- "eslint-import-resolver-typescript": "^2.7.1",
59
+ "eslint-import-resolver-typescript": "^3.8.6",
60
60
  "eslint-plugin-import": "^2.31.0",
61
- "jest": "^27",
62
- "jest-junit": "^15",
63
- "jsii": "5.1.x",
61
+ "jest": "^29",
62
+ "jest-junit": "^16",
63
+ "jsii": "5.7.x",
64
64
  "jsii-diff": "^1.109.0",
65
65
  "jsii-docgen": "^10.5.0",
66
66
  "jsii-pacmak": "^1.109.0",
67
67
  "jsii-rosetta": "^5.7.8",
68
68
  "projen": "^0.91.4",
69
- "ts-jest": "^27",
69
+ "ts-jest": "^29",
70
70
  "ts-node": "^10.9.2",
71
- "typescript": "^4.9.5"
71
+ "typescript": "5.7.x"
72
72
  },
73
73
  "peerDependencies": {
74
74
  "aws-cdk-lib": "^2.80.0",
@@ -94,7 +94,7 @@
94
94
  "publishConfig": {
95
95
  "access": "public"
96
96
  },
97
- "version": "3.2.1",
97
+ "version": "3.3.0",
98
98
  "jest": {
99
99
  "coverageProvider": "v8",
100
100
  "testMatch": [
@@ -131,11 +131,13 @@
131
131
  }
132
132
  ]
133
133
  ],
134
- "preset": "ts-jest",
135
- "globals": {
136
- "ts-jest": {
137
- "tsconfig": "tsconfig.dev.json"
138
- }
134
+ "transform": {
135
+ "^.+\\.[t]sx?$": [
136
+ "ts-jest",
137
+ {
138
+ "tsconfig": "tsconfig.dev.json"
139
+ }
140
+ ]
139
141
  }
140
142
  },
141
143
  "types": "lib/index.d.ts",
package/lambda/install.js DELETED
@@ -1,82 +0,0 @@
1
- const fs = require('fs');
2
- const got = require('got');
3
- const path = require('path');
4
- const stream = require('stream');
5
- const crypto = require('crypto');
6
- const { HttpProxyAgent, HttpsProxyAgent } = require('hpagent');
7
- const { promisify } = require('util');
8
- const pipeline = promisify(stream.pipeline);
9
-
10
- const package = require('../package.json');
11
- const version = package.version;
12
- const rootUrl = package.repository.url.replace('git+', '').replace('.git', '');
13
-
14
- function mkdirp(p) {
15
- if (!fs.existsSync(p)) {
16
- fs.mkdirSync(p, { recursive: true });
17
- }
18
- }
19
-
20
- function sha256sum(p) {
21
- return new Promise(function (resolve, reject) {
22
- const hash = crypto.createHash('sha256');
23
-
24
- fs.createReadStream(p)
25
- .on('error', reject)
26
- .on('data', chunk => hash.update(chunk))
27
- .on('close', () => resolve(hash.digest('hex')));
28
- });
29
- }
30
-
31
- async function download(url, dest, agent) {
32
- remove(dest);
33
- console.log(`download ${url}`);
34
- await pipeline(
35
- got.stream(url, { agent }),
36
- fs.createWriteStream(dest)
37
- );
38
- }
39
-
40
- function remove(dest) {
41
- console.log(`removing ${dest}`);
42
- fs.rmSync(dest, { force: true });
43
- }
44
-
45
-
46
- (async () => {
47
- const dir = process.argv[2];
48
- if (!dir) {
49
- throw new Error('Missing an argument');
50
- }
51
- mkdirp(dir);
52
-
53
- const bin = path.join(dir, 'bootstrap');
54
- const bootstrapExists = fs.existsSync(bin);
55
- const size = bootstrapExists ? fs.statSync(bin).size : 0;
56
- const oneMB = 1024*1024;
57
-
58
- // if the file doesn't exist or is obviously broken, download a new version
59
- if (!bootstrapExists || size < oneMB) {
60
- const agent = {};
61
- agent.https = process.env.HTTPS_PROXY ? new HttpsProxyAgent({proxy: process.env.HTTPS_PROXY}): undefined;
62
- agent.http = process.env.HTTP_PROXY ? new HttpProxyAgent({proxy: process.env.HTTP_PROXY}): undefined;
63
-
64
- try {
65
- await download(`${rootUrl}/releases/download/v${version}/bootstrap`, bin, agent);
66
- const expectedIntegrity = (await got(`${rootUrl}/releases/download/v${version}/bootstrap.sha256`, { agent })).body.trim();
67
- const integrity = await sha256sum(bin);
68
-
69
- if (integrity !== expectedIntegrity) {
70
- throw new Error(`Integrity check error: expected ${expectedIntegrity} but got ${integrity}`);
71
- }
72
- } catch (err) {
73
- // we had a failure downloading or validating integrity of the bootstrap file, so let's remove it to be sure
74
- remove(bin);
75
- throw err;
76
- }
77
- }
78
-
79
- })().catch(err => {
80
- console.error(err.toString());
81
- process.exit(1);
82
- })
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes