1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
63
64
65
66
67
68
69
70
71
|
# frozen_string_literal: true
module LicenseFinder
class Gradle
def prepare
within_project_path do
tool_box.install(tool: :java, version: java_version, env: default_env)
end
end
def current_packages
return [] unless download_licenses
Pathname
.glob(project_path.join('**', 'dependency-license.xml'))
.map(&:read)
.flat_map { |xml_file| parse_from(xml_file) }.uniq
end
def package_management_command
wrapper? ? './gradlew' : 'gradle'
end
private
def java_version(env: ENV)
@java_version ||= tool_box.version_of(:java, env: env)
end
def download_licenses
_stdout, _stderr, status = within_project_path do
env = {
'JAVA_HOME' => ENV.fetch("JAVA_HOME", "/opt/asdf/installs/java/#{java_version}"),
'TERM' => 'noop'
}
shell.execute([
@command,
ENV.fetch('GRADLE_CLI_OPTS', '--exclude-task=test --no-daemon --debug'),
'downloadLicenses'
], env: env)
end
status.success?
end
def wrapper?
File.exist?(File.join(project_path, 'gradlew'))
end
def xml_parsing_options
@xml_parsing_options ||= { 'GroupTags' => { 'dependencies' => 'dependency' } }
end
def parse_from(xml_file)
XmlSimple
.xml_in(xml_file, xml_parsing_options)
.fetch('dependency', []).map { |hash| map_from(hash) }
end
def map_from(hash)
Dependency.from(GradlePackage.new(hash, include_groups: @include_groups), detected_package_path)
end
def default_env
@default_env = {
'CACHE_DIR' => '/opt/gitlab',
'JAVA_HOME' => ENV.fetch("JAVA_HOME", "/opt/asdf/installs/java/#{java_version}")
}
end
end
end
|