jets 6.0.0.beta1 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 557cd5532ad372ba0ea9be975103f5dfb77a63b3472d0582f98570cd75a114e7
4
- data.tar.gz: 773a6bf556945018ae87c73f3c37ee3294be02f463209db3e2c8712ae9757e4f
3
+ metadata.gz: 8ea57049f7d7ee0153aac387f0feb438ee5a9e9816f8aeab7e21a9a6d4e33d69
4
+ data.tar.gz: 2a6e9de21b85674322a8adcfb234204272aefe2e30ae6babc77244ab9f4d8635
5
5
  SHA512:
6
- metadata.gz: eb08a46c81660e3d0c503427d2fbd4426b4d37a3a7dc27e855a34930bc3f5be6e812ddd9507dca82383e95b6d2aea360b3f92c8f10b03d95b9cd22b8cffd57cf
7
- data.tar.gz: 043127d02de6be061b8a3c1ad158bb206edf63ac4e4253685884987bbfac1421d1ef53974afa0ee8ba8c5912061b80df3b222538fe1f3dd0fd1aa17d07b18e40
6
+ metadata.gz: 2584bc53863cef64744101705db2b65a312d4f332745b8d0ca8a41558b5f3e0dacae87ec1169dcdc4c2bfa1af75de7156c24015b212fd6e3eccc522a2b5f0da5
7
+ data.tar.gz: 1fcfc2dc86ff24cec62eb34b0559229a47ebbc868e49fc2f1e9d39c7cd8836c70e1cff4adf8fbb3eee9af96610fdabea7dc21d342eda96ff0b0afa8405e2b7ff
data/CHANGELOG.md CHANGED
@@ -3,7 +3,7 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/).
5
5
 
6
- ## [6.0.0] - Unrelease
6
+ ## [6.0.0] - 2024-05-23
7
7
 
8
8
  * Rails Support
9
9
  * Hooks Support
@@ -14,16 +14,13 @@ module Jets
14
14
  memoize :loader
15
15
 
16
16
  def configure(root = Jets.root)
17
- all_loaders = Zeitwerk::Registry.loaders
18
- already_configured_dirs = all_loaders.map(&:dirs).flatten
19
-
20
17
  full_path = proc { |path| "#{root}/#{path}" }
21
18
  autoload_paths = config.autoload_paths.map(&full_path)
22
19
  extension_paths = config.extension_paths.map(&full_path)
23
20
  load_paths = autoload_paths + extension_paths
24
21
 
25
22
  load_paths.each do |path|
26
- next if already_configured_dirs.include?(path)
23
+ next if already_configured_dir?(path)
27
24
  next unless File.directory?(path)
28
25
  loader.push_dir(path)
29
26
  end
@@ -34,6 +31,23 @@ module Jets
34
31
  end
35
32
  end
36
33
 
34
+ def already_configured_dir?(path)
35
+ all_loaders = Zeitwerk::Registry.loaders
36
+ already_configured_dirs = all_loaders.map(&:dirs).flatten
37
+
38
+ # Normalize the path to avoid trailing slashes issues
39
+ normalized_path = File.expand_path(path)
40
+
41
+ # Check the path and its parent directories
42
+ while normalized_path != "/"
43
+ return true if already_configured_dirs.include?(normalized_path)
44
+ normalized_path = File.dirname(normalized_path)
45
+ end
46
+
47
+ # Check the root directory explicitly
48
+ already_configured_dirs.include?("/")
49
+ end
50
+
37
51
  # Call at end
38
52
  def setup
39
53
  loader.on_load do |cpath, value, abspath|
@@ -8,7 +8,11 @@ class Jets::CLI
8
8
 
9
9
  def are_you_sure?
10
10
  stack_name = Jets.project.namespace
11
- message = "Will delete #{stack_name.color(:green)}"
11
+ message = <<~EOL
12
+ Will delete #{stack_name.color(:green)}
13
+
14
+ Uses remote runner to delete the stack and resources.
15
+ EOL
12
16
  unless stack_exists?(stack_name)
