Class: Dependabot::Docker::FileParser

Inherits:
Shared::SharedFileParser show all
Extended by:
T::Sig
Defined in:
lib/dependabot/docker/file_parser.rb

Constant Summary collapse

YAML_REGEXP =
/^[^\.].*\.ya?ml$/i
FROM =
/FROM/i
PLATFORM =
/--platform\=(?<platform>\S+)/
TAG_NO_PREFIX =
/(?<tag>[\w][\w.-]{0,127})/
TAG =
/:#{TAG_NO_PREFIX}/
DIGEST =
/(?<digest>[0-9a-f]{64})/
FROM_LINE =
%r{^#{FROM}\s+(#{PLATFORM}\s+)?(#{REGISTRY}/)?
#{IMAGE}#{TAG}?(?:@sha256:#{DIGEST})?#{NAME}?}x
IMAGE_SPEC =
%r{^(#{REGISTRY}/)?#{IMAGE}#{TAG}?(?:@sha256:#{DIGEST})?#{NAME}?}x
TAG_WITH_DIGEST =
/^#{TAG_NO_PREFIX}(?:@sha256:#{DIGEST})?/x

Constants inherited from Shared::SharedFileParser

Shared::SharedFileParser::DOMAIN, Shared::SharedFileParser::DOMAIN_COMPONENT, Shared::SharedFileParser::IMAGE, Shared::SharedFileParser::NAME, Shared::SharedFileParser::NAME_COMPONENT, Shared::SharedFileParser::REGISTRY

Instance Method Summary collapse

Instance Method Details

#ecosystemObject



27
28
29
30
31
32
33
34
35
# File 'lib/dependabot/docker/file_parser.rb', line 27

def ecosystem
  @ecosystem ||= T.let(
    Ecosystem.new(
      name: ECOSYSTEM,
      package_manager: DockerPackageManager.new
    ),
    T.nilable(Ecosystem)
  )
end

#parseObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/dependabot/docker/file_parser.rb', line 38

def parse
  dependency_set = DependencySet.new

  dockerfiles.each do |dockerfile|
    T.must(dockerfile.content).each_line do |line|
      next unless FROM_LINE.match?(line)

      parsed_from_line = T.must(FROM_LINE.match(line)).named_captures
      parsed_from_line["registry"] = nil if parsed_from_line["registry"] == "docker.io"

      version = version_from(parsed_from_line)
      next unless version

      dependency_set << build_dependency(dockerfile, parsed_from_line, version)
    end
  end

  manifest_files.each do |file|
    dependency_set += workfile_file_dependencies(file)
  end

  dependency_set.dependencies
end