prebundler 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b42e430112189e660d94c9d8c1b95217b88b96da88a546c4786061b446c892d8
4
- data.tar.gz: e06e950923a142dd513d8331d732a65b7f09a004381289895a5541ea6315faeb
3
+ metadata.gz: f1b4617c0c426fe9ac76ca98f6d9a80e849a6f8fb848817f7bfa6a9c5393b238
4
+ data.tar.gz: be95fbc3f0f4f39682c2ee929d9a3c8ea27fd8db087f4a0d3d9c2c39f87c4b98
5
5
  SHA512:
6
- metadata.gz: 3dae5bd84ab46ddbe6263997c1c453ff9c0534141c5e250d5d2af89e3213584e875821d0430c35886e407af45f727c0a105110a790e78fac165a0a12a1fcb90a
7
- data.tar.gz: db940690b64c743540cb952651f9c8f729965392a9d93dc1b4607a39dc7b765f1600d1d51bbd2ea62ed52e4f40c45448b62c3670c7e503eb0c9f8320e577d7f5
6
+ metadata.gz: 244764066b66efdc4feb132dc3f94ed455cf141fdeb14b758d935e6dd1d8b960f3bdef4d2c783709a41fff7e30e6405e4871514d4220f757181af4e0951e72fe
7
+ data.tar.gz: 67d0a49d079f337e6522ed6765652f12e3fcd93546744f3ed0efae8e554e9f6604f8957118293c4d826985445048b7b65618cfbeb01a9af7b0a56b64a2cfa118
data/CHANGELOG.md CHANGED
@@ -1,113 +1,97 @@
1
- 0.12.0
2
- ===
3
- - Switch out ohai for ohey.
4
-
5
- 0.11.8
6
- ===
7
- - Don't store gems in the backend if they failed to install.
8
- - Use an absolute bundle path.
9
- - Only consider a gem from the lockfile if it matches the current platform.
10
- - Fix `#install` methods so they all return true/false.
11
-
12
- 0.11.7
13
- ===
14
- - Fix bug causing platform-specific gems to be installed from source even if they were already present in the backend.
15
-
16
- 0.11.6
17
- ===
18
- - Fix bug causing native extension compile errors.
19
- - Fix bug causing executables to not be included in tarballs.
20
- - Fix bug (maybe introduced by bundler 2?) causing incorrect directory to be tarred. Directory can now include platform apparently.
21
-
22
- 0.11.5
23
- ===
24
- - Add `--retry` flag to CLI (currently does nothing).
25
-
26
- 0.11.4
27
- ===
28
- - Ensure .bundle/config directory exists before writing to it.
29
-
30
- 0.11.3
31
- ===
32
- - Support (well, add stubs for) `ruby` and `git_source` methods in Gemfiles.
33
- - Don't attempt to install gems we can't get a spec for.
34
-
35
- 0.11.2
36
- ===
37
- - Always run `bundle install` just in case.
38
- - Make sure `bundle check` is the _last_ thing that runs.
39
-
40
- 0.11.1
41
- ===
42
- - Exit with nonzero status code if fallback `bundle install` fails.
43
-
44
- 0.11.0
45
- ===
46
- - Allow the caller to pass in a s3 client for non-standard setups
47
-
48
- 0.10.0
49
- ===
50
- - Update aws-sdk client creation to be able to support non-aws s3 api endpoints (e.g. minio)
51
-
52
- 0.9.1
53
- ===
54
- - Woops, also use platform version when determining the gems that have already been built.
55
- - Fix the subsetter so it outputs gems inside correct source blocks.
56
-
57
- 0.9.0
58
- ===
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
- ===
63
- - Fix bug causing config to not be loaded.
64
-
65
- 0.8.0
66
- ===
67
- - Add the subset command for generating subsets of gemfiles.
68
-
69
- 0.7.2
70
- ===
71
- - Fix use of continuation token when listing remote files in S3 backend.
72
-
73
- 0.7.1
74
- ===
75
- - Support git-based gems with non-standard repo names.
76
- - Fix `bundle install` fallback (group args were wrong).
77
-
78
- 0.7.0
79
- ===
80
- - Add prefix option to install command.
81
-
82
- 0.6.2
83
- ===
84
- - Provide CLI option to generate binstubs.
85
-
86
- 0.5.2
87
- ===
88
- - Set `BUNDLE_GEMFILE` during prepare step so bundler doesn't complain when we try to call `Bundler.app_config_path`.
89
-
90
- 0.5.1
91
- ===
92
- - Remove pry-byebug require.
93
-
94
- 0.5.0
95
- ===
96
- - Works for a repository with a significant number of dependencies (~ 400).
97
- - Testing on staging server indicates bundle is installed correctly.
98
-
99
- 0.0.4
100
- ===
101
- - Pass bundle path to `gem install`.
102
-
103
- 0.0.3
104
- ===
105
- - Add --with and --without flags to install command.
106
-
107
- 0.0.2
108
- ===
109
- - Better CLI interface.
110
-
111
- 0.0.1
112
- ===
113
- - Birthday!
1
+ ## 0.13.0
2
+ * Support the `eval_gemfile` function in gemfiles.
3
+ * Avoid shelling out to the `tar` command.
4
+ - 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.
5
+ - All tar files are now read and written using pure Ruby.
6
+ * Upgrade S3 client to non-EOL version.
7
+ * Stop ignoring gems that don't match the current platform.
8
+ - 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.
9
+ * Run `bundle lock` before storing or installing gems to make sure the lockfile matches the Gemfile.
10
+
11
+ ## 0.12.0
12
+ * Switch out ohai for ohey, which has many fewer dependencies.
13
+
14
+ ## 0.11.8
15
+ * Don't store gems in the backend if they failed to install.
16
+ * Use an absolute bundle path.
17
+ * Only consider a gem from the lockfile if it matches the current platform.
18
+ * Fix `#install` methods so they all return true/false.
19
+
20
+ ## 0.11.7
21
+ * Fix bug causing platform-specific gems to be installed from source even if they were already present in the backend.
22
+
23
+ ## 0.11.6
24
+ * Fix bug causing native extension compile errors.
25
+ * Fix bug causing executables to not be included in tarballs.
26
+ * Fix bug (maybe introduced by bundler 2?) causing incorrect directory to be tarred. Directory can now include platform apparently.
27
+
28
+ ## 0.11.5
29
+ * Add `--retry` flag to CLI (currently does nothing).
30
+
31
+ ## 0.11.4
32
+ * Ensure .bundle/config directory exists before writing to it.
33
+
34
+ ## 0.11.3
35
+ * Support (well, add stubs for) `ruby` and `git_source` methods in Gemfiles.
36
+ * Don't attempt to install gems we can't get a spec for.
37
+
38
+ ## 0.11.2
39
+ * Always run `bundle install` just in case.
40
+ * Make sure `bundle check` is the _last_ thing that runs.
41
+
42
+ ## 0.11.1
43
+ * Exit with nonzero status code if fallback `bundle install` fails.
44
+
45
+ ## 0.11.0
46
+ * Allow the caller to pass in a s3 client for non-standard setups
47
+
48
+ ## 0.10.0
49
+ * Update aws-sdk client creation to be able to support non-aws s3 api endpoints (e.g. minio)
50
+
51
+ ## 0.9.1
52
+ * Woops, also use platform version when determining the gems that have already been built.
53
+ * Fix the subsetter so it outputs gems inside correct source blocks.
54
+
55
+ ## 0.9.0
56
+ * Include platform version when uploading gem tarballs to the storage backend (this will cause bundles installed by previous versions of prebundler to be rebuilt).
57
+
58
+ ## 0.8.1
59
+ * Fix bug causing config to not be loaded.
60
+
61
+ ## 0.8.0
62
+ * Add the subset command for generating subsets of gemfiles.
63
+
64
+ ## 0.7.2
65
+ * Fix use of continuation token when listing remote files in S3 backend.
66
+
67
+ ## 0.7.1
68
+ * Support git-based gems with non-standard repo names.
69
+ * Fix `bundle install` fallback (group args were wrong).
70
+
71
+ ## 0.7.0
72
+ * Add prefix option to install command.
73
+
74
+ ## 0.6.2
75
+ * Provide CLI option to generate binstubs.
76
+
77
+ ## 0.5.2
78
+ * Set `BUNDLE_GEMFILE` during prepare step so bundler doesn't complain when we try to call `Bundler.app_config_path`.
79
+
80
+ ## 0.5.1
81
+ * Remove pry-byebug require.
82
+
83
+ ## 0.5.0
84
+ * Works for a repository with a significant number of dependencies (~ 400).
85
+ * Testing on staging server indicates bundle is installed correctly.
86
+
87
+ ## 0.0.4
88
+ * Pass bundle path to `gem install`.
89
+
90
+ ## 0.0.3
91
+ * Add --with and --without flags to install command.
92
+
93
+ ## 0.0.2
94
+ * Better CLI interface.
95
+
96
+ ## 0.0.1
97
+ * Birthday!
@@ -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
@@ -1,3 +1,4 @@
1
+ require 'rubygems/package'
1
2
  require 'fileutils'