13
17
  message << <<~EOL
14
18
 
@@ -14,7 +14,7 @@ class Jets::CLI
14
14
  resources = cfn.describe_stack_resources(stack_name: stack_name).stack_resources
15
15
  resources.each do |r|
16
16
  if r.resource_type == "AWS::Lambda::Function"
17
- functions << r.physical_resource_id
17
+ functions << r.physical_resource_id if r.physical_resource_id # race condition. can be nil for a brief moment while provisioning
18
18
  end
19
19
  end
20
20
  end
@@ -11,13 +11,13 @@ module Jets::CLI::Group
11
11
  end
12
12
 
13
13
  def init_project_name
14
- Jets.project.name # inferred from the folder name
14
+ # inferred from the folder name
15
+ Dir.pwd.split("/").last.gsub(/[^a-zA-Z0-9_]/, "-").squeeze("-")
15
16
  end
16
17
 
17
18
  def framework
18
- Jets::CLI::Init::Detect.new.framework
19
+ Jets::Framework.name
19
20
  end
20
- memoize :framework
21
21
 
22
22
  def package_type
23
23
  (framework == "rails") ? "image" : "zip"
@@ -1,7 +1,36 @@
1
1
  Jets.deploy.configure do
2
+ # CloudFront Lambda URL https://docs.rubyonjets.com/docs/routing/lambda/cloudfront/distribution/
3
+ # config.lambda.url.cloudfront.enable = true
4
+ # config.lambda.url.cloudfront.cert.arn = acm_cert_arn(domain: "domain.com", region: "us-east-1")
5
+ # config.lambda.url.cloudfront.route53.enable = true
6
+
7
+ # CloudFront Assets
8
+ # config.assets.cloudfront.enable = true
9
+ # config.assets.cloudfront.cert.arn = acm_cert_arn(domain: "domain.com", region: "us-east-1")
10
+ # config.assets.cloudfront.route53.enable = true
11
+
12
+ # Release phase https://docs.rubyonjets.com/docs/hooks/remote/release/
13
+ # config.release.phase.command = "bundle exec rails db:migrate"
14
+
15
+ # Scaling https://docs.rubyonjets.com/docs/config/concurrency/
16
+ # config.lambda.controller.provisioned_concurrency = 1 # costs money, no cold start
17
+ # config.lambda.controller.reserved_concurrency = 25 # free and limits scaling
18
+
19
+ # IAM https://docs.rubyonjets.com/docs/iam/app/iam-policies/
20
+ # config.lambda.iam.policy = ["sns"]
21
+ # config.lambda.iam.managed_policy = ["AmazonS3FullAccess"]
22
+
23
+ # Docker https://docs.rubyonjets.com/docs/docker/dockerfile/managed/
24
+ # config.dockerfile.packages.apt.build_stage = ["default-libmysqlclient-dev"]
25
+ # config.dockerfile.packages.apt.deployment_stage = ["default-mysql-client"]
26
+
2
27
  <% unless framework == "rails" -%>
3
28
  # https://docs.rubyonjets.com/docs/config/package-type/
29
+ <% if %w[rack sinatra].include?(framework) -%>
30
+ # config.package_type = "zip" # default: image IE: image or zip
31
+ <% else -%>
4
32
  # config.package_type = "image" # default: image IE: image or zip
33
+ <% end -%>
5
34
 
6
35
  <% end -%>
7
36
  <% if framework == "rails" -%>
@@ -9,35 +38,4 @@ Jets.deploy.configure do
9
38
  # config.job.enable = true
10
39
 
11
40
  <% end -%>
