public async Task <ContainerImage> GetImage(string repository, string tag) { var repositories = await GetRepositoriesInternal(); var repo = repositories.First(x => x.repositoryUri == repository); var describeImagesRequest = new DescribeImagesRequest() { ImageIds = new List <ImageIdentifier>() { new ImageIdentifier() { ImageTag = tag } }, RegistryId = repo.registryId, RepositoryName = repo.repositoryName, }; var images = await _client.DescribeImagesAsync(describeImagesRequest, CancellationToken.None); return(images.ImageDetails.SelectMany( i => i.ImageTags, (i, tag) => new ContainerImage(repository, tag, i.ImageDigest, i.ImagePushedAt) ) .First()); }
public async Task <List <(string tag, DateTime createdAt)> > GetRepositoryTags(string repository) { using (_log.BeginScope(new Dictionary <string, object>() { { "Repository", repository } })) { _log.LogInformation("Getting repository tags"); var repositories = await _client.DescribeRepositoriesAsync(new DescribeRepositoriesRequest()); var repo = repositories.Repositories.First(r => r.RepositoryUri.Equals(repository, StringComparison.OrdinalIgnoreCase)); var describeImagesRequest = new DescribeImagesRequest() { RegistryId = repo.RegistryId, RepositoryName = repo.RepositoryName, }; var images = await _client.DescribeImagesAsync(describeImagesRequest, CancellationToken.None); _log.LogTrace("Building image list"); var imageList = images.ImageDetails.SelectMany( i => i.ImageTags, (i, tag) => (tag, i.ImagePushedAt) ) .ToList(); while (images.NextToken != null) { describeImagesRequest.NextToken = images.NextToken; images = await _client.DescribeImagesAsync(describeImagesRequest); imageList.AddRange( images.ImageDetails.SelectMany( i => i.ImageTags, (i, tag) => (tag, i.ImagePushedAt) ) ); } _log.LogInformation("Found {ImageCount} images for {Repository}", imageList.Count, repository); return(imageList); } }