Class: Dependabot::Docker::FileParser
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
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
#ecosystem ⇒ Object
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
|
#parse ⇒ Object
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
|