jets.benforeva 3.0.17.pre.mount.pre.fix
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 +7 -0
- data/.circleci/config.yml +92 -0
- data/.cody/README.md +13 -0
- data/.cody/docs/bin/build.sh +7 -0
- data/.cody/docs/bin/bundler_setup.sh +8 -0
- data/.cody/docs/bin/cli_docs.sh +6 -0
- data/.cody/docs/bin/git_commit.sh +27 -0
- data/.cody/docs/bin/git_setup.sh +12 -0
- data/.cody/docs/bin/subnav.sh +14 -0
- data/.cody/docs/buildspec.yml +10 -0
- data/.cody/docs/project.rb +10 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +84 -0
- data/.github/ISSUE_TEMPLATE/documentation.md +27 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +64 -0
- data/.github/ISSUE_TEMPLATE/question.md +14 -0
- data/.github/ISSUE_TEMPLATE.md +7 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +50 -0
- data/.gitignore +24 -0
- data/.gitmodules +0 -0
- data/.python-version +1 -0
- data/.rspec +4 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +1035 -0
- data/CONDUCT.md +1 -0
- data/CONTRIBUTING.md +1 -0
- data/Dockerfile +16 -0
- data/Dockerfile.base +53 -0
- data/Gemfile +14 -0
- data/Guardfile +22 -0
- data/LICENSE.txt +22 -0
- data/Procfile +2 -0
- data/README.md +212 -0
- data/Rakefile +24 -0
- data/backers.md +20 -0
- data/bin/release +9 -0
- data/exe/jets.benforeva +14 -0
- data/jets.benforeva.gemspec +71 -0
- data/lib/jets/application/defaults.rb +200 -0
- data/lib/jets/application.rb +240 -0
- data/lib/jets/authorizer/base.rb +36 -0
- data/lib/jets/authorizer/dsl.rb +69 -0
- data/lib/jets/authorizer/helpers/iam_helper.rb +47 -0
- data/lib/jets/autoloaders.rb +112 -0
- data/lib/jets/aws_info.rb +111 -0
- data/lib/jets/aws_services/global_memoist.rb +57 -0
- data/lib/jets/aws_services/s3_bucket.rb +34 -0
- data/lib/jets/aws_services/stack_status.rb +64 -0
- data/lib/jets/aws_services.rb +95 -0
- data/lib/jets/booter.rb +167 -0
- data/lib/jets/builders/code_builder.rb +410 -0
- data/lib/jets/builders/code_size.rb +57 -0
- data/lib/jets/builders/gem_replacer.rb +89 -0
- data/lib/jets/builders/handler_generator.rb +186 -0
- data/lib/jets/builders/lambda_layer.rb +68 -0
- data/lib/jets/builders/md5.rb +60 -0
- data/lib/jets/builders/md5_zip.rb +61 -0
- data/lib/jets/builders/purger.rb +35 -0
- data/lib/jets/builders/rack_packager.rb +51 -0
- data/lib/jets/builders/rackup_wrappers/rackup +19 -0
- data/lib/jets/builders/rackup_wrappers/rackup.rb +7 -0
- data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +16 -0
- data/lib/jets/builders/reconfigure_rails.rb +114 -0
- data/lib/jets/builders/ruby_packager.rb +235 -0
- data/lib/jets/builders/shim_vars/app.rb +78 -0
- data/lib/jets/builders/shim_vars/base.rb +25 -0
- data/lib/jets/builders/shim_vars/shared.rb +37 -0
- data/lib/jets/builders/templates/handler.rb +12 -0
- data/lib/jets/builders/tidy.rb +107 -0
- data/lib/jets/builders/util.rb +31 -0
- data/lib/jets/bundle.rb +88 -0
- data/lib/jets/camelizer.rb +4 -0
- data/lib/jets/cfn/builders/api_deployment_builder.rb +56 -0
- data/lib/jets/cfn/builders/api_gateway_builder.rb +123 -0
- data/lib/jets/cfn/builders/api_resources_builder.rb +44 -0
- data/lib/jets/cfn/builders/authorizer_builder.rb +67 -0
- data/lib/jets/cfn/builders/base_child_builder.rb +69 -0
- data/lib/jets/cfn/builders/controller_builder.rb +50 -0
- data/lib/jets/cfn/builders/function_builder.rb +14 -0
- data/lib/jets/cfn/builders/interface.rb +133 -0
- data/lib/jets/cfn/builders/job_builder.rb +14 -0
- data/lib/jets/cfn/builders/parent_builder/stagger.rb +34 -0
- data/lib/jets/cfn/builders/parent_builder.rb +130 -0
- data/lib/jets/cfn/builders/rule_builder.rb +24 -0
- data/lib/jets/cfn/builders/shared_builder.rb +14 -0
- data/lib/jets/cfn/builders/util/source.rb +21 -0
- data/lib/jets/cfn/built_template.rb +15 -0
- data/lib/jets/cfn/ship.rb +188 -0
- data/lib/jets/cfn/status.rb +10 -0
- data/lib/jets/cfn/template_source.rb +61 -0
- data/lib/jets/cfn/upload.rb +157 -0
- data/lib/jets/cli.rb +208 -0
- data/lib/jets/commands/base.rb +145 -0
- data/lib/jets/commands/build.rb +252 -0
- data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
- data/lib/jets/commands/call/autoload_guesser.rb +136 -0
- data/lib/jets/commands/call/base_guesser.rb +62 -0
- data/lib/jets/commands/call/guesser.rb +48 -0
- data/lib/jets/commands/call.rb +182 -0
- data/lib/jets/commands/clean/base.rb +24 -0
- data/lib/jets/commands/clean/build.rb +13 -0
- data/lib/jets/commands/clean/log.rb +111 -0
- data/lib/jets/commands/clean.rb +19 -0
- data/lib/jets/commands/configure.rb +51 -0
- data/lib/jets/commands/console.rb +12 -0
- data/lib/jets/commands/db/environment-task.rake +3 -0
- data/lib/jets/commands/db/tasks/dummy/app.rb +25 -0
- data/lib/jets/commands/db/tasks/dummy/config.rb +14 -0
- data/lib/jets/commands/db/tasks.rb +34 -0
- data/lib/jets/commands/db.rb +13 -0
- data/lib/jets/commands/dbconsole.rb +134 -0
- data/lib/jets/commands/delete.rb +136 -0
- data/lib/jets/commands/deploy.rb +137 -0
- data/lib/jets/commands/dotenv.rb +9 -0
- data/lib/jets/commands/dynamodb/migrate.rb +9 -0
- data/lib/jets/commands/dynamodb/migrator.rb +36 -0
- data/lib/jets/commands/dynamodb.rb +19 -0
- data/lib/jets/commands/gems.rb +13 -0
- data/lib/jets/commands/help/build.md +6 -0
- data/lib/jets/commands/help/call.md +69 -0
- data/lib/jets/commands/help/clean/build.md +5 -0
- data/lib/jets/commands/help/clean/log.md +5 -0
- data/lib/jets/commands/help/console.md +18 -0
- data/lib/jets/commands/help/db/generate.md +8 -0
- data/lib/jets/commands/help/dbconsole.md +9 -0
- data/lib/jets/commands/help/degenerate.md +16 -0
- data/lib/jets/commands/help/delete.md +22 -0
- data/lib/jets/commands/help/deploy.md +32 -0
- data/lib/jets/commands/help/dynamodb/generate.md +52 -0
- data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
- data/lib/jets/commands/help/gems/check.md +6 -0
- data/lib/jets/commands/help/generate.md +28 -0
- data/lib/jets/commands/help/import/rack.md +13 -0
- data/lib/jets/commands/help/import/rails.md +11 -0
- data/lib/jets/commands/help/new.md +42 -0
- data/lib/jets/commands/help/routes.md +16 -0
- data/lib/jets/commands/help/runner.md +17 -0
- data/lib/jets/commands/help/server.md +15 -0
- data/lib/jets/commands/help/status.md +14 -0
- data/lib/jets/commands/help/upgrade.md +7 -0
- data/lib/jets/commands/help/url.md +6 -0
- data/lib/jets/commands/help.rb +9 -0
- data/lib/jets/commands/import/base.rb +49 -0
- data/lib/jets/commands/import/cheatsheet.rb +35 -0
- data/lib/jets/commands/import/rack.rb +16 -0
- data/lib/jets/commands/import/rails.rb +74 -0
- data/lib/jets/commands/import/sequence.rb +90 -0
- data/lib/jets/commands/import/templates/config/database.yml +30 -0
- data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
- data/lib/jets/commands/import.rb +12 -0
- data/lib/jets/commands/main.rb +166 -0
- data/lib/jets/commands/markdown/creator.rb +58 -0
- data/lib/jets/commands/markdown/index.rb +27 -0
- data/lib/jets/commands/markdown/page.rb +125 -0
- data/lib/jets/commands/markdown/shell.rb +11 -0
- data/lib/jets/commands/new.rb +173 -0
- data/lib/jets/commands/rake_command.rb +61 -0
- data/lib/jets/commands/rake_tasks.rb +50 -0
- data/lib/jets/commands/runner.rb +16 -0
- data/lib/jets/commands/sequence.rb +105 -0
- data/lib/jets/commands/stack_info.rb +30 -0
- data/lib/jets/commands/templates/skeleton/.env.development.tt +3 -0
- data/lib/jets/commands/templates/skeleton/.env.test +3 -0
- data/lib/jets/commands/templates/skeleton/.env.tt +3 -0
- data/lib/jets/commands/templates/skeleton/.gitignore +12 -0
- data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
- data/lib/jets/commands/templates/skeleton/.rspec +3 -0
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +39 -0
- data/lib/jets/commands/templates/skeleton/Procfile +7 -0
- data/lib/jets/commands/templates/skeleton/README.md +11 -0
- data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
- data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +4 -0
- data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
- data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +26 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +71 -0
- data/lib/jets/commands/templates/skeleton/config/database.yml.tt +27 -0
- data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +22 -0
- data/lib/jets/commands/templates/skeleton/config/environments/development.rb +7 -0
- data/lib/jets/commands/templates/skeleton/config/environments/production.rb +9 -0
- data/lib/jets/commands/templates/skeleton/config/environments/test.rb +7 -0
- data/lib/jets/commands/templates/skeleton/config/routes.rb +9 -0
- data/lib/jets/commands/templates/skeleton/config.ru +5 -0
- data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
- data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
- data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
- data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
- data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
- data/lib/jets/commands/templates/skeleton/public/index.html.tt +91 -0
- data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +15 -0
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
- data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +30 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +23 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
- data/lib/jets/commands/upgrade/templates/bin/webpack +19 -0
- data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +19 -0
- data/lib/jets/commands/upgrade/version1.rb +136 -0
- data/lib/jets/commands/upgrade.rb +105 -0
- data/lib/jets/commands/url.rb +69 -0
- data/lib/jets/commands/webpacker_template.rb +18 -0
- data/lib/jets/controller/authorization.rb +91 -0
- data/lib/jets/controller/base.rb +175 -0
- data/lib/jets/controller/callbacks.rb +73 -0
- data/lib/jets/controller/cookies/jar.rb +269 -0
- data/lib/jets/controller/cookies.rb +38 -0
- data/lib/jets/controller/error/invalid_authenticity_token.rb +6 -0
- data/lib/jets/controller/error.rb +4 -0
- data/lib/jets/controller/forgery_protection.rb +43 -0
- data/lib/jets/controller/layout.rb +17 -0
- data/lib/jets/controller/middleware/cors.rb +60 -0
- data/lib/jets/controller/middleware/local/api_gateway.rb +93 -0
- data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
- data/lib/jets/controller/middleware/local/route_matcher.rb +22 -0
- data/lib/jets/controller/middleware/local.rb +120 -0
- data/lib/jets/controller/middleware/main.rb +53 -0
- data/lib/jets/controller/middleware/reloader.rb +15 -0
- data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
- data/lib/jets/controller/parameters_filter.rb +29 -0
- data/lib/jets/controller/params.rb +117 -0
- data/lib/jets/controller/rack/adapter.rb +94 -0
- data/lib/jets/controller/rack/env.rb +122 -0
- data/lib/jets/controller/redirection.rb +51 -0
- data/lib/jets/controller/rendering/rack_renderer.rb +267 -0
- data/lib/jets/controller/rendering.rb +96 -0
- data/lib/jets/controller/request.rb +29 -0
- data/lib/jets/controller/response.rb +61 -0
- data/lib/jets/controller/stage.rb +34 -0
- data/lib/jets/controller.rb +3 -0
- data/lib/jets/core.rb +157 -0
- data/lib/jets/core_ext/bundler.rb +7 -0
- data/lib/jets/core_ext/kernel.rb +13 -0
- data/lib/jets/db.rb +15 -0
- data/lib/jets/dotenv/show.rb +11 -0
- data/lib/jets/dotenv/ssm.rb +64 -0
- data/lib/jets/dotenv.rb +48 -0
- data/lib/jets/erb.rb +51 -0
- data/lib/jets/generator/templates/active_job/job/templates/application_job.rb.tt +6 -0
- data/lib/jets/generator/templates/active_job/job/templates/job.rb.tt +8 -0
- data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
- data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +34 -0
- data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
- data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
- data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
- data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
- data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
- data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
- data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
- data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
- data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
- data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
- data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +79 -0
- data/lib/jets/generator.rb +112 -0
- data/lib/jets/inflections.rb +32 -0
- data/lib/jets/internal/app/controllers/jets/bare_controller.rb +16 -0
- data/lib/jets/internal/app/controllers/jets/mailers_controller.rb +97 -0
- data/lib/jets/internal/app/controllers/jets/mount_controller.rb +63 -0
- data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
- data/lib/jets/internal/app/controllers/jets/rack_controller.rb +12 -0
- data/lib/jets/internal/app/functions/jets/base_path.rb +18 -0
- data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +100 -0
- data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +9 -0
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +70 -0
- data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +33 -0
- data/lib/jets/internal/app/views/jets/mailers/email.html.erb +145 -0
- data/lib/jets/internal/app/views/jets/mailers/index.html.erb +8 -0
- data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +6 -0
- data/lib/jets/internal/turbines/jets/mailer.rb +52 -0
- data/lib/jets/job/base.rb +49 -0
- data/lib/jets/job/dsl/dynamodb_event.rb +67 -0
- data/lib/jets/job/dsl/event_source_mapping.rb +11 -0
- data/lib/jets/job/dsl/iot_event.rb +24 -0
- data/lib/jets/job/dsl/kinesis_event.rb +46 -0
- data/lib/jets/job/dsl/log_event.rb +15 -0
- data/lib/jets/job/dsl/rule_event.rb +75 -0
- data/lib/jets/job/dsl/s3_event.rb +36 -0
- data/lib/jets/job/dsl/sns_event.rb +54 -0
- data/lib/jets/job/dsl/sqs_event.rb +96 -0
- data/lib/jets/job/dsl.rb +40 -0
- data/lib/jets/job/helpers/kinesis_event_helper.rb +13 -0
- data/lib/jets/job/helpers/log_event_helper.rb +17 -0
- data/lib/jets/job/helpers/s3_event_helper.rb +13 -0
- data/lib/jets/klass.rb +109 -0
- data/lib/jets/lambda/dsl.rb +404 -0
- data/lib/jets/lambda/function.rb +29 -0
- data/lib/jets/lambda/function_constructor.rb +55 -0
- data/lib/jets/lambda/functions.rb +39 -0
- data/lib/jets/lambda/task.rb +111 -0
- data/lib/jets/logger.rb +21 -0
- data/lib/jets/mega/hash_converter.rb +25 -0
- data/lib/jets/mega/request/source.rb +21 -0
- data/lib/jets/mega/request.rb +163 -0
- data/lib/jets/middleware/configurator.rb +84 -0
- data/lib/jets/middleware/default_stack.rb +53 -0
- data/lib/jets/middleware/layer.rb +34 -0
- data/lib/jets/middleware/stack.rb +77 -0
- data/lib/jets/middleware.rb +33 -0
- data/lib/jets/naming.rb +63 -0
- data/lib/jets/overrides/lambda/marshaller.rb +31 -0
- data/lib/jets/overrides/lambda.rb +1 -0
- data/lib/jets/overrides/rails/action_controller.rb +13 -0
- data/lib/jets/overrides/rails/asset_tag_helper.rb +114 -0
- data/lib/jets/overrides/rails/common_methods.rb +13 -0
- data/lib/jets/overrides/rails/migration_checker.rb +34 -0
- data/lib/jets/overrides/rails/rendering_helper.rb +27 -0
- data/lib/jets/overrides/rails/url_helper.rb +88 -0
- data/lib/jets/overrides/rails.rb +6 -0
- data/lib/jets/poly_fun/base_executor.rb +125 -0
- data/lib/jets/poly_fun/lambda_executor.rb +16 -0
- data/lib/jets/poly_fun/node_error.rb +8 -0
- data/lib/jets/poly_fun/node_executor.rb +54 -0
- data/lib/jets/poly_fun/python_error.rb +8 -0
- data/lib/jets/poly_fun/python_executor.rb +23 -0
- data/lib/jets/poly_fun.rb +73 -0
- data/lib/jets/preheat.rb +117 -0
- data/lib/jets/processors/deducer.rb +65 -0
- data/lib/jets/processors/main_processor.rb +61 -0
- data/lib/jets/rack_server.rb +86 -0
- data/lib/jets/rdoc.rb +30 -0
- data/lib/jets/resource/api_gateway/authorizer.rb +82 -0
- data/lib/jets/resource/api_gateway/base_path/function.rb +49 -0
- data/lib/jets/resource/api_gateway/base_path/mapping.rb +44 -0
- data/lib/jets/resource/api_gateway/base_path/role.rb +76 -0
- data/lib/jets/resource/api_gateway/cors.rb +61 -0
- data/lib/jets/resource/api_gateway/deployment.rb +80 -0
- data/lib/jets/resource/api_gateway/domain_name.rb +65 -0
- data/lib/jets/resource/api_gateway/method/authorization.rb +41 -0
- data/lib/jets/resource/api_gateway/method.rb +102 -0
- data/lib/jets/resource/api_gateway/resource.rb +82 -0
- data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +10 -0
- data/lib/jets/resource/api_gateway/rest_api/logical_id/message.rb +49 -0
- data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +98 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +136 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/media_types.rb +36 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/page.rb +93 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +25 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +35 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +16 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +121 -0
- data/lib/jets/resource/api_gateway/rest_api/routes.rb +7 -0
- data/lib/jets/resource/api_gateway/rest_api.rb +64 -0
- data/lib/jets/resource/associated.rb +37 -0
- data/lib/jets/resource/base.rb +28 -0
- data/lib/jets/resource/child_stack/api_deployment.rb +58 -0
- data/lib/jets/resource/child_stack/api_gateway.rb +23 -0
- data/lib/jets/resource/child_stack/api_resource/page.rb +20 -0
- data/lib/jets/resource/child_stack/api_resource.rb +54 -0
- data/lib/jets/resource/child_stack/app_class.rb +149 -0
- data/lib/jets/resource/child_stack/authorizer.rb +40 -0
- data/lib/jets/resource/child_stack/base.rb +24 -0
- data/lib/jets/resource/child_stack/common_parameters.rb +14 -0
- data/lib/jets/resource/child_stack/shared.rb +85 -0
- data/lib/jets/resource/config/config_rule.rb +74 -0
- data/lib/jets/resource/config/managed_rule.rb +15 -0
- data/lib/jets/resource/events/rule.rb +31 -0
- data/lib/jets/resource/iam/application_role.rb +27 -0
- data/lib/jets/resource/iam/base_role_definition.rb +47 -0
- data/lib/jets/resource/iam/class_role.rb +74 -0
- data/lib/jets/resource/iam/function_role.rb +54 -0
- data/lib/jets/resource/iam/managed_policy.rb +22 -0
- data/lib/jets/resource/iam/policy_document.rb +41 -0
- data/lib/jets/resource/iot/topic_rule.rb +34 -0
- data/lib/jets/resource/lambda/event_source_mapping.rb +31 -0
- data/lib/jets/resource/lambda/function/environment.rb +62 -0
- data/lib/jets/resource/lambda/function.rb +221 -0
- data/lib/jets/resource/lambda/gem_layer.rb +17 -0
- data/lib/jets/resource/lambda/layer_version.rb +44 -0
- data/lib/jets/resource/logs/subscription_filter.rb +31 -0
- data/lib/jets/resource/permission.rb +45 -0
- data/lib/jets/resource/replacer.rb +85 -0
- data/lib/jets/resource/route53/record_set.rb +98 -0
- data/lib/jets/resource/s3/bucket.rb +24 -0
- data/lib/jets/resource/sns/subscription.rb +29 -0
- data/lib/jets/resource/sns/topic.rb +35 -0
- data/lib/jets/resource/sns/topic_policy.rb +40 -0
- data/lib/jets/resource/sqs/queue.rb +21 -0
- data/lib/jets/resource/standardizer.rb +42 -0
- data/lib/jets/resource.rb +71 -0
- data/lib/jets/router/dsl/mount.rb +13 -0
- data/lib/jets/router/dsl.rb +144 -0
- data/lib/jets/router/error.rb +4 -0
- data/lib/jets/router/finder.rb +47 -0
- data/lib/jets/router/helpers/core_helper.rb +27 -0
- data/lib/jets/router/helpers/named_routes_helper.rb +8 -0
- data/lib/jets/router/helpers.rb +4 -0
- data/lib/jets/router/matcher.rb +81 -0
- data/lib/jets/router/method_creator/code.rb +99 -0
- data/lib/jets/router/method_creator/edit.rb +12 -0
- data/lib/jets/router/method_creator/generic.rb +11 -0
- data/lib/jets/router/method_creator/index.rb +48 -0
- data/lib/jets/router/method_creator/new.rb +12 -0
- data/lib/jets/router/method_creator/root.rb +15 -0
- data/lib/jets/router/method_creator/show.rb +12 -0
- data/lib/jets/router/method_creator.rb +50 -0
- data/lib/jets/router/resources/base.rb +7 -0
- data/lib/jets/router/resources/filter.rb +15 -0
- data/lib/jets/router/resources/options.rb +13 -0
- data/lib/jets/router/route/authorizer.rb +57 -0
- data/lib/jets/router/route.rb +230 -0
- data/lib/jets/router/scope.rb +95 -0
- data/lib/jets/router/util.rb +38 -0
- data/lib/jets/router.rb +180 -0
- data/lib/jets/rule/base.rb +19 -0
- data/lib/jets/rule/dsl.rb +109 -0
- data/lib/jets/spec_helpers/controllers/params.rb +8 -0
- data/lib/jets/spec_helpers/controllers/request.rb +101 -0
- data/lib/jets/spec_helpers/controllers/response.rb +10 -0
- data/lib/jets/spec_helpers/controllers.rb +47 -0
- data/lib/jets/spec_helpers/fixtures.rb +11 -0
- data/lib/jets/spec_helpers.rb +21 -0
- data/lib/jets/stack/builder.rb +43 -0
- data/lib/jets/stack/definition.rb +50 -0
- data/lib/jets/stack/depends/item.rb +26 -0
- data/lib/jets/stack/depends.rb +34 -0
- data/lib/jets/stack/function.rb +69 -0
- data/lib/jets/stack/main/dsl/base.rb +63 -0
- data/lib/jets/stack/main/dsl/cloudwatch.rb +19 -0
- data/lib/jets/stack/main/dsl/iam.rb +8 -0
- data/lib/jets/stack/main/dsl/kinesis.rb +15 -0
- data/lib/jets/stack/main/dsl/lambda.rb +83 -0
- data/lib/jets/stack/main/dsl/s3.rb +12 -0
- data/lib/jets/stack/main/dsl/sns.rb +16 -0
- data/lib/jets/stack/main/dsl/sqs.rb +10 -0
- data/lib/jets/stack/main/dsl.rb +17 -0
- data/lib/jets/stack/main.rb +4 -0
- data/lib/jets/stack/output/dsl.rb +19 -0
- data/lib/jets/stack/output/lookup.rb +36 -0
- data/lib/jets/stack/output.rb +35 -0
- data/lib/jets/stack/parameter/dsl.rb +42 -0
- data/lib/jets/stack/parameter.rb +37 -0
- data/lib/jets/stack/resource/dsl.rb +19 -0
- data/lib/jets/stack/resource.rb +31 -0
- data/lib/jets/stack/s3_event.rb +87 -0
- data/lib/jets/stack.rb +88 -0
- data/lib/jets/tmp_loader.rb +53 -0
- data/lib/jets/turbine.rb +41 -0
- data/lib/jets/turbo/database_yaml.rb +41 -0
- data/lib/jets/turbo/project/.gitignore +12 -0
- data/lib/jets/turbo/project/.jetskeep +1 -0
- data/lib/jets/turbo/project/Gemfile +16 -0
- data/lib/jets/turbo/project/Rakefile +2 -0
- data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
- data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
- data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
- data/lib/jets/turbo/project/config/application.rb +5 -0
- data/lib/jets/turbo/project/config/routes.rb +4 -0
- data/lib/jets/turbo/project/config.ru +5 -0
- data/lib/jets/turbo/rails.rb +127 -0
- data/lib/jets/turbo/templates/config/database.yml +30 -0
- data/lib/jets/turbo.rb +56 -0
- data/lib/jets/util.rb +40 -0
- data/lib/jets/version.rb +3 -0
- data/lib/jets.rb +31 -0
- data/readme/prerelease.md +6 -0
- data/readme/testing.md +60 -0
- metadata +1105 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
require "fileutils"
|
|
2
|
+
require "erb"
|
|
3
|
+
|
|
4
|
+
# Example:
|
|
5
|
+
#
|
|
6
|
+
# Jets::Builders::HandlerGenerator.new(
|
|
7
|
+
# "PostsController",
|
|
8
|
+
# :create, :update
|
|
9
|
+
# )
|
|
10
|
+
module Jets::Builders
|
|
11
|
+
class HandlerGenerator
|
|
12
|
+
def self.build!
|
|
13
|
+
new.build
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def build
|
|
17
|
+
generate_data_yaml
|
|
18
|
+
app_ruby_shims
|
|
19
|
+
poly_shims
|
|
20
|
+
shared_shims
|
|
21
|
+
internal_shims
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# The handlers/data.yml is used by the shims
|
|
25
|
+
def generate_data_yaml
|
|
26
|
+
vars = Jets::Builders::ShimVars::Base.new
|
|
27
|
+
data = {
|
|
28
|
+
"s3_bucket" => vars.s3_bucket
|
|
29
|
+
}
|
|
30
|
+
data["rack_zip"] = vars.rack_zip if vars.rack_zip
|
|
31
|
+
|
|
32
|
+
content = YAML.dump(data)
|
|
33
|
+
path = "#{tmp_code}/handlers/data.yml"
|
|
34
|
+
FileUtils.mkdir_p(File.dirname(path))
|
|
35
|
+
IO.write(path, content)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def app_ruby_shims
|
|
39
|
+
app_files.each do |path|
|
|
40
|
+
# Generates one shim for each app class: controller, job, etc
|
|
41
|
+
vars = Jets::Builders::ShimVars::App.new(path)
|
|
42
|
+
if path.include?('app/functions')
|
|
43
|
+
copy_simple_function(path)
|
|
44
|
+
else
|
|
45
|
+
generate_handler(vars)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# source_path: app/functions/simple.rb
|
|
51
|
+
def copy_simple_function(source_path)
|
|
52
|
+
# Handler: handlers/controllers/posts_controller.handle
|
|
53
|
+
dest_path = source_path.sub('app/functions', 'handlers/functions')
|
|
54
|
+
FileUtils.mkdir_p(File.dirname(dest_path))
|
|
55
|
+
FileUtils.cp(source_path, dest_path)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def app_files
|
|
59
|
+
Jets::Commands::Build.app_files
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def poly_shims
|
|
63
|
+
missing = []
|
|
64
|
+
|
|
65
|
+
app_files.each do |path|
|
|
66
|
+
vars = Jets::Builders::ShimVars::App.new(path)
|
|
67
|
+
poly_tasks = vars.klass.tasks.select { |t| t.lang != :ruby }
|
|
68
|
+
poly_tasks.each do |task|
|
|
69
|
+
source_path = get_source_path(path, task)
|
|
70
|
+
if File.exist?(source_path)
|
|
71
|
+
native_function(path, task)
|
|
72
|
+
else
|
|
73
|
+
missing << source_path
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
unless missing.empty?
|
|
78
|
+
puts "ERROR: Missing source files. Please make sure these source files exist or remove their declarations".color(:red)
|
|
79
|
+
puts missing
|
|
80
|
+
exit 1
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def shared_shims
|
|
86
|
+
Jets::Stack.subclasses.each do |subclass|
|
|
87
|
+
subclass.functions.each do |fun|
|
|
88
|
+
if fun.lang.to_s == "ruby"
|
|
89
|
+
shared_ruby_shim(fun)
|
|
90
|
+
else
|
|
91
|
+
copy_source_as_handler(fun)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def internal_shims
|
|
98
|
+
jets_base_path if Jets.custom_domain?
|
|
99
|
+
s3_bucket_config if Jets.s3_event?
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def jets_base_path
|
|
103
|
+
copy_function_template("functions/jets/base_path.rb", stage_name: Jets::Resource::ApiGateway::Deployment.stage_name)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def s3_bucket_config
|
|
107
|
+
copy_function_template("shared/functions/jets/s3_bucket_config.rb")
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Copy code from internal folder to materialized app code
|
|
111
|
+
def copy_function_template(path, vars={})
|
|
112
|
+
internal = File.expand_path("../internal", File.dirname(__FILE__))
|
|
113
|
+
src = "#{internal}/app/#{path}"
|
|
114
|
+
result = Jets::Erb.result(src, vars)
|
|
115
|
+
dest = "#{tmp_code}/handlers/#{path}"
|
|
116
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
|
117
|
+
IO.write(dest, result)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# app/shared/functions/kevin.py => /tmp/jets/demo/app_root/handlers/shared/functions/kevin.py
|
|
121
|
+
def copy_source_as_handler(fun)
|
|
122
|
+
return if fun.internal?
|
|
123
|
+
|
|
124
|
+
source_path = fun.source_file
|
|
125
|
+
unless source_path
|
|
126
|
+
attributes = fun.template.values.first
|
|
127
|
+
function_name = attributes['Properties']['FunctionName']
|
|
128
|
+
puts "WARN: missing source file for: '#{function_name}' function".color(:yellow)
|
|
129
|
+
return
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
dest_path = "#{tmp_code}/#{fun.handler_dest}"
|
|
133
|
+
FileUtils.mkdir_p(File.dirname(dest_path))
|
|
134
|
+
FileUtils.cp(source_path, dest_path)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def get_source_path(original_path, task)
|
|
138
|
+
folder = original_path.sub(/\.rb$/,'')
|
|
139
|
+
lang_folder = "#{folder}/#{task.lang}"
|
|
140
|
+
root = Jets.root unless original_path.include?("lib/jets/internal")
|
|
141
|
+
"#{root}/#{lang_folder}/#{task.meth}#{task.lang_ext}"
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Builds and copies over the native source code: python or node
|
|
145
|
+
def native_function(original_path, task)
|
|
146
|
+
source_path = get_source_path(original_path, task)
|
|
147
|
+
# Handler: handlers/controllers/posts_controller.handle
|
|
148
|
+
dest_path = "#{tmp_code}/#{task.handler_path}"
|
|
149
|
+
FileUtils.mkdir_p(File.dirname(dest_path))
|
|
150
|
+
FileUtils.cp(source_path, dest_path)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def shared_ruby_shim(fun)
|
|
154
|
+
# Cant use native_function because that requires task. Just re-implement
|
|
155
|
+
dest_path = fun.handler_dest
|
|
156
|
+
source_path = dest_path.sub(/^handlers/,'app')
|
|
157
|
+
FileUtils.mkdir_p(File.dirname(dest_path))
|
|
158
|
+
FileUtils.cp(source_path, dest_path)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def common_base_shim
|
|
162
|
+
vars = Jets::Builders::ShimVars::Base.new
|
|
163
|
+
result = evaluate_template("shim.js", vars)
|
|
164
|
+
dest = "#{tmp_code}/handlers/shim.js"
|
|
165
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
|
166
|
+
IO.write(dest, result)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def generate_handler(vars)
|
|
170
|
+
result = evaluate_template("handler.rb", vars)
|
|
171
|
+
dest = "#{tmp_code}/#{vars.dest_path}"
|
|
172
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
|
173
|
+
IO.write(dest, result)
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def evaluate_template(template_file, vars)
|
|
177
|
+
template_path = File.expand_path("../templates/#{template_file}", __FILE__)
|
|
178
|
+
Jets::Erb.result(template_path, vars: vars)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# TODO: move CodeBuilder.tmp_code to a common level for HandlerGenerator and CodeBuilder
|
|
182
|
+
def tmp_code
|
|
183
|
+
"#{Jets.build_root}/#{CodeBuilder.tmp_code}"
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
module Jets::Builders
|
|
2
|
+
class LambdaLayer
|
|
3
|
+
include Util
|
|
4
|
+
|
|
5
|
+
# At this point gems are in the stage/code and stage/rack folders still.
|
|
6
|
+
# We consolidate all gems to stage/opt.
|
|
7
|
+
# Then replace the binary gems.
|
|
8
|
+
def build
|
|
9
|
+
consolidate_gems_to_opt
|
|
10
|
+
replace_compiled_gems unless Jets.config.gems.disable
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Also restructure the folder from:
|
|
14
|
+
# vendor/gems/ruby/2.5.0
|
|
15
|
+
# To:
|
|
16
|
+
# ruby/gems/2.5.0
|
|
17
|
+
#
|
|
18
|
+
# For Lambda Layer structure
|
|
19
|
+
def consolidate_gems_to_opt
|
|
20
|
+
src = "#{stage_area}/code/vendor/gems/ruby/#{Jets.ruby_folder}"
|
|
21
|
+
dest = "#{stage_area}/opt/ruby/gems/#{Jets.ruby_folder}"
|
|
22
|
+
rsync_and_link(src, dest)
|
|
23
|
+
|
|
24
|
+
return unless Jets.rack?
|
|
25
|
+
|
|
26
|
+
src = "#{stage_area}/rack/vendor/gems/ruby/#{Jets.ruby_folder}"
|
|
27
|
+
rsync_and_link(src, dest)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def rsync_and_link(src, dest)
|
|
31
|
+
FileUtils.mkdir_p(dest)
|
|
32
|
+
# Trailing slashes are required
|
|
33
|
+
sh "rsync -a --links #{src}/ #{dest}/"
|
|
34
|
+
|
|
35
|
+
FileUtils.rm_rf(src) # blow away original 2.5.0 folder
|
|
36
|
+
|
|
37
|
+
# Create symlink that will point to the gems in the Lambda Layer:
|
|
38
|
+
# stage/opt/ruby/gems/2.5.0 -> /opt/ruby/gems/2.5.0
|
|
39
|
+
FileUtils.ln_sf("/opt/ruby/gems/#{Jets::Gems.ruby_folder}", src)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# replace_compiled_gems:
|
|
43
|
+
# remove binary gems in vendor/gems/ruby/2.5.0
|
|
44
|
+
# extract binary gems in opt/ruby/gems/2.5.0
|
|
45
|
+
# move binary gems from opt/ruby/gems/2.5.0 to vendor/gems/ruby/2.5.0
|
|
46
|
+
#
|
|
47
|
+
# After this point, gems have been replace in stage/code/vendor/gems with their
|
|
48
|
+
# binary extensions: a good state. This method moves these gems to the Lambda
|
|
49
|
+
# Layers structure and creates a symlinks to it. First:
|
|
50
|
+
#
|
|
51
|
+
# from stage/code/vendor/gems/ruby/2.5.0
|
|
52
|
+
# to stage/opt/ruby/gems/2.5.0
|
|
53
|
+
#
|
|
54
|
+
# Then:
|
|
55
|
+
#
|
|
56
|
+
# stage/code/vendor/gems/ruby/2.5.0 -> /opt/ruby/gems/2.5.0
|
|
57
|
+
#
|
|
58
|
+
def replace_compiled_gems
|
|
59
|
+
project_root = "#{stage_area}/opt"
|
|
60
|
+
headline "Replacing compiled gems with AWS Lambda Linux compiled versions: #{project_root}"
|
|
61
|
+
options = {
|
|
62
|
+
build_root: cache_area, # used in jets-gems
|
|
63
|
+
project_root: project_root, # used in gem_replacer and jets-gems
|
|
64
|
+
}
|
|
65
|
+
GemReplacer.new(options).run
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'digest'
|
|
2
|
+
|
|
3
|
+
# Resolves the chicken-and-egg problem with md5 checksums. The handlers need
|
|
4
|
+
# to reference files with the md5 checksum. The files are the:
|
|
5
|
+
#
|
|
6
|
+
# jets/code/rack-checksum.zip
|
|
7
|
+
# jets/code/opt-checksum.zip
|
|
8
|
+
#
|
|
9
|
+
# We compute the checksums before we generate the node shim handlers.
|
|
10
|
+
module Jets::Builders
|
|
11
|
+
class Md5
|
|
12
|
+
class << self
|
|
13
|
+
@@checksums = {}
|
|
14
|
+
def checksums
|
|
15
|
+
@@checksums
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def stage_folders
|
|
19
|
+
paths = []
|
|
20
|
+
paths << "stage/opt" if folder_exist?("opt")
|
|
21
|
+
paths << "stage/rack" if folder_exist?("rack")
|
|
22
|
+
# Important to have stage/code at the end, since its md5 checksum depends
|
|
23
|
+
# on the previous folders.
|
|
24
|
+
paths << "stage/code"
|
|
25
|
+
paths
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def folder_exist?(folder)
|
|
29
|
+
path = "#{Jets.build_root}/stage/#{folder}"
|
|
30
|
+
File.directory?(path)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def compute!
|
|
34
|
+
stage_folders.each do |path|
|
|
35
|
+
@@checksums[path] = dir(path)
|
|
36
|
+
end
|
|
37
|
+
@@checksums
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def dir(short_path)
|
|
41
|
+
path = "#{Jets.build_root}/#{short_path}"
|
|
42
|
+
files = Dir["#{path}/**/*"]
|
|
43
|
+
files = files.reject { |f| File.directory?(f) }
|
|
44
|
+
.reject { |f| File.symlink?(f) }
|
|
45
|
+
content = files.map do |f|
|
|
46
|
+
Digest::MD5.file(f).to_s[0..7]
|
|
47
|
+
end.join
|
|
48
|
+
|
|
49
|
+
# The stage/code md5 sha depends on the other 'symlinked' folders.
|
|
50
|
+
if short_path == "stage/code"
|
|
51
|
+
content += @@checksums.values.join
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
md5 = Digest::MD5.new
|
|
55
|
+
md5.update(content)
|
|
56
|
+
md5.hexdigest.to_s[0..7]
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require "active_support/number_helper"
|
|
2
|
+
|
|
3
|
+
# Examples:
|
|
4
|
+
#
|
|
5
|
+
# zip = Jets::Builders::Md5Zip.new("/tmp/jets/demo/stage/code")
|
|
6
|
+
# zip.create
|
|
7
|
+
#
|
|
8
|
+
# zip = Jets::Builders::Md5Zip.new("/tmp/jets/demo/stage/bundled")
|
|
9
|
+
# zip.create
|
|
10
|
+
#
|
|
11
|
+
module Jets::Builders
|
|
12
|
+
class Md5Zip
|
|
13
|
+
include ActiveSupport::NumberHelper # number_to_human_size
|
|
14
|
+
include Util
|
|
15
|
+
|
|
16
|
+
def initialize(folder)
|
|
17
|
+
@path = "#{Jets.build_root}/#{folder}"
|
|
18
|
+
@checksum = Md5.checksums[folder]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def create
|
|
22
|
+
headline "Creating zip file for #{@path}"
|
|
23
|
+
# => Creating zip file for /tmp/jets/demo/stage/bundled
|
|
24
|
+
|
|
25
|
+
# https://serverfault.com/questions/265675/how-can-i-zip-compress-a-symlink
|
|
26
|
+
command = "cd #{@path} && chmod -R 755 . && zip --symlinks -rq #{zip_file} ."
|
|
27
|
+
sh(command)
|
|
28
|
+
# move out of the lower folder to the stage folder
|
|
29
|
+
# mv /tmp/jets/demo/stage/code/code.zip /tmp/jets/demo/stage/code.zip
|
|
30
|
+
FileUtils.mkdir_p(File.dirname(zip_dest))
|
|
31
|
+
FileUtils.mv("#{@path}/#{zip_file}", zip_dest)
|
|
32
|
+
|
|
33
|
+
# mv /tmp/jets/demo/stage/zips/code.zip /tmp/jets/demo/stage/zips/code-a8a604aa.zip
|
|
34
|
+
FileUtils.mv(zip_dest, md5_dest)
|
|
35
|
+
|
|
36
|
+
file_size = number_to_human_size(File.size(md5_dest))
|
|
37
|
+
puts "Zip file created at: #{md5_dest.color(:green)} (#{file_size})"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# /tmp/jets/demo/stage/zips/code.zip
|
|
41
|
+
def zip_dest
|
|
42
|
+
stage_area, filename = File.dirname(@path), File.basename(@path)
|
|
43
|
+
zip_area = stage_area + '/zips' # /tmp/jets/demo/stage/zips
|
|
44
|
+
zip_file = filename + '.zip' # code.zip
|
|
45
|
+
"#{zip_area}/#{zip_file}" # /tmp/jets/demo/stage/zips/code.zip
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def zip_file
|
|
49
|
+
File.basename(zip_dest)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# /tmp/jets/demo/stage/zips/code-SHA.zip
|
|
53
|
+
def md5_dest
|
|
54
|
+
zip_dest.sub(".zip", "-#{@checksum}.zip")
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def md5_name
|
|
58
|
+
File.basename(md5_dest)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# When upgrading jets, automatically rm -rf /tmp/jets/project in case the structure has changed.
|
|
2
|
+
module Jets::Builders
|
|
3
|
+
class Purger
|
|
4
|
+
def initialize
|
|
5
|
+
@project_name = Jets.config.project_name
|
|
6
|
+
@version_file = "/tmp/jets/#{@project_name}/jets_version.txt"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def purge
|
|
10
|
+
if version_changed?
|
|
11
|
+
last_version = @last_version || "unknown"
|
|
12
|
+
puts "The jets version has changed enough since the last build to merit refreshing the build cache."
|
|
13
|
+
puts "Current jets version: #{Jets::VERSION} Last built jets version: #{last_version}"
|
|
14
|
+
puts "Removing /tmp/jets/#{@project_name} to start fresh."
|
|
15
|
+
FileUtils.rm_rf("/tmp/jets/#{@project_name}")
|
|
16
|
+
end
|
|
17
|
+
write_version
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# When jets changes versions major or minor version consider it a big enough can to purge the cache
|
|
21
|
+
def version_changed?
|
|
22
|
+
return true unless File.exist?(@version_file)
|
|
23
|
+
|
|
24
|
+
@last_version = IO.read(@version_file).strip
|
|
25
|
+
last_major, last_minor, _ = @last_version.split('.')
|
|
26
|
+
current_major, current_minor, _ = Jets::VERSION.split('.')
|
|
27
|
+
last_major != current_major || last_minor != current_minor
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def write_version
|
|
31
|
+
FileUtils.mkdir_p(File.dirname(@version_file))
|
|
32
|
+
IO.write(@version_file, Jets::VERSION)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module Jets::Builders
|
|
2
|
+
class RackPackager < RubyPackager
|
|
3
|
+
def finish
|
|
4
|
+
return unless gemfile_exist?
|
|
5
|
+
|
|
6
|
+
super
|
|
7
|
+
|
|
8
|
+
symlink_gems
|
|
9
|
+
copy_rackup_wrappers
|
|
10
|
+
rack_symlink
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def symlink_gems
|
|
14
|
+
ruby_folder = Jets::Gems.ruby_folder
|
|
15
|
+
# IE: @full_app_root: /tmp/jets/demo/stage/code/rack
|
|
16
|
+
dest = "#{@full_app_root}/vendor/gems/ruby/#{ruby_folder}"
|
|
17
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
|
18
|
+
FileUtils.ln_sf("/opt/ruby/gems/#{ruby_folder}", dest)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def copy_rackup_wrappers
|
|
22
|
+
# IE: @full_app_root: /tmp/jets/demo/stage/code/rack
|
|
23
|
+
rack_bin = "#{@full_app_root}/bin"
|
|
24
|
+
%w[rackup rackup.rb].each do |file|
|
|
25
|
+
src = File.expand_path("./rackup_wrappers/#{file}", File.dirname(__FILE__))
|
|
26
|
+
dest = "#{rack_bin}/#{file}"
|
|
27
|
+
FileUtils.mkdir_p(rack_bin) unless File.exist?(rack_bin)
|
|
28
|
+
FileUtils.cp(src, dest)
|
|
29
|
+
FileUtils.chmod 0755, dest
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Moves folder to a stage folder and create a symlink its place
|
|
34
|
+
# that links from /var/task to /tmp. Example:
|
|
35
|
+
#
|
|
36
|
+
# stage/code/rack => /tmp/rack
|
|
37
|
+
#
|
|
38
|
+
def rack_symlink
|
|
39
|
+
src = @full_app_root
|
|
40
|
+
return unless File.exist?(src)
|
|
41
|
+
|
|
42
|
+
dest = "#{stage_area}/rack"
|
|
43
|
+
dir = File.dirname(dest)
|
|
44
|
+
FileUtils.mkdir_p(dir) unless File.exist?(dir)
|
|
45
|
+
FileUtils.mv(src, dest)
|
|
46
|
+
|
|
47
|
+
# Create symlink
|
|
48
|
+
FileUtils.ln_sf("/tmp/rack", src)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
export JETS_MEGA=1
|
|
6
|
+
|
|
7
|
+
# Figure out where this script is located.
|
|
8
|
+
PROJECTDIR="`dirname \"$0\"`"
|
|
9
|
+
PROJECTDIR="`cd \"$PROJECTDIR/..\" && pwd`"
|
|
10
|
+
|
|
11
|
+
unset BUNDLE_IGNORE_CONFIG
|
|
12
|
+
# When jets packages the app code it creates .bundle/config in the project root.
|
|
13
|
+
# We want that to be used.
|
|
14
|
+
|
|
15
|
+
# Drop a pidfile
|
|
16
|
+
# echo $$ > /tmp/jets-rackup.pid
|
|
17
|
+
|
|
18
|
+
# Run the actual app using the bundled Ruby interpreter, with Bundler activated.
|
|
19
|
+
exec ruby -rbundler/setup bin/rackup.rb "$@"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
JetsRails.stage = ENV['JETS_STAGE'] || 'dev' # for jets-rails StageMiddleware
|
|
2
|
+
|
|
3
|
+
# config/s3_base_url.txt is generated as part of jets build process
|
|
4
|
+
s3_base_url = IO.read("#{Rails.root}/config/s3_base_url.txt").strip rescue "s3_base_url_placeholder"
|
|
5
|
+
asset_host = "#{s3_base_url}/rack/public"
|
|
6
|
+
Rails.application.config.action_controller.asset_host = asset_host
|
|
7
|
+
Rails.application.config.public_file_server.enabled = true
|
|
8
|
+
|
|
9
|
+
<% unless @api_mode -%>
|
|
10
|
+
# Rails.application.config.assets.quiet = false
|
|
11
|
+
Rails.application.config.assets.debug = false
|
|
12
|
+
Rails.application.config.assets.compile = false
|
|
13
|
+
<% end -%>
|
|
14
|
+
|
|
15
|
+
# Looks better without colorizatiion in CloudWatch logs
|
|
16
|
+
Rails.application.config.colorize_logging = false
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# TODO: Move logic into plugin instead
|
|
2
|
+
module Jets::Builders
|
|
3
|
+
class ReconfigureRails
|
|
4
|
+
def initialize(full_app_root)
|
|
5
|
+
# IE: @app_root: /tmp/jets/demo/stage/code/rack
|
|
6
|
+
@app_root = full_app_root
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# Only support Rails right now. Maybe move into plugin when adding support
|
|
10
|
+
# to more frameworks. Or maybe better to just abstract but maintain in Jets.
|
|
11
|
+
def run
|
|
12
|
+
return unless rails?
|
|
13
|
+
|
|
14
|
+
puts "Mega Mode: Reconfiguring Rails app."
|
|
15
|
+
copy_initializer
|
|
16
|
+
update_gemfile
|
|
17
|
+
update_development_environment
|
|
18
|
+
set_favicon
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def copy_initializer
|
|
22
|
+
templates = File.expand_path("./reconfigure_rails", File.dirname(__FILE__))
|
|
23
|
+
relative_path = "config/initializers/jets.rb"
|
|
24
|
+
src = "#{templates}/#{relative_path}"
|
|
25
|
+
result = Jets::Erb.result(src, api_mode: rails_api?)
|
|
26
|
+
dest = "#{@app_root}/#{relative_path}"
|
|
27
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
|
28
|
+
IO.write(dest, result)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def api_mode?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def update_gemfile
|
|
35
|
+
gemfile = "#{@app_root}/Gemfile"
|
|
36
|
+
lines = IO.readlines(gemfile)
|
|
37
|
+
lines = add_jets_rails_gem(lines)
|
|
38
|
+
lines = comment_out_ruby_declaration(lines)
|
|
39
|
+
write_content(gemfile, lines)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def add_jets_rails_gem(lines)
|
|
43
|
+
return lines if lines.detect { |l| l =~ /jets-rails/ }
|
|
44
|
+
lines << "\n"
|
|
45
|
+
lines << %Q|gem "jets-rails"\n|
|
|
46
|
+
lines
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Jets packages up and uses only one version of ruby and different declarations
|
|
50
|
+
# of ruby can cause issues.
|
|
51
|
+
def comment_out_ruby_declaration(lines)
|
|
52
|
+
lines.map do |l|
|
|
53
|
+
l =~ /^(ruby[ (].*)/ ? "# #{$1} # commented out by jets" : l
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def update_development_environment
|
|
58
|
+
env_file = "#{@app_root}/config/environments/development.rb"
|
|
59
|
+
lines = IO.readlines(env_file)
|
|
60
|
+
new_lines = lines.map do |line|
|
|
61
|
+
if line =~ /(config\.file_watcher.*)/
|
|
62
|
+
" # #{$1} # commented out by jets\n"
|
|
63
|
+
else
|
|
64
|
+
line
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
write_content(env_file, new_lines)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Evaluate the application layout and see if has a custom favicon defined yet.
|
|
71
|
+
# If not insert one and rewrite the application layout.
|
|
72
|
+
#
|
|
73
|
+
# This avoids serving binary assets from API gateway, instead serve it from s3 directly.
|
|
74
|
+
def set_favicon
|
|
75
|
+
app_layout = "#{@app_root}/app/views/layouts/application.html.erb"
|
|
76
|
+
return unless File.exist?(app_layout)
|
|
77
|
+
|
|
78
|
+
favicon = '<link rel="shortcut icon" href="<%= asset_path("/favicon.ico") %>">'
|
|
79
|
+
|
|
80
|
+
lines = IO.readlines(app_layout)
|
|
81
|
+
has_favicon = !!lines.find { |l| l.include?(favicon) }
|
|
82
|
+
return if has_favicon
|
|
83
|
+
|
|
84
|
+
content = IO.read(app_layout)
|
|
85
|
+
content = content.sub('</head>', "\n #{favicon}\n </head>")
|
|
86
|
+
|
|
87
|
+
IO.write(app_layout, content)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# lines is an Array
|
|
91
|
+
def write_content(path, lines)
|
|
92
|
+
content = lines.join + "\n"
|
|
93
|
+
IO.write(path, content)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Rudimentary rails detection
|
|
97
|
+
# Duplicated in builders/code_builders.rb
|
|
98
|
+
def rails?
|
|
99
|
+
config_ru = "#{@app_root}/config.ru"
|
|
100
|
+
return false unless File.exist?(config_ru)
|
|
101
|
+
!IO.readlines(config_ru).grep(/Rails.application/).empty?
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Rudimentary rails api detection
|
|
105
|
+
# Duplicated in builders/code_builders.rb
|
|
106
|
+
# Another way of checking is loading a rails console and checking Rails.application.config.api_only
|
|
107
|
+
# Using this way for simplicity.
|
|
108
|
+
def rails_api?
|
|
109
|
+
config_app = "#{@app_root}/config/application.rb"
|
|
110
|
+
return false unless File.exist?(config_app)
|
|
111
|
+
!IO.readlines(config_app).grep(/config.api_only.*=.*true/).empty?
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|