in generatebundlefile/ecr.go [63:127]
func (c *ecrClient) GetShaForInputs(project Project) ([]api.SourceVersion, error) {
sourceVersion := []api.SourceVersion{}
BundleLog.Info("Looking up ECR for image SHA", "Repository", project.Repository)
for _, tag := range project.Versions {
if !strings.HasSuffix(tag.Name, "latest") {
var imagelookup []ecrtypes.ImageIdentifier
imagelookup = append(imagelookup, ecrtypes.ImageIdentifier{ImageTag: &tag.Name})
ImageDetails, err := c.Describe(&ecr.DescribeImagesInput{
RepositoryName: aws.String(project.Repository),
ImageIds: imagelookup,
})
if err != nil {
return nil, fmt.Errorf("unable to complete DescribeImagesRequest to ECR: %s", err)
}
for _, images := range ImageDetails {
if *images.ImageManifestMediaType != "application/vnd.oci.image.manifest.v1+json" || len(images.ImageTags) == 0 {
continue
}
if len(images.ImageTags) > 0 {
v := &api.SourceVersion{Name: tag.Name, Digest: *images.ImageDigest}
sourceVersion = append(sourceVersion, *v)
continue
}
}
}
if tag.Name == "latest" {
ImageDetails, err := c.Describe(&ecr.DescribeImagesInput{
RepositoryName: aws.String(project.Repository),
})
if err != nil {
return nil, fmt.Errorf("unable to complete DescribeImagesRequest to ECR: %s", err)
}
filteredImageDetails := ImageTagFilter(ImageDetails, "")
sha, err := getLatestImageSha(filteredImageDetails)
if err != nil {
return nil, err
}
sourceVersion = append(sourceVersion, *sha)
continue
}
if strings.HasSuffix(tag.Name, "-latest") {
regex := regexp.MustCompile(`-latest`)
splitVersion := regex.Split(tag.Name, -1) // extract out the version without the latest
ImageDetails, err := c.Describe(&ecr.DescribeImagesInput{
RepositoryName: aws.String(project.Repository),
})
if err != nil {
return nil, fmt.Errorf("unable to complete DescribeImagesRequest to ECR: %s", err)
}
filteredImageDetails := ImageTagFilter(ImageDetails, splitVersion[0])
sha, err := getLatestImageSha(filteredImageDetails)
if err != nil {
return nil, err
}
sourceVersion = append(sourceVersion, *sha)
continue
}
}
sourceVersion = removeDuplicates(sourceVersion)
return sourceVersion, nil
}