2
3
  require 'set'
3
4
 
@@ -48,8 +49,9 @@ module Prebundler
48
49
  end
49
50
 
50
51
  def install
51
- # NOTE: the --platform argument doesn't work when --ignore-dependencies
52
- # is specified, no idea why
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.
53
55
  Bundler.with_unbundled_env do
54
56
  system(
55
57
  { "GEM_HOME" => bundle_path },
@@ -64,26 +66,44 @@ module Prebundler
64
66
  end
65
67
 
66
68
  def install_from_tar(tar_file)
67
- system "tar -C #{bundle_path} -xf #{tar_file}"
68
- $?.exitstatus == 0
69
- end
70
-
71
- def add_to_tar(tar_file)
72
- tar_flags = File.exist?(tar_file) ? '-rf' : '-cf'
73
-
74
- system "tar -C #{bundle_path} #{tar_flags} #{tar_file} #{relative_gem_dir}"
75
-
76
- relative_gemspec_files.each do |relative_gemspec_file|
77
- system "tar -C #{bundle_path} -rf #{tar_file} #{relative_gemspec_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
78
84
  end
79
85
 
80
- if File.directory?(extension_dir)
81
- system "tar -C #{bundle_path} -rf #{tar_file} #{relative_extension_dir}"
82
- end
86
+ true
87
+ rescue => e
88
+ return false
89
+ end
83
90
 
84
- gemspecs.each do |gemspec|
85
- gemspec.executables.each do |executable|
86
- 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
87
107
  end
88
108
  end
89
109
  end
@@ -155,6 +175,17 @@ module Prebundler
155
175
 
156
176
  private
157
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
+
158
189
  def find_platform_dir(base)
159
190
  platform = Bundler.local_platform.to_a
160
191
 
@@ -17,11 +17,8 @@ module Prebundler
17
17
  instance_eval(File.read(gemfile_path))
18
18
 
19
19
  lockfile = Bundler::LockfileParser.new(File.read("#{gemfile_path}.lock"))
20
- local_platform = Bundler.local_platform.to_s
21
20
 
22
21
  lockfile.specs.each do |spec|
23
- next if spec.platform != 'ruby' && spec.platform.to_s != local_platform
24
-
25
22
  gems[spec.name] ||= GemRef.create(spec.name, bundle_path, options)
26
23
  gems[spec.name].spec = spec
27
24
  gems[spec.name].dependencies = spec.dependencies.map(&:name)
@@ -76,5 +73,9 @@ module Prebundler
76
73
  def gemspec
77
74
  # do nothing
78
75
  end
76
+
77
+ def eval_gemfile(path)
78
+ instance_eval(File.read(path))
79
+ end
79
80
  end
80
81
  end
@@ -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.12.0'
4
+ VERSION = '0.13.0'
5
5
  end
data/prebundler.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
17
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.12.0
4
+ version: 0.13.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: 2021-05-09 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
@@ -67,19 +67,19 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
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
@@ -129,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
129
  - !ruby/object:Gem::Version
130
130
  version: '0'
131
131
  requirements: []
132
- rubygems_version: 3.1.4
132
+ rubygems_version: 3.3.3
133
133
  signing_key:
134
134
  specification_version: 4
135
135
  summary: Gem dependency prebuilder