12
- # Docker https://docs.rubyonjets.com/docs/docker/dockerfile/managed/
13
- # config.dockerfile.packages.apt.build_stage = ["default-libmysqlclient-dev"]
14
- # config.dockerfile.packages.apt.deployment_stage = ["default-mysql-client"]
15
-
16
- # CloudFront Lambda URL https://docs.rubyonjets.com/docs/routing/lambda/cloudfront/distribution/
17
- # config.lambda.url.cloudfront.enable = true
18
- # config.lambda.url.cloudfront.cert.arn = acm_cert_arn("domain.com", region: "us-east-1")
19
- # config.lambda.url.cloudfront.route53.enable = true
20
-
21
- # WAF https://docs.rubyonjets.com/docs/routing/lambda/cloudfront/waf/
22
- # config.lambda.url.cloudfront.web_acl_id = web_acl_arn(ssm_env, scope: "CLOUDFRONT")
23
- # config.waf.rules = ["AWSManagedRulesSQLiRuleSet"]
24
-
25
- # Scaling https://docs.rubyonjets.com/docs/config/provisioned-concurrency/
26
- # config.lambda.controller.provisioned_concurrency = 1 # costs money, no cold start
27
- # config.lambda.controller.reserved_concurrency = 10 # free and limits scaling
28
-
29
- # Release phase https://docs.rubyonjets.com/docs/hooks/remote/release/
30
- # config.release.phase.command = "bundle exec rails db:migrate"
31
-
32
- # CI https://docs.rubyonjets.com/docs/ci/getting-started/
33
- # use jets ci:init to add these settings automatically
34
- # config.ci.source = {
35
- # Type: "GITHUB",
36
- # Location: "https://github.com/ORG/REPO"
37
- # }
38
- # config.ci.source_version = "main"
39
- # config.ci.env.vars = {
40
- # BUNDLE_GITHUB__COM: "SSM:/#{ssm_env}/BUNDLE_GITHUB__COM",
41
- # JETS_API_KEY: "SSM:/#{ssm_env}/JETS_API_KEY"
42
- # }
43
41
  end
@@ -5,7 +5,7 @@
5
5
  <% if framework == "rails" -%>
6
6
  RAILS_ENV=production
7
7
  RAILS_LOG_TO_STDOUT=1
8
- # SECRET_KEY_BASE=SSM # SSM:/<%= init_project_name %>/dev/SECRET_KEY_BASE remember to set a secret key base
8
+ # SECRET_KEY_BASE=SSM # => SSM:/<%= init_project_name %>/dev/SECRET_KEY_BASE remember to set a secret key base
9
9
  <% end -%>
10
10
 
11
11
  # Examples:
@@ -14,5 +14,7 @@ RAILS_LOG_TO_STDOUT=1
14
14
  # KEY2=SSM:/abs/path/to/KEY2
15
15
  # Conventions https://docs.rubyonjets/docs/env/ssm/conventions/
16
16
  # SSM path under /<%= init_project_name %>/dev/ are autoloaded.
17
- # You can also control this behavior and then manually declare the SSM parameter.
18
- # DATABASE_URL=SSM # SSM:/<%= init_project_name %>/dev/DATABASE_URL
17
+ # For example, DATABASE_URL does not need to be declared here.
18
+ # It can be conventionally autoloaded.
19
+ # Below is an example of how to manually declare but it's not needed.
20
+ # DATABASE_URL=SSM # => SSM:/<%= init_project_name %>/dev/DATABASE_URL
data/lib/jets/cli/init.rb CHANGED
@@ -16,7 +16,7 @@ class Jets::CLI
16
16
  private
17
17
 
18
18
  def sure_message
19
- detected_message = "Detected #{framework} framework.\n" if framework
19
+ detected_message = "Detected #{framework.titleize} framework.\n" if framework
20
20
  <<~EOL
21
21
  #{detected_message}This will initialize the project for Jets.
22
22
 
@@ -26,6 +26,39 @@ class Jets::CLI
26
26
  EOL
27
27
  end
28
28
 
