prebundler 0.11.7 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b3aede9a82a409f6be7544d071dc88d550eca1d958eab7b45cdd77d40c4dbd02
4
- data.tar.gz: 12e5d87c3ae82b1843c2012be18cb1e5c0c0b123ce15578df4c382968b045f94
3
+ metadata.gz: 29f176a7f30feafc0288bcef4e1d519d364fe4b109a7dd2590b3c20a013908e2
4
+ data.tar.gz: dc8d72a575713cf2cb0e287af826a521a291c97266864c68e35da94c8c165d85
5
5
  SHA512:
6
- metadata.gz: 53c6230c94e22514c3001ed18ca32f74cb627e6ff981004665bc1ca36e6554d2293b442dd0bef7a28fa00a59d7e0caba3498db58460df699cde50c320ce071d4
7
- data.tar.gz: df51e8ab2d6927d91481c4232599f1de1b68ed234247ba9b2e5714189072b1bde36bcc4751ebaf825f5661f5f74c302f7d3d8f8e6ede13c4deb8eeb202215b00
6
+ metadata.gz: 7cadcbdeef22c371ac69b91c069b5af37733804786f00562afcf5b38be73a016596e89b250b4f8ab06e7a3c8bdacac491aaeb3d4dce75554b377ce45cfa32f20
7
+ data.tar.gz: 351ac7ac53bbf7f60c3a98fa2b98aed366c1c02f6faf817f73511dae7420b232b130241830d183a31619b06e25b9087603befad9d44a70e4630c054632b84751
data/CHANGELOG.md CHANGED
@@ -1,102 +1,100 @@
1
- 0.11.7
2
- ===
3
- - Fix bug causing platform-specific gems to be installed from source even if they were already present in the backend.
4
-
5
- 0.11.6
6
- ===
7
- - Fix bug causing native extension compile errors.
8
- - Fix bug causing executables to not be included in tarballs.
9
- - Fix bug (maybe introduced by bundler 2?) causing incorrect directory to be tarred. Directory can now include platform apparently.
10
-
11
- 0.11.5
12
- ===
13
- - Add `--retry` flag to CLI (currently does nothing).
14
-
15
- 0.11.4
16
- ===
17
- - Ensure .bundle/config directory exists before writing to it.
18
-
19
- 0.11.3
20
- ===
21
- - Support (well, add stubs for) `ruby` and `git_source` methods in Gemfiles.
22
- - Don't attempt to install gems we can't get a spec for.
23
-
24
- 0.11.2
25
- ===
26
- - Always run `bundle install` just in case.
27
- - Make sure `bundle check` is the _last_ thing that runs.
28
-
29
- 0.11.1
30
- ===
31
- - Exit with nonzero status code if fallback `bundle install` fails.
32
-
33
- 0.11.0
34
- ===
35
- - Allow the caller to pass in a s3 client for non-standard setups
36
-
37
- 0.10.0
38
- ===
39
- - Update aws-sdk client creation to be able to support non-aws s3 api endpoints (e.g. minio)
40
-
41
- 0.9.1
42
- ===
43
- - Woops, also use platform version when determining the gems that have already been built.
44
- - Fix the subsetter so it outputs gems inside correct source blocks.
45
-
46
- 0.9.0
47
- ===
48
- - Include platform version when uploading gem tarballs to the storage backend (this will cause bundles installed by previous versions of prebundler to be rebuilt).
49
-
50
- 0.8.1
51
- ===
52
- - Fix bug causing config to not be loaded.
53
-
54
- 0.8.0
55
- ===
56
- - Add the subset command for generating subsets of gemfiles.
57
-
58
- 0.7.2
59
- ===
60
- - Fix use of continuation token when listing remote files in S3 backend.
61
-
62
- 0.7.1
63
- ===
64
- - Support git-based gems with non-standard repo names.
65
- - Fix `bundle install` fallback (group args were wrong).
66
-
67
- 0.7.0
68
- ===
69
- - Add prefix option to install command.
70
-
71
- 0.6.2
72
- ===
73
- - Provide CLI option to generate binstubs.
74
-
75
- 0.5.2
76
- ===
77
- - Set `BUNDLE_GEMFILE` during prepare step so bundler doesn't complain when we try to call `Bundler.app_config_path`.
78
-
79
- 0.5.1
80
- ===
81
- - Remove pry-byebug require.
82
-
83
- 0.5.0
84
- ===
85
- - Works for a repository with a significant number of dependencies (~ 400).
86
- - Testing on staging server indicates bundle is installed correctly.
87
-
88
- 0.0.4
89
- ===
90
- - Pass bundle path to `gem install`.
91
-
92
- 0.0.3
93
- ===
94
- - Add --with and --without flags to install command.
95
-
96
- 0.0.2
97
- ===
98
- - Better CLI interface.
99
-
100
- 0.0.1
101
- ===
102
- - Birthday!
1
+ ## 0.14.0
2
+ * Add `prebundle binstubs` command, which simply invokes `bundle binstubs`.
3
+
4
+ ## 0.13.0
5
+ * Support the `eval_gemfile` function in gemfiles.
6
+ * Avoid shelling out to the `tar` command.
7
+ - The GNU and BSD versions annoyingly don't accept the same flags, meaning Prebundler can succeed or fail depending on the system it's run on.
8
+ - All tar files are now read and written using pure Ruby.
9
+ * Upgrade S3 client to non-EOL version.
10
+ * Stop ignoring gems that don't match the current platform.
11
+ - Prebundler shells out to `gem install` when installing individual gems. Older versions of rubygems would fetch gems for the "ruby" platform when the `--ignore-dependencies` option was given, ignoring any platform-specific gems. This resulted in either a) unnecessarily building a bunch of native extensions, or b) installing a gem for the wrong platform (i.e. when no gem existed for the "ruby" platform, eg. helm-rb). I addressed the problem by instructing Prebundler to ignore gems with native extensions, relying on `bundle install` to fix them up. However, the bug has been fixed in modern versions of rubygems, so we can stop ignoring gems.
12
+ * Run `bundle lock` before storing or installing gems to make sure the lockfile matches the Gemfile.
13
+
14
+ ## 0.12.0
15
+ * Switch out ohai for ohey, which has many fewer dependencies.
16
+
17
+ ## 0.11.8
18
+ * Don't store gems in the backend if they failed to install.
19
+ * Use an absolute bundle path.
20
+ * Only consider a gem from the lockfile if it matches the current platform.
21
+ * Fix `#install` methods so they all return true/false.
22
+
23
+ ## 0.11.7
24
+ * Fix bug causing platform-specific gems to be installed from source even if they were already present in the backend.
25
+
26
+ ## 0.11.6
27
+ * Fix bug causing native extension compile errors.
28
+ * Fix bug causing executables to not be included in tarballs.
29
+ * Fix bug (maybe introduced by bundler 2?) causing incorrect directory to be tarred. Directory can now include platform apparently.
30
+
31
+ ## 0.11.5
32
+ * Add `--retry` flag to CLI (currently does nothing).
33
+
34
+ ## 0.11.4
35
+ * Ensure .bundle/config directory exists before writing to it.
36
+
37
+ ## 0.11.3
38
+ * Support (well, add stubs for) `ruby` and `git_source` methods in Gemfiles.
39
+ * Don't attempt to install gems we can't get a spec for.
40
+
41
+ ## 0.11.2
42
+ * Always run `bundle install` just in case.
43
+ * Make sure `bundle check` is the _last_ thing that runs.
44
+
45
+ ## 0.11.1
46
+ * Exit with nonzero status code if fallback `bundle install` fails.
47
+
48
+ ## 0.11.0
49
+ * Allow the caller to pass in a s3 client for non-standard setups
50
+
51
+ ## 0.10.0
52
+ * Update aws-sdk client creation to be able to support non-aws s3 api endpoints (e.g. minio)
53
+
54
+ ## 0.9.1
55
+ * Woops, also use platform version when determining the gems that have already been built.
56
+ * Fix the subsetter so it outputs gems inside correct source blocks.
57
+
58
+ ## 0.9.0
59
+ * Include platform version when uploading gem tarballs to the storage backend (this will cause bundles installed by previous versions of prebundler to be rebuilt).
60
+
61
+ ## 0.8.1
62
+ * Fix bug causing config to not be loaded.
63
+
64
+ ## 0.8.0
65
+ * Add the subset command for generating subsets of gemfiles.
66
+
67
+ ## 0.7.2
68
+ * Fix use of continuation token when listing remote files in S3 backend.
69
+
70
+ ## 0.7.1
71
+ * Support git-based gems with non-standard repo names.
72
+ * Fix `bundle install` fallback (group args were wrong).
73
+
74
+ ## 0.7.0
75
+ * Add prefix option to install command.
76
+
77
+ ## 0.6.2
78
+ * Provide CLI option to generate binstubs.
79
+
80
+ ## 0.5.2
81
+ * Set `BUNDLE_GEMFILE` during prepare step so bundler doesn't complain when we try to call `Bundler.app_config_path`.
82
+
83
+ ## 0.5.1
84
+ * Remove pry-byebug require.
85
+
86
+ ## 0.5.0
87
+ * Works for a repository with a significant number of dependencies (~ 400).
88
+ * Testing on staging server indicates bundle is installed correctly.
89
+
90
+ ## 0.0.4
91
+ * Pass bundle path to `gem install`.
92
+
93
+ ## 0.0.3
94
+ * Add --with and --without flags to install command.
95
+
96
+ ## 0.0.2
97
+ * Better CLI interface.
98
+
99
+ ## 0.0.1
100
+ * Birthday!
data/bin/prebundle CHANGED
@@ -1,130 +1,6 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
- require 'gli'
4
- require 'etc'
5
- require 'bundler'
6
- require 'prebundler'
7
- require 'prebundler/version'
8
-
9
- $out = Prebundler::WritePipe.new
10
-
11
- include GLI::App
12
-
13
- program_desc 'Gem dependency prebuilder'
14
-
15
- version Prebundler::VERSION
16
-
17
- subcommand_option_handling :normal
18
- arguments :strict
19
-
20
- desc "Don't log to stdout"
21
- switch [:s, :silent]
22
-
23
- desc 'Path to config file.'
24
- default_value './.prebundle_config'
25
- flag [:c, :config]
26
-
27
- desc 'Install gems from the Gemfile.lock.'
28
- command :install do |c|
29
- c.desc 'Maximum number of parallel gem installs.'
30
- c.default_value Etc.nprocessors
31
- c.flag [:j, :jobs], type: Integer
32
-
33
- c.desc 'Path to the gemfile to install gems from.'
34
- c.default_value ENV.fetch('BUNDLE_GEMFILE', './Gemfile')
35
- c.flag [:g, :gemfile]
36
-
37
- c.desc 'Path to the bundle installation directory.'
38
- c.default_value ENV.fetch('BUNDLE_PATH', Bundler.bundle_path.to_s)
39
- c.flag [:b, :'bundle-path']
40
-
41
- c.desc 'Backend prefix (i.e. path) at which to store gems.'
42
- c.flag [:prefix]
43
-
44
- c.desc 'A comma-separated list of groups referencing gems to install.'
45
- c.flag :with
46
-
47
- c.desc 'A comma-separated list of groups referencing gems to skip during installation.'
48
- c.flag :without
49
-
50
- c.desc 'Generate binstubs for installed gems.'
51
- c.default_value true
52
- c.switch :binstubs
53
-
54
- c.desc 'Retry failed network requests n times (currently not implemented).'
55
- c.default_value 1
56
- c.flag [:retry], type: Integer
3
+ $stdout.sync = true
57
4
 
