jets 0.10.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/Gemfile.lock +12 -12
  4. data/README.md +4 -2
  5. data/exe/jets +2 -2
  6. data/lib/jets/application.rb +41 -5
  7. data/lib/jets/aws_info.rb +20 -0
  8. data/lib/jets/builders/code_builder.rb +201 -296
  9. data/lib/jets/builders/gem_replacer.rb +1 -1
  10. data/lib/jets/builders/handler_generator.rb +62 -43
  11. data/lib/jets/builders/md5.rb +55 -0
  12. data/lib/jets/builders/md5_zip.rb +60 -0
  13. data/lib/jets/builders/rack_packager.rb +29 -0
  14. data/lib/jets/builders/rackup_wrappers/rackup +23 -0
  15. data/lib/jets/builders/rackup_wrappers/rackup.rb +7 -0
  16. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +14 -0
  17. data/lib/jets/builders/reconfigure_rails.rb +99 -0
  18. data/lib/jets/builders/ruby_packager.rb +198 -0
  19. data/lib/jets/builders/{deducer.rb → shim_vars/app.rb} +14 -10
  20. data/lib/jets/builders/shim_vars/base.rb +24 -0
  21. data/lib/jets/builders/{shared_deducer.rb → shim_vars/shared.rb} +4 -3
  22. data/lib/jets/builders/shim_vars.rb +5 -0
  23. data/lib/jets/builders/templates/handler.js +9 -0
  24. data/lib/jets/builders/templates/shim.js +271 -0
  25. data/lib/jets/builders/tidy.rb +80 -0
  26. data/lib/jets/builders/util.rb +28 -0
  27. data/lib/jets/builders.rb +8 -2
  28. data/lib/jets/cfn/builders/function_builder.rb +0 -10
  29. data/lib/jets/cfn/builders/parent_builder.rb +7 -6
  30. data/lib/jets/cfn/ship.rb +9 -103
  31. data/lib/jets/cfn/upload.rb +139 -0
  32. data/lib/jets/cfn.rb +1 -0
  33. data/lib/jets/commands/build.rb +17 -19
  34. data/lib/jets/commands/deploy.rb +2 -0
  35. data/lib/jets/commands/help/deploy.md +2 -2
  36. data/lib/jets/commands/help/import/rack.md +13 -0
  37. data/lib/jets/commands/help/import/rails.md +11 -0
  38. data/lib/jets/commands/import/base.rb +39 -0
  39. data/lib/jets/commands/import/rack.rb +16 -0
  40. data/lib/jets/commands/import/rail.rb +68 -0
  41. data/lib/jets/commands/import/sequence.rb +68 -0
  42. data/lib/jets/commands/import.rb +14 -0
  43. data/lib/jets/commands/main.rb +2 -1
  44. data/lib/jets/commands/new.rb +1 -1
  45. data/lib/jets/commands/sequence.rb +26 -22
  46. data/lib/jets/commands/templates/skeleton/Gemfile.tt +5 -2
  47. data/lib/jets/commands/templates/skeleton/README.md +11 -2
  48. data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +1 -1
  49. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +1 -1
  50. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +12 -5
  51. data/lib/jets/commands/templates/skeleton/config/database.yml.tt +5 -1
  52. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +3 -0
  53. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +5 -0
  54. data/lib/jets/commands/templates/skeleton/public/{images/favicon.ico → favicon.ico} +0 -0
  55. data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +1 -3
  56. data/lib/jets/commands.rb +1 -0
  57. data/lib/jets/controller/base.rb +1 -1
  58. data/lib/jets/controller/layout.rb +3 -0
  59. data/lib/jets/controller/params.rb +3 -2
  60. data/lib/jets/controller/request.rb +4 -0
  61. data/lib/jets/core.rb +20 -18
  62. data/lib/jets/core_ext/kernel.rb +9 -5
  63. data/lib/jets/default/application.rb +1 -1
  64. data/lib/jets/inflections.rb +16 -8
  65. data/lib/jets/internal/app/controllers/jets/public_controller.rb +17 -22
  66. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +15 -0
  67. data/lib/jets/naming.rb +0 -23
  68. data/lib/jets/rack/hash_converter.rb +25 -0
  69. data/lib/jets/rack/request.rb +71 -0
  70. data/lib/jets/rack/server.rb +47 -0
  71. data/lib/jets/rack.rb +7 -0
  72. data/lib/jets/rails_overrides/asset_tag_helper.rb +12 -11
  73. data/lib/jets/resource/function.rb +13 -5
  74. data/lib/jets/router.rb +1 -1
  75. data/lib/jets/ruby_server.rb +63 -18
  76. data/lib/jets/server/api_gateway.rb +1 -1
  77. data/lib/jets/stack/resource.rb +3 -1
  78. data/lib/jets/version.rb +1 -1
  79. data/lib/jets.rb +3 -5
  80. metadata +34 -9
  81. data/lib/jets/builders/node-hello.js +0 -73
  82. data/lib/jets/builders/node-shim.js +0 -182
  83. data/lib/jets/internal/app/controllers/jets/public_controller/python/show.py +0 -47
  84. data/lib/jets/internal/app/controllers/jets/public_controller/python/show.pyc +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fec31381880e8479247d24386a6e707d7bf7d7a78596bfebee22b4be7b7a1a6c
