serverlessgems 0.4.0 → 0.4.2

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: eeff425996a2704acdc46eae6992d6c862089961ae6cd210c7cea61de9684855
4
- data.tar.gz: 8d1888c4a187e3c63b5262f458a06daf8782c0db3dfeb682fc63ae45df6c12fb
3
+ metadata.gz: 4180b95b85ce932e83e67ba621485a458e1d7cff1d673af091eee2c80fc957e5
4
+ data.tar.gz: 9b84b2f954ea096fc9a2c9b8243cd771847926c8b0b26023baa802f85d771030
5
5
  SHA512:
6
- metadata.gz: 47675c0ac980e0089541784aea12b04b5b2d2d6c1a077a65524de091c8eada0afbdd2c3541f68670b7554ae67d3ae5f224ee156573ef77391404479e18535405
7
- data.tar.gz: c853581680f9bf7c26fef89eaf96c59b5791b178a5850e28c83acd51391beb1f783f80d20ac50c0dfa3fbf84dc0e7993a7a65d0ee825bc7a55e004a489ec0473
6
+ metadata.gz: acb02e4538a245354e35904f9b4ebd308bd768d9a87273c3b8ac2bf7bf217ce8575492ef4d5d8be8a1d8fb53a9bced3ea8a17afd10446eee95596d2df4714c5b
7
+ data.tar.gz: df2bdc6db711f9d8599233e49fb8183006f6b14a41c28b93bfb4e48eea9f313e1af148d650238c8c4c2d778d68a6554069b2d931f6552a8b03f3eeb6ef3c491e
data/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/).
5
5
 
6
+ ## [0.4.2] - 2025-10-10
7
+ - fix gem detection ffi - gnu suffix and clean up incompatible platform variants
8
+
9
+ ## [0.4.1] - 2024-06-22
10
+ - standardrb and updates
11
+
6
12
  ## [0.4.0] - 2023-07-24