58
- c.action do |global_options, options, args|
59
- raise 'Must specify a non-zero number of jobs' if options[:jobs] < 1
60
- Prebundler::Cli::Install.run($out, global_options, options, args)
61
- end
62
- end
63
-
64
- desc 'List each gem and associated source.'
65
- command :list do |c|
66
- c.desc 'Path to the gemfile.'
67
- c.default_value ENV.fetch('BUNDLE_GEMFILE', './Gemfile')
68
- c.flag [:g, :gemfile]
69
-
70
- c.desc 'Filter by source. Will perform partial matching.'
71
- c.flag [:s, :source], multiple: true
72
-
73
- c.action do |global_options, options, args|
74
- Prebundler::Cli::List.run($out, global_options, options, args)
75
- end
76
- end
77
-
78
- desc 'Generate a subset of a Gemfile.'
79
- command :subset do |c|
80
- c.desc 'Path to the gemfile.'
81
- c.default_value ENV.fetch('BUNDLE_GEMFILE', './Gemfile')
82
- c.flag [:g, :gemfile]
83
-
84
- c.desc 'Path to the bundle installation directory.'
85
- c.default_value ENV.fetch('BUNDLE_PATH', Bundler.bundle_path.to_s)
86
- c.flag [:b, :'bundle-path']
87
-
88
- c.desc 'Gem (and dependencies) to include in the subset.'
89
- c.flag [:i, :include], multiple: true
90
-
91
- c.desc "Add an additional gem to the subset. The gem doesn't have to be part of the original Gemfile."
92
- c.flag [:a, :add], multiple: true
93
-
94
- c.desc 'Include development dependencies of subsetted gems.'
95
- c.default_value false
96
- c.switch [:d, :development]
97
-
98
- c.desc 'File path to output the resulting Gemfile into. Use - for standard output.'
99
- c.default_value '-'
100
- c.flag [:o, :output]
101
-
102
- c.action do |global_options, options, args|
103
- Prebundler::Cli::Subset.run($out, global_options, options, args)
104
- end
105
- end
106
-
107
- pre do |global, command, options, args|
108
- # Pre logic here
109
- # Return true to proceed; false to abort and not call the
110
- # chosen command
111
- # Use skips_pre before a command to skip this block
112
- # on that command only
113
- $out.silence! if global[:silent]
114
- load global[:config] if global[:config]
115
- true
116
- end
117
-
118
- post do |global, command, options, args|
119
- # Post logic here
120
- # Use skips_post before a command to skip this
121
- # block on that command only
122
- end
123
-
124
- on_error do |exception|
125
- # Error logic here
126
- # return false to skip default error handling
127
- true
128
- end
129
-
130
- exit run(ARGV)
5
+ require 'prebundler'
6
+ exit Prebundler::Commands.run(ARGV)
@@ -17,6 +17,7 @@ module Prebundler
17
17
 