4
- data.tar.gz: 23665458e46e20ead4787f5567950ba7d67581473c63413c69ac9f1e97356587
3
+ metadata.gz: 8280c4dd8fd0e5dcf740e5cbba920c4b60bb141929635940592f9bacb576c6a9
4
+ data.tar.gz: ae6388ea520d67ae42b72cd8d479c6964cf4faf5ae62fe486c4ff107de395fe4
5
5
  SHA512:
6
- metadata.gz: 4fc47d7cc8848285737cfa87a0029eba9170367a03e19a374d5d87b0df71ccd9dbc1945bb9ad9230411e3c29044f1f199a8b95fa55e67637d3719a5ce6da6184
7
- data.tar.gz: ac6a5970973ab59d8336155dae880cbd3f6c0d93b0d8cb70549508108fa7d0ca0896973205aaef4c5f834b895d933f8fde1fa7918f9abd24d7f2eb4bef2423e8
6
+ metadata.gz: b3db1c42d1671cb0aa18c36f0e91cd32c78bd89c12c7e1f7a84f66a42d804d192f9a540954ebfed14e932c08fa6890076ed89f6912313527b1e86f63859886ff
7
+ data.tar.gz: 43681d533614ab99a940ae0495fa5aa21eba0b4e36b54bcda11d72eb03398af1acce0aebb0a771bd91a2916bfde078ad8e140d4d6f85889fb08c9c1723eb5305
data/CHANGELOG.md CHANGED
@@ -3,6 +3,22 @@
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/), even before v1.0.
5
5
 
6
+ ## [1.0.0]
7
+ - Mega Mode: Rails Support, Rack Support
8
+ - jets import:rails command
9
+ - Lazy Loading Support
10
+ - MySQL support. MySQL is default for jets new command.
11
+ - Separate Environment configuration support
12
+ - Default function timeout 30s now and 60s for jobs
13
+ - Improve config/inflections.yml support
14
+ - Improve shim: organized code
15
+ - Improve static asset serving
16
+ - Improve deploy performance: lazy loading, separate zip files, and only reupload if md5 checksums change.
17
+ - Improve handler generation: ShimVars concept.
18
+ - Improve code builder: Tidy class
19
+ - Improve cfn builder: separate out cfn upload
20
+ - Improve Jets IO buffer handling
21
+
6
22
  ## [0.10.4]
7
23
  - Merge pull request #51 from tongueroo/fix-aws-account: fix aws account lookup when ~/.aws/config not configured
8
24
  - deprecate config.api_mode for api.mode = "api"
data/Gemfile.lock CHANGED
@@ -11,7 +11,7 @@ GIT
11
11
  PATH
12
12
  remote: .
13
13
  specs:
14
- jets (0.10.4)
14
+ jets (1.0.0)
15
15
  actionpack (>= 5.2.1)
16
16
  actionview (>= 5.2.1)
17
17
  activerecord (>= 5.2.1)
@@ -65,32 +65,32 @@ GEM
65
65
  tzinfo (~> 1.1)
66
66
  arel (9.0.0)
67
67
  aws-eventstream (1.0.1)
68
- aws-partitions (1.105.0)
69
- aws-sdk-cloudformation (1.8.0)
68
+ aws-partitions (1.106.0)
69
+ aws-sdk-cloudformation (1.10.0)
70
70
  aws-sdk-core (~> 3, >= 3.26.0)
71
71
  aws-sigv4 (~> 1.0)
72
- aws-sdk-cloudwatchlogs (1.8.0)
72
+ aws-sdk-cloudwatchlogs (1.10.0)
73
73
  aws-sdk-core (~> 3, >= 3.26.0)
74
74
  aws-sigv4 (~> 1.0)
75
- aws-sdk-core (3.30.0)
75
+ aws-sdk-core (3.35.0)
76
76
  aws-eventstream (~> 1.0)
77
77
  aws-partitions (~> 1.0)
