jets 0.2.0 → 0.5.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 (292) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/bin/commit_docs.sh +26 -0
  3. data/.circleci/config.yml +126 -0
  4. data/.codebuild/README.md +57 -0
  5. data/.codebuild/bin/jets +3 -0
  6. data/.codebuild/buildspec-base.yml +14 -0
  7. data/.codebuild/integration.sh +54 -0
  8. data/.codebuild/jets.postman_collection.json +323 -0
  9. data/.codebuild/scripts/install-docker.sh +12 -0
  10. data/.codebuild/scripts/install-dynamodb-local.sh +22 -0
  11. data/.codebuild/scripts/install-java.sh +20 -0
  12. data/.codebuild/scripts/install-node.sh +4 -0
  13. data/.gitignore +3 -0
  14. data/.gitmodules +9 -0
  15. data/.python-version +1 -0
  16. data/.rspec +2 -0
  17. data/.ruby-version +1 -1
  18. data/CHANGELOG.md +3 -0
  19. data/Dockerfile +16 -0
  20. data/Dockerfile.base +53 -0
  21. data/Gemfile +8 -1
  22. data/Gemfile.lock +132 -28
  23. data/LICENSE.txt +1 -1
  24. data/Procfile +2 -0
  25. data/README.md +116 -17
  26. data/Rakefile +6 -0
  27. data/buildspec.yml +18 -0
  28. data/exe/jets +14 -0
  29. data/jets.gemspec +31 -3
  30. data/lib/jets.rb +56 -8
  31. data/lib/jets/application.rb +121 -0
  32. data/lib/jets/application/middleware.rb +23 -0
  33. data/lib/jets/aws_services.rb +71 -0
  34. data/lib/jets/booter.rb +95 -0
  35. data/lib/jets/builders.rb +6 -0
  36. data/lib/jets/builders/code_builder.rb +431 -0
  37. data/lib/jets/builders/deducer.rb +73 -0
  38. data/lib/jets/builders/gem_replacer.rb +154 -0
  39. data/lib/jets/builders/handler_generator.rb +76 -0
  40. data/lib/jets/builders/node-hello.js +73 -0
  41. data/lib/jets/builders/node-shim.js +151 -0
  42. data/lib/jets/cfn.rb +5 -4
  43. data/lib/jets/cfn/ship.rb +178 -0
  44. data/lib/jets/cfn/status.rb +208 -0
  45. data/lib/jets/cfn/template_builders.rb +21 -0
  46. data/lib/jets/cfn/template_builders/api_gateway_builder.rb +73 -0
  47. data/lib/jets/cfn/template_builders/api_gateway_deployment_builder.rb +38 -0
  48. data/lib/jets/cfn/template_builders/base_child_builder.rb +38 -0
  49. data/lib/jets/cfn/template_builders/controller_builder.rb +107 -0
  50. data/lib/jets/cfn/template_builders/function_builder.rb +20 -0
  51. data/lib/jets/cfn/template_builders/function_properties.rb +6 -0
  52. data/lib/jets/cfn/template_builders/function_properties/base_builder.rb +106 -0
  53. data/lib/jets/cfn/template_builders/function_properties/node_builder.rb +12 -0
  54. data/lib/jets/cfn/template_builders/function_properties/python_builder.rb +12 -0
  55. data/lib/jets/cfn/template_builders/function_properties/ruby_builder.rb +13 -0
  56. data/lib/jets/cfn/template_builders/interface.rb +91 -0
  57. data/lib/jets/cfn/template_builders/job_builder.rb +63 -0
  58. data/lib/jets/cfn/template_builders/parent_builder.rb +97 -0
  59. data/lib/jets/cfn/template_builders/rule_builder.rb +55 -0
  60. data/lib/jets/cfn/template_builders/templates/minimal-stack.yml +45 -0
  61. data/lib/jets/cfn/template_mappers.rb +23 -0
  62. data/lib/jets/cfn/template_mappers/api_gateway_deployment_mapper.rb +48 -0
  63. data/lib/jets/cfn/template_mappers/api_gateway_mapper.rb +4 -0
  64. data/lib/jets/cfn/template_mappers/child_mapper.rb +41 -0
  65. data/lib/jets/cfn/template_mappers/config_rule_mapper.rb +34 -0
  66. data/lib/jets/cfn/template_mappers/controller_mapper.rb +36 -0
  67. data/lib/jets/cfn/template_mappers/events_rule_mapper.rb +40 -0
  68. data/lib/jets/cfn/template_mappers/function_mapper.rb +4 -0
  69. data/lib/jets/cfn/template_mappers/gateway_method_mapper.rb +56 -0
  70. data/lib/jets/cfn/template_mappers/gateway_resource_mapper.rb +62 -0
  71. data/lib/jets/cfn/template_mappers/job_mapper.rb +4 -0
  72. data/lib/jets/cfn/template_mappers/lambda_function_mapper.rb +50 -0
  73. data/lib/jets/cfn/template_mappers/rule_mapper.rb +5 -0
  74. data/lib/jets/cli.rb +180 -15
  75. data/lib/jets/commands.rb +22 -0
  76. data/lib/jets/commands/base.rb +151 -0
  77. data/lib/jets/commands/build.rb +186 -0
  78. data/lib/jets/commands/call.rb +175 -0
  79. data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
  80. data/lib/jets/commands/call/autoload_guesser.rb +112 -0
  81. data/lib/jets/commands/call/base_guesser.rb +33 -0
  82. data/lib/jets/commands/call/guesser.rb +51 -0
  83. data/lib/jets/commands/console.rb +12 -0
  84. data/lib/jets/commands/db.rb +15 -0
  85. data/lib/jets/commands/db/environment-task.rake +3 -0
  86. data/lib/jets/commands/db/tasks.rb +30 -0
  87. data/lib/jets/commands/dbconsole.rb +131 -0
  88. data/lib/jets/commands/delete.rb +119 -0
  89. data/lib/jets/commands/deploy.rb +53 -0
  90. data/lib/jets/commands/dynamodb.rb +22 -0
  91. data/lib/jets/commands/dynamodb/migrate.rb +9 -0
  92. data/lib/jets/commands/dynamodb/migrator.rb +36 -0
  93. data/lib/jets/commands/help.rb +9 -0
  94. data/lib/jets/commands/help/build.md +1 -0
  95. data/lib/jets/commands/help/call.md +55 -0
  96. data/lib/jets/commands/help/console.md +4 -0
  97. data/lib/jets/commands/help/db/generate.md +8 -0
  98. data/lib/jets/commands/help/dbconsole.md +5 -0
  99. data/lib/jets/commands/help/delete.md +9 -0
  100. data/lib/jets/commands/help/deploy.md +5 -0
  101. data/lib/jets/commands/help/dynamodb/generate.md +50 -0
  102. data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
  103. data/lib/jets/commands/help/generate.md +5 -0
  104. data/lib/jets/commands/help/new.md +9 -0
  105. data/lib/jets/commands/help/process/controller.md +6 -0
  106. data/lib/jets/commands/help/process/function.md +5 -0
  107. data/lib/jets/commands/help/process/job.md +5 -0
  108. data/lib/jets/commands/help/process/rule.md +5 -0
  109. data/lib/jets/commands/help/routes.md +3 -0
  110. data/lib/jets/commands/help/server.md +6 -0
  111. data/lib/jets/commands/help/status.md +1 -0
  112. data/lib/jets/commands/help/url.md +5 -0
  113. data/lib/jets/commands/main.rb +111 -0
  114. data/lib/jets/commands/markdown.rb +8 -0
  115. data/lib/jets/commands/markdown/creator.rb +58 -0
  116. data/lib/jets/commands/markdown/index.rb +27 -0
  117. data/lib/jets/commands/markdown/page.rb +125 -0
  118. data/lib/jets/commands/markdown/shell.rb +11 -0
  119. data/lib/jets/commands/new.rb +110 -0
  120. data/lib/jets/commands/rake_command.rb +61 -0
  121. data/lib/jets/commands/rake_tasks.rb +45 -0
  122. data/lib/jets/commands/sequence.rb +44 -0
  123. data/lib/jets/commands/stack_info.rb +30 -0
  124. data/lib/jets/commands/templates/skeleton/.env +2 -0
  125. data/lib/jets/commands/templates/skeleton/.env.development.tt +3 -0
  126. data/lib/jets/commands/templates/skeleton/.env.test +3 -0
  127. data/lib/jets/commands/templates/skeleton/.gitignore +14 -0
  128. data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
  129. data/lib/jets/commands/templates/skeleton/Gemfile.tt +27 -0
  130. data/lib/jets/commands/templates/skeleton/Procfile +7 -0
  131. data/lib/jets/commands/templates/skeleton/README.md +4 -0
  132. data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
  133. data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
  134. data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
  135. data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +2 -0
  136. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
  137. data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
  138. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +24 -0
  139. data/lib/jets/commands/templates/skeleton/bin/ruby_server +18 -0
  140. data/lib/jets/commands/templates/skeleton/bin/ruby_server.rb +2 -0
  141. data/lib/jets/commands/templates/skeleton/config.ru +4 -0
  142. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +26 -0
  143. data/lib/jets/commands/templates/skeleton/config/database.yml.tt +27 -0
  144. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +25 -0
  145. data/lib/jets/commands/templates/skeleton/config/routes.rb +8 -0
  146. data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
  147. data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
  148. data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
  149. data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
  150. data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
  151. data/lib/jets/commands/templates/skeleton/public/index.html.tt +79 -0
  152. data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +18 -0
  153. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
  154. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
  155. data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +27 -0
  156. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +14 -0
  157. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
  158. data/lib/jets/commands/templates/webpacker/app/javascript/src/jets/crud.js +87 -0
  159. data/lib/jets/commands/url.rb +45 -0
  160. data/lib/jets/commands/webpacker_template.rb +19 -0
  161. data/lib/jets/controller.rb +9 -0
  162. data/lib/jets/controller/base.rb +50 -0
  163. data/lib/jets/controller/callbacks.rb +43 -0
  164. data/lib/jets/controller/layout.rb +17 -0
  165. data/lib/jets/controller/params.rb +53 -0
  166. data/lib/jets/controller/redirection.rb +55 -0
  167. data/lib/jets/controller/renderers.rb +5 -0
  168. data/lib/jets/controller/renderers/aws_proxy_renderer.rb +69 -0
  169. data/lib/jets/controller/renderers/base_renderer.rb +16 -0
  170. data/lib/jets/controller/renderers/template_renderer.rb +107 -0
  171. data/lib/jets/controller/rendering.rb +80 -0
  172. data/lib/jets/controller/request.rb +55 -0
  173. data/lib/jets/core.rb +81 -0
  174. data/lib/jets/default/application.rb +20 -0
  175. data/lib/jets/dotenv.rb +37 -0
  176. data/lib/jets/erb.rb +51 -0
  177. data/lib/jets/generator.rb +40 -0
  178. data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
  179. data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +39 -0
  180. data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
  181. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
  182. data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
  183. data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
  184. data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
  185. data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
  186. data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
  187. data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
  188. data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
  189. data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
  190. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +71 -0
  191. data/lib/jets/internal/app/controllers/jets/public_controller.rb +30 -0
  192. data/lib/jets/internal/app/controllers/jets/public_controller/python/show.py +47 -0
  193. data/lib/jets/internal/app/controllers/jets/public_controller/python/show.pyc +0 -0
  194. data/lib/jets/internal/app/controllers/jets/welcome_controller.rb +22 -0
  195. data/lib/jets/internal/app/controllers/jets/welcome_controller/python/index.py +24 -0
  196. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +52 -0
  197. data/lib/jets/job.rb +5 -0
  198. data/lib/jets/job/base.rb +29 -0
  199. data/lib/jets/job/dsl.rb +58 -0
  200. data/lib/jets/job/task.rb +17 -0
  201. data/lib/jets/klass.rb +71 -0
  202. data/lib/jets/lambda.rb +18 -0
  203. data/lib/jets/lambda/dsl.rb +153 -0
  204. data/lib/jets/lambda/function.rb +29 -0
  205. data/lib/jets/lambda/function_constructor.rb +60 -0
  206. data/lib/jets/lambda/functions.rb +22 -0
  207. data/lib/jets/lambda/task.rb +77 -0
  208. data/lib/jets/naming.rb +61 -0
  209. data/lib/jets/pascalize.rb +30 -0
  210. data/lib/jets/poly_fun.rb +61 -0
  211. data/lib/jets/poly_fun/base_executor.rb +129 -0
  212. data/lib/jets/poly_fun/lambda_executor.rb +16 -0
  213. data/lib/jets/poly_fun/node_error.rb +8 -0
  214. data/lib/jets/poly_fun/node_executor.rb +54 -0
  215. data/lib/jets/poly_fun/python_error.rb +8 -0
  216. data/lib/jets/poly_fun/python_executor.rb +23 -0
  217. data/lib/jets/preheat.rb +72 -0
  218. data/lib/jets/processors.rb +4 -0
  219. data/lib/jets/processors/deducer.rb +54 -0
  220. data/lib/jets/processors/main_processor.rb +57 -0
  221. data/lib/jets/rails_overrides.rb +4 -0
  222. data/lib/jets/rails_overrides/asset_tag_helper.rb +41 -0
  223. data/lib/jets/rails_overrides/common_methods.rb +13 -0
  224. data/lib/jets/rails_overrides/rendering_helper.rb +26 -0
  225. data/lib/jets/rails_overrides/url_helper.rb +26 -0
  226. data/lib/jets/route.rb +145 -0
  227. data/lib/jets/router.rb +115 -0
  228. data/lib/jets/ruby_server.rb +91 -0
  229. data/lib/jets/rule.rb +5 -0
  230. data/lib/jets/rule/base.rb +19 -0
  231. data/lib/jets/rule/dsl.rb +64 -0
  232. data/lib/jets/rule/task.rb +44 -0
  233. data/lib/jets/server.rb +16 -0
  234. data/lib/jets/server/api_gateway.rb +39 -0
  235. data/lib/jets/server/lambda_aws_proxy.rb +122 -0
  236. data/lib/jets/server/route_matcher.rb +96 -0
  237. data/lib/jets/server/timing_middleware.rb +16 -0
  238. data/lib/jets/server/webpacker_setup.rb +7 -0
  239. data/lib/jets/timing.rb +65 -0
  240. data/lib/jets/timing/report.rb +82 -0
  241. data/lib/jets/util.rb +7 -12
  242. data/lib/jets/version.rb +1 -1
  243. data/support/clean +3 -0
  244. data/support/console +3 -0
  245. metadata +473 -76
  246. data/bin/jets +0 -14
  247. data/lib/jets/base_controller.rb +0 -54
  248. data/lib/jets/build.rb +0 -46
  249. data/lib/jets/build/handler_generator.rb +0 -46
  250. data/lib/jets/build/lambda_deducer.rb +0 -23
  251. data/lib/jets/build/templates/handler.js +0 -149
  252. data/lib/jets/build/traveling_ruby.rb +0 -133
  253. data/lib/jets/cfn/base.rb +0 -17
  254. data/lib/jets/cfn/builder.rb +0 -53
  255. data/lib/jets/cfn/namer.rb +0 -30
  256. data/lib/jets/cli/help.rb +0 -19
  257. data/lib/jets/command.rb +0 -25
  258. data/lib/jets/process.rb +0 -18
  259. data/lib/jets/process/base_processor.rb +0 -23
  260. data/lib/jets/process/controller_processor.rb +0 -36
  261. data/lib/jets/process/help.rb +0 -11
  262. data/lib/jets/process/processor_deducer.rb +0 -51
  263. data/lib/jets/project.rb +0 -23
  264. data/notes/design.md +0 -107
  265. data/notes/faq.md +0 -3
  266. data/notes/lambda_ruby_info.md +0 -34
  267. data/notes/traveling-ruby-packaging-jets.md +0 -26
  268. data/notes/traveling-ruby-packaging.md +0 -103
  269. data/notes/traveling-ruby-structure.md +0 -6
  270. data/notes/traveling-ruby.md +0 -82
  271. data/spec/fixtures/classes.rb +0 -5
  272. data/spec/fixtures/project/.gitignore +0 -3
  273. data/spec/fixtures/project/.ruby-version +0 -1
  274. data/spec/fixtures/project/Gemfile +0 -4
  275. data/spec/fixtures/project/Gemfile.lock +0 -23
  276. data/spec/fixtures/project/app/controllers/application_controller.rb +0 -2
  277. data/spec/fixtures/project/app/controllers/posts_controller.rb +0 -12
  278. data/spec/fixtures/project/bin/jets +0 -22
  279. data/spec/fixtures/project/config/routes.rb +0 -6
  280. data/spec/fixtures/project/handlers/controllers/posts.js +0 -212
  281. data/spec/lib/cli_spec.rb +0 -20
  282. data/spec/lib/jets/base_controller_spec.rb +0 -18
  283. data/spec/lib/jets/build/handler_generator_spec.rb +0 -20
  284. data/spec/lib/jets/build/lambda_deducer_spec.rb +0 -15
  285. data/spec/lib/jets/build_spec.rb +0 -34
  286. data/spec/lib/jets/cfn/builder_spec.rb +0 -18
  287. data/spec/lib/jets/cfn/namer_spec.rb +0 -16
  288. data/spec/lib/jets/process/controller_processor_spec.rb +0 -22
  289. data/spec/lib/jets/process/infer_spec.rb +0 -24
  290. data/spec/lib/jets/process_spec.rb +0 -18
  291. data/spec/lib/jets/project_spec.rb +0 -14
  292. data/spec/spec_helper.rb +0 -28
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1960e461a36b47bd872fe91a5c58569569c4a1e9
4
- data.tar.gz: cb9d30dfd4cf492849a3927afcaf6d4297defa90
2
+ SHA256:
3
+ metadata.gz: 6c51b1f5b79f92cc5757f4305ab39cc9ea7adb0bdbe1342de962f9aa9bf1a0a2
4
+ data.tar.gz: a58d4a440dd3056f5128976ac90721bbaa3fde485538fc0cf46727731d414fe2
5
5
  SHA512:
6
- metadata.gz: 65362fbb12abc9d06b55af768278ecaaeebcd5467d444c97a2de4b733cf802daa078f81b3d493e1ca383e7e8a858aa5fd54e1da11e28bc2dcd88e112df56b608
7
- data.tar.gz: c6083ef3edcc89f4354d3f84b4cd2b8c079fcad914164f9c1862d8055f10df4fdc8d9c489e54141b1d9d51ca85d1a69c09e054782e14595f8b8d65ae7f26fed0
6
+ metadata.gz: d6aa5ae72821bf10b89f128bf58e22a0ee568e0d45b706a4369d334c94d6a7072246f1390097351f5d2f62c4dbfc91e5166cc10b53196e658a6c03e8b92a3b61
7
+ data.tar.gz: '099f0a7ea58d4e7809f38c6d7bcca84a7a1f24c884a0ce0b2a0d52b9be66c876ded1220c63d60628ee85f72f3760bd9d29e91138acfb136d59d2255c995353b4'
@@ -0,0 +1,26 @@
1
+ #!/bin/bash -eux
2
+
3
+ # Even though specs also generate docs, lets run again to ensure clean slate
4
+ rake docs
5
+
6
+ out=$(git status docs)
7
+ if [[ "$out" = *"nothing to commit"* ]]; then
8
+ exit
9
+ fi
10
+
11
+ COMMIT_MESSAGE="docs updated by circleci"
12
+
13
+ # If the last commit already updated the docs, then exit.
14
+ # Preventable measure to avoid infinite loop.
15
+ if git log -1 --pretty=oneline | grep "$COMMIT_MESSAGE" ; then
16
+ exit
17
+ fi
18
+
19
+ # If reach here, we have some changes on docs that we should commit.
20
+ # Even though s
21
+ git add docs
22
+ git commit -m "$COMMIT_MESSAGE"
23
+
24
+ # https://makandracards.com/makandra/12107-git-show-current-branch-name-only
25
+ current_branch=$(git rev-parse --abbrev-ref HEAD)
26
+ git push origin "$current_branch"
@@ -0,0 +1,126 @@
1
+ # Ruby CircleCI 2.0 configuration file
2
+ #
3
+ # Check https://circleci.com/docs/2.0/language-ruby/ for more details
4
+ #
5
+ version: 2
6
+ jobs:
7
+ build:
8
+ docker:
9
+ # specify the version you desire here
10
+ - image: circleci/ruby:2.5.0-node-browsers
11
+
12
+ # Specify service dependencies here if necessary
13
+ # CircleCI maintains a library of pre-built images
14
+ # documented at https://circleci.com/docs/2.0/circleci-images/
15
+ # - image: circleci/postgres:9.4
16
+
17
+ working_directory: ~/repo
18
+
19
+ steps:
20
+ - checkout
21
+
22
+ - run:
23
+ name: submodule sync
24
+ command: |
25
+ git submodule sync
26
+ git submodule update --init
27
+
28
+ # Download and cache dependencies
29
+ - restore_cache:
30
+ keys:
31
+ - v2-dependencies-{{ checksum "Gemfile.lock" }}
32
+ # fallback to using the latest cache if no exact match is found
33
+ - v2-dependencies-
34
+
35
+ - run:
36
+ name: install dependencies
37
+ command: |
38
+ bundle install --jobs=4 --retry=3 --path vendor/bundle
39
+
40
+ - save_cache:
41
+ paths:
42
+ - ./vendor/bundle
43
+ key: v2-dependencies-{{ checksum "Gemfile.lock" }}
44
+
45
+ # Database setup
46
+ # - run: bundle exec rake db:create
47
+ # - run: bundle exec rake db:schema:load
48
+
49
+ - run:
50
+ name: install dynamodb-local
51
+ command: |
52
+ whoami > /tmp/whoami.txt
53
+
54
+ mkdir ~/dynamodb_local_latest
55
+ cd ~/dynamodb_local_latest
56
+ wget https://s3-us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_latest.tar.gz
57
+ tar zxf dynamodb_local_latest.tar.gz
58
+ cat >~/dynamodb-local <<EOL
59
+ #!/bin/sh
60
+ exec java -Djava.library.path=~/dynamodb_local_latest/DynamoDBLocal_lib -jar ~/dynamodb_local_latest/DynamoDBLocal.jar -sharedDb
61
+ EOL
62
+
63
+ chmod a+x ~/dynamodb-local
64
+ sudo mv ~/dynamodb-local /usr/local/bin/dynamodb-local
65
+
66
+ - run:
67
+ name: start dynamodb-local
68
+ command: dynamodb-local
69
+ background: true
70
+
71
+ # run tests!
72
+ - run:
73
+ name: run tests
74
+ command: |
75
+ mkdir /tmp/test-results
76
+
77
+ cat >.rspec <<EOL
78
+ --format documentation
79
+ --exclude-pattern spec/fixtures/apps/**/*
80
+ --format RspecJunitFormatter \
81
+ --out /tmp/test-results/rspec.xml \
82
+ --require spec_helper
83
+ EOL
84
+
85
+ bundle exec rspec
86
+
87
+ # commit_docs.sh requires this
88
+ - run:
89
+ name: configure git
90
+ command: |
91
+ git config --global user.email "tongueroo@gmail.com"
92
+ git config --global user.name "Tung Nguyen"
93
+
94
+ - run:
95
+ name: commit cli reference docs
96
+ command: |
97
+ chmod a+x -R .circleci/bin
98
+ .circleci/bin/commit_docs.sh
99
+
100
+ - run:
101
+ name: install awscli
102
+ command: sudo apt-get update && sudo apt-get install -y awscli groff
103
+
104
+ - run:
105
+ name: configure awscli
106
+ command: |
107
+ mkdir ~/.aws
108
+
109
+ cat >~/.aws/config <<EOL
110
+ [default]
111
+ region = ${AWS_REGION}
112
+ output = json
113
+ EOL
114
+
115
+ cat >~/.aws/credentials <<EOL
116
+ [default]
117
+ aws_secret_access_key = ${AWS_SECRET_ACCESS_KEY}
118
+ aws_access_key_id = ${AWS_ACCESS_KEY_ID}
119
+ EOL
120
+
121
+ # collect reports
122
+ - store_test_results:
123
+ path: /tmp/test-results
124
+ - store_artifacts:
125
+ path: /tmp/test-results
126
+ destination: test-results
@@ -0,0 +1,57 @@
1
+ # Code Build Commands
2
+
3
+ ## The code definitions are stored in the codebuild s3 bucket.
4
+
5
+ aws s3 cp .codebuild/definitions/jets_base.json s3://$S3_BUCKET/codebuild/definitions/jets_base.json
6
+ aws s3 cp .codebuild/definitions/jets_main.json s3://$S3_BUCKET/codebuild/definitions/jets_main.json
7
+
8
+ ## JetsBase
9
+
10
+ The JetsBase codebuild project projects builds the Docker base image and pushes it to Docker hub. Here are the commands to manage the codebuild project.
11
+
12
+ aws codebuild create-project --cli-input-json file://.codebuild/definitions/jets_base.json
13
+ aws codebuild update-project --cli-input-json file://.codebuild/definitions/jets_base.json
14
+
15
+ aws codebuild start-build --project-name JetsBase --source-version codebuild
16
+
17
+ aws codebuild batch-get-projects --names JetsBase
18
+ aws codebuild list-builds-for-project --project-name JetsBase
19
+
20
+ BUILD_ID=$(aws codebuild list-builds-for-project --project-name JetsBase | jq -r '.ids[0]')
21
+ aws codebuild batch-get-builds --ids $BUILD_ID
22
+
23
+ STREAM=$(aws codebuild batch-get-builds --ids $BUILD_ID | jq -r '.builds[0].logs.streamName')
24
+ cw tail -f /aws/codebuild/JetsBase $STREAM
25
+
26
+ If you want to manually build the Docker base image. Run:
27
+
28
+ docker build -t tongueroo/jets:base -f Dockerfile.base .
29
+ docker push tongueroo/jets:base
30
+
31
+ ## JetsMain
32
+
33
+ aws codebuild create-project --cli-input-json file://.codebuild/definitions/jets_main.json
34
+ aws codebuild update-project --cli-input-json file://.codebuild/definitions/jets_main.json
35
+
36
+ aws codebuild start-build --project-name JetsMain --source-version codebuild
37
+
38
+ aws codebuild batch-get-projects --names JetsMain
39
+ aws codebuild list-builds-for-project --project-name JetsMain
40
+
41
+ BUILD_ID=$(aws codebuild list-builds-for-project --project-name JetsMain | jq -r '.ids[0]')
42
+ aws codebuild batch-get-builds --ids $BUILD_ID
43
+
44
+ STREAM=$(aws codebuild batch-get-builds --ids $BUILD_ID | jq -r '.builds[0].logs.streamName')
45
+ cw tail -f /aws/codebuild/JetsMain $STREAM
46
+
47
+ ## Run CodeBuild Locally
48
+
49
+ time docker run -it -v /var/run/docker.sock:/var/run/docker.sock \
50
+ -e "IMAGE_NAME=tongueroo/jets:base" \
51
+ -e "ARTIFACTS=/tmp/artifacts" \
52
+ -e "SOURCE=/home/ec2-user/environment/jets" \
53
+ amazon/aws-codebuild-local
54
+
55
+ ## Docker base image
56
+
57
+
@@ -0,0 +1,3 @@
1
+ #!/bin/bash -eux
2
+
3
+ exec $CODEBUILD_SRC_DIR/exe/jets "$@"
@@ -0,0 +1,14 @@
1
+ version: 0.2
2
+
3
+ phases:
4
+ build:
5
+ commands:
6
+ - echo Build started on `date`
7
+ - mkdir ~/.docker
8
+ - aws s3 cp s3://$S3_BUCKET_DOCKER_CONFIG/codebuild/jets/docker-config.json ~/.docker/config.json
9
+ - docker build -t tongueroo/jets:base -f Dockerfile.base .
10
+ - docker push tongueroo/jets
11
+
12
+ artifacts:
13
+ files:
14
+ - README.md
@@ -0,0 +1,54 @@
1
+ #!/bin/bash -exu
2
+
3
+ cp .codebuild/bin/jets /usr/local/bin/jets
4
+ chmod a+x /usr/local/bin/jets
5
+ export PATH=/usr/local/bin:$PATH
6
+
7
+ which jets
8
+
9
+ APP_NAME=demo$(date +%s)
10
+ jets new $APP_NAME # jets new runs bundle and webpacker:install
11
+ cd $APP_NAME
12
+
13
+ cat >>.env.development <<EOL
14
+ DB_USER=$DB_USER
15
+ DB_PASS=$DB_PASS
16
+ DB_HOST=$DB_HOST
17
+ EOL
18
+
19
+ jets generate scaffold Post title:string
20
+ # The DB_ environment variables are set up in the circleci environment variables
21
+ # website GUI under project settings
22
+ jets db:create db:migrate
23
+
24
+ jets deploy
25
+
26
+ APP_URL=$(jets url)
27
+ cat > jets.postman_environment.json <<EOL
28
+ {
29
+ "id": "f50e05e5-c6dd-4707-9270-82c706b2bcef",
30
+ "name": "Jets Test1",
31
+ "values": [
32
+ {
33
+ "key": "BASE_URL",
34
+ "value": "${APP_URL}/",
35
+ "description": "",
36
+ "type": "text",
37
+ "enabled": true
38
+ }
39
+ ],
40
+ "_postman_variable_scope": "environment",
41
+ "_postman_exported_at": "2018-08-06T01:39:56.523Z",
42
+ "_postman_exported_using": "Postman/6.2.3"
43
+ }
44
+ EOL
45
+ cp $CODEBUILD_SRC_DIR/.codebuild/jets.postman_collection.json .
46
+
47
+ npm install -g newman
48
+ newman run jets.postman_collection.json -e jets.postman_environment.json
49
+
50
+ # cleanup the database
51
+ jets db:drop
52
+
53
+ # delete jets project
54
+ jets delete --sure --no-wait
@@ -0,0 +1,323 @@
1
+ {
2
+ "info": {
3
+ "_postman_id": "c8ca4bd7-c5f4-4e75-95a3-e50290a06661",
4
+ "name": "Jets Integration Tests",
5
+ "description": "Tests basic CRUD",
6
+ "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
7
+ },
8
+ "item": [
9
+ {
10
+ "_postman_id": "154ebb9d-4235-4d4b-9984-d5e3ab3c20d5",
11
+ "name": "PostsController#index",
12
+ "event": [
13
+ {
14
+ "listen": "test",
15
+ "script": {
16
+ "id": "f91acb11-eee6-4c83-956e-ef21f4adf246",
17
+ "type": "text/javascript",
18
+ "exec": [
19
+ "pm.test(\"response is ok\", function () {",
20
+ " pm.response.to.have.status(200);",
21
+ "});",
22
+ "",
23
+ "pm.test(\"Content-Type is present\", function () {",
24
+ " pm.response.to.have.header(\"Content-Type\");",
25
+ "});"
26
+ ]
27
+ }
28
+ }
29
+ ],
30
+ "request": {
31
+ "method": "GET",
32
+ "header": [],
33
+ "body": {},
34
+ "url": {
35
+ "raw": "{{BASE_URL}}posts",
36
+ "host": [
37
+ "{{BASE_URL}}posts"
38
+ ]
39
+ }
40
+ },
41
+ "response": []
42
+ },
43
+ {
44
+ "_postman_id": "7c6d9207-3303-4d9c-8628-3ec9fdbdd56f",
45
+ "name": "PostsController#create",
46
+ "event": [
47
+ {
48
+ "listen": "test",
49
+ "script": {
50
+ "id": "4f349f21-09e6-436d-bd70-89324ad334e8",
51
+ "type": "text/javascript",
52
+ "exec": [
53
+ "pm.test(\"response is ok\", function () {",
54
+ " pm.response.to.have.status(200);",
55
+ "});",
56
+ "",
57
+ "pm.test(\"Content-Type is present\", function () {",
58
+ " pm.response.to.have.header(\"Content-Type\");",
59
+ "});",
60
+ "",
61
+ "pm.test(\"Body matches string\", function () {",
62
+ " pm.expect(pm.response.text()).to.include(\"test1\");",
63
+ "});"
64
+ ]
65
+ }
66
+ }
67
+ ],
68
+ "request": {
69
+ "method": "POST",
70
+ "header": [
71
+ {
72
+ "key": "Content-Type",
73
+ "value": "application/x-www-form-urlencoded"
74
+ }
75
+ ],
76
+ "body": {
77
+ "mode": "raw",
78
+ "raw": "utf8=%E2%9C%93&post%5Btitle%5D=test1&post%5Bbody%5D=test1&commit=Submit"
79
+ },
80
+ "url": {
81
+ "raw": "{{BASE_URL}}posts",
82
+ "host": [
83
+ "{{BASE_URL}}posts"
84
+ ]
85
+ }
86
+ },
87
+ "response": []
88
+ },
89
+ {
90
+ "_postman_id": "4be8797b-1da7-4386-96b9-f2a2d3bfff16",
91
+ "name": "PostsController#new",
92
+ "event": [
93
+ {
94
+ "listen": "test",
95
+ "script": {
96
+ "id": "7ece5182-aacd-45b9-ba1e-52552f5843cb",
97
+ "type": "text/javascript",
98
+ "exec": [
99
+ "pm.test(\"response is ok\", function () {",
100
+ " pm.response.to.have.status(200);",
101
+ "});",
102
+ "",
103
+ "pm.test(\"Content-Type is present\", function () {",
104
+ " pm.response.to.have.header(\"Content-Type\");",
105
+ "});",
106
+ ""
107
+ ]
108
+ }
109
+ }
110
+ ],
111
+ "request": {
112
+ "method": "GET",
113
+ "header": [],
114
+ "body": {},
115
+ "url": {
116
+ "raw": "{{BASE_URL}}posts/new",
117
+ "host": [
118
+ "{{BASE_URL}}posts"
119
+ ],
120
+ "path": [
121
+ "new"
122
+ ]
123
+ }
124
+ },
125
+ "response": []
126
+ },
127
+ {
128
+ "_postman_id": "8389acfe-5b9a-489e-b9ff-97cc32e9a899",
129
+ "name": "PostsController#edit",
130
+ "event": [
131
+ {
132
+ "listen": "test",
133
+ "script": {
134
+ "id": "f3ac4857-58f8-40b0-8161-d2e2d6d921f3",
135
+ "type": "text/javascript",
136
+ "exec": [
137
+ "pm.test(\"response is ok\", function () {",
138
+ " pm.response.to.have.status(200);",
139
+ "});",
140
+ "",
141
+ "pm.test(\"Content-Type is present\", function () {",
142
+ " pm.response.to.have.header(\"Content-Type\");",
143
+ "});",
144
+ ""
145
+ ]
146
+ }
147
+ }
148
+ ],
149
+ "request": {
150
+ "method": "GET",
151
+ "header": [],
152
+ "body": {},
153
+ "url": {
154
+ "raw": "{{BASE_URL}}posts/1/edit",
155
+ "host": [
156
+ "{{BASE_URL}}posts"
157
+ ],
158
+ "path": [
159
+ "1",
160
+ "edit"
161
+ ]
162
+ }
163
+ },
164
+ "response": []
165
+ },
166
+ {
167
+ "_postman_id": "22161f8e-1387-44b0-a890-edda95e8ebaf",
168
+ "name": "PostsController#update",
169
+ "event": [
170
+ {
171
+ "listen": "test",
172
+ "script": {
173
+ "id": "f597eb8f-34ea-461b-8793-3c257480f315",
174
+ "type": "text/javascript",
175
+ "exec": [
176
+ "pm.test(\"response is ok\", function () {",
177
+ " pm.response.to.have.status(200);",
178
+ "});",
179
+ "",
180
+ "pm.test(\"Content-Type is present\", function () {",
181
+ " pm.response.to.have.header(\"Content-Type\");",
182
+ "});",
183
+ "",
184
+ "pm.test(\"Success json response\", function () {",
185
+ " var jsonData = pm.response.json();",
186
+ " pm.expect(jsonData.success).to.eql(true);",
187
+ "});"
188
+ ]
189
+ }
190
+ }
191
+ ],
192
+ "request": {
193
+ "method": "PUT",
194
+ "header": [
195
+ {
196
+ "key": "Content-Type",
197
+ "value": "application/x-www-form-urlencoded; charset=UTF-8"
198
+ }
199
+ ],
200
+ "body": {
201
+ "mode": "raw",
202
+ "raw": "utf8=%E2%9C%93&_method=put&post%5Btitle%5D=test1edit&post%5Bbody%5D=test1"
203
+ },
204
+ "url": {
205
+ "raw": "{{BASE_URL}}posts/1",
206
+ "host": [
207
+ "{{BASE_URL}}posts"
208
+ ],
209
+ "path": [
210
+ "1"
211
+ ]
212
+ }
213
+ },
214
+ "response": []
215
+ },
216
+ {
217
+ "_postman_id": "17a8cbb5-ead2-4949-9103-4dba5fb65309",
218
+ "name": "PostsController#create2",
219
+ "event": [
220
+ {
221
+ "listen": "test",
222
+ "script": {
223
+ "id": "100b5476-2194-4d25-8170-3b3416b2c9e2",
224
+ "type": "text/javascript",
225
+ "exec": [
226
+ "pm.test(\"response is ok\", function () {",
227
+ " pm.response.to.have.status(200);",
228
+ "});",
229
+ "",
230
+ "pm.test(\"Content-Type is present\", function () {",
231
+ " pm.response.to.have.header(\"Content-Type\");",
232
+ "});",
233
+ "",
234
+ "pm.test(\"Body matches string\", function () {",
235
+ " pm.expect(pm.response.text()).to.include(\"test2\");",
236
+ "});"
237
+ ]
238
+ }
239
+ }
240
+ ],
241
+ "request": {
242
+ "method": "POST",
243
+ "header": [
244
+ {
245
+ "key": "Content-Type",
246
+ "value": "application/x-www-form-urlencoded"
247
+ }
248
+ ],
249
+ "body": {
250
+ "mode": "raw",
251
+ "raw": "utf8=%E2%9C%93&post%5Btitle%5D=test2&post%5Bbody%5D=test2&commit=Submit"
252
+ },
253
+ "url": {
254
+ "raw": "{{BASE_URL}}posts",
255
+ "host": [
256
+ "{{BASE_URL}}posts"
257
+ ]
258
+ }
259
+ },
260
+ "response": []
261
+ },
262
+ {
263
+ "_postman_id": "c18f1c89-b15d-429a-bc1f-e58630802cba",
264
+ "name": "PostsController#delete",
265
+ "event": [
266
+ {
267
+ "listen": "test",
268
+ "script": {
269
+ "id": "530e0c60-e3c3-4812-82d9-f3072ddb3995",
270
+ "type": "text/javascript",
271
+ "exec": [
272
+ "pm.test(\"response is ok\", function () {",
273
+ " pm.response.to.have.status(200);",
274
+ "});",
275
+ "",
276
+ "pm.test(\"Content-Type is present\", function () {",
277
+ " pm.response.to.have.header(\"Content-Type\");",
278
+ "});",
279
+ ""
280
+ ]
281
+ }
282
+ }
283
+ ],
284
+ "request": {
285
+ "method": "DELETE",
286
+ "header": [],
287
+ "body": {},
288
+ "url": {
289
+ "raw": "{{BASE_URL}}posts/2",
290
+ "host": [
291
+ "{{BASE_URL}}posts"
292
+ ],
293
+ "path": [
294
+ "2"
295
+ ]
296
+ }
297
+ },
298
+ "response": []
299
+ }
300
+ ],
301
+ "event": [
302
+ {
303
+ "listen": "prerequest",
304
+ "script": {
305
+ "id": "a85e6949-f311-4c79-923c-46b55b7fb3e6",
306
+ "type": "text/javascript",
307
+ "exec": [
308
+ ""
309
+ ]
310
+ }
311
+ },
312
+ {
313
+ "listen": "test",
314
+ "script": {
315
+ "id": "7b5709b5-7a77-43b6-acfb-abee4a9362ff",
316
+ "type": "text/javascript",
317
+ "exec": [
318
+ ""
319
+ ]
320
+ }
321
+ }
322
+ ]
323
+ }