18
18
  class Install < Base
19
19
  def run
20
+ lock
20
21
  prepare
21
22
  install
22
23
  update_bundle_config
@@ -30,6 +31,10 @@ module Prebundler
30
31
 
31
32
  private
32
33
 
34
+ def lock
35
+ system "bundle lock --gemfile #{gemfile_path}"
36
+ end
37
+
33
38
  def prepare
34
39
  FileUtils.mkdir_p(bundle_path)
35
40
  ENV['BUNDLE_GEMFILE'] = gemfile_path
@@ -102,8 +107,12 @@ module Prebundler
102
107
  FileUtils.rm(dest_file)
103
108
  else
104
109
  out.puts "Installing #{gem_ref.id} from source"
105
- gem_ref.install
106
- store_gem(gem_ref, dest_file) if gem_ref.storable?
110
+
111
+ if gem_ref.install
112
+ store_gem(gem_ref, dest_file) if gem_ref.storable?
113
+ else
114
+ out.puts "Failed to install #{gem_ref.id} from source"
115
+ end
107
116
  end
108
117
  end
109
118
 
@@ -179,7 +188,7 @@ module Prebundler
179
188
  end
180
189
 
181
190
  def bundle_path
182
- options.fetch(:'bundle-path')
191
+ File.expand_path(options.fetch(:'bundle-path'))
183
192
  end