29
+ def configure_rails
30
+ # config/environments/production.rb adjustments
31
+ # Comment out public_file_server.enabled on new Rails 7.0 apps
32
+ # config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
33
+ comment_out_line("config.public_file_server.enabled = ENV", env: "production")
34
+ config_environment("config.public_file_server.enabled = false\n\n", env: "production")
35
+ # Comment out config.asset_host = "http://assets.example.com" on new Rails 7.0 apps
36
+ # config.asset_host = "http://assets.example.com"
37
+ comment_out_line('config.asset_host = "', env: "production")
38
+ asset_host = <<~EOL
39
+
40
+ # Assets https://docs.rubyonjets.com/docs/assets/cloudfront/
41
+ config.asset_host = ENV["JETS_ASSET_HOST"] unless ENV["JETS_ASSET_HOST"].blank?
42
+ EOL
43
+ config_environment(asset_host, env: "production")
44
+
45
+ jets_job = <<~EOL
46
+ # Jobs https://docs.rubyonjets.com/docs/jobs/enable/
47
+ # config.active_job.queue_adapter = :jets_job
48
+ EOL
49
+ config_environment(jets_job, env: "production")
50
+ end
51
+
52
+ def configure_hanami
53
+ after = " class App < Hanami::App\n"
54
+ data = <<~EOL
55
+ # https://guides.hanamirb.org/v2.1/assets/using-a-cdn/
56
+ # https://docs.rubyonjets.com/docs/assets/cloudfront/
57
+ config.assets.base_url = ENV["JETS_ASSET_HOST"] if ENV["JETS_ASSET_HOST"]
58
+ EOL
59
+ inject_into_file "config/app.rb", optimize_indentation(data, 4), after: after, verbose: true
60
+ end
61
+
29
62
  public
30
63
 
31
64
  def are_you_sure?
@@ -46,21 +79,12 @@ class Jets::CLI
46
79
  end
47
80
 
48
81
  def configure_environment
49
- return unless framework == "rails"
50
- # config/environments/production.rb adjustments
51
- # Comment out public_file_server.enabled on new Rails 7.0 apps
52
- # config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
53
- comment_out_line("config.public_file_server.enabled = ENV", env: "production")
54
- config_environment("config.public_file_server.enabled = false", env: "production")
55
- # Comment out config.asset_host = "http://assets.example.com" on new Rails 7.0 apps
56
- # config.asset_host = "http://assets.example.com"
57
- comment_out_line('config.asset_host = "', env: "production")
58
- config_environment('config.asset_host = ENV["JETS_ASSET_HOST"] unless ENV["JETS_ASSET_HOST"].blank?', env: "production")
59
- jets_job = <<~EOL
60
- # Docs: https://docs.rubyonjets.com/docs/jobs/enable/
61
- # config.active_job.queue_adapter = :jets_job
62
- EOL
63
- config_environment(jets_job, env: "production")
82
+ case framework
83
+ when "rails"
84
+ configure_rails
85
+ when "hanami"
86
+ configure_hanami
87
+ end
64
88
  end
65
89
  end
66
90
  end
data/lib/jets/cli/stop.rb CHANGED
@@ -8,8 +8,8 @@ class Jets::CLI
8
8
  if stopped
9
9
  log.info <<~EOL
10
10
  Deploy has been stopped: #{build_id}
11
- Note: If the deploy has already started the CloudFormation update,
12
- it will continue. Please check the logs.
11
+ If the deploy has already started the CloudFormation update it will continue.
12
+ Please check the logs.
13
13
 
14
14
  EOL
15
15
  show_console_log_url(build_id)
@@ -9,18 +9,18 @@ Jets.deploy.configure do
9
9
  # config.waf.rules = []
10
10
 
11
11
  # Jets WAF Managed Rules
12
- # config.waf.managed_rules.blanket_rate_limiter.enable = true # default: true
13
- # config.waf.managed_rules.blanket_rate_limiter.limit = 1000
14
- # config.waf.managed_rules.blanket_rate_limiter.evaluation_window_sec = 300
15
- # config.waf.managed_rules.blanket_rate_limiter.aggregate_key_type = "IP"
12
+ # config.waf.custom_rules.blanket_rate_limiter.enable = true # default: true
13
+ # config.waf.custom_rules.blanket_rate_limiter.limit = 1000
14
+ # config.waf.custom_rules.blanket_rate_limiter.evaluation_window_sec = 300
15
+ # config.waf.custom_rules.blanket_rate_limiter.aggregate_key_type = "IP"
16
16
 