7
13
  - [#8](https://github.com/boltops-tools/serverlessgems/pull/8) erb ruby 3 and autoloader improvements
8
14
 
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in serverlessgems.gemspec
6
6
  gemspec
data/Rakefile CHANGED
@@ -3,4 +3,4 @@ require "rspec/core/rake_task"
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
@@ -1,7 +1,7 @@
1
1
  module Jets::Gems
2
2
  class Agree
3
3
  def initialize
4
- @agree_file = "#{ENV['HOME']}/.jets/agree"
4
+ @agree_file = "#{ENV["HOME"]}/.jets/agree"
5
5
  end
6
6
 
7
7
  # Only prompts if hasnt prompted before and saved a ~/.jets/agree file
@@ -38,7 +38,7 @@ module Jets::Gems
38
38
  EOL
39
39
 
40
40
  answer = $stdin.gets.strip
41
- value = answer =~ /y/i ? 'yes' : 'no'
41
+ value = /y/i.match?(answer) ? "yes" : "no"
42
42
 
43
43
  write_file(value)
44
44
  end
@@ -46,24 +46,24 @@ module Jets::Gems
46
46
  # Allow user to bypass prompt with JETS_AGREE=1 JETS_AGREE=yes etc
47
47
  # Useful for CI/CD pipelines.
48
48
  def bypass_prompt
49
- agree = ENV['JETS_AGREE']
49
+ agree = ENV["JETS_AGREE"]
50
50
  return false unless agree
51
51
 
52
52
  if %w[1 yes true].include?(agree.downcase)
53
- write_file('yes')
53
+ write_file("yes")
54
54
  else
55
- write_file('no')
55
+ write_file("no")
56
56
  end
57
57
 
58
58
  true
59
59
  end
60
60
 
61
61
  def yes?
62
- File.exist?(@agree_file) && IO.read(@agree_file).strip == 'yes'
62
+ File.exist?(@agree_file) && IO.read(@agree_file).strip == "yes"
63
63
  end
64
64
 
65
65
  def no?
66
- File.exist?(@agree_file) && IO.read(@agree_file).strip == 'no'
66
+ File.exist?(@agree_file) && IO.read(@agree_file).strip == "no"
67
67
  end
68
68
 
69
69
  def yes!
@@ -1,6 +1,6 @@
1
1
  # Need 'open-uri' for exist.rb and regsitered.rb which uses
2
2
  # rescue SocketError, OpenURI::HTTPError, OpenSSL::SSL::SSLError
3
- require 'open-uri'
3
+ require "open-uri"
4
4
 
5
5
  class Jets::Gems::Api
6
6
  module Concern
@@ -5,14 +5,18 @@ class Jets::Gems::Api
5
5
  extend Memoist
6
6
 
7
7
  # Always translate raw json response to ruby Hash
8
- def request(klass, path, data={})
8
+ def request(klass, path, data = {})
9
9
  url = url(path)
10
10
  req = build_request(klass, url, data)
11
11
  resp = http.request(req) # send request
12
12
  load_json(url, resp)
13
13
  end
14
14
 
15
- def build_request(klass, url, data={})
15
+ def build_request(klass, url, data = {})
16
+ data = global_data.merge(data)
17
+ if klass == Net::HTTP::Get
18
+ url += "?#{URI.encode_www_form(data)}" if data.any?
19
+ end
16
20
  req = klass.new(url) # url includes query string and uri.path does not, must used url
17
21
  set_headers!(req)
18
22
  if [Net::HTTP::Delete, Net::HTTP::Patch, Net::HTTP::Post, Net::HTTP::Put].include?(klass)
@@ -24,13 +28,29 @@ class Jets::Gems::Api
24
28
  end
25
29
 
26
30
  def set_headers!(req)
27
- req['Authorization'] = token if token
28
- req['x-account'] = account if account
29
- req['Content-Type'] = "application/vnd.api+json"
31
+ req["Authorization"] = token if token
32
+ req["x-account"] = account if account
33
+ req["Content-Type"] = "application/vnd.api+json"
34
+ end
35
+
36
+ def global_data
37
+ Jets.boot
38
+ params = {}
39
+ params[:jets_env] = Jets.env.to_s
40
+ params[:jets_extra] = Jets.extra.to_s if Jets.extra
41
+ params[:name] = Jets.project_namespace
42
+ params[:region] = Jets.aws.region
43
+ params[:account] = Jets.aws.account
44
+ params[:project_id] = Jets.config.project_name
45
+ params[:serverlessgems_version] = Jets::Gems::VERSION
46
+ params[:jets_version] = Jets::VERSION
47
+ params[:ruby_version] = RUBY_VERSION
48
+ params[:ruby_folder] = Jets::Gems.ruby_folder
49
+ params
30
50
  end
31
51
 
32
52
  def token
33
- Jets::Gems::Config.instance.data['key']
53
+ Jets::Gems::Config.instance.data["key"]
34
54
  end
35
55
 
36
56
  def load_json(url, res)
@@ -40,7 +60,7 @@ class Jets::Gems::Api
40
60
  else
41
61
  puts "Error: Non-successful http response status code: #{res.code}"
42
62
  puts "headers: #{res.each_header.to_h.inspect}"
43
- puts "ServerlessGems API #{url}" if ENV['SG_DEBUG']
63
+ puts "ServerlessGems API #{url}" if ENV["SG_DEBUG"]
44
64
  raise "ServerlessGems API called failed: #{uri.host}"
45
65
  end
46
66
  end
@@ -55,7 +75,7 @@ class Jets::Gems::Api
55
75
  uri = URI(endpoint)
56
76
  http = Net::HTTP.new(uri.host, uri.port)
57
77
  http.open_timeout = http.read_timeout = 30
58
- http.use_ssl = true if uri.scheme == 'https'
78
+ http.use_ssl = true if uri.scheme == "https"
59
79
  http
60
80
  end
61
81
  memoize :http
@@ -65,24 +85,26 @@ class Jets::Gems::Api
65
85
  "#{endpoint}/#{path}"
66
86
  end
67
87
 
68
- def get(path)
69
- request(Net::HTTP::Get, path)
88
+ def get(path, data = {})
89
+ request(Net::HTTP::Get, path, data)
70
90
  end
71
91
 
72
- def post(path, data={})
92
+ def post(path, data = {})
73
93
  request(Net::HTTP::Post, path, data)
74
94
  end
75
95
 
76
- def patch(path, data={})
96
+ def patch(path, data = {})
77
97
  request(Net::HTTP::Patch, path, data)
78
98
  end
79
99
 
80
- def delete(path, data={})
100
+ def delete(path, data = {})
81
101
  request(Net::HTTP::Delete, path, data)
82
102
  end
83
103
 
84
104
  def account
85
- sts.get_caller_identity.account rescue nil
105
+ sts.get_caller_identity.account
106
+ rescue
107
+ nil
86
108
  end
87
109
  memoize :account
88
110
 
data/lib/jets/gems/api.rb CHANGED
@@ -3,19 +3,19 @@ module Jets::Gems
3
3
  include Core
4
4
 
5
5
  def endpoint
6
- ENV['SG_API'] || Jets.config.gems.source || 'https://api.serverlessgems.com/api/v1'
6
+ ENV["SG_API"] || Jets.config.gems.source || "https://api.serverlessgems.com/api/v1"
7
7
  end
8
8
 
9
9
  def download_url(gem_name:, project:)
10
- get("gem/download?gem_name=#{gem_name}&ruby_folder=#{ruby_folder}&project=#{project}")
10
+ get("gem/download", gem_name: gem_name, ruby_folder: ruby_folder, project: project)
11
11
  end
12
12
 
13
13
  def check_exist(gem_name:)
14
- get("gem/exist?gem_name=#{gem_name}&ruby_folder=#{ruby_folder}")
14
+ get("gem/exist", gem_name: gem_name, ruby_folder: ruby_folder)
15
15
  end
16
16
 
17
17
  def report_missing(gem_name:)
18
- get("report/missing?gem_name=#{gem_name}&ruby_folder=#{ruby_folder}")
18
+ get("report/missing", gem_name: gem_name, ruby_folder: ruby_folder)
19
19
  end
20
20
 
21
21
  def registered_gems
@@ -6,7 +6,7 @@ module Jets
6
6
  class Autoloader
7
7
  class Inflector < Zeitwerk::Inflector
8
8
  def camelize(basename, _abspath)
9
- map = { cli: "CLI", version: "VERSION" }
9
+ map = {cli: "CLI", version: "VERSION"}
10
10
  map[basename.to_sym] || super
11
11
  end
12
12
  end
@@ -15,7 +15,7 @@ module Jets
15
15
  def setup
16
16
  loader = Zeitwerk::Loader.new
17
17
  loader.inflector = Inflector.new
18
- lib = File.expand_path('../..', __dir__)
18
+ lib = File.expand_path("../..", __dir__)
19
19
  loader.push_dir(lib) # lib
20
20
  loader.ignore("#{lib}/serverlessgems.rb")
21
21
  loader.setup
@@ -6,7 +6,7 @@ module Jets::Gems
6
6
  extend Memoist
7
7
 
8
8
  attr_reader :missing_gems
9
- def initialize(options={})
9
+ def initialize(options = {})
10
10
  @options = options
11
11
  @missing_gems = [] # keeps track of gems that are not found in any of the serverlessgems source
12
12
  end
@@ -17,7 +17,7 @@ module Jets::Gems
17
17
  end
18
18
 
19
19
  def gems_source
20
- ENV['SG_API'] || Jets.config.gems.source
20
+ ENV["SG_API"] || Jets.config.gems.source
21
21
  end
22
22
 
23
23
  # Checks whether the gem is found at the serverlessgems source.
@@ -35,7 +35,7 @@ module Jets::Gems
35
35
  # Better to error now than deploy a broken package to AWS Lambda.
36
36
  # Provide users with message about using their own serverlessgems source.
37
37
  puts missing_message
38
- names = @missing_gems.map {|i| i['gem_name']}
38
+ names = @missing_gems.map { |i| i["gem_name"] }
39
39
  Report.new(@options).report(names) if agree.yes?
40
40
  exit 1
41
41
  end
@@ -48,36 +48,36 @@ module Jets::Gems
48
48
  end
49
49
 
50
50
  def missing_message
51
- template = <<-EOL
52
- Your project requires compiled gems that are not currently available. Unavailable pre-compiled gems:
53
- <% missing_gems.each do |missing_gem|
54
- available = missing_gem['available'].reject { |v| missing_gem['gem_name'].include?(v) }
55
- %>
56
- * Unavailable: <%= missing_gem['gem_name'] -%> Available versions: <%= available.join(' ') %>
57
- <% end %>
58
- Your current serverlessgems source: #{gems_source}
59
-
60
- Jets is unable to build a deployment package that will work on AWS Lambda without the required pre-compiled gems. To remedy this, you can:
61
-
62
- * Use another gem that does not require compilation.
63
- * Create your own custom layer with the gem: http://rubyonjets.com/docs/extras/custom-lambda-layers/
64
- <% if agree.yes? -%>
65
- * No need to report this to us, as we've already been notified.
66
- * Usually, missing gems can be built within a few minutes.
67
- * Some gems may take days or even longer.
68
- <% elsif agree.no? -%>
69
- * You have choosen not to report data to serverlessgems so we will not be notified about these missing gems.
70
- * You can edit ~/.jets/agree to change this.
71
- * Reporting gems generally allows Serverless Gems to build the missing gems within a few minutes.
72
- * You can try redeploying again after a few minutes.
73
- * Non-reported gems may take days or even longer to be built.
74
- <% end -%>
75
-
76
- Compiled gems usually take some time to figure out how to build as they each depend on different libraries and packages.
77
- More info: http://rubyonjets.com/docs/serverlessgems/
78
-
79
- EOL
80
- erb = ERB.new(template, trim_mode: '-') # trim mode https://stackoverflow.com/questions/4632879/erb-template-removing-the-trailing-line
51
+ template = <<~EOL
52
+ Your project requires compiled gems that are not currently available. Unavailable pre-compiled gems:
53
+ <% missing_gems.each do |missing_gem|
54
+ available = missing_gem['available'].reject { |v| missing_gem['gem_name'].include?(v) }
55
+ %>
56
+ * Unavailable: <%= missing_gem['gem_name'] -%> Available versions: <%= available.join(' ') %>
57
+ <% end %>
58
+ Your current serverlessgems source: #{gems_source}
59
+
60
+ Jets is unable to build a deployment package that will work on AWS Lambda without the required pre-compiled gems. To remedy this, you can:
61
+
62
+ * Use another gem that does not require compilation.
63
+ * Create your own custom layer with the gem: http://rubyonjets.com/docs/extras/custom-lambda-layers/
64
+ <% if agree.yes? -%>
65
+ * No need to report this to us, as we've already been notified.
66
+ * Usually, missing gems can be built within a few minutes.
67
+ * Some gems may take days or even longer.
68
+ <% elsif agree.no? -%>
69
+ * You have choosen not to report data to serverlessgems so we will not be notified about these missing gems.
70
+ * You can edit ~/.jets/agree to change this.
71
+ * Reporting gems generally allows Serverless Gems to build the missing gems within a few minutes.
72
+ * You can try redeploying again after a few minutes.
73
+ * Non-reported gems may take days or even longer to be built.
74
+ <% end -%>
75
+
76
+ Compiled gems usually take some time to figure out how to build as they each depend on different libraries and packages.
77
+ More info: http://rubyonjets.com/docs/serverlessgems/
78
+
79
+ EOL
80
+ erb = ERB.new(template, trim_mode: "-") # trim mode https://stackoverflow.com/questions/4632879/erb-template-removing-the-trailing-line
81
81
  erb.result(binding)
82
82
  end
83
83
 
@@ -156,10 +156,10 @@ EOL
156
156
  # On new 2021 macbook with m1 chip: the gems are being saved in a folder like so:
157
157
  # nokogiri-1.12.5-arm64-darwin
158
158
  # The GEM_REGEXP accounts for this case.
159
- GEM_REGEXP = /-(arm|x)\d+.*-(darwin|linux)/
159
+ GEM_REGEXP = /-(arm|x|aarch)\d+.*-(darwin|linux)(?:-gnu)?/
160
160
  def other_compiled_gems
161
- paths = Dir.glob("#{Jets.build_root}/stage/opt/ruby/gems/#{Jets::Gems.ruby_folder}/gems/*{-darwin,-linux}")
162
- paths.map { |p| File.basename(p).sub(GEM_REGEXP,'') }
161
+ paths = Dir.glob("#{Jets.build_root}/stage/opt/ruby/gems/#{Jets::Gems.ruby_folder}/gems/*{-darwin,-linux}*")
162
+ paths.map { |p| File.basename(p).sub(GEM_REGEXP, "") }
163
163
  end
164
164
 
165
165
  def registered_compiled_gems
@@ -167,9 +167,9 @@ EOL
167
167
  registered_gems = registered.all # no version numbers in this list
168
168
 
169
169
  paths = Dir.glob("#{Jets.build_root}/stage/opt/ruby/gems/#{Jets::Gems.ruby_folder}/gems/*")
170
- project_gems = paths.map { |p| File.basename(p).sub(GEM_REGEXP,'') }
170
+ project_gems = paths.map { |p| File.basename(p).sub(GEM_REGEXP, "") }
171
171
  project_gems.select do |name|
172
- name_only = name.sub(/-\d+\.\d+\.\d+.*/,'')
172
+ name_only = name.sub(/-\d+\.\d+\.\d+.*/, "")
173
173
  registered_gems.include?(name_only)
174
174
  end
175
175
  end
@@ -210,7 +210,7 @@ EOL
210
210
  # Thanks: https://gist.github.com/aelesbao/1414b169a79162b1d795 and
211
211
  # https://stackoverflow.com/questions/5165950/how-do-i-get-a-list-of-gems-that-are-installed-that-have-native-extensions
212
212
  def gemspec_compiled_gems
213
- specs = Gem::Specification.each.select { |spec| spec.extensions.any? }
213
+ specs = Gem::Specification.each.select { |spec| spec.extensions.any? }
214
214
  specs.reject! { |spec| weird_gem?(spec.name) }
215
215
  specs.map(&:full_name)
216
216
  end
@@ -1,11 +1,11 @@
1
1
  class Jets::Gems::Config
2
2
  class Token
3
3
  def key
4
- data['key']
4
+ data["key"]
5
5
  end
6
6
 
7
7
  def data
8
- load_yaml("#{ENV['HOME']}/.jets/config.yml")
8
+ load_yaml("#{ENV["HOME"]}/.jets/config.yml")
9
9
  end
10
10
 
11
11
  # Ensure a Hash is returned
@@ -6,7 +6,7 @@ module Jets::Gems
6
6
  def check(gem_name)
7
7
  api.check_exist(gem_name: gem_name) # data = {"exist": ..., "available"}
8
8
  rescue SocketError, OpenURI::HTTPError, OpenSSL::SSL::SSLError
9
- {"exist" => false, gem_name: gem_name, available: [] }
9
+ {"exist" => false, :gem_name => gem_name, :available => []}
10
10
  end
11
11
  end
12
12
  end
@@ -5,7 +5,7 @@ module Jets::Gems::Extract
5
5
  class NotFound < RuntimeError; end
6
6
 
7
7
  attr_reader :project_root
8
- def initialize(name, options={})
8
+ def initialize(name, options = {})
9
9
  @name = name
10
10
  @options = options
11
11
  ruby_folder = Jets::Gems.ruby_folder
@@ -35,17 +35,17 @@ module Jets::Gems::Extract
35
35
 
36
36
  # Returns the dest path
37
37
  def download_file(url, dest)
38
- if File.exist?(dest) && ENV['SG_FORCE_DOWNLOAD'].blank?
38
+ if File.exist?(dest) && ENV["SG_FORCE_DOWNLOAD"].blank?
39
39
  say "File already downloaded #{dest}"
40
40
  return dest
41
41
  end
42
42
 
43
43
  say "Downloading..."
44
- downloaded = URI.open(url, 'rb') { |read_file| read_file.read }
44
+ downloaded = URI.open(url, "rb") { |read_file| read_file.read }
45
45
 
46
46
  FileUtils.mkdir_p(File.dirname(dest)) # ensure parent folder exists
47
47
 
48
- File.open(dest, 'wb') { |saved_file| saved_file.write(downloaded) }
48
+ File.binwrite(dest, downloaded)
49
49
 
50
50
  dest
51
51
  end
@@ -56,7 +56,7 @@ module Jets::Gems::Extract
56
56
  @@log_level = val
57
57
  end
58
58
 
59
- def say(message, level=:info)
59
+ def say(message, level = :info)
60
60
  enabled = @@log_level == :debug || level == :debug
61
61
  puts(message) if enabled
62
62
  end
@@ -19,6 +19,64 @@ module Jets::Gems::Extract
19
19
  say "Unpacking into #{dest}"
20
20
  FileUtils.mkdir_p(dest)
21
21
  unzip(zipfile_path, dest)
22
+ cleanup_incompatible_platform_variants
23
+ end
24
+
25
+ # Removes incompatible platform variants to prevent RubyGems from choosing the wrong one
26
+ # For AWS Lambda, we want to keep only x86_64-linux variants and remove others
27
+ def cleanup_incompatible_platform_variants
28
+ gems_dir = "#{Jets.build_root}/stage/opt/ruby/gems/#{Jets::Gems.ruby_folder}/gems"
29
+ specs_dir = "#{Jets.build_root}/stage/opt/ruby/gems/#{Jets::Gems.ruby_folder}/specifications"
30
+ return unless Dir.exist?(gems_dir)
31
+
32
+ # Find all gem directories for this gem name
33
+ gem_dirs = Dir.glob("#{gems_dir}/#{gem_name}-*").select do |path|
34
+ File.directory?(path) && File.basename(path).start_with?(gem_name)
35
+ end
36
+
37
+ # Group by base gem name (without platform suffix)
38
+ gem_groups = {}
39
+ gem_dirs.each do |dir|
40
+ name = File.basename(dir)
41
+ # Handle platform-specific gem names like nokogiri-1.18.10-x86_64-linux-gnu
42
+ base_name = name.sub(/-(x86_64-linux-gnu|aarch64-linux-gnu|arm64-linux-gnu|i386-linux-gnu|powerpc-linux-gnu|sparc-linux-gnu|mips-linux-gnu|riscv-linux-gnu|loongarch-linux-gnu|sw_64-linux-gnu|hppa-linux-gnu|ia64-linux-gnu|s390-linux-gnu|x86_64|arm64|aarch64|i386|powerpc|sparc|mips|riscv|loongarch|sw_64|hppa|ia64|s390).*/, "")
43
+ gem_groups[base_name] ||= []
44
+ gem_groups[base_name] << {dir: dir, name: name}
45
+ end
46
+
47
+ # For each gem group, keep only x86_64-linux variants
48
+ gem_groups.each do |base_name, variants|
49
+ next if variants.size <= 1 # No cleanup needed if only one variant
50
+
51
+ say "Found #{variants.size} platform variants for #{base_name}:"
52
+ variants.each { |v| say " - #{v[:name]}" }
53
+
54
+ # Find x86_64-linux variants (preferred for AWS Lambda)
55
+ x86_64_variants = variants.select { |v| v[:name].include?("-x86_64-linux-gnu") || v[:name].include?("-x86_64-linux") }
56
+
57
+ if x86_64_variants.any?
58
+ # Keep x86_64-linux variants, remove others
59
+ keep_variants = x86_64_variants
60
+ remove_variants = variants - x86_64_variants
61
+ else
62
+ # If no x86_64-linux variants, keep the first one alphabetically
63
+ keep_variants = [variants.min_by { |v| v[:name] }]
64
+ remove_variants = variants - keep_variants
65
+ end
66
+
67
+ say "Keeping: #{keep_variants.map { |v| v[:name] }.join(", ")}"
68
+ say "Removing: #{remove_variants.map { |v| v[:name] }.join(", ")}"
69
+
70
+ # Remove incompatible variants
71
+ remove_variants.each do |variant|
72
+ say "Removing incompatible variant: #{variant[:name]}"
73
+ FileUtils.rm_rf(variant[:dir])
74
+
75
+ # Also remove the corresponding gemspec
76
+ gemspec_path = "#{specs_dir}/#{variant[:name]}.gemspec"
77
+ FileUtils.rm_f(gemspec_path) if File.exist?(gemspec_path)
78
+ end
79
+ end
22
80
  end
23
81
 
24
82
  # ensure that we always have the full gem name
@@ -36,7 +94,7 @@ module Jets::Gems::Extract
36
94
  end
37
95
 
38
96
  def gem_name
39
- full_gem_name.gsub(VERSION_PATTERN,'') # folder: byebug
97
+ full_gem_name.gsub(VERSION_PATTERN, "") # folder: byebug
40
98
  end
41
99
 
42
100
  # Downloads and extracts the linux gem into the proper directory.
@@ -53,10 +111,10 @@ module Jets::Gems::Extract
53
111
  begin
54
112
  @retries ||= 0
55
113
  url = gem_url
56
- basename = File.basename(url).gsub(/\?.*/,'') # remove query string info
114
+ basename = File.basename(url).gsub(/\?.*/, "") # remove query string info
57
115
  tarball_dest = download_file(url, download_path(basename))
58
116
  rescue OpenURI::HTTPError => e
59
- url_without_query = url.gsub(/\?.*/,'')
117
+ url_without_query = url.gsub(/\?.*/, "")
60
118
  puts "Error downloading #{url_without_query}"
61
119
  @retries += 1
62
120
  if @retries < 3
@@ -104,10 +162,10 @@ module Jets::Gems::Extract
104
162
  def remove_current_gem
105
163
  say "Removing current #{full_gem_name} gem installation:"
106
164
  gem_dirs = Dir.glob("#{project_root}/**/*").select do |path|
107
- File.directory?(path) &&
108
- path =~ %r{vendor/gems} &&
109
- File.basename(path) == full_gem_name
110
- end
165
+ File.directory?(path) &&
166
+ path =~ %r{vendor/gems} &&
167
+ File.basename(path) == full_gem_name
168
+ end
111
169
  gem_dirs.each do |dir|
112
170
  say " rm -rf #{dir}"
113
171
  FileUtils.rm_rf(dir)
@@ -9,4 +9,4 @@ module Jets::Gems
9
9
  []
10
10
  end
11
11
  end
12
- end
12
+ end
@@ -4,7 +4,7 @@ module Jets::Gems
4
4
  class Report
5
5
  include Jets::Gems::Api::Concern
6
6
 
7
- def initialize(options={})
7
+ def initialize(options = {})
8
8
  @options = options
9
9
  end
10
10
 
@@ -1,5 +1,5 @@
1
1
  module Jets
2
2
  module Gems
3
- VERSION = "0.4.0"
3
+ VERSION = "0.4.2"
4
4
  end
5
5
  end
data/lib/jets/gems.rb CHANGED
@@ -10,8 +10,8 @@ require "yaml"
10
10
  module Jets
11
11
  module Gems
12
12
  def ruby_folder
13
- major, minor, _ = RUBY_VERSION.split('.')
14
- [major, minor, '0'].join('.') # 2.5.1 => 2.5.0
13
+ major, minor, _ = RUBY_VERSION.split(".")
14
+ [major, minor, "0"].join(".") # 2.5.1 => 2.5.0
15
15
  end
16
16
 
17
17
  extend self
@@ -1 +1 @@
1
- require "jets/gems"
1
+ require "jets/gems"
@@ -3,22 +3,22 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require "jets/gems/version"
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.name = "serverlessgems"
7
- spec.version = Jets::Gems::VERSION
8
- spec.authors = ["Tung Nguyen"]
9
- spec.email = ["tongueroo@gmail.com"]
6
+ spec.name = "serverlessgems"
7
+ spec.version = Jets::Gems::VERSION
8
+ spec.authors = ["Tung Nguyen"]
9
+ spec.email = ["tongueroo@gmail.com"]
10
10
 
11
- spec.summary = "Client Library works with Serverless Gems API for Jets Ruby Serverless Framework"
12
- spec.homepage = "https://github.com/boltops-tools/serverlessgems"
13
- spec.license = "MIT"
11
+ spec.summary = "Client Library works with Serverless Gems API for Jets Ruby Serverless Framework"
12
+ spec.homepage = "https://github.com/boltops-tools/serverlessgems"
13
+ spec.license = "MIT"
14
14
 
15
15
  # Specify which files should be added to the gem when it is released.
16
16
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
17
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
17
+ spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
18
18
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
19
  end
20
- spec.bindir = "exe"
21
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.bindir = "exe"
21
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
24
  spec.add_dependency "gems"
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serverlessgems
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2023-07-24 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: gems
@@ -94,7 +93,6 @@ dependencies:
94
93
  - - ">="
95
94
  - !ruby/object:Gem::Version
96
95
  version: '0'
97
- description:
98
96
  email:
99
97
  - tongueroo@gmail.com
100
98
  executables: []
@@ -131,7 +129,6 @@ homepage: https://github.com/boltops-tools/serverlessgems
131
129
  licenses:
132
130
  - MIT
133
131
  metadata: {}
134
- post_install_message:
135
132
  rdoc_options: []
136
133
  require_paths:
137
134
  - lib
@@ -146,8 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
143
  - !ruby/object:Gem::Version
147
144
  version: '0'
148
145
  requirements: []
149
- rubygems_version: 3.4.10
150
- signing_key:
146
+ rubygems_version: 3.6.7
151
147
  specification_version: 4
152
148
  summary: Client Library works with Serverless Gems API for Jets Ruby Serverless Framework
153
149
  test_files: []