184
193
 
185
194
  def config
@@ -0,0 +1,146 @@
1
+ require 'gli'
2
+ require 'etc'
3
+ require 'bundler'
4
+ require 'prebundler'
5
+ require 'prebundler/version'
6
+
7
+ module Prebundler
8
+ class Commands
9
+ extend GLI::App
10
+
11
+ program_desc 'Gem dependency prebuilder'
12
+
13
+ version Prebundler::VERSION
14
+
15
+ subcommand_option_handling :normal
16
+ arguments :strict
17
+
18
+ def self.out
19
+ @out ||= Prebundler::WritePipe.new
20
+ end
21
+
22
+ desc "Don't log to stdout"
23
+ switch [:s, :silent]
24
+
25
+ desc 'Path to config file.'
26
+ default_value './.prebundle_config'
27
+ flag [:c, :config]
28
+
29
+ desc 'Install gems from the Gemfile.lock.'
30
+ command :install do |c|
31
+ c.desc 'Maximum number of parallel gem installs.'
32
+ c.default_value Etc.nprocessors
33
+ c.flag [:j, :jobs], type: Integer
34
+
35
+ c.desc 'Path to the gemfile to install gems from.'
36
+ c.default_value ENV.fetch('BUNDLE_GEMFILE', './Gemfile')
37
+ c.flag [:g, :gemfile]
38
+
39
+ c.desc 'Path to the bundle installation directory.'
40
+ c.default_value ENV.fetch('BUNDLE_PATH', Bundler.bundle_path.to_s)
41
+ c.flag [:b, :'bundle-path']
42
+
43
+ c.desc 'Backend prefix (i.e. path) at which to store gems.'
44
+ c.flag [:prefix]
45
+
46
+ c.desc 'A comma-separated list of groups referencing gems to install.'
47
+ c.flag :with
48
+
49
+ c.desc 'A comma-separated list of groups referencing gems to skip during installation.'
50
+ c.flag :without
51
+
52
+ c.desc 'Generate binstubs for installed gems.'
53
+ c.default_value true
54
+ c.switch :binstubs
55
+
56
+ c.desc 'Retry failed network requests n times (currently not implemented).'
57
+ c.default_value 1
58
+ c.flag [:retry], type: Integer
59
+
60
+ c.action do |global_options, options, args|
61
+ raise 'Must specify a non-zero number of jobs' if options[:jobs] < 1
62
+ Prebundler::Cli::Install.run(out, global_options, options, args)
63
+ end
64
+ end
65
+
66
+ desc 'List each gem and associated source.'
67
+ command :list do |c|
68
+ c.desc 'Path to the gemfile.'
69
+ c.default_value ENV.fetch('BUNDLE_GEMFILE', './Gemfile')
70
+ c.flag [:g, :gemfile]
71
+
72
+ c.desc 'Filter by source. Will perform partial matching.'
73
+ c.flag [:s, :source], multiple: true
74
+
75
+ c.action do |global_options, options, args|
76
+ Prebundler::Cli::List.run(out, global_options, options, args)
77
+ end
78
+ end
79
+
80
+ desc 'Generate a subset of a Gemfile.'
81
+ command :subset do |c|
82
+ c.desc 'Path to the gemfile.'
83
+ c.default_value ENV.fetch('BUNDLE_GEMFILE', './Gemfile')
84
+ c.flag [:g, :gemfile]
85
+
86
+ c.desc 'Path to the bundle installation directory.'
87
+ c.default_value ENV.fetch('BUNDLE_PATH', Bundler.bundle_path.to_s)
88
+ c.flag [:b, :'bundle-path']
89
+
90
+ c.desc 'Gem (and dependencies) to include in the subset.'
91
+ c.flag [:i, :include], multiple: true
92
+
93
+ c.desc "Add an additional gem to the subset. The gem doesn't have to be part of the original Gemfile."
94
+ c.flag [:a, :add], multiple: true
95
+
96
+ c.desc 'Include development dependencies of subsetted gems.'
97
+ c.default_value false
98
+ c.switch [:d, :development]
99
+
100
+ c.desc 'File path to output the resulting Gemfile into. Use - for standard output.'
101
+ c.default_value '-'
102
+ c.flag [:o, :output]
103
+
104
+ c.action do |global_options, options, args|
105
+ Prebundler::Cli::Subset.run(out, global_options, options, args)
106
+ end
107
+ end
108
+
109
+ desc 'Generate binstubs. Accepts the same arguments as `bundle binstubs`.'
110
+ command :binstubs do
111
+ end
112
+
113
+ singleton_class.send(:prepend, Module.new do
114
+ def run(args)
115
+ if args[0] == 'binstubs'
116
+ exec "bundle binstubs #{args[1..-1].join(' ')}"
117
+ else
118
+ super
119
+ end
120
+ end
121
+ end)
122
+
123
+ pre do |global, command, options, args|
124
+ # Pre logic here
125
+ # Return true to proceed; false to abort and not call the
126
+ # chosen command
127
+ # Use skips_pre before a command to skip this block
128
+ # on that command only
129
+ out.silence! if global[:silent]
130
+ load global[:config] if global[:config]
131
+ true
132
+ end
133
+
134
+ post do |global, command, options, args|
135
+ # Post logic here
136
+ # Use skips_post before a command to skip this
137
+ # block on that command only
138
+ end
139
+
140
+ on_error do |exception|
141
+ # Error logic here
142
+ # return false to skip default error handling
143
+ true
144
+ end
145
+ end
146
+ end
@@ -1,3 +1,4 @@
1
+ require 'rubygems/package'
1
2
  require 'fileutils'