17
- # config.waf.managed_rules.uri_rate_limiter.enable = true # default: false
18
- # config.waf.managed_rules.uri_rate_limiter.limit = 100
19
- # config.waf.managed_rules.uri_rate_limiter.logical_statement = "Or"
20
- # config.waf.managed_rules.uri_rate_limiter.paths = ["/login", "/signup"] # default: ["/"]
21
- # config.waf.managed_rules.uri_rate_limiter.evaluation_window_sec = 300
22
- # config.waf.managed_rules.uri_rate_limiter.aggregate_key_type = "IP"
23
- # config.waf.managed_rules.uri_rate_limiter.string_match_condition = "STARTS_WITH"
17
+ # config.waf.custom_rules.uri_rate_limiter.enable = true # default: false
18
+ # config.waf.custom_rules.uri_rate_limiter.limit = 100
19
+ # config.waf.custom_rules.uri_rate_limiter.logical_statement = "Or"
20
+ # config.waf.custom_rules.uri_rate_limiter.paths = ["/login", "/signup"] # default: ["/"]
21
+ # config.waf.custom_rules.uri_rate_limiter.evaluation_window_sec = 300
22
+ # config.waf.custom_rules.uri_rate_limiter.aggregate_key_type = "IP"
23
+ # config.waf.custom_rules.uri_rate_limiter.string_match_condition = "STARTS_WITH"
24
24
 
25
25
  # Docs: https://docs.rubyonjets.com/docs/routing/lambda/cloudfront/waf/
26
26
  end
@@ -62,12 +62,23 @@ module Jets::Core::Config
62
62
  Jets::Core::Booter.require_config(:project)
63
63
  return @name if @name
64
64
 
65
- if jets_info_project_name
66
- jets_info_project_name
67
- else
68
- # when not set, conventionally infer app name from current directory
69
- @name_inferred = true
70
- Dir.pwd.split("/").last.gsub(/[^a-zA-Z0-9_]/, "-").squeeze("-")
65
+ project_name = jets_info_project_name
66
+ unless project_name
67
+ puts "ERROR: Jets project name not set".color(:red)
68
+ abort <<~EOL
69
+ Please set config.name in config/jets/project.rb or the JETS_PROJECT environment variable
70
+ Example:
71
+
72
+ config/jets/project.rb
73
+
74
+ Jets.project.configure do
75
+ config.name = "demo"
76
+ end
77
+
78
+ Or set the JETS_PROJECT environment variable:
79
+
80
+ export JETS_PROJECT=demo
81
+ EOL
71
82
  end
72
83
  end
73
84
  memoize :name
@@ -0,0 +1,51 @@
1
+ module Jets
2
+ class Framework
3
+ class << self
4
+ extend Memoist
5
+ def env_var
6
+ "#{name.upcase}_ENV" if name # can be nil
7
+ end
8
+
9
+ def env
10
+ return unless env_var
11
+ ENV[env_var] || "production" # for Dockerfile default to production
12
+ end
13
+
14
+ def name
15
+ gems.each do |gem|
16
+ frameworks.each do |framework|
17
+ if gem == framework
18
+ # Special case for puma. If puma is detected, it means it is a rack app.
19
+ if framework == "puma"
20
+ return "rack"
21
+ else
22
+ return framework
23
+ end
24
+ end
25
+ end
26
+ end
27
+ nil
28
+ end
29
+ memoize :name
30
+
31
+ def frameworks
32
+ %w[
33
+ rails
34
+ sinatra
35
+ hanami
36
+ rack
37
+ puma
38
+ ]
39
+ end
40
+
41
+ def gems
42
+ return [] unless File.exist?("Gemfile")
43
+ Bundler.with_unbundled_env do
44
+ gemfile_content = File.read("Gemfile")
45
+ dsl = Bundler::Dsl.evaluate(Bundler.default_gemfile, gemfile_content, {})
46
+ dsl.dependencies.map(&:name)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -23,7 +23,7 @@ module Jets::Git
23
23
  end
