@@ -3,6 +3,8 @@ import { AWSError } from 'aws-sdk/lib/error'
33import ECR , {
44 DescribeRepositoriesRequest ,
55 DescribeRepositoriesResponse ,
6+ GetLifecyclePolicyResponse ,
7+ GetRepositoryPolicyResponse ,
68 ListTagsForResourceResponse ,
79 Repository ,
810 RepositoryList ,
@@ -27,6 +29,8 @@ const MAX_ITEMS = 1000
2729export interface RawAwsEcr extends Repository {
2830 region : string
2931 Tags ?: TagMap
32+ lifecyclePolicy : GetLifecyclePolicyResponse
33+ repositoryPolicy : GetRepositoryPolicyResponse
3034}
3135
3236const listReposForRegion = async ( {
@@ -99,6 +103,56 @@ const getResourceTags = async (ecr: ECR, arn: string): Promise<TagMap> =>
99103 }
100104 } )
101105
106+ const getLifecyclePolicy = async (
107+ ecr : ECR ,
108+ registryId : string ,
109+ repositoryName : string
110+ ) : Promise < GetLifecyclePolicyResponse > =>
111+ new Promise ( resolve => {
112+ try {
113+ ecr . getLifecyclePolicy (
114+ { registryId, repositoryName } ,
115+ ( err : AWSError , data : GetLifecyclePolicyResponse ) => {
116+ if ( err ) {
117+ errorLog . generateAwsErrorLog ( {
118+ functionName : 'ecr:getLifecyclePolicy' ,
119+ err,
120+ } )
121+ return resolve ( { } )
122+ }
123+ resolve ( data )
124+ }
125+ )
126+ } catch ( error ) {
127+ resolve ( { } )
128+ }
129+ } )
130+
131+ const getRepositoryPolicy = async (
132+ ecr : ECR ,
133+ registryId : string ,
134+ repositoryName : string
135+ ) : Promise < GetRepositoryPolicyResponse > =>
136+ new Promise ( resolve => {
137+ try {
138+ ecr . getRepositoryPolicy (
139+ { registryId, repositoryName } ,
140+ ( err : AWSError , data : GetRepositoryPolicyResponse ) => {
141+ if ( err ) {
142+ errorLog . generateAwsErrorLog ( {
143+ functionName : 'ecr:getRepositoryPolicy' ,
144+ err,
145+ } )
146+ return resolve ( { } )
147+ }
148+ resolve ( data )
149+ }
150+ )
151+ } catch ( error ) {
152+ resolve ( { } )
153+ }
154+ } )
155+
102156export default async ( {
103157 regions,
104158 config,
@@ -112,9 +166,11 @@ export default async ({
112166 const ecrData : RawAwsEcr [ ] = [ ]
113167 const regionPromises = [ ]
114168 const tagsPromises = [ ]
169+ const lifecyclePoliciesPromises = [ ]
170+ const repositoryPoliciesPromises = [ ]
115171
116172 // get all repositories for all regions
117- regions . split ( ',' ) . map ( region => {
173+ regions . split ( ',' ) . forEach ( region => {
118174 const ecr = new ECR ( { ...config , region, endpoint } )
119175 const regionPromise = new Promise < void > ( async resolveRegion => {
120176 const repositoryList = await listReposForRegion ( {
@@ -126,6 +182,8 @@ export default async ({
126182 ...repositoryList . map ( repo => ( {
127183 ...repo ,
128184 region,
185+ lifecyclePolicy : { } ,
186+ repositoryPolicy : { } ,
129187 } ) )
130188 )
131189 }
@@ -138,7 +196,7 @@ export default async ({
138196 await Promise . all ( regionPromises )
139197
140198 // get all tags for each repository
141- ecrData . map ( ( { repositoryArn, region } , idx ) => {
199+ ecrData . forEach ( ( { repositoryArn, region } , idx ) => {
142200 const ecr = new ECR ( { ...config , region, endpoint } )
143201 const tagsPromise = new Promise < void > ( async resolveTags => {
144202 const envTags : TagMap = await getResourceTags ( ecr , repositoryArn )
@@ -150,6 +208,47 @@ export default async ({
150208
151209 logger . debug ( lt . gettingECRRepoTags )
152210 await Promise . all ( tagsPromises )
211+
212+ // get lifecycle policy for each repository
213+ ecrData . forEach ( ( { registryId, repositoryName, region } , idx ) => {
214+ const ecr = new ECR ( { ...config , region, endpoint } )
215+ const lifecyclePolicyPromise = new Promise < void > (
216+ async resolveLifecyclePolicy => {
217+ const lifecyclePolicy = await getLifecyclePolicy (
218+ ecr ,
219+ registryId ,
220+ repositoryName
221+ )
222+ ecrData [ idx ] . lifecyclePolicy = lifecyclePolicy
223+ resolveLifecyclePolicy ( )
224+ }
225+ )
226+ lifecyclePoliciesPromises . push ( lifecyclePolicyPromise )
227+ } )
228+
229+ logger . debug ( lt . gettingECRRepoLifecyclePolicy )
230+ await Promise . all ( lifecyclePoliciesPromises )
231+
232+ // get repository policy for each repository
233+ ecrData . forEach ( ( { registryId, repositoryName, region } , idx ) => {
234+ const ecr = new ECR ( { ...config , region, endpoint } )
235+ const repositoryPolicyPromise = new Promise < void > (
236+ async resolveRepositoryPolicy => {
237+ const repositoryPolicy = await getRepositoryPolicy (
238+ ecr ,
239+ registryId ,
240+ repositoryName
241+ )
242+ ecrData [ idx ] . repositoryPolicy = repositoryPolicy
243+ resolveRepositoryPolicy ( )
244+ }
245+ )
246+ repositoryPoliciesPromises . push ( repositoryPolicyPromise )
247+ } )
248+
249+ logger . debug ( lt . gettingECRRepoRepositoryPolicy )
250+ await Promise . all ( repositoryPoliciesPromises )
251+
153252 errorLog . reset ( )
154253
155254 resolve ( groupBy ( ecrData , 'region' ) )
0 commit comments