jets 0.10.4 → 1.0.0

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.
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