24
24
 
25
25
  def git_url
26
- "#{host}/#{full_repo}"
26
+ "#{host}/#{full_repo}" if host && full_repo
27
27
  end
28
28
 
29
29
  def host
@@ -11,18 +11,22 @@ module Jets::Shim::Adapter
11
11
 
12
12
  class << self
13
13
  def handler(event, context = nil, target = nil)
14
- puts "The default fallback handler is being called because a handler for it could not be found"
15
- puts "For debugging, here is the"
14
+ puts <<~EOL
15
+ WARN: handler for it could not be found. The default fallback handler is being used.
16
+ The default fallback handler simply prints out the event payload for debugging, it will be printed below.
17
+ Usually the default handler is not what you want.
18
+ You might be using a test event payload for testing which does not represent a real event.
19
+ Please double check the event payload.
20
+ EOL
16
21
  if ENV["_HANDLER"] # on AWS Lambda
17
22
  puts "event: #{JSON.dump(event)}"
18
23
  else
19
24
  puts "event:"
20
25
  puts JSON.pretty_generate(event)
21
26
  end
22
- puts "Please double check the event payload.\n\n"
23
27
 
24
28
  if target
25
- puts "ERROR: event handler target not found: #{target}".color(:red)
29
+ puts "WARN: Event handler target not found: #{target}".color(:red)
26
30
  target_class, target_method = target.split(".")
27
31
  target_class = target_class.camelize
28
32
  target_method ||= "perform"
@@ -40,7 +44,8 @@ module Jets::Shim::Adapter
40
44
 
41
45
  else
42
46
  puts <<~EOL
43
- You can also configure a custom fallback handler in the config/jets/shim.rb file.
47
+ You can also configure a custom fallback handler with a config/jets/shim.rb file.
48
+ Though custom handlers rarely needed and you should double check the event payload.
44
49
  Example:
45
50
 
46
51
  config/jets/shim.rb
@@ -55,7 +60,7 @@ module Jets::Shim::Adapter
55
60
  end
56
61
  # Custom Jets error message
57
62
  {
58
- errorMessage: "event handler not found. Look at logs for details",
63
+ errorMessage: "Event handler not found. Look at logs for details",
59
64
  errorType: "JetsEventHandlerNotFound"
60
65
  }
61
66
  end
@@ -21,51 +21,46 @@ module Jets::Shim
21
21
  elsif @rack_app
22
22
  @rack_app
23
23
  else
24
- boot_path = @boot_path || infer_boot_path
25
- # Possible that boot_path is nil.
26
- # Case: Jets events app only.
27
- if boot_path
28
- require_boot_path(boot_path) if boot_path # in case boot_path is not set
29
- infer_rack_app(boot_path) # IE: Rails.application or App
30
- end
24
+ framework_app
31
25
  end
32
26
  end
33
27
  alias_method :app, :rack_app
34
28
  alias_method :app=, :rack_app=
35
29
 
36
- def infer_boot_path
37
- if rails?
38
- "config/environment"
39
- elsif File.exist?("app.rb")
40
- "app"
30
+ def framework_app
31
+ # Explicitly set boot_path takes precedence
32
+ # IE: my_app.rb => MyApp
33
+ if @boot_path && File.exist?(@boot_path)
34
+ app_class = @boot_path.sub(/\.rb$/, "").camelize.constantize
35
+ return app_class
41
36
  end
42
- end
43
37
 
44
- def require_boot_path(path)
45
- path = path.starts_with?(".") ? path : "./#{path}"
46
- path = path.ends_with?(".rb") ? path : "#{path}.rb"
47
- require path # IE: config/environment.rb (Rails) or app.rb (generic rack app)
48
- end
38
+ # Infer app.rb boot_path
39
+ # IE: app.rb => App
40
+ if File.exist?("app.rb")
41
+ require_boot_path("app")
42
+ return App
43
+ end
49
44
 
