jets_bb_fork 0.0.4
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/bin/commit_docs.sh +26 -0
- data/.circleci/config.yml +126 -0
- data/.codebuild/README.md +68 -0
- data/.codebuild/bin/jets +3 -0
- data/.codebuild/buildspec-base.yml +14 -0
- data/.codebuild/integration.sh +72 -0
- data/.codebuild/jets.postman_collection.json +323 -0
- data/.codebuild/scripts/install-docker.sh +12 -0
- data/.codebuild/scripts/install-dynamodb-local.sh +22 -0
- data/.codebuild/scripts/install-java.sh +22 -0
- data/.codebuild/scripts/install-node.sh +4 -0
- data/.github/ISSUE_TEMPLATE.md +7 -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 +16 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +42 -0
- data/.gitignore +24 -0
- data/.gitmodules +0 -0
- data/.python-version +1 -0
- data/.rspec +4 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +734 -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 +203 -0
- data/Rakefile +24 -0
- data/backers.md +16 -0
- data/bin/release +9 -0
- data/buildspec.yml +18 -0
- data/exe/jets_bb_fork +14 -0
- data/jets.gemspec +68 -0
- data/lib/jets.rb +27 -0
- data/lib/jets/application.rb +216 -0
- data/lib/jets/application/defaults.rb +172 -0
- data/lib/jets/autoloaders.rb +97 -0
- data/lib/jets/aws_info.rb +113 -0
- data/lib/jets/aws_services.rb +65 -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 +59 -0
- data/lib/jets/booter.rb +119 -0
- data/lib/jets/builders/code_builder.rb +399 -0
- data/lib/jets/builders/code_size.rb +57 -0
- data/lib/jets/builders/gem_replacer.rb +76 -0
- data/lib/jets/builders/handler_generator.rb +186 -0
- data/lib/jets/builders/lambda_layer.rb +69 -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.rb +114 -0
- data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +16 -0
- data/lib/jets/builders/ruby_packager.rb +207 -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 +82 -0
- data/lib/jets/camelizer.rb +71 -0
- data/lib/jets/cfn/builders/api_deployment_builder.rb +63 -0
- data/lib/jets/cfn/builders/api_gateway_builder.rb +157 -0
- data/lib/jets/cfn/builders/base_child_builder.rb +75 -0
- data/lib/jets/cfn/builders/controller_builder.rb +42 -0
- data/lib/jets/cfn/builders/function_builder.rb +14 -0
- data/lib/jets/cfn/builders/interface.rb +137 -0
- data/lib/jets/cfn/builders/job_builder.rb +14 -0
- data/lib/jets/cfn/builders/paged.rb +37 -0
- data/lib/jets/cfn/builders/parent_builder.rb +100 -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/ship.rb +185 -0
- data/lib/jets/cfn/status.rb +212 -0
- data/lib/jets/cfn/upload.rb +139 -0
- data/lib/jets/cli.rb +194 -0
- data/lib/jets/commands/base.rb +146 -0
- data/lib/jets/commands/build.rb +234 -0
- data/lib/jets/commands/call.rb +169 -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 +60 -0
- data/lib/jets/commands/call/guesser.rb +48 -0
- data/lib/jets/commands/clean.rb +19 -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 +107 -0
- data/lib/jets/commands/console.rb +12 -0
- data/lib/jets/commands/db.rb +13 -0
- data/lib/jets/commands/db/environment-task.rake +3 -0
- data/lib/jets/commands/db/tasks.rb +44 -0
- data/lib/jets/commands/dbconsole.rb +131 -0
- data/lib/jets/commands/delete.rb +143 -0
- data/lib/jets/commands/deploy.rb +141 -0
- data/lib/jets/commands/dynamodb.rb +19 -0
- data/lib/jets/commands/dynamodb/migrate.rb +9 -0
- data/lib/jets/commands/dynamodb/migrator.rb +36 -0
- data/lib/jets/commands/gems.rb +21 -0
- data/lib/jets/commands/help.rb +9 -0
- data/lib/jets/commands/help/build.md +6 -0
- data/lib/jets/commands/help/call.md +61 -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/delete.md +22 -0
- data/lib/jets/commands/help/deploy.md +32 -0
- data/lib/jets/commands/help/destroy.md +16 -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 +8 -0
- data/lib/jets/commands/help/generate.md +22 -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 +5 -0
- data/lib/jets/commands/help/url.md +6 -0
- data/lib/jets/commands/import.rb +12 -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 +26 -0
- data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
- data/lib/jets/commands/main.rb +157 -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 +157 -0
- data/lib/jets/commands/rake_command.rb +61 -0
- data/lib/jets/commands/rake_tasks.rb +46 -0
- data/lib/jets/commands/runner.rb +16 -0
- data/lib/jets/commands/sequence.rb +99 -0
- data/lib/jets/commands/stack_info.rb +30 -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 +38 -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 +25 -0
- data/lib/jets/commands/templates/skeleton/config.ru +5 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +67 -0
- data/lib/jets/commands/templates/skeleton/config/database.yml.tt +26 -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/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 +14 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/src/jets/crud.js +87 -0
- data/lib/jets/commands/upgrade.rb +145 -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/url.rb +68 -0
- data/lib/jets/commands/webpacker_template.rb +18 -0
- data/lib/jets/controller.rb +3 -0
- data/lib/jets/controller/base.rb +108 -0
- data/lib/jets/controller/callbacks.rb +68 -0
- data/lib/jets/controller/cookies.rb +38 -0
- data/lib/jets/controller/cookies/jar.rb +269 -0
- data/lib/jets/controller/layout.rb +17 -0
- data/lib/jets/controller/middleware/cors.rb +60 -0
- data/lib/jets/controller/middleware/local.rb +116 -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 +106 -0
- data/lib/jets/controller/middleware/main.rb +46 -0
- data/lib/jets/controller/middleware/reloader.rb +15 -0
- data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
- data/lib/jets/controller/params.rb +87 -0
- data/lib/jets/controller/rack/adapter.rb +88 -0
- data/lib/jets/controller/rack/env.rb +105 -0
- data/lib/jets/controller/redirection.rb +55 -0
- data/lib/jets/controller/rendering.rb +79 -0
- data/lib/jets/controller/rendering/rack_renderer.rb +250 -0
- data/lib/jets/controller/request.rb +29 -0
- data/lib/jets/controller/response.rb +61 -0
- data/lib/jets/controller/stage.rb +33 -0
- data/lib/jets/core.rb +149 -0
- data/lib/jets/core_ext/kernel.rb +13 -0
- data/lib/jets/db.rb +15 -0
- data/lib/jets/dotenv.rb +48 -0
- data/lib/jets/dotenv/ssm.rb +48 -0
- data/lib/jets/erb.rb +51 -0
- data/lib/jets/generator.rb +48 -0
- data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
- data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +39 -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/inflections.rb +32 -0
- data/lib/jets/internal/app/controllers/jets/mailers_controller.rb +97 -0
- data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
- data/lib/jets/internal/app/controllers/jets/rack_controller.rb +25 -0
- data/lib/jets/internal/app/functions/jets/base_path.rb +157 -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 +43 -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 +51 -0
- data/lib/jets/job/base.rb +39 -0
- data/lib/jets/job/dsl.rb +40 -0
- data/lib/jets/job/dsl/dynamodb_event.rb +65 -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/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 +419 -0
- data/lib/jets/lambda/function.rb +29 -0
- data/lib/jets/lambda/function_constructor.rb +55 -0
- data/lib/jets/lambda/functions.rb +34 -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.rb +139 -0
- data/lib/jets/mega/request/source.rb +21 -0
- data/lib/jets/middleware.rb +33 -0
- data/lib/jets/middleware/configurator.rb +84 -0
- data/lib/jets/middleware/default_stack.rb +51 -0
- data/lib/jets/middleware/layer.rb +34 -0
- data/lib/jets/middleware/stack.rb +77 -0
- data/lib/jets/naming.rb +49 -0
- data/lib/jets/overrides/lambda.rb +1 -0
- data/lib/jets/overrides/lambda/marshaller.rb +31 -0
- data/lib/jets/overrides/rails.rb +4 -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/rendering_helper.rb +26 -0
- data/lib/jets/overrides/rails/url_helper.rb +25 -0
- data/lib/jets/poly_fun.rb +73 -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/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.rb +71 -0
- data/lib/jets/resource/api_gateway/base_path/function.rb +42 -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 +78 -0
- data/lib/jets/resource/api_gateway/domain_name.rb +59 -0
- data/lib/jets/resource/api_gateway/method.rb +98 -0
- data/lib/jets/resource/api_gateway/resource.rb +101 -0
- data/lib/jets/resource/api_gateway/rest_api.rb +56 -0
- data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +42 -0
- data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +63 -0
- data/lib/jets/resource/api_gateway/rest_api/routes.rb +7 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +8 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +130 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +29 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +39 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +121 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -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 +56 -0
- data/lib/jets/resource/child_stack/api_gateway.rb +53 -0
- data/lib/jets/resource/child_stack/app_class.rb +107 -0
- data/lib/jets/resource/child_stack/base.rb +24 -0
- data/lib/jets/resource/child_stack/shared.rb +92 -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.rb +214 -0
- data/lib/jets/resource/lambda/function/environment.rb +62 -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 +70 -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/route.rb +166 -0
- data/lib/jets/router.rb +177 -0
- data/lib/jets/router/scope.rb +30 -0
- data/lib/jets/rule/base.rb +19 -0
- data/lib/jets/rule/dsl.rb +110 -0
- data/lib/jets/spec_helpers.rb +54 -0
- data/lib/jets/spec_helpers/params.rb +10 -0
- data/lib/jets/spec_helpers/request.rb +78 -0
- data/lib/jets/spec_helpers/response.rb +5 -0
- data/lib/jets/stack.rb +88 -0
- data/lib/jets/stack/builder.rb +43 -0
- data/lib/jets/stack/definition.rb +50 -0
- data/lib/jets/stack/depends.rb +34 -0
- data/lib/jets/stack/depends/item.rb +9 -0
- data/lib/jets/stack/function.rb +69 -0
- data/lib/jets/stack/main.rb +4 -0
- data/lib/jets/stack/main/dsl.rb +28 -0
- data/lib/jets/stack/main/dsl/base.rb +49 -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/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/output.rb +35 -0
- data/lib/jets/stack/output/dsl.rb +19 -0
- data/lib/jets/stack/output/lookup.rb +36 -0
- data/lib/jets/stack/parameter.rb +37 -0
- data/lib/jets/stack/parameter/dsl.rb +42 -0
- data/lib/jets/stack/resource.rb +31 -0
- data/lib/jets/stack/resource/dsl.rb +19 -0
- data/lib/jets/stack/s3_event.rb +87 -0
- data/lib/jets/tmp_loader.rb +52 -0
- data/lib/jets/turbine.rb +41 -0
- data/lib/jets/turbo.rb +55 -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.ru +5 -0
- data/lib/jets/turbo/project/config/application.rb +4 -0
- data/lib/jets/turbo/project/config/routes.rb +4 -0
- data/lib/jets/turbo/rails.rb +127 -0
- data/lib/jets/turbo/templates/config/database.yml +26 -0
- data/lib/jets/util.rb +38 -0
- data/lib/jets/version.rb +3 -0
- data/readme/prerelease.md +6 -0
- data/readme/testing.md +60 -0
- metadata +1004 -0
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
require "action_view"
|
|
2
|
+
require "fileutils"
|
|
3
|
+
require "net/http"
|
|
4
|
+
require "open-uri"
|
|
5
|
+
require "socket"
|
|
6
|
+
|
|
7
|
+
# Some important folders to help understand how jets builds a project:
|
|
8
|
+
#
|
|
9
|
+
# /tmp/jets: build root where different jets projects get built.
|
|
10
|
+
# /tmp/jets/project: each jets project gets built in a different subdirectory.
|
|
11
|
+
#
|
|
12
|
+
# The rest of the folders are subfolders under /tmp/jets/project.
|
|
13
|
+
#
|
|
14
|
+
module Jets::Builders
|
|
15
|
+
class CodeBuilder
|
|
16
|
+
include Jets::AwsServices
|
|
17
|
+
include Util
|
|
18
|
+
extend Memoist
|
|
19
|
+
|
|
20
|
+
attr_reader :full_project_path
|
|
21
|
+
def initialize
|
|
22
|
+
# Expanding to the full path and capture now.
|
|
23
|
+
# Dir.chdir gets called later and we'll lose this info.
|
|
24
|
+
@full_project_path = File.expand_path(Jets.root) + "/"
|
|
25
|
+
@version_purger = Purger.new
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def build
|
|
29
|
+
check_ruby_version
|
|
30
|
+
@version_purger.purge
|
|
31
|
+
cache_check_message
|
|
32
|
+
|
|
33
|
+
clean_start
|
|
34
|
+
compile_assets # easier to do before we copy the project because node and yarn has been likely setup in the that dir
|
|
35
|
+
compile_rails_assets
|
|
36
|
+
copy_project
|
|
37
|
+
copy_ruby_version_file
|
|
38
|
+
Dir.chdir("#{stage_area}/code") do
|
|
39
|
+
# These commands run from project root
|
|
40
|
+
code_setup
|
|
41
|
+
package_ruby
|
|
42
|
+
code_finish
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Resolves the chicken-and-egg problem with md5 checksums. The handlers need
|
|
47
|
+
# to reference files with the md5 checksum. The files are the:
|
|
48
|
+
#
|
|
49
|
+
# jets/code/rack-checksum.zip
|
|
50
|
+
# jets/code/opt-checksum.zip
|
|
51
|
+
#
|
|
52
|
+
# We compute the checksums before we generate the node shim handlers.
|
|
53
|
+
def calculate_md5s
|
|
54
|
+
Md5.compute! # populates Md5.checksums hash
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def generate_shims
|
|
58
|
+
headline "Generating shims in the handlers folder."
|
|
59
|
+
# Crucial that the Dir.pwd is in the tmp_code because for
|
|
60
|
+
# Jets::Builders::app_files because Jets.boot set ups
|
|
61
|
+
# autoload_paths and this is how project classes are loaded.
|
|
62
|
+
Jets::Builders::HandlerGenerator.build!
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def create_zip_files
|
|
66
|
+
folders = Md5.stage_folders
|
|
67
|
+
# Md5.stage_folders ["stage/bundled", "stage/code"]
|
|
68
|
+
folders.each do |folder|
|
|
69
|
+
zip = Md5Zip.new(folder)
|
|
70
|
+
if exist_on_s3?(zip.md5_name)
|
|
71
|
+
puts "Already exists: s3://#{s3_bucket}/jets/code/#{zip.md5_name}"
|
|
72
|
+
else
|
|
73
|
+
zip = Md5Zip.new(folder)
|
|
74
|
+
zip.create
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def exist_on_s3?(filename)
|
|
80
|
+
s3_key = "jets/code/#{filename}"
|
|
81
|
+
begin
|
|
82
|
+
s3.head_object(bucket: s3_bucket, key: s3_key)
|
|
83
|
+
true
|
|
84
|
+
rescue Aws::S3::Errors::NotFound
|
|
85
|
+
false
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def code_setup
|
|
90
|
+
reconfigure_development_webpacker
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def code_finish
|
|
94
|
+
# Reconfigure code
|
|
95
|
+
store_s3_base_url
|
|
96
|
+
disable_webpacker_middleware
|
|
97
|
+
copy_internal_jets_code
|
|
98
|
+
|
|
99
|
+
# Code prep and zipping
|
|
100
|
+
check_code_size!
|
|
101
|
+
calculate_md5s # must be called before generate_shims and create_zip_files
|
|
102
|
+
generate_shims
|
|
103
|
+
create_zip_files
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def check_code_size!
|
|
107
|
+
CodeSize.check!
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Materialized internal code into actually user Jets app as part of the deploy process.
|
|
111
|
+
# Examples of things that we might materialize:
|
|
112
|
+
#
|
|
113
|
+
# Views
|
|
114
|
+
# Simple Functions
|
|
115
|
+
#
|
|
116
|
+
# For functions, We copy the files into the project because we cannot require
|
|
117
|
+
# simple functions directly since they are wrapped by an anonymous class.
|
|
118
|
+
def copy_internal_jets_code
|
|
119
|
+
files = []
|
|
120
|
+
|
|
121
|
+
mailers_controller = Jets::Router.has_controller?("Jets::MailersController")
|
|
122
|
+
if mailers_controller
|
|
123
|
+
files << "app/controllers/jets/mailers_controller.rb"
|
|
124
|
+
files << "app/views/jets/mailers"
|
|
125
|
+
files << "app/helpers/jets/mailers_helper.rb"
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
files.each do |relative_path|
|
|
129
|
+
src = File.expand_path("../internal/#{relative_path}", File.dirname(__FILE__))
|
|
130
|
+
dest = "#{"#{stage_area}/code"}/#{relative_path}"
|
|
131
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
|
132
|
+
FileUtils.cp_r(src, dest)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Thanks https://stackoverflow.com/questions/9354595/recursively-getting-the-size-of-a-directory
|
|
137
|
+
# Seems to overestimate a little bit but close enough.
|
|
138
|
+
def dir_size(folder)
|
|
139
|
+
Dir.glob(File.join(folder, '**', '*'))
|
|
140
|
+
.select { |f| File.file?(f) }
|
|
141
|
+
.map{ |f| File.size(f) }
|
|
142
|
+
.inject(:+)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# Store s3 base url is needed for asset serving from s3 later. Need to package this
|
|
146
|
+
# as part of the code so we have a reference to it.
|
|
147
|
+
# At this point the minimal stack exists, so we can grab it with the AWS API.
|
|
148
|
+
# We do not want to grab this as part of the live request because it is slow.
|
|
149
|
+
def store_s3_base_url
|
|
150
|
+
write_s3_base_url("#{stage_area}/code/config/s3_base_url.txt")
|
|
151
|
+
write_s3_base_url("#{stage_area}/rack/config/s3_base_url.txt") if Jets.rack?
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def write_s3_base_url(full_path)
|
|
155
|
+
FileUtils.mkdir_p(File.dirname(full_path))
|
|
156
|
+
IO.write(full_path, s3_base_url)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def s3_base_url
|
|
160
|
+
# Allow user to set assets.base_url
|
|
161
|
+
#
|
|
162
|
+
# Jets.application.configure do
|
|
163
|
+
# config.assets.base_url = "https://cloudfront.com/my/base/path"
|
|
164
|
+
# end
|
|
165
|
+
#
|
|
166
|
+
return Jets.config.assets.base_url if Jets.config.assets.base_url
|
|
167
|
+
|
|
168
|
+
region = Jets.aws.region
|
|
169
|
+
|
|
170
|
+
asset_base_url = region == 'us-east-1' ?
|
|
171
|
+
"https://s3.amazonaws.com" :
|
|
172
|
+
"https://s3-#{region}.amazonaws.com"
|
|
173
|
+
"#{asset_base_url}/#{s3_bucket}/jets" # s3_base_url
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def s3_bucket
|
|
177
|
+
Jets.aws.s3_bucket
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def disable_webpacker_middleware
|
|
181
|
+
full_path = "#{"#{stage_area}/code"}/config/disable-webpacker-middleware.txt"
|
|
182
|
+
FileUtils.mkdir_p(File.dirname(full_path))
|
|
183
|
+
FileUtils.touch(full_path)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# This happens in the current app directory not the tmp code for simplicity.
|
|
187
|
+
# This is because the node and yarn has likely been set up correctly there.
|
|
188
|
+
def compile_assets
|
|
189
|
+
if ENV['JETS_SKIP_ASSETS']
|
|
190
|
+
puts "Skip compiling assets".color(:yellow) # useful for debugging
|
|
191
|
+
return
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
headline "Compling assets in current project directory"
|
|
195
|
+
return unless webpacker_included?
|
|
196
|
+
|
|
197
|
+
sh("yarn install")
|
|
198
|
+
webpack_command = File.exist?("#{Jets.root}/bin/webpack") ?
|
|
199
|
+
"bin/webpack" :
|
|
200
|
+
`which webpack`.strip
|
|
201
|
+
sh "JETS_ENV=#{Jets.env} #{webpack_command}"
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def webpacker_included?
|
|
205
|
+
# Old code, leaving around for now:
|
|
206
|
+
# Thanks: https://stackoverflow.com/questions/4195735/get-list-of-gems-being-used-by-a-bundler-project
|
|
207
|
+
# webpacker_loaded = Gem.loaded_specs.keys.include?("webpacker")
|
|
208
|
+
# return unless webpacker_loaded
|
|
209
|
+
|
|
210
|
+
# Checking this way because when using jets standalone for Afterburner mode we don't want to run into
|
|
211
|
+
# bundler gem collisions. TODO: figure out the a better way to handle the collisions.
|
|
212
|
+
lines = IO.readlines("#{Jets.root}/Gemfile")
|
|
213
|
+
lines.detect { |l| l =~ /webpacker/ }
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# This happens in the current app directory not the tmp code for simplicity
|
|
217
|
+
# This is because the node likely been set up correctly there.
|
|
218
|
+
def compile_rails_assets
|
|
219
|
+
return unless Jets.rack? && rails? && !rails_api?
|
|
220
|
+
|
|
221
|
+
if ENV['JETS_SKIP_ASSETS']
|
|
222
|
+
puts "Skip compiling rack assets".color(:yellow) # useful for debugging
|
|
223
|
+
return
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# Need to capture JETS_ROOT since can be changed by Turbo mode
|
|
227
|
+
jets_root = Jets.root
|
|
228
|
+
Bundler.with_clean_env do
|
|
229
|
+
# Switch gemfile for Afterburner mode
|
|
230
|
+
gemfile = ENV['BUNDLE_GEMFILE']
|
|
231
|
+
ENV['BUNDLE_GEMFILE'] = "#{jets_root}/rack/Gemfile"
|
|
232
|
+
sh "cd #{jets_root} && bundle install"
|
|
233
|
+
ENV['BUNDLE_GEMFILE'] = gemfile
|
|
234
|
+
|
|
235
|
+
rails_assets(:clobber, jets_root: jets_root)
|
|
236
|
+
rails_assets(:precompile, jets_root: jets_root)
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def rails_assets(cmd, jets_root:)
|
|
241
|
+
# rake is available in both rails 4 and 5. rails command only in 5
|
|
242
|
+
command = "bundle exec rake assets:#{cmd} --trace"
|
|
243
|
+
command = "RAILS_ENV=#{Jets.env} #{command}" unless Jets.env.development?
|
|
244
|
+
sh("cd #{jets_root}/rack && #{command}")
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
# Rudimentary rails detection
|
|
248
|
+
# Duplicated in builders/reconfigure_rails.rb
|
|
249
|
+
def rails?
|
|
250
|
+
config_ru = "#{Jets.root}/rack/config.ru"
|
|
251
|
+
return false unless File.exist?(config_ru)
|
|
252
|
+
!IO.readlines(config_ru).grep(/Rails.application/).empty?
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
# Rudimentary rails api detection
|
|
256
|
+
# Duplicated in builders/reconfigure_rails.rb
|
|
257
|
+
# Another way of checking is loading a rails console and checking Rails.application.config.api_only
|
|
258
|
+
# Using this way for simplicity.
|
|
259
|
+
def rails_api?
|
|
260
|
+
config_app = "#{Jets.root}/rack/config/application.rb"
|
|
261
|
+
return false unless File.exist?(config_app)
|
|
262
|
+
!IO.readlines(config_app).grep(/config.api_only.*=.*true/).empty?
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
# Cleans out non-cached files like code-*.zip in Jets.build_root
|
|
266
|
+
# for a clean start. Also ensure that the /tmp/jets/project build root exists.
|
|
267
|
+
#
|
|
268
|
+
# Most files are kept around after the build process for inspection and
|
|
269
|
+
# debugging. So we have to clean out the files. But we only want to clean out
|
|
270
|
+
# some of the files.
|
|
271
|
+
def clean_start
|
|
272
|
+
Dir.glob("#{Jets.build_root}/code/code-*.zip").each { |f| FileUtils.rm_f(f) }
|
|
273
|
+
FileUtils.mkdir_p(Jets.build_root) # /tmp/jets/demo
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
# Copy project into temporary directory. Do this so we can keep the project
|
|
277
|
+
# directory untouched and we can also remove a bunch of unnecessary files like
|
|
278
|
+
# logs before zipping it up.
|
|
279
|
+
def copy_project
|
|
280
|
+
headline "Copying current project directory to temporary build area: #{"#{stage_area}/code"}"
|
|
281
|
+
FileUtils.rm_rf("#{build_area}/stage") # clear out from previous build's stage area
|
|
282
|
+
FileUtils.mkdir_p("#{build_area}/stage")
|
|
283
|
+
FileUtils.rm_rf("#{stage_area}/code") # remove current code folder
|
|
284
|
+
move_node_modules(Jets.root, Jets.build_root)
|
|
285
|
+
begin
|
|
286
|
+
# puts "cp -r #{@full_project_path} #{"#{stage_area}/code"}".color(:yellow) # uncomment to debug
|
|
287
|
+
Jets::Util.cp_r(@full_project_path, "#{stage_area}/code")
|
|
288
|
+
ensure
|
|
289
|
+
move_node_modules(Jets.build_root, Jets.root) # move node_modules directory back
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
# Move the node modules to the tmp build folder to speed up project copying.
|
|
294
|
+
# A little bit risky because a ctrl-c in the middle of the project copying
|
|
295
|
+
# results in a missing node_modules but user can easily rebuild that.
|
|
296
|
+
#
|
|
297
|
+
# Tesing shows 6.623413 vs 0.027754 speed improvement.
|
|
298
|
+
def move_node_modules(source_folder, dest_folder)
|
|
299
|
+
source = "#{source_folder}/node_modules"
|
|
300
|
+
dest = "#{dest_folder}/node_modules"
|
|
301
|
+
if File.exist?(source)
|
|
302
|
+
FileUtils.mv(source, dest)
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
# Bit hacky but this saves the user from accidentally forgetting to change this
|
|
307
|
+
# when they deploy a jets project in development mode
|
|
308
|
+
def reconfigure_development_webpacker
|
|
309
|
+
return unless Jets.env.development?
|
|
310
|
+
headline "Reconfiguring webpacker development settings for AWS Lambda."
|
|
311
|
+
|
|
312
|
+
webpacker_yml = "#{"#{stage_area}/code"}/config/webpacker.yml"
|
|
313
|
+
return unless File.exist?(webpacker_yml)
|
|
314
|
+
|
|
315
|
+
config = YAML.load_file(webpacker_yml)
|
|
316
|
+
config["development"]["compile"] = false # force this to be false for deployment
|
|
317
|
+
new_yaml = YAML.dump(config)
|
|
318
|
+
IO.write(webpacker_yml, new_yaml)
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
def ruby_packager
|
|
322
|
+
RubyPackager.new(tmp_code)
|
|
323
|
+
end
|
|
324
|
+
memoize :ruby_packager
|
|
325
|
+
|
|
326
|
+
def rack_packager
|
|
327
|
+
RackPackager.new("#{tmp_code}/rack")
|
|
328
|
+
end
|
|
329
|
+
memoize :rack_packager
|
|
330
|
+
|
|
331
|
+
def package_ruby
|
|
332
|
+
return if Jets.poly_only?
|
|
333
|
+
|
|
334
|
+
check_agree
|
|
335
|
+
ruby_packager.install
|
|
336
|
+
reconfigure_rails # call here after "#{stage_area}/code" is available
|
|
337
|
+
rack_packager.install
|
|
338
|
+
ruby_packager.finish # by this time we have a /tmp/jets/demo/stage/code/vendor/gems
|
|
339
|
+
rack_packager.finish
|
|
340
|
+
|
|
341
|
+
build_lambda_layer
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
def check_agree
|
|
345
|
+
agree = Jets::Gems::Agree.new
|
|
346
|
+
agree.prompt
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
def build_lambda_layer
|
|
350
|
+
return if Jets.poly_only?
|
|
351
|
+
lambda_layer = LambdaLayer.new
|
|
352
|
+
lambda_layer.build
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
# TODO: Move logic into plugin instead
|
|
356
|
+
def reconfigure_rails
|
|
357
|
+
ReconfigureRails.new("#{"#{stage_area}/code"}/rack").run
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
def cache_check_message
|
|
361
|
+
if File.exist?("#{Jets.build_root}/cache")
|
|
362
|
+
puts "The #{Jets.build_root}/cache folder exists. Incrementally re-building the jets using the cache. To clear the cache: rm -rf #{Jets.build_root}/cache"
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
def check_ruby_version
|
|
367
|
+
unless ruby_version_supported?
|
|
368
|
+
puts "You are using Ruby version #{RUBY_VERSION} which is not supported by Jets."
|
|
369
|
+
ruby_variant = Jets::RUBY_VERSION.split('.')[0..1].join('.') + '.x'
|
|
370
|
+
abort("Jets uses Ruby #{Jets::RUBY_VERSION}. You should use a variant of Ruby #{ruby_variant}".color(:red))
|
|
371
|
+
end
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
def copy_ruby_version_file
|
|
375
|
+
return unless File.exists?(".ruby-version")
|
|
376
|
+
|
|
377
|
+
FileUtils.cp_r(Jets.root.join(".ruby-version"), build_area)
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
def ruby_version_supported?
|
|
381
|
+
pattern = /(\d+)\.(\d+)\.(\d+)/
|
|
382
|
+
md = RUBY_VERSION.match(pattern)
|
|
383
|
+
ruby = {major: md[1], minor: md[2]}
|
|
384
|
+
md = Jets::RUBY_VERSION.match(pattern)
|
|
385
|
+
jets = {major: md[1], minor: md[2]}
|
|
386
|
+
|
|
387
|
+
ruby[:major] == jets[:major] && ruby[:minor] == jets[:minor]
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
# Group all the path settings together here
|
|
391
|
+
def self.tmp_code
|
|
392
|
+
Jets::Commands::Build.tmp_code
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
def tmp_code
|
|
396
|
+
self.class.tmp_code
|
|
397
|
+
end
|
|
398
|
+
end
|
|
399
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
module Jets::Builders
|
|
2
|
+
class CodeSize
|
|
3
|
+
LAMBDA_SIZE_LIMIT = 250 # Total lambda limit is 250MB
|
|
4
|
+
include Util
|
|
5
|
+
|
|
6
|
+
def self.check!
|
|
7
|
+
new.check
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def check
|
|
11
|
+
return if within_lambda_limit?
|
|
12
|
+
say "Over the Lambda size limit of #{LAMBDA_SIZE_LIMIT}MB".color(:red)
|
|
13
|
+
say "Please reduce the size of your code."
|
|
14
|
+
display_sizes
|
|
15
|
+
exit 1
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def within_lambda_limit?
|
|
19
|
+
total_size < LAMBDA_SIZE_LIMIT * 1024 # 120MB
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def total_size
|
|
23
|
+
code_size = compute_size("#{stage_area}/code")
|
|
24
|
+
opt_size = compute_size("#{stage_area}/opt")
|
|
25
|
+
opt_size + code_size # total_size
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def display_sizes
|
|
29
|
+
code_size = compute_size("#{stage_area}/code")
|
|
30
|
+
opt_size = compute_size("#{stage_area}/opt")
|
|
31
|
+
total_size = opt_size + code_size
|
|
32
|
+
overlimit = (LAMBDA_SIZE_LIMIT * 1024 - total_size) * -1
|
|
33
|
+
say "Sizes:"
|
|
34
|
+
say "Code: #{megabytes(code_size)} - #{stage_area}/code"
|
|
35
|
+
say "Gem Layer: #{megabytes(opt_size)} - #{stage_area}/opt"
|
|
36
|
+
say "Total Package: #{megabytes(total_size)}"
|
|
37
|
+
say "Over limit by: #{megabytes(overlimit)}"
|
|
38
|
+
say "Sometimes blowing away the /tmp/jets cache will reduce the size: rm -rf /tmp/jets"
|
|
39
|
+
# sh "du -kcsh #{stage_area}/*" unless ENV['TEST'] # uncomment to debug
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def compute_size(path)
|
|
43
|
+
# -k option is required for macosx but not for linux
|
|
44
|
+
out = `du -ks #{path}`
|
|
45
|
+
out.split(' ').first.to_i # bytes
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def megabytes(bytes)
|
|
49
|
+
n = bytes / 1024.0
|
|
50
|
+
sprintf('%.1f', n) + 'MB'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def say(message)
|
|
54
|
+
puts message unless ENV['TEST']
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|