shopify-cli 2.4.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/shopify.yml +0 -2
  3. data/.rubocop.yml +14 -14
  4. data/.rubocop_todo.yml +3 -3
  5. data/CHANGELOG.md +5 -0
  6. data/Dockerfile +1 -1
  7. data/Gemfile.lock +1 -1
  8. data/RELEASING.md +1 -1
  9. data/Rakefile +18 -18
  10. data/bin/shopify +3 -3
  11. data/lib/project_types/extension/cli.rb +3 -3
  12. data/lib/project_types/extension/commands/build.rb +2 -2
  13. data/lib/project_types/extension/commands/check.rb +2 -2
  14. data/lib/project_types/extension/commands/connect.rb +1 -1
  15. data/lib/project_types/extension/commands/create.rb +41 -23
  16. data/lib/project_types/extension/commands/extension_command.rb +1 -1
  17. data/lib/project_types/extension/commands/info.rb +1 -1
  18. data/lib/project_types/extension/commands/push.rb +1 -1
  19. data/lib/project_types/extension/commands/register.rb +2 -2
  20. data/lib/project_types/extension/commands/serve.rb +5 -5
  21. data/lib/project_types/extension/commands/tunnel.rb +6 -6
  22. data/lib/project_types/extension/extension_project.rb +4 -4
  23. data/lib/project_types/extension/features/argo.rb +2 -2
  24. data/lib/project_types/extension/features/argo_config.rb +5 -5
  25. data/lib/project_types/extension/features/argo_serve.rb +20 -6
  26. data/lib/project_types/extension/features/argo_setup.rb +1 -1
  27. data/lib/project_types/extension/features/argo_setup_step.rb +1 -1
  28. data/lib/project_types/extension/features/argo_setup_steps.rb +2 -2
  29. data/lib/project_types/extension/forms/connect.rb +2 -2
  30. data/lib/project_types/extension/forms/create.rb +2 -2
  31. data/lib/project_types/extension/forms/questions/ask_app.rb +2 -2
  32. data/lib/project_types/extension/forms/questions/ask_name.rb +1 -1
  33. data/lib/project_types/extension/forms/questions/ask_registration.rb +2 -2
  34. data/lib/project_types/extension/forms/questions/ask_template.rb +2 -2
  35. data/lib/project_types/extension/forms/questions/ask_type.rb +2 -2
  36. data/lib/project_types/extension/messages/message_loading.rb +2 -2
  37. data/lib/project_types/extension/models/development_server.rb +45 -6
  38. data/lib/project_types/extension/models/development_server_requirements.rb +22 -3
  39. data/lib/project_types/extension/models/lazy_specification_handler.rb +1 -1
  40. data/lib/project_types/extension/models/specification.rb +1 -1
  41. data/lib/project_types/extension/models/specification_handlers/default.rb +10 -2
  42. data/lib/project_types/extension/models/specification_handlers/theme_app_extension.rb +1 -1
  43. data/lib/project_types/extension/models/specifications.rb +4 -4
  44. data/lib/project_types/extension/tasks/choose_next_available_port.rb +1 -1
  45. data/lib/project_types/extension/tasks/configure_features.rb +1 -1
  46. data/lib/project_types/extension/tasks/configure_options.rb +1 -1
  47. data/lib/project_types/extension/tasks/converters/product_converter.rb +1 -1
  48. data/lib/project_types/extension/tasks/create_extension.rb +2 -2
  49. data/lib/project_types/extension/tasks/fetch_specifications.rb +2 -2
  50. data/lib/project_types/extension/tasks/find_npm_packages.rb +3 -3
  51. data/lib/project_types/extension/tasks/get_app.rb +2 -2
  52. data/lib/project_types/extension/tasks/get_apps.rb +2 -2
  53. data/lib/project_types/extension/tasks/get_extensions.rb +2 -2
  54. data/lib/project_types/extension/tasks/get_product.rb +2 -2
  55. data/lib/project_types/extension/tasks/run_extension_command.rb +10 -3
  56. data/lib/project_types/extension/tasks/update_draft.rb +2 -2
  57. data/lib/project_types/node/cli.rb +3 -3
  58. data/lib/project_types/node/commands/connect.rb +4 -4
  59. data/lib/project_types/node/commands/create.rb +10 -10
  60. data/lib/project_types/node/commands/deploy/heroku.rb +4 -4
  61. data/lib/project_types/node/commands/deploy.rb +3 -3
  62. data/lib/project_types/node/commands/generate.rb +2 -2
  63. data/lib/project_types/node/commands/open.rb +3 -3
  64. data/lib/project_types/node/commands/serve.rb +7 -7
  65. data/lib/project_types/node/commands/tunnel.rb +6 -6
  66. data/lib/project_types/node/forms/create.rb +3 -3
  67. data/lib/project_types/php/cli.rb +27 -0
  68. data/lib/project_types/php/commands/connect.rb +19 -0
  69. data/lib/project_types/php/commands/create.rb +143 -0
  70. data/lib/project_types/php/commands/deploy/heroku.rb +129 -0
  71. data/lib/project_types/php/commands/deploy.rb +32 -0
  72. data/lib/project_types/php/commands/open.rb +16 -0
  73. data/lib/project_types/php/commands/serve.rb +51 -0
  74. data/lib/project_types/php/commands/tunnel.rb +37 -0
  75. data/lib/project_types/php/forms/create.rb +45 -0
  76. data/lib/project_types/php/messages/messages.rb +191 -0
  77. data/lib/project_types/rails/cli.rb +3 -3
  78. data/lib/project_types/rails/commands/connect.rb +4 -4
  79. data/lib/project_types/rails/commands/create.rb +12 -12
  80. data/lib/project_types/rails/commands/deploy/heroku.rb +4 -4
  81. data/lib/project_types/rails/commands/deploy.rb +3 -3
  82. data/lib/project_types/rails/commands/generate/webhook.rb +3 -3
  83. data/lib/project_types/rails/commands/generate.rb +3 -3
  84. data/lib/project_types/rails/commands/open.rb +3 -3
  85. data/lib/project_types/rails/commands/serve.rb +8 -8
  86. data/lib/project_types/rails/commands/tunnel.rb +6 -6
  87. data/lib/project_types/rails/forms/create.rb +3 -3
  88. data/lib/project_types/rails/gem.rb +1 -1
  89. data/lib/project_types/rails/ruby.rb +1 -1
  90. data/lib/project_types/script/cli.rb +11 -4
  91. data/lib/project_types/script/commands/create.rb +2 -2
  92. data/lib/project_types/script/commands/push.rb +2 -2
  93. data/lib/project_types/script/forms/create.rb +1 -1
  94. data/lib/project_types/script/layers/application/extension_points.rb +2 -2
  95. data/lib/project_types/script/layers/application/push_script.rb +4 -1
  96. data/lib/project_types/script/layers/domain/script_project.rb +2 -2
  97. data/lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb +55 -0
  98. data/lib/project_types/script/layers/infrastructure/api_clients/script_service_api_client.rb +35 -0
  99. data/lib/project_types/script/layers/infrastructure/command_runner.rb +1 -1
  100. data/lib/project_types/script/layers/infrastructure/languages/assemblyscript_project_creator.rb +1 -1
  101. data/lib/project_types/script/layers/infrastructure/languages/rust_project_creator.rb +1 -1
  102. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +1 -1
  103. data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +5 -5
  104. data/lib/project_types/script/layers/infrastructure/script_service.rb +4 -8
  105. data/lib/project_types/script/layers/infrastructure/service_locator.rb +20 -0
  106. data/lib/project_types/script/tasks/ensure_env.rb +6 -6
  107. data/lib/project_types/script/ui/error_handler.rb +75 -75
  108. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  109. data/lib/project_types/theme/cli.rb +3 -3
  110. data/lib/project_types/theme/commands/check.rb +3 -3
  111. data/lib/project_types/theme/commands/delete.rb +7 -7
  112. data/lib/project_types/theme/commands/init.rb +3 -3
  113. data/lib/project_types/theme/commands/language_server.rb +2 -2
  114. data/lib/project_types/theme/commands/package.rb +2 -2
  115. data/lib/project_types/theme/commands/publish.rb +5 -5
  116. data/lib/project_types/theme/commands/pull.rb +9 -9
  117. data/lib/project_types/theme/commands/push.rb +12 -12
  118. data/lib/project_types/theme/commands/serve.rb +4 -4
  119. data/lib/project_types/theme/forms/confirm_store.rb +1 -1
  120. data/lib/project_types/theme/forms/select.rb +2 -2
  121. data/lib/{shopify-cli → shopify_cli}/admin_api/populate_resource_command.rb +3 -3
  122. data/lib/{shopify-cli → shopify_cli}/admin_api/schema.rb +4 -4
  123. data/lib/{shopify-cli → shopify_cli}/admin_api.rb +27 -27
  124. data/lib/{shopify-cli → shopify_cli}/api.rb +8 -8
  125. data/lib/{shopify-cli → shopify_cli}/command.rb +3 -3
  126. data/lib/{shopify-cli → shopify_cli}/commands/config.rb +14 -14
  127. data/lib/{shopify-cli → shopify_cli}/commands/help.rb +4 -4
  128. data/lib/{shopify-cli → shopify_cli}/commands/login.rb +7 -7
  129. data/lib/shopify_cli/commands/logout.rb +39 -0
  130. data/lib/{shopify-cli → shopify_cli}/commands/populate/customer.rb +4 -4
  131. data/lib/{shopify-cli → shopify_cli}/commands/populate/draft_order.rb +4 -4
  132. data/lib/{shopify-cli → shopify_cli}/commands/populate/product.rb +4 -4
  133. data/lib/shopify_cli/commands/populate.rb +23 -0
  134. data/lib/shopify_cli/commands/store.rb +15 -0
  135. data/lib/{shopify-cli → shopify_cli}/commands/switch.rb +5 -5
  136. data/lib/{shopify-cli → shopify_cli}/commands/system.rb +10 -10
  137. data/lib/shopify_cli/commands/version.rb +15 -0
  138. data/lib/{shopify-cli → shopify_cli}/commands/whoami.rb +7 -7
  139. data/lib/shopify_cli/commands.rb +34 -0
  140. data/lib/{shopify-cli → shopify_cli}/connect.rb +3 -3
  141. data/lib/{shopify-cli → shopify_cli}/constants.rb +1 -1
  142. data/lib/{shopify-cli → shopify_cli}/context.rb +6 -6
  143. data/lib/{shopify-cli → shopify_cli}/core/entry_point.rb +7 -7
  144. data/lib/{shopify-cli → shopify_cli}/core/executor.rb +3 -3
  145. data/lib/{shopify-cli → shopify_cli}/core/finalize.rb +1 -1
  146. data/lib/{shopify-cli → shopify_cli}/core/help_resolver.rb +2 -2
  147. data/lib/{shopify-cli → shopify_cli}/core/monorail.rb +8 -8
  148. data/lib/shopify_cli/core.rb +8 -0
  149. data/lib/{shopify-cli → shopify_cli}/db.rb +8 -8
  150. data/lib/{shopify-cli → shopify_cli}/environment.rb +1 -1
  151. data/lib/{shopify-cli → shopify_cli}/feature.rb +8 -8
  152. data/lib/{shopify-cli → shopify_cli}/form.rb +2 -2
  153. data/lib/{shopify-cli → shopify_cli}/git.rb +6 -6
  154. data/lib/{shopify-cli → shopify_cli}/helpers/haikunator.rb +1 -1
  155. data/lib/shopify_cli/helpers.rb +5 -0
  156. data/lib/{shopify-cli → shopify_cli}/heroku.rb +38 -13
  157. data/lib/{shopify-cli → shopify_cli}/http_request.rb +1 -1
  158. data/lib/{shopify-cli → shopify_cli}/identity_auth/servlet.rb +1 -1
  159. data/lib/{shopify-cli → shopify_cli}/identity_auth.rb +8 -8
  160. data/lib/{shopify-cli → shopify_cli}/js_deps.rb +7 -7
  161. data/lib/{shopify-cli → shopify_cli}/js_system.rb +10 -10
  162. data/lib/{shopify-cli → shopify_cli}/lazy_delegator.rb +2 -2
  163. data/lib/{shopify-cli → shopify_cli}/messages/messages.rb +17 -1
  164. data/lib/{shopify-cli → shopify_cli}/method_object.rb +4 -4
  165. data/lib/{shopify-cli → shopify_cli}/options.rb +1 -1
  166. data/lib/{shopify-cli → shopify_cli}/packager.rb +8 -8
  167. data/lib/{shopify-cli → shopify_cli}/partners_api/organizations.rb +1 -1
  168. data/lib/{shopify-cli → shopify_cli}/partners_api.rb +13 -13
  169. data/lib/shopify_cli/php_deps.rb +102 -0
  170. data/lib/{shopify-cli → shopify_cli}/process_supervision.rb +10 -8
  171. data/lib/{shopify-cli → shopify_cli}/project.rb +15 -15
  172. data/lib/{shopify-cli → shopify_cli}/project_commands.rb +3 -3
  173. data/lib/{shopify-cli → shopify_cli}/project_type.rb +5 -5
  174. data/lib/{shopify-cli → shopify_cli}/resolve_constant.rb +5 -5
  175. data/lib/{shopify-cli → shopify_cli}/resources/env_file.rb +1 -1
  176. data/lib/shopify_cli/resources.rb +5 -0
  177. data/lib/{shopify-cli → shopify_cli}/result.rb +11 -11
  178. data/lib/{shopify-cli → shopify_cli}/shopifolk.rb +6 -6
  179. data/lib/{shopify-cli → shopify_cli}/sub_command.rb +1 -1
  180. data/lib/{shopify-cli → shopify_cli}/task.rb +1 -1
  181. data/lib/{shopify-cli → shopify_cli}/tasks/confirm_store.rb +3 -3
  182. data/lib/{shopify-cli → shopify_cli}/tasks/create_api_client.rb +4 -4
  183. data/lib/shopify_cli/tasks/ensure_authenticated.rb +13 -0
  184. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_dev_store.rb +5 -5
  185. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_env.rb +3 -3
  186. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_loopback_url.rb +4 -4
  187. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_project_type.rb +3 -3
  188. data/lib/{shopify-cli → shopify_cli}/tasks/select_org_and_shop.rb +8 -8
  189. data/lib/{shopify-cli → shopify_cli}/tasks/update_dashboard_urls.rb +6 -6
  190. data/lib/{shopify-cli → shopify_cli}/tasks.rb +10 -10
  191. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/certificate_manager.rb +5 -5
  192. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/header_hash.rb +1 -1
  193. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/hot-reload.js +0 -0
  194. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/hot_reload.rb +1 -1
  195. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/local_assets.rb +1 -1
  196. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/proxy.rb +2 -2
  197. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/sse.rb +1 -1
  198. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/watcher.rb +1 -1
  199. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/web_server.rb +1 -1
  200. data/lib/{shopify-cli → shopify_cli}/theme/dev_server.rb +3 -3
  201. data/lib/{shopify-cli → shopify_cli}/theme/development_theme.rb +9 -9
  202. data/lib/{shopify-cli → shopify_cli}/theme/file.rb +1 -1
  203. data/lib/{shopify-cli → shopify_cli}/theme/ignore_filter.rb +1 -1
  204. data/lib/{shopify-cli → shopify_cli}/theme/mime_type.rb +1 -1
  205. data/lib/{shopify-cli → shopify_cli}/theme/syncer.rb +6 -6
  206. data/lib/{shopify-cli → shopify_cli}/theme/theme.rb +4 -4
  207. data/lib/{shopify-cli → shopify_cli}/transform_data_structure.rb +4 -4
  208. data/lib/{shopify-cli → shopify_cli}/tunnel.rb +14 -14
  209. data/lib/shopify_cli/version.rb +3 -0
  210. data/lib/shopify_cli.rb +50 -49
  211. data/shopify-cli.gemspec +2 -2
  212. metadata +104 -91
  213. data/lib/project_types/script/layers/infrastructure/api_clients.rb +0 -89
  214. data/lib/shopify-cli/commands/logout.rb +0 -39
  215. data/lib/shopify-cli/commands/populate.rb +0 -23
  216. data/lib/shopify-cli/commands/store.rb +0 -15
  217. data/lib/shopify-cli/commands/version.rb +0 -15
  218. data/lib/shopify-cli/commands.rb +0 -34
  219. data/lib/shopify-cli/core.rb +0 -8
  220. data/lib/shopify-cli/helpers.rb +0 -5
  221. data/lib/shopify-cli/resources.rb +0 -5
  222. data/lib/shopify-cli/tasks/ensure_authenticated.rb +0 -13
  223. data/lib/shopify-cli/version.rb +0 -3
