jets 2.3.0 → 2.3.1
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 +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/jets/aws_info.rb +3 -7
- data/lib/jets/aws_services/stack_status.rb +1 -1
- data/lib/jets/builders/code_size.rb +2 -2
- data/lib/jets/builders/ruby_packager.rb +9 -1
- data/lib/jets/cfn/builders/controller_builder.rb +1 -0
- data/lib/jets/cfn/builders/interface.rb +4 -0
- data/lib/jets/cfn/builders/parent_builder.rb +2 -0
- data/lib/jets/cfn/builders/util/source.rb +21 -0
- data/lib/jets/cfn/ship.rb +5 -3
- data/lib/jets/cfn/status.rb +1 -1
- data/lib/jets/cfn/template_source.rb +61 -0
- data/lib/jets/commands/dynamodb/migrator.rb +1 -1
- data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +2 -2
- data/lib/jets/controller/forgery_protection.rb +1 -1
- data/lib/jets/controller/middleware/local.rb +1 -1
- data/lib/jets/erb.rb +1 -1
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +1 -1
- data/lib/jets/preheat.rb +1 -1
- data/lib/jets/processors/main_processor.rb +1 -1
- data/lib/jets/router/dsl/mount.rb +1 -0
- data/lib/jets/tmp_loader.rb +1 -1
- data/lib/jets/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edcc031b3ecbf752200590a6b964983604f0fd95e15d0270abe26341a3013cfe
|
4
|
+
data.tar.gz: 2b12ab8e0dcd3d7ad5cddb5169a32b189968d946ccc8fbe059dd0a3e37541f3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 778038a7c6b3d5deb3e78d65061095ffa2c52add54d66aba17abdf1feefcea29e37a9f673eb96ced091f5d58ece36781ac7e72e12e0a4bc99f542f0046d6038d
|
7
|
+
data.tar.gz: f6e6aebfe968362c36083e3dc6d60a4ace9772a6135aff0bfc7e138618f43050503010014ad61d1c12425b4f071fd7fca2cdea4797ab3f82da1ead1c98da3977
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,15 @@
|
|
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
|
+
## [2.3.1]
|
7
|
+
- #378 use JETS_TEST=1 env var instead of TEST=1 and favor Jets.env.test? method
|
8
|
+
- #382 associated resources support for controllers
|
9
|
+
- #383 add jets and code version to parent template description
|
10
|
+
- #384 upload template to s3
|
11
|
+
- #386 Allow Jets.once to be called in simple function
|
12
|
+
- #387 remove .bundle/config instead of BUNDLE_IGNORE_CONFIG=1
|
13
|
+
- allow accidental mount at / to work also
|
14
|
+
|
6
15
|
## [2.3.0]
|
7
16
|
- #377 routes mount support
|
8
17
|
|
data/lib/jets/aws_info.rb
CHANGED
@@ -5,7 +5,7 @@ module Jets
|
|
5
5
|
include AwsServices
|
6
6
|
|
7
7
|
def region
|
8
|
-
return 'us-east-1' if test?
|
8
|
+
return 'us-east-1' if Jets.env.test?
|
9
9
|
|
10
10
|
return ENV['JETS_AWS_REGION'] if ENV['JETS_AWS_REGION'] # highest precedence
|
11
11
|
return ENV['AWS_REGION'] if ENV['AWS_REGION']
|
@@ -48,7 +48,7 @@ module Jets
|
|
48
48
|
|
49
49
|
# aws sts get-caller-identity
|
50
50
|
def account
|
51
|
-
return '123456789' if test?
|
51
|
+
return '123456789' if Jets.env.test?
|
52
52
|
return ENV['JETS_AWS_ACCOUNT'] if ENV['JETS_AWS_ACCOUNT']
|
53
53
|
|
54
54
|
# ensure region set, required for sts.get_caller_identity.account to work
|
@@ -70,7 +70,7 @@ module Jets
|
|
70
70
|
BUCKET_DOES_NOT_YET_EXIST = "bucket-does-not-yet-exist" # use const to save from misspellings
|
71
71
|
@@s3_bucket = BUCKET_DOES_NOT_YET_EXIST
|
72
72
|
def s3_bucket
|
73
|
-
return "fake-test-s3-bucket" if
|
73
|
+
return "fake-test-s3-bucket" if Jets.env.test?
|
74
74
|
return @@s3_bucket unless @@s3_bucket == BUCKET_DOES_NOT_YET_EXIST
|
75
75
|
|
76
76
|
resp = cfn.describe_stacks(stack_name: Jets::Naming.parent_stack_name)
|
@@ -90,10 +90,6 @@ module Jets
|
|
90
90
|
BUCKET_DOES_NOT_YET_EXIST
|
91
91
|
end
|
92
92
|
|
93
|
-
def test?
|
94
|
-
ENV['TEST'] || Jets.env.test?
|
95
|
-
end
|
96
|
-
|
97
93
|
private
|
98
94
|
|
99
95
|
# Cross-platform way of finding an executable in the $PATH.
|
@@ -3,7 +3,7 @@ module Jets::AwsServices
|
|
3
3
|
# Only cache if it is true because the initial deploy checks live status until a stack exists.
|
4
4
|
@@stack_exists_cache = [] # helps with CloudFormation rate limit
|
5
5
|
def stack_exists?(stack_name)
|
6
|
-
return false if
|
6
|
+
return false if Jets.env.test?
|
7
7
|
return true if ENV['JETS_BUILD_NO_INTERNET']
|
8
8
|
return true if @@stack_exists_cache.include?(stack_name)
|
9
9
|
|
@@ -36,7 +36,7 @@ module Jets::Builders
|
|
36
36
|
say "Total Package: #{megabytes(total_size)}"
|
37
37
|
say "Over limit by: #{megabytes(overlimit)}"
|
38
38
|
say "Sometimes blowing away the /tmp/jets cache will reduce the size: rm -rf /tmp/jets"
|
39
|
-
# sh "du -kcsh #{stage_area}/*" unless
|
39
|
+
# sh "du -kcsh #{stage_area}/*" unless Jets.env.test? # uncomment to debug
|
40
40
|
end
|
41
41
|
|
42
42
|
def compute_size(path)
|
@@ -51,7 +51,7 @@ module Jets::Builders
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def say(message)
|
54
|
-
puts message unless
|
54
|
+
puts message unless Jets.env.test?
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
@@ -50,11 +50,19 @@ module Jets::Builders
|
|
50
50
|
# Uncomment out to always remove the cache/vendor/gems to debug
|
51
51
|
# FileUtils.rm_rf("#{cache_area}/vendor/gems")
|
52
52
|
|
53
|
+
# Remove .bundle folder so .bundle/config doesnt affect how Jets packages gems.
|
54
|
+
# Not using BUNDLE_IGNORE_CONFIG=1 to allow home ~/.bundle/config to affect bundling though.
|
55
|
+
# This is useful if you have private gems sources that require authentication. Example:
|
56
|
+
#
|
57
|
+
# bundle config gems.myprivatesource.com user:pass
|
58
|
+
#
|
59
|
+
|
60
|
+
FileUtils.rm_rf("#{cache_area}/.bundle")
|
53
61
|
require "bundler" # dynamically require bundler so user can use any bundler
|
54
62
|
Bundler.with_clean_env do
|
55
63
|
sh(
|
56
64
|
"cd #{cache_area} && " \
|
57
|
-
"env
|
65
|
+
"env bundle install --path #{cache_area}/vendor/gems --without development test"
|
58
66
|
)
|
59
67
|
end
|
60
68
|
|
@@ -50,6 +50,10 @@ module Jets::Cfn::Builders
|
|
50
50
|
results.join("\n") + "\n"
|
51
51
|
end
|
52
52
|
|
53
|
+
def add_description(desc)
|
54
|
+
@template[:Description] = desc
|
55
|
+
end
|
56
|
+
|
53
57
|
def add_parameters(attributes)
|
54
58
|
attributes.each do |name,value|
|
55
59
|
add_parameter(name.to_s.camelize, Description: value)
|
@@ -23,6 +23,8 @@ module Jets::Cfn::Builders
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def build_minimal_resources
|
26
|
+
add_description("Jets: #{Jets.version} Code: #{Util::Source.version}")
|
27
|
+
|
26
28
|
# Initial s3 bucket, used to store code zipfile and templates Jets generates
|
27
29
|
resource = Jets::Resource::S3::Bucket.new(logical_id: "s3_bucket")
|
28
30
|
add_resource(resource)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Jets::Cfn::Builders::Util
|
2
|
+
class Source
|
3
|
+
class << self
|
4
|
+
def version
|
5
|
+
return '' unless git_installed?
|
6
|
+
sha = sh "git rev-parse HEAD 2>/dev/null"
|
7
|
+
return '' if sha == '' # if its not a git repo, it'll be an empty string
|
8
|
+
sha[0..7]
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
def git_installed?
|
13
|
+
system("type git > /dev/null 2>&1")
|
14
|
+
end
|
15
|
+
|
16
|
+
def sh(command)
|
17
|
+
`#{command}`.strip
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/jets/cfn/ship.rb
CHANGED
@@ -6,7 +6,6 @@ module Jets::Cfn
|
|
6
6
|
def initialize(options)
|
7
7
|
@options = options
|
8
8
|
@parent_stack_name = Jets::Naming.parent_stack_name
|
9
|
-
@template_path = Jets::Naming.parent_template_path
|
10
9
|
end
|
11
10
|
|
12
11
|
def run
|
@@ -75,10 +74,13 @@ module Jets::Cfn
|
|
75
74
|
def stack_options
|
76
75
|
{
|
77
76
|
stack_name: @parent_stack_name,
|
78
|
-
template_body: IO.read(@template_path),
|
79
77
|
capabilities: capabilities, # ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"]
|
80
78
|
# disable_rollback: !@options[:rollback],
|
81
|
-
}
|
79
|
+
}.merge!(template.to_h)
|
80
|
+
end
|
81
|
+
|
82
|
+
def template
|
83
|
+
@template ||= TemplateSource.new(Jets::Naming.parent_template_path, @options)
|
82
84
|
end
|
83
85
|
|
84
86
|
# check for /(_COMPLETE|_FAILED)$/ status
|
data/lib/jets/cfn/status.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
module Jets::Cfn
|
2
|
+
class TemplateSource
|
3
|
+
include Jets::AwsServices
|
4
|
+
|
5
|
+
attr_reader :path
|
6
|
+
|
7
|
+
def initialize(path, options)
|
8
|
+
@path = path
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def body
|
13
|
+
@body ||= IO.read(path)
|
14
|
+
end
|
15
|
+
|
16
|
+
def url
|
17
|
+
@url ||= upload_file_to_s3
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_h
|
21
|
+
if upload_to_s3?
|
22
|
+
from_s3
|
23
|
+
else
|
24
|
+
from_path
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def upload_to_s3?
|
31
|
+
bucket_name.present?
|
32
|
+
end
|
33
|
+
|
34
|
+
def from_s3
|
35
|
+
{
|
36
|
+
template_url: url
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
def from_path
|
41
|
+
{
|
42
|
+
template_body: body
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
def upload_file_to_s3
|
47
|
+
obj = s3_resource.bucket(bucket_name).object(s3_key)
|
48
|
+
obj.upload_file(path)
|
49
|
+
|
50
|
+
"https://s3.amazonaws.com/#{bucket_name}/#{s3_key}"
|
51
|
+
end
|
52
|
+
|
53
|
+
def bucket_name
|
54
|
+
@options[:s3_bucket]
|
55
|
+
end
|
56
|
+
|
57
|
+
def s3_key
|
58
|
+
@s3_key ||= "jets/cfn-templates/#{File.basename(path)}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -30,7 +30,7 @@ class Jets::Controller
|
|
30
30
|
|
31
31
|
# Instance methods
|
32
32
|
def verify_authenticity_token
|
33
|
-
return true if
|
33
|
+
return true if Jets.env.test? || request.get? || request.head?
|
34
34
|
|
35
35
|
token = session[:authenticity_token]
|
36
36
|
verified = !token.nil? && (token == params[:authenticity_token] || token == request.headers["x-csrf-token"])
|
@@ -69,7 +69,7 @@ module Jets::Controller::Middleware
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def on_aws?(env)
|
72
|
-
return false if
|
72
|
+
return false if Jets.env.test? # usually with test we're passing in full API Gateway fixtures with the HTTP_X_AMZN_TRACE_ID
|
73
73
|
on_cloud9 = !!(env['HTTP_HOST'] =~ /cloud9\..*\.amazonaws\.com/)
|
74
74
|
!!env['HTTP_X_AMZN_TRACE_ID'] && !on_cloud9
|
75
75
|
end
|
data/lib/jets/erb.rb
CHANGED
@@ -34,7 +34,7 @@ class Jets::PreheatJob < ApplicationJob
|
|
34
34
|
function_name = "jets-preheat_job-warm"
|
35
35
|
event_json = JSON.dump(event)
|
36
36
|
options = call_options(event[:quiet])
|
37
|
-
Jets::Commands::Call.new(function_name, event_json, options).run unless
|
37
|
+
Jets::Commands::Call.new(function_name, event_json, options).run unless Jets.env.test?
|
38
38
|
end
|
39
39
|
end
|
40
40
|
threads.each { |t| t.join }
|
data/lib/jets/preheat.rb
CHANGED
@@ -23,7 +23,7 @@ module Jets
|
|
23
23
|
|
24
24
|
# Makes remote call to the Lambda function.
|
25
25
|
def warm(function_name)
|
26
|
-
Jets::Commands::Call.new(function_name, '{"_prewarm": "1"}', @options).run unless
|
26
|
+
Jets::Commands::Call.new(function_name, '{"_prewarm": "1"}', @options).run unless Jets.env.test?
|
27
27
|
end
|
28
28
|
|
29
29
|
# Loop through all methods for each class and makes special prewarm call to each method.
|
@@ -43,7 +43,7 @@ class Jets::Processors::MainProcessor
|
|
43
43
|
|
44
44
|
result
|
45
45
|
rescue Exception => e
|
46
|
-
unless
|
46
|
+
unless Jets.env.test?
|
47
47
|
# Customize error message slightly so nodejs shim can process the
|
48
48
|
# returned error message.
|
49
49
|
# The "RubyError: " is a marker that the javascript shim scans for.
|
@@ -3,6 +3,7 @@ module Jets::Router::Dsl
|
|
3
3
|
# The mounted class must be a Rack compatiable class
|
4
4
|
def mount(klass, at:)
|
5
5
|
options = {to: "jets/mount#call", mount_class: klass}
|
6
|
+
at = at[1..-1] if at.starts_with?('/') # be more forgiving if / accidentally included
|
6
7
|
at_wildcard = at.blank? ? "*path" : "#{at}/*path"
|
7
8
|
|
8
9
|
any at, options
|
data/lib/jets/tmp_loader.rb
CHANGED
@@ -8,7 +8,7 @@ module Jets
|
|
8
8
|
|
9
9
|
def initialize(yaml_path=nil)
|
10
10
|
yaml_path ||= "#{Jets.root}/handlers/data.yml"
|
11
|
-
@data = YAML.load_file(yaml_path)
|
11
|
+
@data = YAML.load_file(yaml_path) if File.exist?(yaml_path)
|
12
12
|
@s3_bucket = @data['s3_bucket']
|
13
13
|
@rack_zip = @data['rack_zip']
|
14
14
|
end
|
data/lib/jets/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionmailer
|
@@ -635,9 +635,11 @@ files:
|
|
635
635
|
- lib/jets/cfn/builders/parent_builder/stagger.rb
|
636
636
|
- lib/jets/cfn/builders/rule_builder.rb
|
637
637
|
- lib/jets/cfn/builders/shared_builder.rb
|
638
|
+
- lib/jets/cfn/builders/util/source.rb
|
638
639
|
- lib/jets/cfn/built_template.rb
|
639
640
|
- lib/jets/cfn/ship.rb
|
640
641
|
- lib/jets/cfn/status.rb
|
642
|
+
- lib/jets/cfn/template_source.rb
|
641
643
|
- lib/jets/cfn/upload.rb
|
642
644
|
- lib/jets/cli.rb
|
643
645
|
- lib/jets/commands/base.rb
|