jets 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitmodules +3 -3
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +1 -1
- data/README.md +23 -1
- data/jets.gemspec +1 -2
- data/lib/jets.rb +5 -11
- data/lib/jets/builders/gem_replacer.rb +12 -96
- data/lib/jets/builders/ruby_packager.rb +3 -4
- data/lib/jets/builders/tidy.rb +9 -0
- data/lib/jets/commands.rb +1 -0
- data/lib/jets/commands/base.rb +10 -1
- data/lib/jets/commands/gems.rb +25 -0
- data/lib/jets/commands/help/gems/check.md +7 -0
- data/lib/jets/commands/help/import/rails.md +3 -3
- data/lib/jets/commands/import.rb +4 -0
- data/lib/jets/commands/import/base.rb +10 -0
- data/lib/jets/commands/import/cheatsheet.rb +35 -0
- data/lib/jets/commands/import/rail.rb +7 -0
- data/lib/jets/commands/import/sequence.rb +63 -47
- data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
- data/lib/jets/db.rb +9 -0
- data/lib/jets/version.rb +1 -1
- data/vendor/jets-gems/Gemfile +6 -0
- data/vendor/jets-gems/Gemfile.lock +39 -0
- data/vendor/jets-gems/LICENSE.txt +21 -0
- data/vendor/jets-gems/README.md +19 -0
- data/vendor/{lambdagem → jets-gems}/Rakefile +2 -2
- data/vendor/jets-gems/bin/console +14 -0
- data/vendor/jets-gems/bin/setup +8 -0
- data/vendor/jets-gems/jets-gems.gemspec +30 -0
- data/vendor/jets-gems/lib/jets-gems.rb +1 -0
- data/vendor/jets-gems/lib/jets/gems.rb +16 -0
- data/vendor/jets-gems/lib/jets/gems/check.rb +156 -0
- data/vendor/jets-gems/lib/jets/gems/exist.rb +54 -0
- data/vendor/jets-gems/lib/jets/gems/extract.rb +7 -0
- data/vendor/{lambdagem/lib/lambdagem → jets-gems/lib/jets/gems}/extract/base.rb +25 -6
- data/vendor/{lambdagem/lib/lambdagem → jets-gems/lib/jets/gems}/extract/gem.rb +10 -8
- data/vendor/{lambdagem/lib/lambdagem → jets-gems/lib/jets/gems}/extract/ruby.rb +6 -7
- data/vendor/jets-gems/lib/jets/gems/report.rb +53 -0
- data/vendor/jets-gems/lib/jets/gems/version.rb +5 -0
- data/vendor/jets-gems/spec/jets/gems_spec.rb +5 -0
- data/vendor/jets-gems/spec/spec_helper.rb +14 -0
- metadata +41 -53
- data/vendor/lambdagem/CHANGELOG.md +0 -27
- data/vendor/lambdagem/Gemfile +0 -6
- data/vendor/lambdagem/Gemfile.lock +0 -73
- data/vendor/lambdagem/Guardfile +0 -12
- data/vendor/lambdagem/LICENSE.txt +0 -22
- data/vendor/lambdagem/README.md +0 -139
- data/vendor/lambdagem/exe/lambdagem +0 -14
- data/vendor/lambdagem/lambdagem.gemspec +0 -32
- data/vendor/lambdagem/lib/lambdagem.rb +0 -18
- data/vendor/lambdagem/lib/lambdagem/base.rb +0 -53
- data/vendor/lambdagem/lib/lambdagem/build.rb +0 -202
- data/vendor/lambdagem/lib/lambdagem/clean.rb +0 -8
- data/vendor/lambdagem/lib/lambdagem/cli.rb +0 -62
- data/vendor/lambdagem/lib/lambdagem/command.rb +0 -38
- data/vendor/lambdagem/lib/lambdagem/exist.rb +0 -50
- data/vendor/lambdagem/lib/lambdagem/extract.rb +0 -8
- data/vendor/lambdagem/lib/lambdagem/extract/class_methods.rb +0 -50
- data/vendor/lambdagem/lib/lambdagem/help.rb +0 -9
- data/vendor/lambdagem/lib/lambdagem/help/all.md +0 -11
- data/vendor/lambdagem/lib/lambdagem/help/build.md +0 -14
- data/vendor/lambdagem/lib/lambdagem/help/clean.md +0 -5
- data/vendor/lambdagem/lib/lambdagem/help/extract_gem.md +0 -5
- data/vendor/lambdagem/lib/lambdagem/help/extract_ruby.md +0 -5
- data/vendor/lambdagem/lib/lambdagem/help/package.md +0 -20
- data/vendor/lambdagem/lib/lambdagem/help/upload.md +0 -7
- data/vendor/lambdagem/lib/lambdagem/package.rb +0 -33
- data/vendor/lambdagem/lib/lambdagem/upload.rb +0 -39
- data/vendor/lambdagem/lib/lambdagem/util.rb +0 -30
- data/vendor/lambdagem/lib/lambdagem/version.rb +0 -3
- data/vendor/lambdagem/spec/lib/build_spec.rb +0 -32
- data/vendor/lambdagem/spec/lib/cli_spec.rb +0 -24
- data/vendor/lambdagem/spec/lib/upload_spec.rb +0 -25
- data/vendor/lambdagem/spec/spec_helper.rb +0 -24
@@ -1,50 +0,0 @@
|
|
1
|
-
require "net/http"
|
2
|
-
|
3
|
-
module Lambdagem::Extract::ClassMethods
|
4
|
-
# Exits early if not all the linux gems are available
|
5
|
-
# It better to error now then later on Lambda
|
6
|
-
# Provide users with instructions on how to compile gems
|
7
|
-
#
|
8
|
-
# We check all the availability before even downloading so we can provide a
|
9
|
-
# full list of gems they might want to research all at once instead of incrementally
|
10
|
-
def check_availability(gems)
|
11
|
-
availabilities = gems.inject({}) do |hash, gem_name|
|
12
|
-
exist = url_exists?(gem_url(gem_name))
|
13
|
-
hash[gem_name] = exist
|
14
|
-
hash.merge(hash)
|
15
|
-
end
|
16
|
-
|
17
|
-
all_available = availabilities.values.all? {|v| v }
|
18
|
-
unless all_available
|
19
|
-
puts "Your project requires some pre-compiled Linux gems that are not yet available as a pre-compiled lambda gem. The build process will not continue because there's no point wasting your time deploying to Lambda and finding out later."
|
20
|
-
puts "The unavailable gems are:"
|
21
|
-
availabilities.each do |gem_name, available|
|
22
|
-
next if available
|
23
|
-
puts " #{gem_name}"
|
24
|
-
end
|
25
|
-
puts <<-EOL
|
26
|
-
How to fix this:
|
27
|
-
|
28
|
-
1. Build your jets project on an Amazon Lambda based EC2 Instance and compile your own gems with the proper shared libaries.
|
29
|
-
2. Configure jets to lookup your own pre-compiled gems url.
|
30
|
-
3. Add the the required gems to boltopslabs/lambdagems and submit a pull request.
|
31
|
-
|
32
|
-
More info: http://lambdagems.com
|
33
|
-
EOL
|
34
|
-
exit
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
# Example url:
|
39
|
-
# https://gems.lambdagems.com/gems/2.5.0/byebug/byebug-9.1.0-x86_64-linux.tgz
|
40
|
-
def url_exists?(url)
|
41
|
-
url = URI.parse(url)
|
42
|
-
req = Net::HTTP.new(url.host, url.port).tap do |http|
|
43
|
-
http.use_ssl = true
|
44
|
-
end
|
45
|
-
res = req.request_head(url.path)
|
46
|
-
res.code == "200"
|
47
|
-
rescue SocketError, OpenURI::HTTPError
|
48
|
-
false
|
49
|
-
end
|
50
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
Builds, packages and uploads the gem to s3 all in one step. This is useful for simply compiled gems that do not required any shared .so files during runtime.
|
2
|
-
|
3
|
-
Examples:
|
4
|
-
|
5
|
-
$ lambdagem all byebug --s3 lambdagems
|
6
|
-
|
7
|
-
So the above command is the same as running:
|
8
|
-
|
9
|
-
$ lambdagem build byebug
|
10
|
-
$ lambdagem package byebug
|
11
|
-
$ lambdagem upload byebug --s3 lambdagems
|
@@ -1,14 +0,0 @@
|
|
1
|
-
Builds a gem. Examples:
|
2
|
-
|
3
|
-
lambdagem build byebug
|
4
|
-
lambdagem build byebug-0.9.1
|
5
|
-
|
6
|
-
The lambdagem builds the gem in `/tmp/lambdagem`. This is where you'll find the Gemfile that is produces and where you can test the gem.
|
7
|
-
|
8
|
-
A slim down version of `/tmp/lambdagem/bundled/gems` the is initial created in `/tmp/lambdagem/artifacts/byebug-0.9.1/bundled/gems`. This slim down version contains only the byebug gem files.
|
9
|
-
|
10
|
-
When you are ready, the gem can be packaged to tarball with the `bundle package` command. The tarball is stored at:
|
11
|
-
|
12
|
-
```
|
13
|
-
/tmp/lambdagem/artifacts/byebug-9.1.0-x86_64-linux.tar.gz
|
14
|
-
```
|
@@ -1,20 +0,0 @@
|
|
1
|
-
Pakcages gem into a tarball. The tarball created is named after the gem name with version, but it contains the "bundled" folder with the underlying full structure.
|
2
|
-
|
3
|
-
It is meant to be extracted via:
|
4
|
-
|
5
|
-
mkdir -p /var/task
|
6
|
-
tar zxf byebug-0.9.1.tgz -C /var/task
|
7
|
-
# creates /var/task/bundled
|
8
|
-
|
9
|
-
Same as:
|
10
|
-
|
11
|
-
mkdir -p /var/task
|
12
|
-
cd /var/task && tar zxf byebug-0.9.1.tgz
|
13
|
-
# creates /var/task/bundled
|
14
|
-
|
15
|
-
Examples:
|
16
|
-
|
17
|
-
$ lambdagem package byebug
|
18
|
-
|
19
|
-
$ lambdagem package byebug-0.9.1
|
20
|
-
|
@@ -1,33 +0,0 @@
|
|
1
|
-
class Lambdagem::Package < Lambdagem::Base
|
2
|
-
def build
|
3
|
-
# cd tmp/artifacts
|
4
|
-
# tar czf byebug-9.1.0.tgz -C byebug-9.1.0 .
|
5
|
-
command = "cd #{@artifacts_root} && tar czf #{tarball_name} -C #{full_gem_name} ."
|
6
|
-
puts "=> #{command}"
|
7
|
-
system(command)
|
8
|
-
tarball_path = "#{@artifacts_root}/#{tarball_name}"
|
9
|
-
puts "Tarball files: #{@artifacts_root}/#{full_gem_name}/bundled"
|
10
|
-
puts "Tarball created: #{tarball_path.colorize(:green)}"
|
11
|
-
puts "Tarball contains the bundled folder with the original path structure."
|
12
|
-
puts "Extracting it out would produce: #{example_leaf_path}"
|
13
|
-
end
|
14
|
-
|
15
|
-
def example_leaf_path
|
16
|
-
# quicker to get the example leaf path using build_root
|
17
|
-
leaf_path = Dir.glob("#{@build_root}/bundled/gems/ruby/*/gems/#{full_gem_name}").first
|
18
|
-
leaf_path.sub("#{@build_root}/", "") + ' ...'
|
19
|
-
end
|
20
|
-
|
21
|
-
def tarball_name
|
22
|
-
"#{full_gem_name}-#{RUBY_PLATFORM}.tgz"
|
23
|
-
end
|
24
|
-
|
25
|
-
# Since user can build without the version number.
|
26
|
-
# check file system for actual gem that was produced to get the version number.
|
27
|
-
def full_gem_name
|
28
|
-
path = Dir.glob("#{@artifacts_root}/#{@name}*").select do |path|
|
29
|
-
File.directory?(path)
|
30
|
-
end.first
|
31
|
-
full_gem_name = File.basename(path)
|
32
|
-
end
|
33
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'aws-sdk-s3'
|
2
|
-
|
3
|
-
class Lambdagem::Upload < Lambdagem::Base
|
4
|
-
def upload
|
5
|
-
# s3_path: s3://boltops-gems/gems/2.4.1/byebug/byebug-9.1.0-x86_64-darwin16.tar.gz
|
6
|
-
puts "Uploading #{tarball_path.inspect} to #{s3_path(tarball_path)}"
|
7
|
-
|
8
|
-
# raise "Not uploading because on macosx" if RUBY_PLATFORM =~ /darwin/ && !ENV['LAMBDAGEM_MAC_TEST']
|
9
|
-
# return if ENV['TEST']
|
10
|
-
|
11
|
-
key = s3_key(tarball_path)
|
12
|
-
obj = s3_resource.bucket(@s3_bucket).object(key)
|
13
|
-
# use LAMBDAGEM_S3_ACL=private to make private
|
14
|
-
acl = ENV['LAMBDAGEM_S3_ACL'] || "public-read" # default
|
15
|
-
obj.upload_file(tarball_path, acl: acl)
|
16
|
-
end
|
17
|
-
|
18
|
-
def tarball_path
|
19
|
-
path = Dir.glob("#{@artifacts_root}/#{@name}*-#{RUBY_PLATFORM}.tgz").select do |path|
|
20
|
-
File.file?(path)
|
21
|
-
end.first
|
22
|
-
end
|
23
|
-
|
24
|
-
def s3_path(tarball_path)
|
25
|
-
"s3://#{@s3_bucket}/#{s3_key(tarball_path)}"
|
26
|
-
end
|
27
|
-
|
28
|
-
# Example tarball_path: tmp/artifacts/pg-0.21.0/pg-0.21.0-x86_64-linux.tgz
|
29
|
-
def s3_key(tarball_path)
|
30
|
-
tarball = File.basename(tarball_path)
|
31
|
-
gem_folder = tarball.gsub(/-\d+\.\d+\.\d+.*/,'')
|
32
|
-
full_gem_name = tarball.sub(/-x86_.*/,'') # -x86_...
|
33
|
-
"gems/#{RUBY_VERSION}/#{gem_folder}/#{tarball}"
|
34
|
-
end
|
35
|
-
|
36
|
-
def s3_resource
|
37
|
-
@s3_resource ||= Aws::S3::Resource.new
|
38
|
-
end
|
39
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# Can use this a few ways, examples:
|
2
|
-
#
|
3
|
-
# Directly usage:
|
4
|
-
#
|
5
|
-
# Lambdagem::Util.say("hi")
|
6
|
-
#
|
7
|
-
# Include it in your class:
|
8
|
-
#
|
9
|
-
# class MyClass
|
10
|
-
# include Lambdagem::Util
|
11
|
-
#
|
12
|
-
# def some_meth
|
13
|
-
# say "some_meth"
|
14
|
-
# end
|
15
|
-
# end
|
16
|
-
#
|
17
|
-
module Lambdagem
|
18
|
-
module Util
|
19
|
-
@@log_level = :debug
|
20
|
-
def log_level=(val)
|
21
|
-
@@log_level = val
|
22
|
-
end
|
23
|
-
|
24
|
-
def say(message, level=:info)
|
25
|
-
enabled = @@log_level == :debug || level == :debug
|
26
|
-
puts(message) if enabled
|
27
|
-
end
|
28
|
-
extend self
|
29
|
-
end
|
30
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Lambdagem::Build do
|
4
|
-
let(:builder) do
|
5
|
-
Lambdagem::Build.new(gem, s3: "lambdagems")
|
6
|
-
end
|
7
|
-
|
8
|
-
context("gem with version number") do
|
9
|
-
let(:gem) { "byebug-9.1.0" }
|
10
|
-
|
11
|
-
it "gem info" do
|
12
|
-
expect(builder.gem_name).to eq "byebug"
|
13
|
-
expect(builder.gem_version).to eq "9.1.0"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context("gem without version number") do
|
18
|
-
let(:gem) { "byebug" }
|
19
|
-
|
20
|
-
it "gem info" do
|
21
|
-
expect(builder.gem_name).to eq "byebug"
|
22
|
-
expect(builder.gem_version).to eq nil
|
23
|
-
end
|
24
|
-
|
25
|
-
it "create_gemfile" do
|
26
|
-
builder.create_gemfile
|
27
|
-
content = IO.read("/tmp/lambdagem/Gemfile")
|
28
|
-
expect(content).to include("byebug")
|
29
|
-
expect(content).not_to include("9.1.0")
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
# to run specs with what"s remembered from vcr
|
4
|
-
# $ rake
|
5
|
-
#
|
6
|
-
# to run specs with new fresh data from aws api calls
|
7
|
-
# $ rake clean:vcr ; time rake
|
8
|
-
describe Lambdagem::CLI do
|
9
|
-
before(:all) do
|
10
|
-
@args = "--noop"
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "lambdagem" do
|
14
|
-
it "build" do
|
15
|
-
out = execute("exe/lambdagem build byebug-10.0.0 #{@args}")
|
16
|
-
expect(out).to include("Building")
|
17
|
-
end
|
18
|
-
|
19
|
-
it "extract" do
|
20
|
-
out = execute("exe/lambdagem extract_gem byebug-10.0.0 #{@args}")
|
21
|
-
expect(out).to include("Looking for byebug")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Lambdagem::Upload do
|
4
|
-
let(:uploader) do
|
5
|
-
Lambdagem::Upload.new(gem, s3: "lambdagems")
|
6
|
-
end
|
7
|
-
|
8
|
-
context("gem with version number") do
|
9
|
-
let(:gem) { "byebug-9.1.0" }
|
10
|
-
|
11
|
-
it "s3_path" do
|
12
|
-
s3_path = uploader.s3_path("tmp/gems/ruby/byebug-9.1.0-x86_64-darwin16.tar.gz")
|
13
|
-
expect(s3_path).to eq "s3://lambdagems/gems/2.5.1/byebug/byebug-9.1.0-x86_64-darwin16.tar.gz"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context("gem without version number") do
|
18
|
-
let(:gem) { "byebug" }
|
19
|
-
|
20
|
-
it "s3_path" do
|
21
|
-
s3_path = uploader.s3_path("tmp/gems/ruby/byebug-9.1.0-x86_64-darwin16.tar.gz")
|
22
|
-
expect(s3_path).to eq "s3://lambdagems/gems/2.5.1/byebug/byebug-9.1.0-x86_64-darwin16.tar.gz"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
ENV["TEST"] = "1"
|
2
|
-
# Ensures aws api never called. Fixture home folder does not contain ~/.aws/credentails
|
3
|
-
ENV['HOME'] = "spec/fixtures/home"
|
4
|
-
|
5
|
-
# require "simplecov"
|
6
|
-
# SimpleCov.start
|
7
|
-
|
8
|
-
require "pp"
|
9
|
-
|
10
|
-
root = File.expand_path("../../", __FILE__)
|
11
|
-
require "#{root}/lib/lambdagem"
|
12
|
-
|
13
|
-
module Helpers
|
14
|
-
def execute(cmd)
|
15
|
-
puts "Running: #{cmd}" if ENV["DEBUG"]
|
16
|
-
out = `#{cmd}`
|
17
|
-
puts out if ENV["DEBUG"]
|
18
|
-
out
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
RSpec.configure do |c|
|
23
|
-
c.include Helpers
|
24
|
-
end
|