Class: Dependabot::Docker::FileParser
- Inherits:
-
FileParsers::Base
- Object
- FileParsers::Base
- Dependabot::Docker::FileParser
- Defined in:
- lib/dependabot/docker/file_parser.rb
Constant Summary collapse
- DOMAIN_COMPONENT =
Detials of Docker regular expressions is at github.com/docker/distribution/blob/master/reference/regexp.go
/(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])/.freeze
- DOMAIN =
/(?:#{DOMAIN_COMPONENT}(?:\.#{DOMAIN_COMPONENT})+)/.freeze
- REGISTRY =
/(?<registry>#{DOMAIN}(?::[0-9]+)?)/.freeze
- NAME_COMPONENT =
/(?:[a-z0-9]+(?:(?:[._]|__|[-]*)[a-z0-9]+)*)/.freeze
- IMAGE =
%r{(?<image>#{NAME_COMPONENT}(?:/#{NAME_COMPONENT})*)}.freeze
- FROM =
/[Ff][Rr][Oo][Mm]/.freeze
- TAG =
/:(?<tag>[\w][\w.-]{0,127})/.freeze
- DIGEST =
/@(?<digest>[^\s]+)/.freeze
- NAME =
/\s+AS\s+(?<name>[a-zA-Z0-9_-]+)/.freeze
- FROM_LINE =
%r{^#{FROM}\s+(#{REGISTRY}/)?#{IMAGE}#{TAG}?#{DIGEST}?#{NAME}?}.freeze
- AWS_ECR_URL =
/dkr\.ecr\.(?<region>[^.]+).amazonaws\.com/.freeze
Instance Method Summary collapse
Instance Method Details
#parse ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/dependabot/docker/file_parser.rb', line 35 def parse dependency_set = DependencySet.new dockerfiles.each do |dockerfile| dockerfile.content.each_line do |line| next unless FROM_LINE.match?(line) parsed_from_line = FROM_LINE.match(line).named_captures version = version_from(parsed_from_line) next unless version dependency_set << Dependency.new( name: parsed_from_line.fetch("image"), version: version, package_manager: "docker", requirements: [ requirement: nil, groups: [], file: dockerfile.name, source: source_from(parsed_from_line) ] ) end end dependency_set.dependencies end |