2
3
  require 'set'
3
4
 
@@ -48,34 +49,61 @@ module Prebundler
48
49
  end
49
50
 
50
51
  def install
52
+ # NOTE: the --platform argument used to not work when --ignore-dependencies
53
+ # was specified, but has been fixed in modern versions of rubygems. See:
54
+ # https://github.com/rubygems/rubygems/pull/2446 for a very long rabbit hole.
51
55
  Bundler.with_unbundled_env do
52
- system({ "GEM_HOME" => bundle_path }, "gem install -N --ignore-dependencies --source #{source} #{name} -v #{version}")
56
+ system(
57
+ { "GEM_HOME" => bundle_path },
58
+ 'gem install -N --ignore-dependencies '\
59
+ "--source #{source} #{name} "\
60
+ "--version #{version} "\
61
+ "--platform #{Bundler.local_platform.to_s}"
62
+ )
53
63
  end
54
64
 
55
- $?.exitstatus
56
- end
57
-
58
- def install_from_tar(tar_file)
59
- system "tar -C #{bundle_path} -xf #{tar_file}"
60
65
  $?.exitstatus == 0
61
66
  end
62
67
 
63
- def add_to_tar(tar_file)
64
- tar_flags = File.exist?(tar_file) ? '-rf' : '-cf'
65
-
66
- system "tar -C #{bundle_path} #{tar_flags} #{tar_file} #{relative_gem_dir}"
67
-
68
- relative_gemspec_files.each do |relative_gemspec_file|
69
- system "tar -C #{bundle_path} -rf #{tar_file} #{relative_gemspec_file}"
68
+ def install_from_tar(tar_file)
69
+ File.open(tar_file) do |f|
70
+ Gem::Package::TarReader.new(f) do |tar|
71
+ tar.each do |entry|
72
+ path = File.join(bundle_path, entry.full_name)
73
+
74
+ if entry.directory?
75
+ FileUtils.mkdir_p(path)
76
+ else
77
+ FileUtils.mkdir_p(File.dirname(path))
78
+ File.open(path, 'wb') do |new_file|
79
+ new_file.write(entry.read)
80
+ end
81
+ end
82
+ end
83
+ end
70
84
  end