@@ -1,9 +1,9 @@
1
1
  require "shopify_cli"
2
2
  require "rbconfig"
3
3
 
4
- module ShopifyCli
4
+ module ShopifyCLI
5
5
  module Commands
6
- class System < ShopifyCli::Command
6
+ class System < ShopifyCLI::Command
7
7
  hidden_feature(feature_set: :debug)
8
8
 
9
9
  def call(args, _name)
@@ -28,7 +28,7 @@ module ShopifyCli
28
28
  end
29
29
 
30
30
  def self.help
31
- ShopifyCli::Context.message("core.system.help", ShopifyCli::TOOL_NAME)
31
+ ShopifyCLI::Context.message("core.system.help", ShopifyCLI::TOOL_NAME)
32
32
  end
33
33
 
34
34
  private
@@ -50,21 +50,21 @@ module ShopifyCli
50
50
 
51
51
  @ctx.puts(@ctx.message("core.system.header"))
52
52
  cli_constants.each do |s|
53
- @ctx.puts(" " + @ctx.message("core.system.const", s, ShopifyCli.const_get(s.to_sym)) + "\n")
53
+ @ctx.puts(" " + @ctx.message("core.system.const", s, ShopifyCLI.const_get(s.to_sym)) + "\n")
54
54
  end
55
55
 