50
- def infer_rack_app(boot_path)
51
- if rails?
45
+ # Infer rack app from config.ru
46
+ case framework
47
+ when "rails"
48
+ require_boot_path "config/environment"
52
49
  Rails.application
53
- else
54
- boot_path.sub!(/\.rb$/, "") # remove .rb extension
55
- boot_path.camelize.constantize
50
+ when "hanami"
51
+ require "hanami/boot"
52
+ Hanami.app
56
53
  end
57
54
  end
58
55
 
59
- def rails?
60
- framework?(:rails)
56
+ def require_boot_path(path)
57
+ path = path.starts_with?(".") ? path : "./#{path}"
58
+ path = path.ends_with?(".rb") ? path : "#{path}.rb"
59
+ require path # IE: config/environment.rb (Rails) or app.rb (generic rack app)
61
60
  end
62
61
 
63
- def framework?(name)
64
- if File.exist?("config.ru")
65
- # IE: Jets.application or Rails.application
66
- IO.readlines("config.ru").any? { |l| l.include?("#{name.to_s.camelize}.application") }
67
- end
62
+ def framework
63
+ Jets::Framework.name
68
64
  end
69
- memoize :framework?
70
65
  end
71
66
  end
data/lib/jets/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jets
2
- VERSION = "6.0.0.beta1"
2
+ VERSION = "6.0.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jets
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0.beta1
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-05-20 00:00:00.000000000 Z
11
+ date: 2024-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-logs
@@ -756,7 +756,6 @@ files:
756
756
  - lib/jets/cli/help/status.md
757
757
  - lib/jets/cli/help/url.md
758
758
  - lib/jets/cli/init.rb
759
- - lib/jets/cli/init/detect.rb
760
759
  - lib/jets/cli/init/templates/config/jets/bootstrap.rb.tt
761
760
  - lib/jets/cli/init/templates/config/jets/deploy.rb.tt
762
761
  - lib/jets/cli/init/templates/config/jets/project.rb.tt
@@ -850,6 +849,7 @@ files:
850
849
  - lib/jets/event/helpers/sqs_event.rb
851
850
  - lib/jets/event/s3.rb
852
851
  - lib/jets/exception_reporting.rb
852
+ - lib/jets/framework.rb
853
853
  - lib/jets/git.rb
854
854
  - lib/jets/git/azure.rb
855
855
  - lib/jets/git/base.rb
@@ -981,11 +981,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
981
981
  version: 2.7.0
982
982
  required_rubygems_version: !ruby/object:Gem::Requirement
983
983
  requirements:
984
- - - ">"
984
+ - - ">="
985
985
  - !ruby/object:Gem::Version
986
- version: 1.3.1
986
+ version: '0'
987
987
  requirements: []
988
- rubygems_version: 3.4.19
988
+ rubygems_version: 3.5.10
989
989
  signing_key:
990
990
  specification_version: 4
991
991
  summary: Serverless Deployment Service
@@ -1,30 +0,0 @@
1
- class Jets::CLI::Init
2
- class Detect
3
- def framework
4
- gems.each do |gem|
5
- frameworks.each do |framework|
6
- return framework if gem == framework
7
- end
8
- end
9
- nil
10
- end
11
-
12
- def frameworks
13
- %w[
14
- rails
15
- sinatra
16
- hanami
17
- grape
18
- ]
19
- end
20
-
21
- def gems
22
- return [] unless File.exist?("Gemfile")
23
- Bundler.with_unbundled_env do
24
- gemfile_content = File.read("Gemfile")
25
- dsl = Bundler::Dsl.evaluate(Bundler.default_gemfile, gemfile_content, {})
26
- dsl.dependencies.map(&:name)
27
- end
28
- end
29
- end
30
- end