71
85
 
72
- if File.directory?(extension_dir)
73
- system "tar -C #{bundle_path} -rf #{tar_file} #{relative_extension_dir}"
74
- end
86
+ true
87
+ rescue => e
88
+ return false
89
+ end
75
90
 
76
- gemspecs.each do |gemspec|
77
- gemspec.executables.each do |executable|
78
- system "tar -C #{bundle_path} -rf #{tar_file} #{File.join(relative_gem_dir, gemspec.bindir, executable)}"
91
+ def add_to_tar(tar_file)
92
+ File.open(tar_file, 'wb') do |f|
93
+ Gem::Package::TarWriter.new(f) do |tar_io|
94
+ Dir.chdir(bundle_path) do
95
+ add_files_to_tar(
96
+ tar_io, Dir.glob(File.join(relative_gem_dir, '**', '*'))
97
+ )
98
+
99
+ add_files_to_tar(tar_io, relative_gemspec_files)
100
+
101
+ if File.directory?(extension_dir)
102
+ add_files_to_tar(
103
+ tar_io, Dir.glob(File.join(relative_extension_dir, '**', '*'))
104
+ )
105
+ end
106
+ end
79
107
  end
80
108
  end
81
109
  end
@@ -147,6 +175,17 @@ module Prebundler
147
175
 
148
176
  private
149
177
 
178
+ def add_files_to_tar(tar_io, files)
179
+ files.each do |file|
180
+ next if File.directory?(file)
181
+
182
+ mode = File.stat(file).mode
183
+ tar_io.add_file(file, mode) do |new_file|
184
+ new_file.write(File.binread(file))
185
+ end
186
+ end
187
+ end
188
+
150
189
  def find_platform_dir(base)
151
190
  platform = Bundler.local_platform.to_a
152
191
 
@@ -73,5 +73,9 @@ module Prebundler
73
73
  def gemspec
74
74
  # do nothing
75
75
  end
76
+
77
+ def eval_gemfile(path)
78
+ instance_eval(File.read(path))
79
+ end
76
80
  end
77
81
  end
@@ -22,15 +22,15 @@ module Prebundler
22
22
  FileUtils.mkdir_p(install_path)