56
56
  if show_all_details
57
57
  cli_path_methods.each do |m|
58
- @ctx.puts(" " + @ctx.message("core.system.const", m.upcase, ShopifyCli.send(m)) + "\n")
58
+ @ctx.puts(" " + @ctx.message("core.system.const", m.upcase, ShopifyCLI.send(m)) + "\n")
59
59
  end
60
60
  end
61
61
  end
62
62
 
63
63
  def display_shopify_store(_show_all_details)
64
- shop = if ShopifyCli::DB.exists?(:shop)
65
- ShopifyCli::AdminAPI.get_shop_or_abort(@ctx)
64
+ shop = if ShopifyCLI::DB.exists?(:shop)
65
+ ShopifyCLI::AdminAPI.get_shop_or_abort(@ctx)
66
66
  else
67
- @ctx.message("core.populate.error.no_shop", ShopifyCli::TOOL_NAME)
67
+ @ctx.message("core.populate.error.no_shop", ShopifyCLI::TOOL_NAME)
68
68
  end
69
69
 
70
70
  @ctx.puts("\n" + @ctx.message("core.system.shop_header"))
@@ -96,7 +96,7 @@ module ShopifyCli
96
96
  end
97
97
 
98
98
  def display_ngrok
99
- ngrok_location = File.join(ShopifyCli.cache_dir, "ngrok#{@ctx.executable_file_extension}")
99
+ ngrok_location = File.join(ShopifyCLI.cache_dir, "ngrok#{@ctx.executable_file_extension}")
100
100
  if File.exist?(ngrok_location)
