@@ -10,19 +10,22 @@ load "$PWD/hooks/lib/ecr-registry-provider.bash"
1010pre_command_hook=" $PWD /hooks/pre-command"
1111
1212@test " ECR: Applies lifecycle policy to existing repositories" {
13+ export AWS_DEFAULT_REGION=" ap-southeast-2"
1314 export BUILDKITE_ORGANIZATION_SLUG=" example-org"
1415 export BUILDKITE_PIPELINE_SLUG=" example-pipeline"
1516 local expected_repository_name=" build-cache/example-org/example-pipeline"
1617
1718 stub aws \
18- " ecr get-login --no-include-email : echo docker login -u AWS -p 1234 https://1234567891012.dkr.ecr.ap-southeast-2.amazonaws.com" \
19+ " sts get-caller-identity --query Account --output text : echo 1234567891012" \
20+ " ecr get-login-password --region ap-southeast-2 : echo secure-ecr-password" \
1921 " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].registryId : echo looked up repository" \
2022 " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].repositoryArn : echo arn:aws:ecr:ap-southeast-2:1234567891012:repository/${expected_repository_name} " \
2123 " ecr tag-resource * : echo tag existing resource" \
2224 " ecr put-lifecycle-policy * : echo put lifecycle policy" \
23- " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].repositoryUri : echo https://1234567891012.dkr.ecr.ap-southeast-2.amazonaws.com"
25+ " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].repositoryUri : echo https://1234567891012.dkr.ecr.ap-southeast-2.amazonaws.com"
26+
2427 stub docker \
25- " login -u AWS -p 1234 https:// 1234567891012.dkr.ecr.ap-southeast-2.amazonaws.com : echo logging in to docker" \
28+ " login --username AWS --password-stdin 1234567891012.dkr.ecr.ap-southeast-2.amazonaws.com : echo logging in to docker" \
2629 " pull : echo pulled image"
2730
2831 stub sha1sum \
@@ -46,20 +49,69 @@ pre_command_hook="$PWD/hooks/pre-command"
4649}
4750
4851@test " ECR: Builds new images with tags" {
52+ export AWS_DEFAULT_REGION=" ap-southeast-2"
4953 export BUILDKITE_ORGANIZATION_SLUG=" example-org"
5054 export BUILDKITE_PIPELINE_SLUG=" example-pipeline"
5155 local expected_repository_name=" build-cache/example-org/example-pipeline"
5256 local repository_uri=" 1234567891012.dkr.ecr.ap-southeast-2.amazonaws.com/${expected_repository_name} "
5357
5458 stub aws \
55- " ecr get-login --no-include-email : echo docker login -u AWS -p 1234 https://1234567891012.dkr.ecr.ap-southeast-2.amazonaws.com" \
59+ " sts get-caller-identity --query Account --output text : echo 1234567891012" \
60+ " ecr get-login-password --region ap-southeast-2 : echo secure-ecr-password" \
5661 " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].registryId : echo looked up repository" \
5762 " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].repositoryArn : echo arn:aws:ecr:ap-southeast-2:1234567891012:repository/${expected_repository_name} " \
5863 " ecr tag-resource * : echo tag existing resource" \
5964 " ecr put-lifecycle-policy * : echo put lifecycle policy" \
60- " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].repositoryUri : echo ${repository_uri} "
65+ " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].repositoryUri : echo ${repository_uri} " \
66+
67+ stub docker \
68+ " login --username AWS --password-stdin 1234567891012.dkr.ecr.ap-southeast-2.amazonaws.com : echo logging in to docker" \
69+ " pull : echo not found && false" \
70+ " build * : echo building docker image" \
71+ " tag ${repository_uri} :deadbee ${repository_uri} :latest : echo tagged latest" \
72+ " push ${repository_uri} :deadbee : echo pushed deadbeef" \
73+ " push ${repository_uri} :latest : echo pushed latest"
74+
75+ stub sha1sum \
76+ " Dockerfile : echo 'sha1sum(Dockerfile)'" \
77+ " : echo sha1sum" \
78+ " : echo sha1sum" \
79+ " : echo deadbeef"
80+
81+ run " ${pre_command_hook} "
82+
83+ assert_success
84+ assert_output --partial " logging in to docker"
85+ assert_output --partial " looked up repository"
86+ assert_output --partial " building docker image"
87+ assert_output --partial " tag existing resource"
88+ assert_output --partial " put lifecycle policy"
89+ assert_output --partial " tagged latest"
90+ assert_output --partial " pushed deadbeef"
91+ assert_output --partial " pushed latest"
92+
93+ unstub aws
94+ unstub docker
95+ unstub sha1sum
96+ }
97+
98+ @test " ECR: Uses correct region when region not specified and AWS_DEFAULT_REGION not set" {
99+ export BUILDKITE_ORGANIZATION_SLUG=" example-org"
100+ export BUILDKITE_PIPELINE_SLUG=" example-pipeline"
101+ local expected_repository_name=" build-cache/example-org/example-pipeline"
102+ local repository_uri=" 1234567891012.dkr.ecr.eu-west-1.amazonaws.com/${expected_repository_name} "
103+
104+ stub aws \
105+ " sts get-caller-identity --query Account --output text : echo 1234567891012" \
106+ " ecr get-login-password --region eu-west-1 : echo secure-ecr-password" \
107+ " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].registryId : echo looked up repository" \
108+ " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].repositoryArn : echo arn:aws:ecr:eu-west-1:1234567891012:repository/${expected_repository_name} " \
109+ " ecr tag-resource * : echo tag existing resource" \
110+ " ecr put-lifecycle-policy * : echo put lifecycle policy" \
111+ " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].repositoryUri : echo ${repository_uri} " \
112+
61113 stub docker \
62- " login -u AWS -p 1234 https:// 1234567891012.dkr.ecr.ap-southeast-2 .amazonaws.com : echo logging in to docker" \
114+ " login --username AWS --password-stdin 1234567891012.dkr.ecr.eu-west-1 .amazonaws.com : echo logging in to docker" \
63115 " pull : echo not found && false" \
64116 " build * : echo building docker image" \
65117 " tag ${repository_uri} :deadbee ${repository_uri} :latest : echo tagged latest" \
@@ -88,3 +140,51 @@ pre_command_hook="$PWD/hooks/pre-command"
88140 unstub docker
89141 unstub sha1sum
90142}
143+
144+ @test " ECR: Uses correct region when region is specified" {
145+ export AWS_DEFAULT_REGION=" ap-southeast-2"
146+ export BUILDKITE_PLUGIN_DOCKER_ECR_CACHE_REGION=" ap-southeast-1"
147+ export BUILDKITE_ORGANIZATION_SLUG=" example-org"
148+ export BUILDKITE_PIPELINE_SLUG=" example-pipeline"
149+ local expected_repository_name=" build-cache/example-org/example-pipeline"
150+ local repository_uri=" 1234567891012.dkr.ecr.ap-southeast-1.amazonaws.com/${expected_repository_name} "
151+
152+ stub aws \
153+ " sts get-caller-identity --query Account --output text : echo 1234567891012" \
154+ " ecr get-login-password --region ap-southeast-1 : echo secure-ecr-password" \
155+ " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].registryId : echo looked up repository" \
156+ " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].repositoryArn : echo arn:aws:ecr:ap-southeast-1:1234567891012:repository/${expected_repository_name} " \
157+ " ecr tag-resource * : echo tag existing resource" \
158+ " ecr put-lifecycle-policy * : echo put lifecycle policy" \
159+ " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].repositoryUri : echo ${repository_uri} " \
160+
161+ stub docker \
162+ " login --username AWS --password-stdin 1234567891012.dkr.ecr.ap-southeast-1.amazonaws.com : echo logging in to docker" \
163+ " pull : echo not found && false" \
164+ " build * : echo building docker image" \
165+ " tag ${repository_uri} :deadbee ${repository_uri} :latest : echo tagged latest" \
166+ " push ${repository_uri} :deadbee : echo pushed deadbeef" \
167+ " push ${repository_uri} :latest : echo pushed latest"
168+
169+ stub sha1sum \
170+ " Dockerfile : echo 'sha1sum(Dockerfile)'" \
171+ " : echo sha1sum" \
172+ " : echo sha1sum" \
173+ " : echo deadbeef"
174+
175+ run " ${pre_command_hook} "
176+
177+ assert_success
178+ assert_output --partial " logging in to docker"
179+ assert_output --partial " looked up repository"
180+ assert_output --partial " building docker image"
181+ assert_output --partial " tag existing resource"
182+ assert_output --partial " put lifecycle policy"
183+ assert_output --partial " tagged latest"
184+ assert_output --partial " pushed deadbeef"
185+ assert_output --partial " pushed latest"
186+
187+ unstub aws
188+ unstub docker
189+ unstub sha1sum
190+ }
0 commit comments