23
23
  FileUtils.mkdir_p(cache_path)
24
24
 
25
- return if File.exist?(cache_dir) || File.exist?(install_dir)
25
+ return true if File.exist?(cache_dir) || File.exist?(install_dir)
26
26
  system "git clone #{uri} \"#{cache_dir}\" --bare --no-hardlinks --quiet"
27
- return $? if $?.exitstatus != 0
27
+ return false if $?.exitstatus != 0
28
28
  system "git clone --no-checkout --quiet \"#{cache_dir}\" \"#{install_dir}\""
29
- return $? if $?.exitstatus != 0
29
+ return false if $?.exitstatus != 0
30
30
  Dir.chdir(install_dir) { system "git reset --hard --quiet #{revision}" }
31
31
  serialize_gemspecs
32
32
  copy_gemspecs
33
- $?
33
+ $?.exitstatus == 0
34
34
  end
35
35
 
36
36
  def to_gem
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'aws-sdk'
3
+ require 'aws-sdk-s3'
4
4
 
5
5
  module Prebundler
6
6
  class S3Backend
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Prebundler
4
- VERSION = '0.11.7'
4
+ VERSION = '0.14.0'
5
5
  end
data/lib/prebundler.rb CHANGED
@@ -1,7 +1,8 @@
1
- require 'ohai'
1
+ require 'ohey'
2
2
 
3
3
  module Prebundler
4
4
  autoload :Cli, 'prebundler/cli'
5
+ autoload :Commands, 'prebundler/commands'
5
6
  autoload :Configurator, 'prebundler/configurator'
6
7
  autoload :FileBackend, 'prebundler/file_backend'
7
8
  autoload :PathGemRef, 'prebundler/path_gem_ref'
@@ -27,13 +28,13 @@ module Prebundler
27
28
  end
28
29
 
29
30
  def platform_version
30
- @platform_version ||= "#{system_info['platform']}-#{system_info['platform_version']}"
31
+ @platform_version ||= "#{platform.name}-#{platform.version}"
31
32
  end
32
33
 
33
34
  private
34
35
 
35
- def system_info
36
- @@system_info ||= Ohai::System.new.all_plugins(['platform'])
36
+ def platform
37
+ @platform ||= Ohey.current_platform
37
38
  end
38
39
  end
39
40
  end
data/prebundler.gemspec CHANGED
@@ -14,10 +14,10 @@ Gem::Specification.new do |s|
14
14
  s.add_dependency 'bundler'
15
15
  s.add_dependency 'parallel', '~> 1.0'
16
16
  s.add_dependency 'gli', '~> 2.0'
17
- s.add_dependency 'ohai', '~> 14.0'
17
+ s.add_dependency 'ohey', '~> 1.0'
18
18
 
19
19
  # @TODO: move s3 support into separate gem
20
- s.add_dependency 'aws-sdk', '~> 2.0'
20
+ s.add_dependency 'aws-sdk-s3', '~> 1.0'
21
21
 
22
22
  s.executables << 'prebundle'
23
23
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prebundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.7
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cameron Dutro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-15 00:00:00.000000000 Z
11
+ date: 2022-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,33 +53,33 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: ohai
56
+ name: ohey
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '14.0'
61
+ version: '1.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '14.0'
68
+ version: '1.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: aws-sdk
70
+ name: aws-sdk-s3
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '2.0'
75
+ version: '1.0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '2.0'
82
+ version: '1.0'
83
83
  description: Gem dependency prebuilder
84
84
  email:
85
85
  - camertron@gmail.com
@@ -99,6 +99,7 @@ files:
99
99
  - lib/prebundler/cli/install.rb
100
100
  - lib/prebundler/cli/list.rb
101
101
  - lib/prebundler/cli/subset.rb
102
+ - lib/prebundler/commands.rb
102
103
  - lib/prebundler/configurator.rb
103
104
  - lib/prebundler/file_backend.rb
104
105
  - lib/prebundler/gem_ref.rb
@@ -129,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
130
  - !ruby/object:Gem::Version
130
131
  version: '0'
131
132
  requirements: []
132
- rubygems_version: 3.1.4
133
+ rubygems_version: 3.3.3
133
134
  signing_key:
134
135
  specification_version: 4
135
136
  summary: Gem dependency prebuilder