@@ -91,3 +91,91 @@ pre_command_hook="$PWD/hooks/pre-command"
91
91
unstub docker
92
92
unstub sha1sum
93
93
}
94
+
95
+ @test " ECR: Applies lifecycle policy to existing repositories with aws-cli v2" {
96
+ export BUILDKITE_ORGANIZATION_SLUG=" example-org"
97
+ export BUILDKITE_PIPELINE_SLUG=" example-pipeline"
98
+ local expected_repository_name=" build-cache/example-org/example-pipeline"
99
+
100
+ stub aws \
101
+ " --version : echo 'aws-cli/2.4.15 Python/3.9.2 Linux/5.10.76-linuxkit botocore/1.24.3'" \
102
+ " sts get-caller-identity --query \" Account\" --output text : echo 1234567891012" \
103
+ " configure get region : echo ap-southeast-2" \
104
+ " ecr get-login-password --region ap-southeast-2 : echo secure-ecr-password" \
105
+ " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].registryId : echo looked up repository" \
106
+ " 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} " \
107
+ " ecr tag-resource * : echo tag existing resource" \
108
+ " ecr put-lifecycle-policy * : echo put lifecycle policy" \
109
+ " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].repositoryUri : echo https://1234567891012.dkr.ecr.ap-southeast-2.amazonaws.com"
110
+
111
+ stub docker \
112
+ " login --username AWS --password-stdin 1234567891012.dkr.ecr.ap-southeast-2.amazonaws.com : echo logging in to docker" \
113
+ " pull : echo pulled image"
114
+
115
+ stub sha1sum \
116
+ " Dockerfile : echo 'sha1sum(Dockerfile)'" \
117
+ " : echo sha1sum" \
118
+ " : echo sha1sum" \
119
+ " : echo sha1sum"
120
+
121
+ run " ${pre_command_hook} "
122
+
123
+ assert_success
124
+ assert_output --partial " logging in to docker"
125
+ assert_output --partial " pulled image"
126
+ assert_output --partial " looked up repository"
127
+ assert_output --partial " tag existing resource"
128
+ assert_output --partial " put lifecycle policy"
129
+
130
+ unstub aws
131
+ unstub docker
132
+ unstub sha1sum
133
+ }
134
+
135
+ @test " ECR: Builds new images with tags with aws-cli v2" {
136
+ export BUILDKITE_ORGANIZATION_SLUG=" example-org"
137
+ export BUILDKITE_PIPELINE_SLUG=" example-pipeline"
138
+ local expected_repository_name=" build-cache/example-org/example-pipeline"
139
+ local repository_uri=" 1234567891012.dkr.ecr.ap-southeast-2.amazonaws.com/${expected_repository_name} "
140
+
141
+ stub aws \
142
+ " --version : echo 'aws-cli/2.4.15 Python/3.9.2 Linux/5.10.76-linuxkit botocore/1.24.3'" \
143
+ " sts get-caller-identity --query \" Account\" --output text : echo 1234567891012" \
144
+ " configure get region : echo ap-southeast-2" \
145
+ " ecr get-login-password --region ap-southeast-2 : echo secure-ecr-password" \
146
+ " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].registryId : echo looked up repository" \
147
+ " 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} " \
148
+ " ecr tag-resource * : echo tag existing resource" \
149
+ " ecr put-lifecycle-policy * : echo put lifecycle policy" \
150
+ " ecr describe-repositories --repository-names ${expected_repository_name} --output text --query repositories[0].repositoryUri : echo ${repository_uri} " \
151
+
152
+ stub docker \
153
+ " login --username AWS --password-stdin 1234567891012.dkr.ecr.ap-southeast-2.amazonaws.com : echo logging in to docker" \
154
+ " pull : echo not found && false" \
155
+ " build * : echo building docker image" \
156
+ " tag ${repository_uri} :deadbee ${repository_uri} :latest : echo tagged latest" \
157
+ " push ${repository_uri} :deadbee : echo pushed deadbeef" \
158
+ " push ${repository_uri} :latest : echo pushed latest"
159
+
160
+ stub sha1sum \
161
+ " Dockerfile : echo 'sha1sum(Dockerfile)'" \
162
+ " : echo sha1sum" \
163
+ " : echo sha1sum" \
164
+ " : echo deadbeef"
165
+
166
+ run " ${pre_command_hook} "
167
+
168
+ assert_success
169
+ assert_output --partial " logging in to docker"
170
+ assert_output --partial " looked up repository"
171
+ assert_output --partial " building docker image"
172
+ assert_output --partial " tag existing resource"
173
+ assert_output --partial " put lifecycle policy"
174
+ assert_output --partial " tagged latest"
175
+ assert_output --partial " pushed deadbeef"
176
+ assert_output --partial " pushed latest"
177
+
178
+ unstub aws
179
+ unstub docker
180
+ unstub sha1sum
181
+ }
0 commit comments