101
101
  @ctx.puts(" " + @ctx.message("core.system.ngrok_available", ngrok_location))
102
102
  else
@@ -154,7 +154,7 @@ module ShopifyCli
154
154
  end
155
155
 
156
156
  def display_shopify_staff_identity
157
- is_shopifolk = ShopifyCli::Shopifolk.check
157
+ is_shopifolk = ShopifyCLI::Shopifolk.check
158
158
  if is_shopifolk
159
159
  @ctx.puts("\n" + @ctx.message("core.system.identity_header"))
160
160
  @ctx.puts(" " + @ctx.message("core.system.identity_is_shopifolk"))
@@ -0,0 +1,15 @@
1
+ require "shopify_cli"
2
+
3
+ module ShopifyCLI
4
+ module Commands
5
+ class Version < ShopifyCLI::Command
6
+ def self.help
7
+ ShopifyCLI::Context.message("core.version.help", ShopifyCLI::TOOL_NAME)
8
+ end
9
+
10
+ def call(_args, _name)
11
+ @ctx.puts(ShopifyCLI::VERSION.to_s)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,15 +1,15 @@
1
1
  require "shopify_cli"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  module Commands
5
- class Whoami < ShopifyCli::Command
5
+ class Whoami < ShopifyCLI::Command
6
6
  def call(_args, _name)
7
- shop = ShopifyCli::DB.get(:shop)
8
- org_id = ShopifyCli::DB.get(:organization_id)
9
- org = ShopifyCli::PartnersAPI::Organizations.fetch(@ctx, id: org_id) unless org_id.nil?
7
+ shop = ShopifyCLI::DB.get(:shop)
8
+ org_id = ShopifyCLI::DB.get(:organization_id)
9
+ org = ShopifyCLI::PartnersAPI::Organizations.fetch(@ctx, id: org_id) unless org_id.nil?
10
10
 
11
11
  output = if shop.nil? && org.nil?
12
- @ctx.message("core.whoami.not_logged_in", ShopifyCli::TOOL_NAME)
12
+ @ctx.message("core.whoami.not_logged_in", ShopifyCLI::TOOL_NAME)
13
13
  elsif !shop.nil? && org.nil?
14
14
  @ctx.message("core.whoami.logged_in_shop_only", shop)
15
15
  elsif shop.nil? && !org.nil?
@@ -21,7 +21,7 @@ module ShopifyCli
21
21
  end
22
22
 
23
23
  def self.help
24
- ShopifyCli::Context.message("core.whoami.help", ShopifyCli::TOOL_NAME)
24
+ ShopifyCLI::Context.message("core.whoami.help", ShopifyCLI::TOOL_NAME)
25
25
  end
26
26
  end
27
27
  end
