UNPKG

aws-cdk-lib

Version:

Version 2 of the AWS Cloud Development Kit library

3 lines (2 loc) 1.8 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.handler=void 0;const aws_sdk_1=require("aws-sdk"),AUTO_DELETE_IMAGES_TAG="aws-cdk:auto-delete-images",ecr=new aws_sdk_1.ECR;async function handler(event){switch(event.RequestType){case"Create":break;case"Update":return onUpdate(event);case"Delete":return onDelete(event.ResourceProperties?.RepositoryName)}}exports.handler=handler;async function onUpdate(event){const updateEvent=event,oldRepositoryName=updateEvent.OldResourceProperties?.RepositoryName,newRepositoryName=updateEvent.ResourceProperties?.RepositoryName;if(newRepositoryName&&oldRepositoryName&&newRepositoryName!==oldRepositoryName)return onDelete(oldRepositoryName)}async function emptyRepository(params){const listedImages=await ecr.listImages(params).promise(),imageIds=listedImages?.imageIds??[],nextToken=listedImages.nextToken??null;imageIds.length!==0&&(await ecr.batchDeleteImage({repositoryName:params.repositoryName,imageIds}).promise(),nextToken&&await emptyRepository({...params,nextToken}))}async function onDelete(repositoryName){if(!repositoryName)throw new Error("No RepositoryName was provided.");const repository=(await ecr.describeRepositories({repositoryNames:[repositoryName]}).promise()).repositories?.find(repo=>repo.repositoryName===repositoryName);if(!await isRepositoryTaggedForDeletion(repository?.repositoryArn)){process.stdout.write(`Repository does not have '${AUTO_DELETE_IMAGES_TAG}' tag, skipping cleaning. `);return}try{await emptyRepository({repositoryName})}catch(e){if(e.name!=="RepositoryNotFoundException")throw e}}async function isRepositoryTaggedForDeletion(repositoryArn){return(await ecr.listTagsForResource({resourceArn:repositoryArn}).promise()).tags?.some(tag=>tag.Key===AUTO_DELETE_IMAGES_TAG&&tag.Value==="true")}