Sha256: 6f857325a9f7ee5f3f7f6ae0e0100232c969b8b2ac743a9e1e22d18cf409ad94

Contents?: true

Size: 1.13 KB

Versions: 9

Compression:

Stored size: 1.13 KB

Contents

class KuberKit::ImageCompiler::ImageDependencyResolver
  CircularDependencyError = Class.new(KuberKit::Error)
  DependencyNotFoundError = Class.new(KuberKit::NotFoundError)

  include KuberKit::Import[
    "core.image_store"
  ]
  
  Contract Any, KeywordArgs[
    resolved: Optional[ArrayOf[Symbol]]
  ] => Any
  def get_next(image_names, resolved: [])
    deps = Array(image_names).map { |i| get_recursive_deps(i) }.flatten.uniq

    ready_to_resolve = deps.select do |dep_name|
      unresolved_deps = get_deps(dep_name) - resolved
      unresolved_deps.empty?
    end
    ready_to_resolve - resolved
  end

  def get_recursive_deps(image_name, dependency_tree: [])
    deps = get_deps(image_name)

    if dependency_tree.include?(image_name)
      raise CircularDependencyError, "Circular dependency found for #{image_name}. Dependency tree: #{dependency_tree.inspect}"
    end

    child_deps = []
    deps.each do |i| 
      child_deps += get_recursive_deps(i, dependency_tree: dependency_tree + [image_name])
    end

    (deps + child_deps).uniq
  end

  def get_deps(image_name)
    image_store.get_definition(image_name).dependencies
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
kuber_kit-0.1.8 lib/kuber_kit/image_compiler/image_dependency_resolver.rb
kuber_kit-0.1.7 lib/kuber_kit/image_compiler/image_dependency_resolver.rb
kuber_kit-0.1.6 lib/kuber_kit/image_compiler/image_dependency_resolver.rb
kuber_kit-0.1.5 lib/kuber_kit/image_compiler/image_dependency_resolver.rb
kuber_kit-0.1.4 lib/kuber_kit/image_compiler/image_dependency_resolver.rb
kuber_kit-0.1.3 lib/kuber_kit/image_compiler/image_dependency_resolver.rb
kuber_kit-0.1.2 lib/kuber_kit/image_compiler/image_dependency_resolver.rb
kuber_kit-0.1.1 lib/kuber_kit/image_compiler/image_dependency_resolver.rb
kuber_kit-0.1.0 lib/kuber_kit/image_compiler/image_dependency_resolver.rb