@@ -0,0 +1,34 @@
1
+ require "shopify_cli"
2
+
3
+ module ShopifyCLI
4
+ module Commands
5
+ Registry = CLI::Kit::CommandRegistry.new(
6
+ default: "help",
7
+ contextual_resolver: nil,
8
+ )
9
+ @core_commands = []
10
+
11
+ def self.register(const, cmd, path = nil, is_core = false)
12
+ autoload(const, path) if path
13
+ Registry.add(->() { const_get(const) }, cmd)
14
+ @core_commands.push(cmd) if is_core
15
+ end
16
+
17
+ def self.core_command?(cmd)
18
+ @core_commands.include?(cmd)
19
+ end
20
+
21
+ register :Config, "config", "shopify_cli/commands/config", true
22
+ register :Help, "help", "shopify_cli/commands/help", true
23
+ register :Login, "login", "shopify_cli/commands/login", true
24
+ register :Logout, "logout", "shopify_cli/commands/logout", true
25
+ register :Populate, "populate", "shopify_cli/commands/populate", true
26
+ register :Store, "store", "shopify_cli/commands/store", true
27
+ register :Switch, "switch", "shopify_cli/commands/switch", true
28
+ register :System, "system", "shopify_cli/commands/system", true
29
+ register :Version, "version", "shopify_cli/commands/version", true
30
+ register :Whoami, "whoami", "shopify_cli/commands/whoami", true
31
+
32
+ autoload :Connect, "shopify_cli/commands/connect"
33
+ end
34
+ end
@@ -1,6 +1,6 @@
1
1
  require "shopify_cli"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  class Connect
5
5
  def initialize(ctx)
6
6
  @ctx = ctx
@@ -10,14 +10,14 @@ module ShopifyCli
10
10
  if Project.current&.env
11
11
  @ctx.puts(@ctx.message("core.connect.already_connected_warning"))
12
12
  end
13
- org = ShopifyCli::Tasks::EnsureEnv.call(@ctx, regenerate: true)
13
+ org = ShopifyCLI::Tasks::EnsureEnv.call(@ctx, regenerate: true)
14
14
  write_cli_yml(project_type, org["id"]) unless Project.has_current?
15
15
  api_key = Project.current(force_reload: true).env["api_key"]
16
16
  get_app(org["apps"], api_key).first["title"]
17
17
  end
18
18
 
19
19
  def write_cli_yml(project_type, org_id)
