serverlessgems 0.1.6 → 0.2.1

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: 74e84f29a566951ffcc259be3bdf1e10421a5eb86528089fc0ff4f5805f52e8d
4
- data.tar.gz: c3497fbf6fd4a7169bf29b7319599a43c59b3e6cc69d2b4a9ddd98e1bba395b1
3
+ metadata.gz: 1bc39f373e2ec3dd463cdb015b038d91e21fef1bb903e3e5145786dde7062117
4
+ data.tar.gz: 6cdfc0f15004cd366fa7ceb7236a3bfdfcee966afdabf4bcf129da06023669b6
5
5
  SHA512:
6
- metadata.gz: cf4a3db72832ca353ea6fbe74d7e819e7631e88121d209efb1b1c645f56e520538323d480d289de5df861ddc22dd0bcc583214df6a261c6e5bf82664cbbaac13
7
- data.tar.gz: 9d6d8d4669d7e7659a3b2ea6add218b963cd3160361ff6c5cf1b58699d0b5a069073364f9b959c1b4f9c23b7634c7178f85ea2ca4f05816651d59dbb6cda0e11
6
+ metadata.gz: 96e938a4f91820f34553746cdbd468cc3f5d6fe962f949b180fa9e3a3b905dd50fa29e0d412e6e55f203d287ba6c9eeaaddc6ff899fb86e7bd76d540c21dc08c
7
+ data.tar.gz: be87aee1edd695c7fb005bf204a7bc57a640dd198e6047d14f1c03fb46e262a61d2007ce3b1cec1dcfd607ed25e5562bfec6da7e3491d83e867c9f29c9d78b7f
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.2.1] - 2023-02-07
7
+ - [#7](https://github.com/boltops-tools/serverlessgems/pull/7) download retry for 403 forbidden
8
+
9
+ ## [0.2.0] - 2022-07-02
10
+ - provide gems available info
11
+
6
12
  ## [0.1.6] - 2021-11-11
7
13
  - [#5](https://github.com/boltops-tools/serverlessgems/pull/5) fix gem regexp detection for 2021 macbook m1 chip
8
14
 
@@ -1,3 +1,5 @@
1
+ require "aws-sdk-core"
2
+
1
3
  class Jets::Gems::Api
2
4
  module Core
3
5
  extend Memoist
@@ -23,6 +25,7 @@ class Jets::Gems::Api
23
25
 
24
26
  def set_headers!(req)
25
27
  req['Authorization'] = token if token
28
+ req['x-account'] = account if account
26
29
  req['Content-Type'] = "application/vnd.api+json"
27
30
  end
28
31
 
@@ -77,5 +80,15 @@ class Jets::Gems::Api
77
80
  def delete(path, data={})
78
81
  request(Net::HTTP::Delete, path, data)
79
82
  end
83
+
84
+ def account
85
+ sts.get_caller_identity.account rescue nil
86
+ end
87
+ memoize :account
88
+
89
+ def sts
90
+ Aws::STS::Client.new
91
+ end
92
+ memoize :sts
80
93
  end
81
94
  end
@@ -26,7 +26,8 @@ module Jets::Gems
26
26
  compiled_gems.each do |gem_name|
27
27
  puts "Checking #{gem_name}..." if @options[:verbose]
28
28
  exist = Jets::Gems::Exist.new
29
- @missing_gems << gem_name unless exist.check(gem_name)
29
+ data = exist.check(gem_name)
30
+ @missing_gems << data unless data["exist"]
30
31
  end
31
32
 
32
33
  if exit_early && !@missing_gems.empty?
@@ -34,7 +35,8 @@ module Jets::Gems
34
35
  # Better to error now than deploy a broken package to AWS Lambda.
35
36
  # Provide users with message about using their own serverlessgems source.
36
37
  puts missing_message
37
- Report.new(@options).report(@missing_gems) if agree.yes?
38
+ names = @missing_gems.map {|i| i['gem_name']}
39
+ Report.new(@options).report(names) if agree.yes?
38
40
  exit 1
39
41
  end
40
42
 
@@ -48,10 +50,11 @@ module Jets::Gems
48
50
  def missing_message
49
51
  template = <<-EOL
50
52
  Your project requires compiled gems that are not currently available. Unavailable pre-compiled gems:
51
- <% missing_gems.each do |gem| %>
52
- * <%= gem -%>
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(' ') %>
53
57
  <% end %>
54
-
55
58
  Your current serverlessgems source: #{gems_source}
56
59
 
57
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:
@@ -2,29 +2,11 @@ module Jets::Gems
2
2
  class Exist
3
3
  include Jets::Gems::Api::Concern
4
4
 
5
- # We check all the availability before even downloading so we can provide a
6
- # full list of gems they might want to research all at once instead of incrementally
7
- #
8
- # Examples:
9
- #
10
- # check(single_gem)
11
- # check(list, of, gems)
12
- def check(*gem_names)
13
- gem_names = gem_names.flatten
14
- exists = gem_names.inject({}) do |hash, gem_name|
15
- exist = gem_exist?(gem_name)
16
- hash[gem_name] = exist
17
- hash.merge(hash)
18
- end
19
-
20
- exists.values.all? {|v| v } # all_exist
21
- end
22
-
23
- def gem_exist?(gem_name)
24
- data = api.check_exist(gem_name: gem_name)
25
- data["exist"]
5
+ # gem_name IE: nokogiri-1.1.1
6
+ def check(gem_name)
7
+ api.check_exist(gem_name: gem_name) # data = {"exist": ..., "available"}
26
8
  rescue SocketError, OpenURI::HTTPError, OpenSSL::SSL::SSLError
27
- false
9
+ {"exist" => false, gem_name: gem_name, available: [] }
28
10
  end
29
11
  end
30
- end
12
+ end
@@ -35,7 +35,7 @@ module Jets::Gems::Extract
35
35
 
36
36
  # Returns the dest path
37
37
  def download_file(url, dest)
38
- if File.exist?(dest)
38
+ if File.exist?(dest) && ENV['SG_FORCE_DOWNLOAD'].blank?
39
39
  say "File already downloaded #{dest}"
40
40
  return dest
41
41
  end
@@ -50,9 +50,24 @@ module Jets::Gems::Extract
50
50
  #
51
51
  def download_gem
52
52
  # download - also move to /tmp/jets/demo/compiled_gems folder
53
- url = gem_url
54
- basename = File.basename(url).gsub(/\?.*/,'') # remove query string info
55
- tarball_dest = download_file(url, download_path(basename))
53
+ begin
54
+ @retries ||= 0
55
+ url = gem_url
56
+ basename = File.basename(url).gsub(/\?.*/,'') # remove query string info
57
+ tarball_dest = download_file(url, download_path(basename))
58
+ rescue OpenURI::HTTPError => e
59
+ url_without_query = url.gsub(/\?.*/,'')
60
+ puts "Error downloading #{url_without_query}"
61
+ @retries += 1
62
+ if @retries < 3
63
+ sleep 1
64
+ puts "Retrying download. Retry attempt: #{@retries}"
65
+ retry
66
+ else
67
+ raise e
68
+ end
69
+ end
70
+
56
71
  unless tarball_dest
57
72
  message = "Url: #{url} not found"
58
73
  if @options[:exit_on_error]
@@ -1,5 +1,5 @@
1
1
  module Jets
2
2
  module Gems
3
- VERSION = "0.1.6"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serverlessgems
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-11 00:00:00.000000000 Z
11
+ date: 2023-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gems
@@ -94,7 +94,7 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description:
97
+ description:
98
98
  email:
99
99
  - tongueroo@gmail.com
100
100
  executables: []
@@ -131,7 +131,7 @@ homepage: https://github.com/boltops-tools/serverlessgems
131
131
  licenses:
132
132
  - MIT
133
133
  metadata: {}
134
- post_install_message:
134
+ post_install_message:
135
135
  rdoc_options: []
136
136
  require_paths:
137
137
  - lib
@@ -146,8 +146,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
146
  - !ruby/object:Gem::Version
147
147
  version: '0'
148
148
  requirements: []
149
- rubygems_version: 3.1.6
150
- signing_key:
149
+ rubygems_version: 3.3.26
150
+ signing_key:
151
151
  specification_version: 4
152
152
  summary: Client Library works with Serverless Gems API for Jets Ruby Serverless Framework
153
153
  test_files: []