78
78
  aws-sigv4 (~> 1.0)
79
79
  jmespath (~> 1.0)
80
- aws-sdk-dynamodb (1.13.0)
80
+ aws-sdk-dynamodb (1.15.0)
81
81
  aws-sdk-core (~> 3, >= 3.26.0)
82
82
  aws-sigv4 (~> 1.0)
83
- aws-sdk-kms (1.9.0)
83
+ aws-sdk-kms (1.11.0)
84
84
  aws-sdk-core (~> 3, >= 3.26.0)
85
85
  aws-sigv4 (~> 1.0)
86
- aws-sdk-lambda (1.10.0)
86
+ aws-sdk-lambda (1.13.0)
87
87
  aws-sdk-core (~> 3, >= 3.26.0)
88
88
  aws-sigv4 (~> 1.0)
89
- aws-sdk-s3 (1.21.0)
89
+ aws-sdk-s3 (1.23.0)
90
90
  aws-sdk-core (~> 3, >= 3.26.0)
91
91
  aws-sdk-kms (~> 1)
92
92
  aws-sigv4 (~> 1.0)
93
- aws-sdk-sns (1.5.0)
93
+ aws-sdk-sns (1.7.0)
94
94
  aws-sdk-core (~> 3, >= 3.26.0)
95
95
  aws-sigv4 (~> 1.0)
96
96
  aws-sigv4 (1.0.3)
@@ -105,12 +105,12 @@ GEM
105
105
  gems (1.1.1)
106
106
  json
107
107
  hashie (3.6.0)
108
- i18n (1.1.0)
108
+ i18n (1.1.1)
109
109
  concurrent-ruby (~> 1.0)
110
110
  jmespath (1.4.0)
111
111
  json (2.1.0)
112
112
  kramdown (1.17.0)
113
- loofah (2.2.2)
113
+ loofah (2.2.3)
114
114
  crass (~> 1.0.2)
115
115
  nokogiri (>= 1.5.9)
116
116
  memoist (0.16.0)
data/README.md CHANGED
@@ -87,12 +87,12 @@ app/jobs/hard_job.rb:
87
87
  class HardJob < ApplicationJob
88
88
  rate "10 hours" # every 10 hours
89
89
  def dig
90
- {done: "digging"}
90
+ puts "done digging"
91
91
  end
92
92
 
93
93
  cron "0 */12 * * ? *" # every 12 hours
94
94
  def lift
95
- {done: "lifting"}
95
+ puts "done lifting"
96
96
  end
97
97
  end
