rake_dependencies 3.2.0.pre.3 → 3.2.0.pre.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/Gemfile.lock +35 -6
- data/Rakefile +67 -45
- data/bin/console +4 -3
- data/lib/rake_dependencies/extractors.rb +195 -42
- data/lib/rake_dependencies/kernel_extensions.rb +2 -0
- data/lib/rake_dependencies/platform_names.rb +6 -2
- data/lib/rake_dependencies/task_sets/all.rb +37 -24
- data/lib/rake_dependencies/task_sets.rb +3 -1
- data/lib/rake_dependencies/tasks/clean.rb +7 -5
- data/lib/rake_dependencies/tasks/download.rb +12 -13
- data/lib/rake_dependencies/tasks/ensure.rb +6 -4
- data/lib/rake_dependencies/tasks/extract.rb +61 -41
- data/lib/rake_dependencies/tasks/fetch.rb +7 -7
- data/lib/rake_dependencies/tasks/install.rb +17 -18
- data/lib/rake_dependencies/tasks.rb +2 -0
- data/lib/rake_dependencies/template.rb +8 -5
- data/lib/rake_dependencies/version.rb +3 -1
- data/lib/rake_dependencies.rb +2 -0
- data/rake_dependencies.gemspec +61 -0
- metadata +75 -17
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rake_factory'
|
2
4
|
|
3
5
|
require_relative '../tasks/clean'
|
@@ -6,7 +8,6 @@ require_relative '../tasks/ensure'
|
|
6
8
|
require_relative '../tasks/extract'
|
7
9
|
require_relative '../tasks/fetch'
|
8
10
|
|
9
|
-
|
10
11
|
module RakeDependencies
|
11
12
|
module TaskSets
|
12
13
|
class All < RakeFactory::TaskSet
|
@@ -42,30 +43,42 @@ module RakeDependencies
|
|
42
43
|
parameter :fetch_task_name, default: :fetch
|
43
44
|
parameter :ensure_task_name, default: :ensure
|
44
45
|
|
45
|
-
task
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
}
|
46
|
+
task(
|
47
|
+
Tasks::Clean, {
|
48
|
+
name: (RakeFactory::DynamicValue.new { |ts| ts.clean_task_name })
|
49
|
+
}
|
50
|
+
)
|
51
|
+
task(
|
52
|
+
Tasks::Download, {
|
53
|
+
name: (RakeFactory::DynamicValue.new { |ts| ts.download_task_name })
|
54
|
+
}
|
55
|
+
)
|
56
|
+
task(
|
57
|
+
Tasks::Extract, {
|
58
|
+
name: (RakeFactory::DynamicValue.new { |ts| ts.extract_task_name })
|
59
|
+
}
|
60
|
+
)
|
61
|
+
task(
|
62
|
+
Tasks::Fetch, {
|
63
|
+
name: (RakeFactory::DynamicValue.new { |ts| ts.fetch_task_name })
|
64
|
+
}
|
65
|
+
)
|
66
|
+
task(
|
67
|
+
Tasks::Ensure, {
|
68
|
+
name: (RakeFactory::DynamicValue.new { |ts| ts.ensure_task_name })
|
69
|
+
}
|
70
|
+
)
|
71
|
+
task(
|
72
|
+
Tasks::Install, {
|
73
|
+
name:
|
74
|
+
(RakeFactory::DynamicValue.new { |ts| ts.install_task_name }),
|
75
|
+
binary_name_template:
|
76
|
+
(RakeFactory::DynamicValue.new do |ts|
|
77
|
+
ts.target_binary_name_template || ts.dependency
|
78
|
+
end),
|
58
79
|
define_if: ->(ts) { ts.installation_directory }
|
59
|
-
|
60
|
-
|
61
|
-
ts.target_binary_name_template || ts.dependency
|
62
|
-
end
|
63
|
-
task Tasks::Fetch, name: RakeFactory::DynamicValue.new { |ts|
|
64
|
-
ts.fetch_task_name
|
65
|
-
}
|
66
|
-
task Tasks::Ensure, name: RakeFactory::DynamicValue.new { |ts|
|
67
|
-
ts.ensure_task_name
|
68
|
-
}
|
80
|
+
}
|
81
|
+
)
|
69
82
|
end
|
70
83
|
end
|
71
84
|
end
|
@@ -1,19 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rake_factory'
|
2
4
|
|
3
5
|
module RakeDependencies
|
4
6
|
module Tasks
|
5
7
|
class Clean < RakeFactory::Task
|
6
8
|
default_name :clean
|
7
|
-
default_description
|
9
|
+
default_description(RakeFactory::DynamicValue.new do |t|
|
8
10
|
"Clean vendored #{t.dependency}"
|
9
|
-
|
11
|
+
end)
|
10
12
|
|
11
|
-
parameter :dependency, :
|
12
|
-
parameter :path, :
|
13
|
+
parameter :dependency, required: true
|
14
|
+
parameter :path, required: true
|
13
15
|
|
14
16
|
action do |t|
|
15
17
|
rm_rf t.path
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
19
|
-
end
|
21
|
+
end
|
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'down'
|
1
4
|
require 'rake_factory'
|
2
|
-
require 'open-uri'
|
3
5
|
require 'rubygems'
|
4
6
|
|
5
7
|
require_relative '../template'
|
@@ -9,9 +11,9 @@ module RakeDependencies
|
|
9
11
|
module Tasks
|
10
12
|
class Download < RakeFactory::Task
|
11
13
|
default_name :download
|
12
|
-
default_description
|
14
|
+
default_description(RakeFactory::DynamicValue.new do |t|
|
13
15
|
"Download #{t.dependency} distribution"
|
14
|
-
|
16
|
+
end)
|
15
17
|
|
16
18
|
parameter :type, default: :zip
|
17
19
|
|
@@ -42,9 +44,10 @@ module RakeDependencies
|
|
42
44
|
.with_parameters(parameters)
|
43
45
|
.render
|
44
46
|
download_file_directory = File.join(path, distribution_directory)
|
45
|
-
download_file_path = File.join(download_file_directory,
|
47
|
+
download_file_path = File.join(download_file_directory,
|
48
|
+
download_file_name)
|
46
49
|
|
47
|
-
temporary_file =
|
50
|
+
temporary_file = Down.download(uri)
|
48
51
|
|
49
52
|
mkdir_p download_file_directory
|
50
53
|
cp temporary_file.path, download_file_path
|
@@ -70,14 +73,10 @@ module RakeDependencies
|
|
70
73
|
|
71
74
|
def ext
|
72
75
|
case resolved_type
|
73
|
-
when :tar_gz then
|
74
|
-
|
75
|
-
when :
|
76
|
-
|
77
|
-
when :zip then
|
78
|
-
'.zip'
|
79
|
-
when :uncompressed then
|
80
|
-
''
|
76
|
+
when :tar_gz then '.tar.gz'
|
77
|
+
when :tgz then '.tgz'
|
78
|
+
when :zip then '.zip'
|
79
|
+
when :uncompressed then ''
|
81
80
|
else
|
82
81
|
raise "Unknown type: #{type}"
|
83
82
|
end
|
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rake_factory'
|
2
4
|
|
3
5
|
module RakeDependencies
|
4
6
|
module Tasks
|
5
7
|
class Ensure < RakeFactory::Task
|
6
8
|
default_name :ensure
|
7
|
-
default_description
|
9
|
+
default_description(RakeFactory::DynamicValue.new do |t|
|
8
10
|
"Ensure #{t.dependency} present"
|
9
|
-
|
11
|
+
end)
|
10
12
|
|
11
13
|
parameter :dependency, required: true
|
12
14
|
parameter :version
|
@@ -28,8 +30,8 @@ module RakeDependencies
|
|
28
30
|
|
29
31
|
install_name = t.scope.path_with_task_name(t.install_task_name)
|
30
32
|
install = if Rake::Task.task_defined?(install_name)
|
31
|
-
|
32
|
-
|
33
|
+
Rake::Task[install_name]
|
34
|
+
end
|
33
35
|
|
34
36
|
if needs_fetch.call(t)
|
35
37
|
[clean, download, extract, install].compact.map(&:invoke)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rake_factory'
|
2
4
|
require 'zip'
|
3
5
|
require 'rubygems'
|
@@ -9,9 +11,9 @@ module RakeDependencies
|
|
9
11
|
module Tasks
|
10
12
|
class Extract < RakeFactory::Task
|
11
13
|
default_name :extract
|
12
|
-
default_description
|
14
|
+
default_description(RakeFactory::DynamicValue.new do |t|
|
13
15
|
"Extract #{t.dependency} archive"
|
14
|
-
|
16
|
+
end)
|
15
17
|
|
16
18
|
parameter :type, default: :zip
|
17
19
|
|
@@ -19,10 +21,10 @@ module RakeDependencies
|
|
19
21
|
parameter :platform_os_names, default: PlatformNames::OS
|
20
22
|
|
21
23
|
parameter :extractors, default: {
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
zip: Extractors::ZipExtractor,
|
25
|
+
tar_gz: Extractors::TarGzExtractor,
|
26
|
+
tgz: Extractors::TarGzExtractor,
|
27
|
+
uncompressed: Extractors::UncompressedExtractor
|
26
28
|
}
|
27
29
|
|
28
30
|
parameter :distribution_directory, default: 'dist'
|
@@ -37,47 +39,69 @@ module RakeDependencies
|
|
37
39
|
parameter :strip_path_template
|
38
40
|
|
39
41
|
action do
|
40
|
-
|
41
|
-
|
42
|
-
platform: platform,
|
43
|
-
platform_cpu_name: platform_cpu_name,
|
44
|
-
platform_os_name: platform_os_name,
|
45
|
-
ext: ext
|
46
|
-
}
|
47
|
-
|
48
|
-
distribution_file_name = Template.new(file_name_template)
|
49
|
-
.with_parameters(parameters)
|
50
|
-
.render
|
51
|
-
distribution_file_directory = File.join(path, distribution_directory)
|
42
|
+
distribution_file_name = interpolate_file_name_template(parameters)
|
43
|
+
distribution_file_directory = relative_to_path(distribution_directory)
|
52
44
|
distribution_file_path = File.join(
|
53
|
-
|
45
|
+
distribution_file_directory, distribution_file_name
|
46
|
+
)
|
54
47
|
|
55
|
-
extraction_path =
|
48
|
+
extraction_path = relative_to_path(binary_directory)
|
56
49
|
|
57
50
|
options = {}
|
58
51
|
if strip_path_template
|
59
|
-
options[:strip_path] =
|
60
|
-
.with_parameters(parameters)
|
61
|
-
.render
|
52
|
+
options[:strip_path] = interpolate_strip_path_template(parameters)
|
62
53
|
end
|
63
54
|
|
64
55
|
if source_binary_name_template && target_binary_name_template
|
65
|
-
options[:rename_from] =
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
.with_parameters(parameters)
|
70
|
-
.render
|
56
|
+
options[:rename_from] =
|
57
|
+
interpolate_source_binary_name_template(parameters)
|
58
|
+
options[:rename_to] =
|
59
|
+
interpolate_target_binary_name_template(parameters)
|
71
60
|
end
|
72
61
|
|
73
62
|
extractor = extractor_for_extension.new(
|
74
|
-
|
75
|
-
|
76
|
-
|
63
|
+
distribution_file_path,
|
64
|
+
extraction_path,
|
65
|
+
options
|
66
|
+
)
|
77
67
|
extractor.extract
|
78
68
|
end
|
79
69
|
|
80
|
-
|
70
|
+
def parameters
|
71
|
+
{
|
72
|
+
version: version,
|
73
|
+
platform: platform,
|
74
|
+
platform_cpu_name: platform_cpu_name,
|
75
|
+
platform_os_name: platform_os_name,
|
76
|
+
ext: ext
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
def interpolate_template(template, parameters)
|
81
|
+
Template.new(template)
|
82
|
+
.with_parameters(parameters)
|
83
|
+
.render
|
84
|
+
end
|
85
|
+
|
86
|
+
def interpolate_file_name_template(parameters)
|
87
|
+
interpolate_template(file_name_template, parameters)
|
88
|
+
end
|
89
|
+
|
90
|
+
def interpolate_strip_path_template(parameters)
|
91
|
+
interpolate_template(strip_path_template, parameters)
|
92
|
+
end
|
93
|
+
|
94
|
+
def interpolate_source_binary_name_template(parameters)
|
95
|
+
interpolate_template(source_binary_name_template, parameters)
|
96
|
+
end
|
97
|
+
|
98
|
+
def interpolate_target_binary_name_template(parameters)
|
99
|
+
interpolate_template(target_binary_name_template, parameters)
|
100
|
+
end
|
101
|
+
|
102
|
+
def relative_to_path(other)
|
103
|
+
File.join(path, other)
|
104
|
+
end
|
81
105
|
|
82
106
|
def extractor_for_extension
|
83
107
|
extractors[resolved_type]
|
@@ -101,14 +125,10 @@ module RakeDependencies
|
|
101
125
|
|
102
126
|
def ext
|
103
127
|
case resolved_type
|
104
|
-
when :tar_gz then
|
105
|
-
|
106
|
-
when :
|
107
|
-
|
108
|
-
when :zip then
|
109
|
-
'.zip'
|
110
|
-
when :uncompressed then
|
111
|
-
''
|
128
|
+
when :tar_gz then '.tar.gz'
|
129
|
+
when :tgz then '.tgz'
|
130
|
+
when :zip then '.zip'
|
131
|
+
when :uncompressed then ''
|
112
132
|
else
|
113
133
|
raise "Unknown type: #{type}"
|
114
134
|
end
|
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rake_factory'
|
2
4
|
|
3
5
|
module RakeDependencies
|
4
6
|
module Tasks
|
5
7
|
class Fetch < RakeFactory::Task
|
6
8
|
default_name :fetch
|
7
|
-
default_description
|
9
|
+
default_description(RakeFactory::DynamicValue.new do |t|
|
8
10
|
"Fetch #{t.dependency}"
|
9
|
-
|
11
|
+
end)
|
10
12
|
|
11
13
|
parameter :dependency, required: true
|
12
14
|
parameter :download_task_name, default: :download
|
@@ -14,11 +16,9 @@ module RakeDependencies
|
|
14
16
|
|
15
17
|
action do |t|
|
16
18
|
[
|
17
|
-
|
18
|
-
|
19
|
-
].each
|
20
|
-
task.invoke
|
21
|
-
end
|
19
|
+
Rake::Task[t.scope.path_with_task_name(t.download_task_name)],
|
20
|
+
Rake::Task[t.scope.path_with_task_name(t.extract_task_name)]
|
21
|
+
].each(&:invoke)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rake_factory'
|
2
4
|
require 'rubygems'
|
3
5
|
|
@@ -7,9 +9,9 @@ module RakeDependencies
|
|
7
9
|
module Tasks
|
8
10
|
class Install < RakeFactory::Task
|
9
11
|
default_name :install
|
10
|
-
default_description
|
12
|
+
default_description(RakeFactory::DynamicValue.new do |t|
|
11
13
|
"Install #{t.dependency}"
|
12
|
-
|
14
|
+
end)
|
13
15
|
|
14
16
|
parameter :platform_cpu_names, default: PlatformNames::CPU
|
15
17
|
parameter :platform_os_names, default: PlatformNames::OS
|
@@ -26,19 +28,20 @@ module RakeDependencies
|
|
26
28
|
|
27
29
|
action do
|
28
30
|
parameters = {
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
version: version,
|
32
|
+
platform: platform,
|
33
|
+
platform_cpu_name: platform_cpu_name,
|
34
|
+
platform_os_name: platform_os_name,
|
35
|
+
ext: ext
|
34
36
|
}
|
35
37
|
|
36
38
|
binary_file_name = Template.new(binary_name_template)
|
37
|
-
|
38
|
-
|
39
|
+
.with_parameters(parameters)
|
40
|
+
.render
|
39
41
|
binary_file_directory = File.join(path, binary_directory)
|
40
42
|
binary_file_path = File.join(
|
41
|
-
|
43
|
+
binary_file_directory, binary_file_name
|
44
|
+
)
|
42
45
|
|
43
46
|
mkdir_p installation_directory
|
44
47
|
cp binary_file_path, installation_directory
|
@@ -64,14 +67,10 @@ module RakeDependencies
|
|
64
67
|
|
65
68
|
def ext
|
66
69
|
case resolved_type
|
67
|
-
when :tar_gz then
|
68
|
-
|
69
|
-
when :
|
70
|
-
|
71
|
-
when :zip then
|
72
|
-
'.zip'
|
73
|
-
when :uncompressed then
|
74
|
-
''
|
70
|
+
when :tar_gz then '.tar.gz'
|
71
|
+
when :tgz then '.tgz'
|
72
|
+
when :zip then '.zip'
|
73
|
+
when :uncompressed then ''
|
75
74
|
else
|
76
75
|
raise "Unknown type: #{type}"
|
77
76
|
end
|
@@ -1,20 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'hamster'
|
2
4
|
require 'erb'
|
3
5
|
|
4
6
|
module RakeDependencies
|
5
7
|
class Template
|
6
8
|
def initialize(
|
7
|
-
|
8
|
-
|
9
|
+
template,
|
10
|
+
parameters = {}
|
11
|
+
)
|
9
12
|
@template = template
|
10
13
|
@parameters = Hamster::Hash.new(parameters)
|
11
14
|
end
|
12
15
|
|
13
|
-
def with_parameter
|
16
|
+
def with_parameter(key, value)
|
14
17
|
Template.new(@template, @parameters.put(key, value))
|
15
18
|
end
|
16
19
|
|
17
|
-
def with_parameters
|
20
|
+
def with_parameters(pairs)
|
18
21
|
pairs.to_a.reduce(self) do |memo, parameter|
|
19
22
|
memo.with_parameter(*parameter)
|
20
23
|
end
|
@@ -29,4 +32,4 @@ module RakeDependencies
|
|
29
32
|
ERB.new(@template).result(context_binding)
|
30
33
|
end
|
31
34
|
end
|
32
|
-
end
|
35
|
+
end
|
data/lib/rake_dependencies.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'rake_dependencies/version'
|
6
|
+
|
7
|
+
files = %w[
|
8
|
+
bin
|
9
|
+
lib
|
10
|
+
CODE_OF_CONDUCT.md
|
11
|
+
rake_dependencies.gemspec
|
12
|
+
Gemfile
|
13
|
+
LICENSE.txt
|
14
|
+
Rakefile
|
15
|
+
README.md
|
16
|
+
]
|
17
|
+
|
18
|
+
Gem::Specification.new do |spec|
|
19
|
+
spec.name = 'rake_dependencies'
|
20
|
+
spec.version = RakeDependencies::VERSION
|
21
|
+
spec.authors = ['InfraBlocks Maintainers']
|
22
|
+
spec.email = ['maintainers@infrablocks.io']
|
23
|
+
|
24
|
+
spec.summary = 'Rake tasks for managing build dependencies.'
|
25
|
+
spec.description = 'Provides rake tasks for downloading and extracting ' \
|
26
|
+
'tools depended on for further build activities.'
|
27
|
+
spec.homepage = 'https://github.com/infrablocks/rake_dependencies'
|
28
|
+
spec.license = 'MIT'
|
29
|
+
|
30
|
+
spec.files = `git ls-files -z`.split("\x0").select do |f|
|
31
|
+
f.match(/^(#{files.map { |g| Regexp.escape(g) }.join('|')})/)
|
32
|
+
end
|
33
|
+
spec.bindir = 'exe'
|
34
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
35
|
+
spec.require_paths = ['lib']
|
36
|
+
|
37
|
+
spec.required_ruby_version = '>= 2.7'
|
38
|
+
|
39
|
+
spec.add_dependency 'down', '~> 5.3'
|
40
|
+
spec.add_dependency 'hamster', '~> 3.0'
|
41
|
+
spec.add_dependency 'minitar', '~> 0.9'
|
42
|
+
spec.add_dependency 'rake_factory', '~> 0.23'
|
43
|
+
spec.add_dependency 'rubyzip', '>= 1.3'
|
44
|
+
|
45
|
+
spec.add_development_dependency 'activesupport'
|
46
|
+
spec.add_development_dependency 'bundler'
|
47
|
+
spec.add_development_dependency 'fakefs'
|
48
|
+
spec.add_development_dependency 'gem-release'
|
49
|
+
spec.add_development_dependency 'rake'
|
50
|
+
spec.add_development_dependency 'rake_circle_ci'
|
51
|
+
spec.add_development_dependency 'rake_github'
|
52
|
+
spec.add_development_dependency 'rake_gpg'
|
53
|
+
spec.add_development_dependency 'rake_ssh'
|
54
|
+
spec.add_development_dependency 'rspec'
|
55
|
+
spec.add_development_dependency 'rubocop'
|
56
|
+
spec.add_development_dependency 'rubocop-rake'
|
57
|
+
spec.add_development_dependency 'rubocop-rspec'
|
58
|
+
spec.add_development_dependency 'simplecov'
|
59
|
+
|
60
|
+
spec.metadata['rubygems_mfa_required'] = 'false'
|
61
|
+
end
|