20
- ShopifyCli::Project.write(
20
+ ShopifyCLI::Project.write(
21
21
  @ctx,
22
22
  project_type: project_type,
23
23
  organization_id: org_id,
@@ -1,4 +1,4 @@
1
- module ShopifyCli
1
+ module ShopifyCLI
2
2
  module Constants
3
3
  module EnvironmentVariables
4
4
  # When true the CLI points to a local instance of
@@ -5,7 +5,7 @@ require "rbconfig"
5
5
  require "net/http"
6
6
  require "json"
7
7
 
8
- module ShopifyCli
8
+ module ShopifyCLI
9
9
  ##
10
10
  # Context captures a lot about the current running command. It captures the
11
11
  # environment, output, system and file operations. It is useful to have the
@@ -97,7 +97,7 @@ module ShopifyCli
97
97
  # See `#development?` for checking for development environment.
98
98
  #
99
99
  def system?
100
- !Dir.exist?(File.join(ShopifyCli::ROOT, "test"))
100
+ !Dir.exist?(File.join(ShopifyCLI::ROOT, "test"))
101
101
  end
102
102
 
103
103
  # will return true if the cli is running on your development instance.
@@ -382,7 +382,7 @@ module ShopifyCli
382
382
  # * `text` - a string message to output
383
383
  #
384
384
  def abort(text)
385
- raise ShopifyCli::Abort, "{{x}} #{text}"
385
+ raise ShopifyCLI::Abort, "{{x}} #{text}"
386
386
  end
387
387
 
388
388
  # outputs a message, prefixed by a red `DEBUG` tag. This will only output to
@@ -559,7 +559,7 @@ module ShopifyCli
559
559
  if (time_of_last_check + VERSION_CHECK_INTERVAL) < (now = Time.now.to_i)
560
560
  update_time_of_last_check(now)
561
561
  latest_version = retrieve_latest_gem_version
562
- latest_version unless latest_version == ShopifyCli::VERSION
562
+ latest_version unless latest_version == ShopifyCLI::VERSION
563
563
  end
564
564
  end
565
565
 
@@ -600,11 +600,11 @@ module ShopifyCli
600
600
  end
601
601
 
602
602
  def time_of_last_check
603
- (val = ShopifyCli::Config.get(VERSION_CHECK_SECTION, LAST_CHECKED_AT_FIELD)) ? val.to_i : 0
603
+ (val = ShopifyCLI::Config.get(VERSION_CHECK_SECTION, LAST_CHECKED_AT_FIELD)) ? val.to_i : 0
604
604
  end
605
605
 
606
606
  def update_time_of_last_check(time)
607
- ShopifyCli::Config.set(VERSION_CHECK_SECTION, LAST_CHECKED_AT_FIELD, time)
607
+ ShopifyCLI::Config.set(VERSION_CHECK_SECTION, LAST_CHECKED_AT_FIELD, time)
608
608
  end
609
609
  end
610
610
  end
@@ -1,26 +1,26 @@
1
1
  require "shopify_cli"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  module Core
5
5
  module EntryPoint
6
6
  class << self
7
7
  def call(args, ctx = Context.new)
8
8
  if ctx.development?
9
9
  ctx.warn(
10
- ctx.message("core.warning.development_version", File.join(ShopifyCli::ROOT, "bin", ShopifyCli::TOOL_NAME))
10
+ ctx.message("core.warning.development_version", File.join(ShopifyCLI::ROOT, "bin", ShopifyCLI::TOOL_NAME))
11
11
  )
12
12
  elsif !ctx.testing?
13
13
  new_version = ctx.new_version
14
- ctx.warn(ctx.message("core.warning.new_version", ShopifyCli::VERSION, new_version)) unless new_version.nil?
14
+ ctx.warn(ctx.message("core.warning.new_version", ShopifyCLI::VERSION, new_version)) unless new_version.nil?
15
15
  end
16
16
 
17
17
  ProjectType.load_all
18
18
 
19
- task_registry = ShopifyCli::Tasks::Registry
19
+ task_registry = ShopifyCLI::Tasks::Registry
20
20
 
21
- command, command_name, args = ShopifyCli::Resolver.call(args)
22
- executor = ShopifyCli::Core::Executor.new(ctx, task_registry, log_file: ShopifyCli.log_file)
23
- ShopifyCli::Core::Monorail.log(command_name, args) do
21
+ command, command_name, args = ShopifyCLI::Resolver.call(args)
22
+ executor = ShopifyCLI::Core::Executor.new(ctx, task_registry, log_file: ShopifyCLI.log_file)
23
+ ShopifyCLI::Core::Monorail.log(command_name, args) do
24
24
  executor.call(command, command_name, args)
25
25
  end
26
26
  end
@@ -1,11 +1,11 @@
1
1
  require "shopify_cli"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  module Core
5
5
  class Executor < CLI::Kit::Executor
6
6
  def initialize(ctx, task_registry, *args, **kwargs)
7
- @ctx = ctx || ShopifyCli::Context.new
8
- @task_registry = task_registry || ShopifyCli::Tasks::TaskRegistry.new
7
+ @ctx = ctx || ShopifyCLI::Context.new
8
+ @task_registry = task_registry || ShopifyCLI::Tasks::TaskRegistry.new
9
9
  super(*args, **kwargs)
10
10
  end
11
11
 
@@ -1,4 +1,4 @@
1
- module ShopifyCli
1
+ module ShopifyCLI
2
2
  module Core
3
3
  # This class is just a dummy to make sure that we don't trigger warnings on the first time the updated code runs.
4
4
  # The old code would try to call the Finalizer after it is done updating, which would then trigger an autoload of
@@ -1,6 +1,6 @@
1
1
  require "cli/kit"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  module Core
5
5
  class HelpResolver < CLI::Kit::Resolver
6
6
  def call(args)
@@ -10,7 +10,7 @@ module ShopifyCli
10
10
  help = Commands::Help
11
11
  help.ctx = Context.new
12
12
  help.call([], nil)
13
- raise ShopifyCli::AbortSilent
13
+ raise ShopifyCLI::AbortSilent
14
14
  else
15
15
  super(args)
16
16
  end
@@ -3,7 +3,7 @@ require "net/http"
3
3
  require "time"
4
4
  require "rbconfig"
5
5
 
6
- module ShopifyCli
6
+ module ShopifyCLI
7
7
  module Core
8
8
  module Monorail
9
9
  ENDPOINT_URI = URI.parse("https://monorail-edge.shopifycloud.com/v1/produce")
@@ -50,16 +50,16 @@ module ShopifyCli
50
50
  end
51
51
 
52
52
  def consented?
53
- ShopifyCli::Config.get_bool("analytics", "enabled")
53
+ ShopifyCLI::Config.get_bool("analytics", "enabled")
54
54
  end
55
55
 
56
56
  def prompt_for_consent
57
57
  return if Context.new.ci?
58
58
  return unless enabled?
59
- return if ShopifyCli::Config.get_section("analytics").key?("enabled")
59
+ return if ShopifyCLI::Config.get_section("analytics").key?("enabled")
60
60
  msg = Context.message("core.monorail.consent_prompt")
61
61
  opt = CLI::UI::Prompt.confirm(msg)
62
- ShopifyCli::Config.set("analytics", "enabled", opt)
62
+ ShopifyCLI::Config.set("analytics", "enabled", opt)
63
63
  end
64
64
 
65
65
  def send_event(start_time, commands, args, err = nil)
@@ -100,12 +100,12 @@ module ShopifyCli
100
100
  success: err.nil?,
101
101
  error_message: err,
102
102
  uname: RbConfig::CONFIG["host"],
103
- cli_version: ShopifyCli::VERSION,
103
+ cli_version: ShopifyCLI::VERSION,
104
104
  ruby_version: RUBY_VERSION,
105
- is_employee: ShopifyCli::Shopifolk.acting_as_shopify_organization?,
105
+ is_employee: ShopifyCLI::Shopifolk.acting_as_shopify_organization?,
106
106
  }.tap do |payload|
107
107
  payload[:api_key] = metadata.delete(:api_key)
108
- payload[:partner_id] = metadata.delete(:organization_id) || ShopifyCli::DB.get(:organization_id)
108
+ payload[:partner_id] = metadata.delete(:organization_id) || ShopifyCLI::DB.get(:organization_id)
109
109
  if Project.has_current?
110
110
  project = Project.current(force_reload: true)
111
111
  payload[:api_key] = project.env&.api_key
@@ -117,7 +117,7 @@ module ShopifyCli
117
117
  end
118
118
 
119
119
  def project_type_from_dir_or_cmd(command)
120
- Project.current_project_type || (command unless ShopifyCli::Commands.core_command?(command)) || nil
120
+ Project.current_project_type || (command unless ShopifyCLI::Commands.core_command?(command)) || nil
121
121
  end
122
122
  end
123
123
  end
@@ -0,0 +1,8 @@
1
+ module ShopifyCLI
2
+ module Core
3
+ autoload :EntryPoint, "shopify_cli/core/entry_point"
4
+ autoload :Executor, "shopify_cli/core/executor"
5
+ autoload :HelpResolver, "shopify_cli/core/help_resolver"
6
+ autoload :Monorail, "shopify_cli/core/monorail"
7
+ end
8
+ end
@@ -1,7 +1,7 @@
1
1
  require "pstore"
2
2
  require "forwardable"
3
3
 
4
- module ShopifyCli
4
+ module ShopifyCLI
5
5
  # Persists transient data like access tokens that may be cleared
6
6
  # when user clears their session
7
7
  #
@@ -14,7 +14,7 @@ module ShopifyCli
14
14
 
15
15
  attr_reader :db # :nodoc:
16
16
 
17
- def initialize(path: File.join(ShopifyCli.cache_dir, ".db.pstore")) # :nodoc:
17
+ def initialize(path: File.join(ShopifyCLI.cache_dir, ".db.pstore")) # :nodoc:
18
18
  @db = PStore.new(path)
19
19
  end
20
20
 
@@ -25,7 +25,7 @@ module ShopifyCli
25
25
  #
26
26
  # #### Usage
27
27
  #
28
- # ShopifyCli::DB.keys
28
+ # ShopifyCLI::DB.keys
29
29
  #
30
30
  def keys
31
31
  db.transaction(true) { db.roots }
@@ -42,7 +42,7 @@ module ShopifyCli
42
42
  #
43
43
  # #### Usage
44
44
  #
45
- # exists = ShopifyCli::DB.exists?('shopify_exchange_token')
45
+ # exists = ShopifyCLI::DB.exists?('shopify_exchange_token')
46
46
  #
47
47
  def exists?(key)
48
48
  db.transaction(true) { db.root?(key) }
@@ -55,7 +55,7 @@ module ShopifyCli
55
55
  #
56
56
  # #### Usage
57
57
  #
58
- # ShopifyCli::DB.set(shopify_exchange_token: 'token', metric_consent: true)
58
+ # ShopifyCLI::DB.set(shopify_exchange_token: 'token', metric_consent: true)
59
59
  #
60
60
  def set(**args)
61
61
  db.transaction do
@@ -80,7 +80,7 @@ module ShopifyCli
80
80
  #
81
81
  # #### Usage
82
82
  #
83
- # ShopifyCli::DB.get(:shopify_exchange_token)
83
+ # ShopifyCLI::DB.get(:shopify_exchange_token)
84
84
  #
85
85
  def get(key)
86
86
  val = db.transaction(true) { db[key] }
@@ -95,7 +95,7 @@ module ShopifyCli
95
95
  #
96
96
  # #### Usage
97
97
  #
98
- # ShopifyCli::DB.del(:shopify_exchange_token)
98
+ # ShopifyCLI::DB.del(:shopify_exchange_token)
99
99
  #
100
100
  def del(*args)
101
101
  db.transaction { args.each { |key| db.delete(key) } }
@@ -105,7 +105,7 @@ module ShopifyCli
105
105
  #
106
106
  # #### Usage
107
107
  #
108
- # ShopifyCli::DB.clear
108
+ # ShopifyCLI::DB.clear
109
109
  #
110
110
  def clear
111
111
  del(*keys)
@@ -1,4 +1,4 @@
1
- module ShopifyCli
1
+ module ShopifyCLI
2
2
  # The environment module provides an interface to get information from
3
3
  # the environment in which the CLI runs
4
4
  module Environment
@@ -1,6 +1,6 @@
1
- module ShopifyCli
1
+ module ShopifyCLI
2
2
  ##
3
- # ShopifyCli::Feature contains the logic to hide and show features across the CLI
3
+ # ShopifyCLI::Feature contains the logic to hide and show features across the CLI
4
4
  # These features can be either commands or project types currently.
5
5
  #
6
6
  # Feature flags will persist between runs so if the flag is enabled or disabled,
@@ -9,7 +9,7 @@ module ShopifyCli
9
9
  SECTION = "features"
10
10
 
11
11
  ##
12
- # ShopifyCli::Feature::Set is included on commands and projects to allow you to hide
12
+ # ShopifyCLI::Feature::Set is included on commands and projects to allow you to hide
13
13
  # and enable projects and commands based on feature flags.
14
14
  module Set
15
15
  ##
@@ -21,9 +21,9 @@ module ShopifyCli
21
21
  #
22
22
  # #### Example
23
23
  #
24
- # module ShopifyCli
24
+ # module ShopifyCLI
25
25
  # module Commands
26
- # class Config < ShopifyCli::Command
26
+ # class Config < ShopifyCLI::Command
27
27
  # hidden_feature(feature_set: :basic)
28
28
  # ....
29
29
  #
@@ -41,7 +41,7 @@ module ShopifyCli
41
41
  #
42
42
  # #### Example
43
43
  #
44
- # ShopifyCli::Commands::Config.hidden?
44
+ # ShopifyCLI::Commands::Config.hidden?
45
45
  #
46
46
  def hidden?
47
47
  enabled = (@hidden_feature_set || []).any? do |feature|
@@ -84,11 +84,11 @@ module ShopifyCli
84
84
  # * `is_enabled` - will be true if the feature has been enabled.
85
85
  def enabled?(feature)
86
86
  return false if feature.nil?
87
- ShopifyCli::Config.get_bool(SECTION, feature.to_s)
87
+ ShopifyCLI::Config.get_bool(SECTION, feature.to_s)
88
88
  end
89
89
 
90
90
  def set(feature, value)
91
- ShopifyCli::Config.set(SECTION, feature.to_s, value)
91
+ ShopifyCLI::Config.set(SECTION, feature.to_s, value)
92
92
  end
93
93
  end
94
94
  end
@@ -1,6 +1,6 @@
1
1
  require "shopify_cli"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  class Form
5
5
  class << self
6
6
  def ask(ctx, args, flags)
@@ -12,7 +12,7 @@ module ShopifyCli
12
12
  begin
13
13
  form.ask
14
14
  form
15
- rescue ShopifyCli::Abort => err
15
+ rescue ShopifyCLI::Abort => err
16
16
  ctx.puts(err.message)
17
17
  nil
18
18
  end
@@ -1,6 +1,6 @@
1
- module ShopifyCli
1
+ module ShopifyCLI
2
2
  ##
3
- # ShopifyCli::Git wraps git functionality to make it easier to integrate will
3
+ # ShopifyCLI::Git wraps git functionality to make it easier to integrate will
4
4
  # git.
5
5
  class Git
6
6
  class << self
@@ -18,7 +18,7 @@ module ShopifyCli
18
18
  #
19
19
  # #### Example
20
20
  #
21
- # ShopifyCli::Git.sha
21
+ # ShopifyCLI::Git.sha
22
22
  #
23
23
  def sha(dir: Dir.pwd, ctx: Context.new)
24
24
  rev_parse("HEAD", dir: dir, ctx: ctx)
@@ -40,7 +40,7 @@ module ShopifyCli
40
40
  #
41
41
  # #### Example
42
42
  #
43
- # ShopifyCli::Git.clone('git@github.com:shopify/test.git', 'test-app')
43
+ # ShopifyCLI::Git.clone('git@github.com:shopify/test.git', 'test-app')
44
44
  #
45
45
  def clone(repository, dest, ctx: Context.new)
46
46
  if Dir.exist?(dest)
@@ -66,7 +66,7 @@ module ShopifyCli
66
66
  #
67
67
  # #### Example
68
68
  #
69
- # branches = ShopifyCli::Git.branches(@ctx)
69
+ # branches = ShopifyCLI::Git.branches(@ctx)
70
70
  #
71
71
  def branches(ctx)
72
72
  output, status = ctx.capture2e("git", "branch", "--list", "--format=%(refname:short)")
@@ -91,7 +91,7 @@ module ShopifyCli
91
91
  #
92
92
  # #### Example
93
93
  #
94
- # ShopifyCli::Git.init(@ctx)
94
+ # ShopifyCLI::Git.init(@ctx)
95
95
  #
96
96
  def init(ctx)
97
97
  output, status = ctx.capture2e("git", "status")
@@ -23,7 +23,7 @@
23
23
 
24
24
  require "securerandom"
25
25
 
26
- module ShopifyCli
26
+ module ShopifyCLI
27
27
  module Helpers
28
28
  module Haikunator
29
29
  class << self
@@ -0,0 +1,5 @@
1
+ module ShopifyCLI
2
+ module Helpers
3
+ autoload :Haikunator, "shopify_cli/helpers/haikunator"
4
+ end
5
+ end
@@ -1,4 +1,4 @@
1
- module ShopifyCli
1
+ module ShopifyCLI
2
2
  class Heroku
3
3
  DOWNLOAD_URLS = {
4
4
  linux: "https://cli-assets.heroku.com/heroku-linux-x64.tar.gz",
@@ -36,7 +36,7 @@ module ShopifyCli
36
36
  def download
37
37
  return if installed?
38
38
 
39
- result = @ctx.system("curl", "-o", download_path, DOWNLOAD_URLS[@ctx.os], chdir: ShopifyCli.cache_dir)
39
+ result = @ctx.system("curl", "-o", download_path, DOWNLOAD_URLS[@ctx.os], chdir: ShopifyCLI.cache_dir)
40
40
  @ctx.abort(@ctx.message("core.heroku.error.download")) unless result.success?
41
41
  @ctx.abort(@ctx.message("core.heroku.error.download")) unless File.exist?(download_path)
42
42
  end
@@ -47,7 +47,7 @@ module ShopifyCli
47
47
  result = if @ctx.windows?
48
48
  @ctx.system("\"#{download_path}\"")
49
49
  else
50
- @ctx.system("tar", "-xf", download_path, chdir: ShopifyCli.cache_dir)
50
+ @ctx.system("tar", "-xf", download_path, chdir: ShopifyCLI.cache_dir)
51
51
  end
52
52
  @ctx.abort(@ctx.message("core.heroku.error.install")) unless result.success?
53
53
 
@@ -67,23 +67,33 @@ module ShopifyCli
67
67
  nil
68
68
  end
69
69
 
70
- private
71
-
72
- def download_filename
73
- URI.parse(DOWNLOAD_URLS[@ctx.os]).path.split("/").last
70
+ def get_config(config)
71
+ output, status = @ctx.capture2e(heroku_command, "config:get", config.to_s)
72
+ return output.strip if status.success?
73
+ nil
74
74
  end
75
75
 
76
- def download_path
77
- File.join(ShopifyCli.cache_dir, download_filename)
76
+ def set_config(config, value)
77
+ result = @ctx.system(heroku_command, "config:set", "#{config}=#{value}")
78
+
79
+ msg = @ctx.message("core.heroku.error.set_config", config, value)
80
+ @ctx.abort(msg) unless result.success?
78
81
  end
79
82
 
80
- def git_remote
81
- output, status = @ctx.capture2e("git", "remote", "get-url", "heroku")
82
- status.success? ? output : nil
83
+ def add_buildpacks(buildpacks)
84
+ result = @ctx.system(heroku_command, "buildpacks:clear")
85
+ msg = @ctx.message("core.heroku.error.add_buildpacks")
86
+ @ctx.abort(msg) unless result.success?
87
+
88
+ buildpacks.each do |buildpack|
89
+ result = @ctx.system(heroku_command, "buildpacks:add", buildpack)
90
+ msg = @ctx.message("core.heroku.error.add_buildpacks")
91
+ @ctx.abort(msg) unless result.success?
92
+ end
83
93
  end
84
94
 
85
95
  def heroku_command
86
- local_path = File.join(ShopifyCli.cache_dir, "heroku", "bin", "heroku").to_s
96
+ local_path = File.join(ShopifyCLI.cache_dir, "heroku", "bin", "heroku").to_s
87
97
  if File.exist?(local_path)
88
98
  local_path
89
99
  elsif @ctx.windows?
@@ -103,6 +113,21 @@ module ShopifyCli
103
113
  end
104
114
  end
105
115
 
116
+ private
117
+
118
+ def download_filename
119
+ URI.parse(DOWNLOAD_URLS[@ctx.os]).path.split("/").last
120
+ end
121
+
122
+ def download_path
123
+ File.join(ShopifyCLI.cache_dir, download_filename)
124
+ end
125
+
126
+ def git_remote
127
+ output, status = @ctx.capture2e("git", "remote", "get-url", "heroku")
128
+ status.success? ? output : nil
129
+ end
130
+
106
131
  def installed?
107
132
  _output, status = @ctx.capture2e(heroku_command, "--version")
108
133
  status.success?