98
98
  ```
@@ -146,3 +146,5 @@ For more documentation, check out the official docs: [Ruby on Jets](http://rubyo
146
146
  * [Jets Tutorial IAM Policies Part 5](https://blog.boltops.com/2018/09/11/jets-tutorial-iam-policies-part-5)
147
147
  * [Jets Tutorial Function Properties Part 6](https://blog.boltops.com/2018/09/12/jets-tutorial-function-properties-part-6)
148
148
  * [Jets Tutorial Extra Environments Part 7](https://blog.boltops.com/2018/09/13/jets-tutorial-extra-environments-part-7)
149
+ * [Jets Tutorial Different Environments Part 8](https://blog.boltops.com/2018/09/26/jets-tutorial-different-environments-part-8)
150
+ * [Jets Tutorial Polymorphic Support Part 9](https://blog.boltops.com/2018/09/27/jets-tutorial-polymorphic-support-part-9)
data/exe/jets CHANGED
@@ -3,8 +3,8 @@
3
3
  # traps: INT - ^C
4
4
  ['INT', 'TERM', 'QUIT'].each do |signal|
5
5
  trap(signal) do
6
- puts ""
7
- sleep 0.1
6
+ puts "Detected stop signal"
7
+ sleep 0.2
8
8
  exit
9
9
  end
10
10
  end
@@ -11,8 +11,8 @@ class Jets::Application
11
11
  end
12
12
 
13
13
  def setup!
14
- load_inflections
15
14
  load_configs # load config object so following methods can use it
15
+ load_inflections
16
16
  setup_auto_load_paths
17
17
  load_routes
18
18
  end
@@ -40,11 +40,14 @@ class Jets::Application
40
40
  config.inflections.irregular = {}
41
41
 
42
42
  config.assets = ActiveSupport::OrderedOptions.new
43
- config.assets.folders = %w[packs images assets]
43
+ config.assets.folders = %w[public]
44
44
  config.assets.base_url = nil # IE: https://cloudfront.com/my/base/path
45
45
  config.assets.max_age = 3600
46
46
  config.assets.cache_control = nil # IE: public, max-age=3600 , max_age is a shorter way to set cache_control.
47
47
 
48
+ config.ruby = ActiveSupport::OrderedOptions.new
49
+ config.ruby.lazy_load = true # also set in config/environments files
50
+
48
51
  config
49
52
  end
50
53
  memoize :config
@@ -77,6 +80,15 @@ class Jets::Application
77
80
  set_aliases!
78
81
  normalize_env_vars!
79
82
  load_db_config
83
+ load_environments_config
84
+ end
85
+
86
+ def load_environments_config
87
+ env_file = "#{Jets.root}config/environments/#{Jets.env}.rb"
88
+ if File.exist?(env_file)
89
+ code = IO.read(env_file)
90
+ instance_eval(code)
91
+ end
80
92
  end
81
93
 
82
94
  # Use the shorter name in stack names, but use the full name when it
@@ -103,12 +115,25 @@ class Jets::Application
103
115
 
104
116
  config.project_namespace = Jets.project_namespace
105
117
 
106
- # Must set default iam_policy here instead of `def config` because we need access to
107
- # the project_namespace and if we call it from `def config` we get an infinite loop
118
+ # Must set default iam_policy here instead of `def config` because we project_namespace
119
+ # must have been set and if we call it from `def config` we get an infinite loop
120
+ set_iam_policy
121
+ end
122
+
123
+ def set_iam_policy
108
124
  config.iam_policy ||= self.class.default_iam_policy
109
125
  config.managed_policy_definitions ||= [] # default empty
110
126
  end
111
127
 
128
+ # After the mimimal template gets build, we need to reload it for the full stack
129
+ # creation. This is confusing to follow. Think we need to clean up the Jets.application
130
+ # singleton and make it more explicit?
131
+ def reload_iam_policy!
132
+ config.iam_policy = nil
133
+ config.managed_policy_definitions = nil
134
+ set_iam_policy
135
+ end
136
+
112
137
  def self.default_iam_policy
113
138
  project_namespace = Jets.project_namespace
114
139
  logs = {
@@ -116,7 +141,18 @@ class Jets::Application
116
141
  effect: "Allow",
117
142
  resource: "arn:aws:logs:#{Jets.aws.region}:#{Jets.aws.account}:log-group:/aws/lambda/#{project_namespace}-*",
118
143
  }
119
- policies = [logs]
144
+ s3_bucket = Jets.aws.s3_bucket
145
+ s3_readonly = {
146
+ action: ["s3:Get*", "s3:List*"],
147
+ effect: "Allow",
148
+ resource: "arn:aws:s3:::#{s3_bucket}*",
149
+ }
150
+ s3_bucket = {
151
+ action: ["s3:ListAllMyBuckets", "s3:HeadBucket"],
152
+ effect: "Allow",
153
+ resource: "arn:aws:s3:::*", # scoped to all buckets
154
+ }
155
+ policies = [logs, s3_readonly, s3_bucket]
120
156
 
121
157
  if Jets::Stack.has_resources?
122
158
  cloudformation = {
data/lib/jets/aws_info.rb CHANGED
@@ -52,6 +52,26 @@ module Jets
52
52
  end
53
53
  memoize :account
54
54
 
55
+ # If bucket does not exist, do not use the cache value and check for the bucket again.
56
+ # This is because we can build the app before deploying it for the first time.
57
+ # The deploy sequence ensure an minimal stack exists and will return a s3 bucket
58
+ # value for real deployments though, just not for the `jets build` only command.
59
+ BUCKET_DOES_NOT_YET_EXIST = "bucket-does-not-yet-exist" # use const to save from misspellings
60
+ @@s3_bucket = BUCKET_DOES_NOT_YET_EXIST
61
+ def s3_bucket
62
+ return "fake-test-s3-bucket" if ENV['TEST']
63
+ return @@s3_bucket unless @@s3_bucket == BUCKET_DOES_NOT_YET_EXIST
64
+
65
+ resp = cfn.describe_stacks(stack_name: Jets::Naming.parent_stack_name)
66
+ stack = resp.stacks.first
67
+ output = stack["outputs"].find { |o| o["output_key"] == "S3Bucket" }
68
+ @@s3_bucket = output["output_value"] # s3_bucket
69
+ rescue
70
+ # rescuing all exceptions in case here
71
+ # Here are the known ones: Aws::CloudFormation::Errors::ValidationError, Aws::CloudFormation::Errors::InvalidClientTokenId
72
+ BUCKET_DOES_NOT_YET_EXIST
73
+ end
74
+
55
75
  def test?
56
76
  ENV['TEST'] || ENV['CIRCLECI']
57
77
  end