Files
analyzer-pipeline/lib/pipeline/container_repo.rb
2019-11-17 14:49:20 +00:00

90 lines
2.0 KiB
Ruby

class Pipeline::ContainerRepo
def self.instance_for(container_slug, credentials)
Pipeline::ContainerRepo.new(container_slug, credentials)
end
attr_reader :image_name
def initialize(image_name, credentials=nil)
@image_name = image_name
@credentials = credentials
end
def create_if_required
puts "Checking if repository exists"
begin
return lookup_repo
rescue Aws::ECR::Errors::RepositoryNotFoundException
puts "Repository #{image_name} not found"
end
puts "Creating repository"
ecr.create_repository({
repository_name: image_name,
image_tag_mutability: "MUTABLE"
})
lookup_repo
end
def lookup_repo
repos = ecr.describe_repositories({
repository_names: [image_name]
})
repos.repositories.first
end
def repository_url
lookup_repo.repository_uri
end
def create_login_token
authorization_token = ecr.get_authorization_token.authorization_data[0].authorization_token
plain = Base64.decode64(authorization_token)
user,password = plain.split(":")
end
def list_images
puts "credentials #{@credentials}"
puts "ECR #{ecr}"
puts create_login_token
ecr.list_images({
repository_name: image_name
})
end
def images_info
images = list_images()
info = {}
images.image_ids.each do |image|
info[image.image_digest] ||= []
info[image.image_digest] << image.image_tag
end
info
end
def git_shas
images = list_images()
tags = []
images.image_ids.each do |image|
tag = image.image_tag
next if tag.nil?
# Only return git-based shas
if tag.start_with?("sha-")
tag = tag.gsub(/sha-/, "")
tags << tag unless tag.include?("-")
end
end
tags.uniq
end
def ecr
@ecr ||= begin
( @credentials.nil? ) ?
Aws::ECR::Client.new(region: 'eu-west-1') :
Aws::ECR::Client.new(region: 'eu-west-1', credentials: @credentials)
end
end
end