shopify-cli 2.4.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
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?