shopify-cli 2.4.0 → 2.6.2

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 (250) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/shopify.yml +0 -2
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +14 -14
  5. data/.rubocop_todo.yml +3 -3
  6. data/CHANGELOG.md +25 -0
  7. data/Dockerfile +1 -3
  8. data/Gemfile.lock +22 -16
  9. data/README.md +1 -1
  10. data/RELEASING.md +1 -1
  11. data/Rakefile +25 -34
  12. data/bin/console +11 -0
  13. data/bin/shopify +17 -4
  14. data/dev.yml +3 -0
  15. data/ext/shopify-cli/extconf.rb +1 -0
  16. data/lib/project_types/extension/cli.rb +5 -3
  17. data/lib/project_types/extension/commands/build.rb +4 -3
  18. data/lib/project_types/extension/commands/check.rb +2 -2
  19. data/lib/project_types/extension/commands/connect.rb +1 -1
  20. data/lib/project_types/extension/commands/create.rb +41 -23
  21. data/lib/project_types/extension/commands/extension_command.rb +1 -1
  22. data/lib/project_types/extension/commands/info.rb +1 -1
  23. data/lib/project_types/extension/commands/push.rb +1 -1
  24. data/lib/project_types/extension/commands/register.rb +2 -2
  25. data/lib/project_types/extension/commands/serve.rb +5 -5
  26. data/lib/project_types/extension/commands/tunnel.rb +6 -6
  27. data/lib/project_types/extension/extension_project.rb +4 -4
  28. data/lib/project_types/extension/features/argo.rb +3 -3
  29. data/lib/project_types/extension/features/argo_config.rb +5 -5
  30. data/lib/project_types/extension/features/argo_serve.rb +21 -6
  31. data/lib/project_types/extension/features/argo_setup.rb +1 -1
  32. data/lib/project_types/extension/features/argo_setup_step.rb +1 -1
  33. data/lib/project_types/extension/features/argo_setup_steps.rb +2 -2
  34. data/lib/project_types/extension/forms/connect.rb +2 -2
  35. data/lib/project_types/extension/forms/create.rb +2 -2
  36. data/lib/project_types/extension/forms/questions/ask_app.rb +2 -2
  37. data/lib/project_types/extension/forms/questions/ask_name.rb +1 -1
  38. data/lib/project_types/extension/forms/questions/ask_registration.rb +2 -2
  39. data/lib/project_types/extension/forms/questions/ask_template.rb +2 -2
  40. data/lib/project_types/extension/forms/questions/ask_type.rb +2 -2
  41. data/lib/project_types/extension/messages/message_loading.rb +2 -2
  42. data/lib/project_types/extension/models/development_server.rb +49 -6
  43. data/lib/project_types/extension/models/development_server_requirements.rb +21 -3
  44. data/lib/project_types/extension/models/lazy_specification_handler.rb +1 -1
  45. data/lib/project_types/extension/models/specification.rb +1 -1
  46. data/lib/project_types/extension/models/specification_handlers/default.rb +14 -2
  47. data/lib/project_types/extension/models/specification_handlers/theme_app_extension.rb +1 -1
  48. data/lib/project_types/extension/models/specifications.rb +4 -4
  49. data/lib/project_types/extension/tasks/choose_next_available_port.rb +1 -1
  50. data/lib/project_types/extension/tasks/configure_features.rb +1 -1
  51. data/lib/project_types/extension/tasks/configure_options.rb +1 -1
  52. data/lib/project_types/extension/tasks/converters/product_converter.rb +1 -1
  53. data/lib/project_types/extension/tasks/converters/server_config_converter.rb +31 -0
  54. data/lib/project_types/extension/tasks/create_extension.rb +2 -2
  55. data/lib/project_types/extension/tasks/fetch_specifications.rb +2 -2
  56. data/lib/project_types/extension/tasks/find_npm_packages.rb +5 -5
  57. data/lib/project_types/extension/tasks/get_app.rb +2 -2
  58. data/lib/project_types/extension/tasks/get_apps.rb +2 -2
  59. data/lib/project_types/extension/tasks/get_extensions.rb +2 -2
  60. data/lib/project_types/extension/tasks/get_product.rb +2 -2
  61. data/lib/project_types/extension/tasks/load_server_config.rb +23 -0
  62. data/lib/project_types/extension/tasks/run_extension_command.rb +34 -11
  63. data/lib/project_types/extension/tasks/update_draft.rb +2 -2
  64. data/lib/project_types/node/cli.rb +3 -3
  65. data/lib/project_types/node/commands/connect.rb +4 -4
  66. data/lib/project_types/node/commands/create.rb +10 -10
  67. data/lib/project_types/node/commands/deploy/heroku.rb +4 -4
  68. data/lib/project_types/node/commands/deploy.rb +3 -3
  69. data/lib/project_types/node/commands/generate.rb +2 -2
  70. data/lib/project_types/node/commands/open.rb +3 -3
  71. data/lib/project_types/node/commands/serve.rb +15 -7
  72. data/lib/project_types/node/commands/tunnel.rb +6 -6
  73. data/lib/project_types/node/forms/create.rb +3 -3
  74. data/lib/project_types/node/messages/messages.rb +3 -0
  75. data/lib/project_types/php/cli.rb +27 -0
  76. data/lib/project_types/php/commands/connect.rb +19 -0
  77. data/lib/project_types/php/commands/create.rb +143 -0
  78. data/lib/project_types/php/commands/deploy/heroku.rb +129 -0
  79. data/lib/project_types/php/commands/deploy.rb +32 -0
  80. data/lib/project_types/php/commands/open.rb +16 -0
  81. data/lib/project_types/php/commands/serve.rb +51 -0
  82. data/lib/project_types/php/commands/tunnel.rb +37 -0
  83. data/lib/project_types/php/forms/create.rb +45 -0
  84. data/lib/project_types/php/messages/messages.rb +191 -0
  85. data/lib/project_types/rails/cli.rb +3 -3
  86. data/lib/project_types/rails/commands/connect.rb +4 -4
  87. data/lib/project_types/rails/commands/create.rb +12 -12
  88. data/lib/project_types/rails/commands/deploy/heroku.rb +4 -4
  89. data/lib/project_types/rails/commands/deploy.rb +3 -3
  90. data/lib/project_types/rails/commands/generate/webhook.rb +3 -3
  91. data/lib/project_types/rails/commands/generate.rb +3 -3
  92. data/lib/project_types/rails/commands/open.rb +3 -3
  93. data/lib/project_types/rails/commands/serve.rb +8 -8
  94. data/lib/project_types/rails/commands/tunnel.rb +6 -6
  95. data/lib/project_types/rails/forms/create.rb +3 -3
  96. data/lib/project_types/rails/gem.rb +1 -1
  97. data/lib/project_types/rails/ruby.rb +1 -1
  98. data/lib/project_types/script/cli.rb +15 -7
  99. data/lib/project_types/script/commands/create.rb +4 -2
  100. data/lib/project_types/script/commands/push.rb +2 -2
  101. data/lib/project_types/script/config/extension_points.yml +30 -29
  102. data/lib/project_types/script/forms/create.rb +1 -1
  103. data/lib/project_types/script/layers/application/create_script.rb +32 -12
  104. data/lib/project_types/script/layers/application/extension_points.rb +4 -4
  105. data/lib/project_types/script/layers/application/push_script.rb +4 -1
  106. data/lib/project_types/script/layers/domain/extension_point.rb +13 -45
  107. data/lib/project_types/script/layers/domain/script_project.rb +2 -2
  108. data/lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb +57 -0
  109. data/lib/project_types/script/layers/infrastructure/api_clients/script_service_api_client.rb +35 -0
  110. data/lib/project_types/script/layers/infrastructure/command_runner.rb +1 -1
  111. data/lib/project_types/script/layers/infrastructure/errors.rb +5 -0
  112. data/lib/project_types/script/layers/infrastructure/languages/assemblyscript_project_creator.rb +10 -90
  113. data/lib/project_types/script/layers/infrastructure/languages/project_creator.rb +76 -11
  114. data/lib/project_types/script/layers/infrastructure/languages/task_runner.rb +1 -1
  115. data/lib/project_types/script/layers/infrastructure/languages/typescript_project_creator.rb +33 -0
  116. data/lib/project_types/script/layers/infrastructure/languages/typescript_task_runner.rb +105 -0
  117. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +1 -1
  118. data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +6 -6
  119. data/lib/project_types/script/layers/infrastructure/script_service.rb +4 -8
  120. data/lib/project_types/script/layers/infrastructure/service_locator.rb +20 -0
  121. data/lib/project_types/script/messages/messages.rb +4 -0
  122. data/lib/project_types/script/tasks/ensure_env.rb +6 -6
  123. data/lib/project_types/script/ui/error_handler.rb +83 -75
  124. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  125. data/lib/project_types/theme/cli.rb +3 -3
  126. data/lib/project_types/theme/commands/check.rb +3 -3
  127. data/lib/project_types/theme/commands/delete.rb +7 -7
  128. data/lib/project_types/theme/commands/init.rb +3 -3
  129. data/lib/project_types/theme/commands/language_server.rb +2 -2
  130. data/lib/project_types/theme/commands/package.rb +2 -2
  131. data/lib/project_types/theme/commands/publish.rb +5 -5
  132. data/lib/project_types/theme/commands/pull.rb +9 -9
  133. data/lib/project_types/theme/commands/push.rb +12 -12
  134. data/lib/project_types/theme/commands/serve.rb +4 -4
  135. data/lib/project_types/theme/forms/confirm_store.rb +1 -1
  136. data/lib/project_types/theme/forms/select.rb +2 -2
  137. data/lib/{shopify-cli → shopify_cli}/admin_api/populate_resource_command.rb +3 -3
  138. data/lib/{shopify-cli → shopify_cli}/admin_api/schema.rb +4 -4
  139. data/lib/{shopify-cli → shopify_cli}/admin_api.rb +27 -27
  140. data/lib/{shopify-cli → shopify_cli}/api.rb +12 -8
  141. data/lib/shopify_cli/command/app_sub_command.rb +16 -0
  142. data/lib/{shopify-cli → shopify_cli}/command.rb +3 -3
  143. data/lib/{shopify-cli → shopify_cli}/commands/config.rb +14 -14
  144. data/lib/{shopify-cli → shopify_cli}/commands/help.rb +4 -4
  145. data/lib/{shopify-cli → shopify_cli}/commands/login.rb +7 -7
  146. data/lib/shopify_cli/commands/logout.rb +39 -0
  147. data/lib/{shopify-cli → shopify_cli}/commands/populate/customer.rb +4 -4
  148. data/lib/{shopify-cli → shopify_cli}/commands/populate/draft_order.rb +4 -4
  149. data/lib/{shopify-cli → shopify_cli}/commands/populate/product.rb +4 -4
  150. data/lib/shopify_cli/commands/populate.rb +23 -0
  151. data/lib/shopify_cli/commands/store.rb +15 -0
  152. data/lib/{shopify-cli → shopify_cli}/commands/switch.rb +5 -5
  153. data/lib/{shopify-cli → shopify_cli}/commands/system.rb +10 -10
  154. data/lib/shopify_cli/commands/version.rb +15 -0
  155. data/lib/{shopify-cli → shopify_cli}/commands/whoami.rb +7 -7
  156. data/lib/shopify_cli/commands.rb +34 -0
  157. data/lib/{shopify-cli → shopify_cli}/connect.rb +3 -3
  158. data/lib/shopify_cli/constants.rb +54 -0
  159. data/lib/{shopify-cli → shopify_cli}/context.rb +6 -6
  160. data/lib/{shopify-cli → shopify_cli}/core/entry_point.rb +7 -7
  161. data/lib/{shopify-cli → shopify_cli}/core/executor.rb +8 -4
  162. data/lib/{shopify-cli → shopify_cli}/core/finalize.rb +1 -1
  163. data/lib/{shopify-cli → shopify_cli}/core/help_resolver.rb +2 -2
  164. data/lib/{shopify-cli → shopify_cli}/core/monorail.rb +8 -8
  165. data/lib/shopify_cli/core.rb +8 -0
  166. data/lib/{shopify-cli → shopify_cli}/db.rb +8 -8
  167. data/lib/{shopify-cli → shopify_cli}/environment.rb +36 -5
  168. data/lib/shopify_cli/exception_reporter/permission_controller.rb +54 -0
  169. data/lib/shopify_cli/exception_reporter.rb +55 -0
  170. data/lib/{shopify-cli → shopify_cli}/feature.rb +8 -8
  171. data/lib/{shopify-cli → shopify_cli}/form.rb +2 -2
  172. data/lib/{shopify-cli → shopify_cli}/git.rb +36 -6
  173. data/lib/{shopify-cli → shopify_cli}/helpers/haikunator.rb +1 -1
  174. data/lib/shopify_cli/helpers.rb +5 -0
  175. data/lib/{shopify-cli → shopify_cli}/heroku.rb +38 -13
  176. data/lib/{shopify-cli → shopify_cli}/http_request.rb +1 -1
  177. data/lib/{shopify-cli → shopify_cli}/identity_auth/servlet.rb +1 -1
  178. data/lib/{shopify-cli → shopify_cli}/identity_auth.rb +8 -8
  179. data/lib/{shopify-cli → shopify_cli}/js_deps.rb +7 -7
  180. data/lib/{shopify-cli → shopify_cli}/js_system.rb +10 -10
  181. data/lib/{shopify-cli → shopify_cli}/lazy_delegator.rb +2 -2
  182. data/lib/{shopify-cli → shopify_cli}/messages/messages.rb +44 -2
  183. data/lib/{shopify-cli → shopify_cli}/method_object.rb +15 -8
  184. data/lib/shopify_cli/migrator/migration.rb +27 -0
  185. data/lib/shopify_cli/migrator/migrations/1631709766_noop.rb +13 -0
  186. data/lib/shopify_cli/migrator.rb +48 -0
  187. data/lib/{shopify-cli → shopify_cli}/options.rb +1 -1
  188. data/lib/{shopify-cli → shopify_cli}/packager.rb +8 -8
  189. data/lib/{shopify-cli → shopify_cli}/partners_api/organizations.rb +1 -1
  190. data/lib/{shopify-cli → shopify_cli}/partners_api.rb +13 -13
  191. data/lib/shopify_cli/php_deps.rb +102 -0
  192. data/lib/{shopify-cli → shopify_cli}/process_supervision.rb +10 -8
  193. data/lib/{shopify-cli → shopify_cli}/project.rb +15 -15
  194. data/lib/{shopify-cli → shopify_cli}/project_commands.rb +3 -3
  195. data/lib/{shopify-cli → shopify_cli}/project_type.rb +5 -5
  196. data/lib/{shopify-cli → shopify_cli}/resolve_constant.rb +5 -5
  197. data/lib/{shopify-cli → shopify_cli}/resources/env_file.rb +1 -1
  198. data/lib/shopify_cli/resources.rb +5 -0
  199. data/lib/{shopify-cli → shopify_cli}/result.rb +11 -11
  200. data/lib/{shopify-cli → shopify_cli}/shopifolk.rb +6 -6
  201. data/lib/{shopify-cli → shopify_cli}/sub_command.rb +1 -1
  202. data/lib/{shopify-cli → shopify_cli}/task.rb +1 -1
  203. data/lib/{shopify-cli → shopify_cli}/tasks/confirm_store.rb +3 -3
  204. data/lib/{shopify-cli → shopify_cli}/tasks/create_api_client.rb +4 -4
  205. data/lib/shopify_cli/tasks/ensure_authenticated.rb +13 -0
  206. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_dev_store.rb +5 -5
  207. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_env.rb +3 -3
  208. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_loopback_url.rb +4 -4
  209. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_project_type.rb +3 -3
  210. data/lib/{shopify-cli → shopify_cli}/tasks/select_org_and_shop.rb +8 -8
  211. data/lib/{shopify-cli → shopify_cli}/tasks/update_dashboard_urls.rb +6 -6
  212. data/lib/{shopify-cli → shopify_cli}/tasks.rb +10 -10
  213. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/certificate_manager.rb +5 -5
  214. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/header_hash.rb +1 -1
  215. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/hot-reload.js +0 -0
  216. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/hot_reload.rb +1 -1
  217. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/local_assets.rb +1 -1
  218. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/proxy.rb +2 -2
  219. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/sse.rb +1 -1
  220. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/watcher.rb +1 -1
  221. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/web_server.rb +1 -1
  222. data/lib/{shopify-cli → shopify_cli}/theme/dev_server.rb +3 -3
  223. data/lib/{shopify-cli → shopify_cli}/theme/development_theme.rb +9 -9
  224. data/lib/{shopify-cli → shopify_cli}/theme/file.rb +1 -1
  225. data/lib/{shopify-cli → shopify_cli}/theme/ignore_filter.rb +1 -1
  226. data/lib/{shopify-cli → shopify_cli}/theme/mime_type.rb +1 -1
  227. data/lib/{shopify-cli → shopify_cli}/theme/syncer.rb +6 -6
  228. data/lib/{shopify-cli → shopify_cli}/theme/theme.rb +4 -4
  229. data/lib/{shopify-cli → shopify_cli}/transform_data_structure.rb +4 -4
  230. data/lib/{shopify-cli → shopify_cli}/tunnel.rb +14 -14
  231. data/lib/shopify_cli/version.rb +3 -0
  232. data/lib/shopify_cli.rb +61 -52
  233. data/shopify-cli.gemspec +11 -3
  234. data/utilities/docker.rb +47 -0
  235. data/utilities/utilities.rb +5 -0
  236. metadata +133 -95
  237. data/lib/project_types/script/layers/infrastructure/api_clients.rb +0 -89
  238. data/lib/project_types/script/layers/infrastructure/languages/rust_project_creator.rb +0 -73
  239. data/lib/project_types/script/layers/infrastructure/languages/rust_task_runner.rb +0 -60
  240. data/lib/shopify-cli/commands/logout.rb +0 -39
  241. data/lib/shopify-cli/commands/populate.rb +0 -23
  242. data/lib/shopify-cli/commands/store.rb +0 -15
  243. data/lib/shopify-cli/commands/version.rb +0 -15
  244. data/lib/shopify-cli/commands.rb +0 -34
  245. data/lib/shopify-cli/constants.rb +0 -26
  246. data/lib/shopify-cli/core.rb +0 -8
  247. data/lib/shopify-cli/helpers.rb +0 -5
  248. data/lib/shopify-cli/resources.rb +0 -5
  249. data/lib/shopify-cli/tasks/ensure_authenticated.rb +0 -13
  250. data/lib/shopify-cli/version.rb +0 -3
@@ -1,5 +1,5 @@
1
1
 
2
- module ShopifyCli
2
+ module ShopifyCLI
3
3
  ##
4
4
  # `TransformDataStructure` helps to standardize data structure access. It
5
5
  # traverses nested data structures and can convert
@@ -22,13 +22,13 @@ module ShopifyCli
22
22
  # Since `TransformDataStructure` is a method object, it can easily be chained:
23
23
  #
24
24
  # require 'open-uri'
25
- # ShopifyCli::Result
25
+ # ShopifyCLI::Result
26
26
  # .call { open("https://jsonplaceholder.typicode.com/todos/1") }
27
27
  # .map(&TransformDataStructure.new(symbolize_keys: true, underscore_keys: true))
28
28
  # .value # => { id: 1, user_id: 1, ... }
29
29
  #
30
30
  class TransformDataStructure
31
- include ShopifyCli::MethodObject
31
+ include ShopifyCLI::MethodObject
32
32
 
33
33
  class << self
34
34
  private
@@ -53,7 +53,7 @@ module ShopifyCli
53
53
  result[transform_key(key)] = call(value).value
54
54
  end
55
55
  else
56
- ShopifyCli::Result.success(object)
56
+ ShopifyCLI::Result.success(object)
57
57
  end
58
58
  end
59
59
 
@@ -4,7 +4,7 @@ require "shopify_cli"
4
4
  require "forwardable"
5
5
  require "uri"
6
6
 
7
- module ShopifyCli
7
+ module ShopifyCLI
8
8
  ##
9
9
  # Wraps around ngrok functionality to allow you to spawn a ngrok proccess in the
10
10
  # background and stop the process when you need to. It also allows control over
@@ -39,8 +39,8 @@ module ShopifyCli
39
39
  # * `ctx` - running context from your command
40
40
  #
41
41
  def stop(ctx)
42
- if ShopifyCli::ProcessSupervision.running?(:ngrok)
43
- if ShopifyCli::ProcessSupervision.stop(:ngrok)
42
+ if ShopifyCLI::ProcessSupervision.running?(:ngrok)
43
+ if ShopifyCLI::ProcessSupervision.stop(:ngrok)
44
44
  ctx.puts(ctx.message("core.tunnel.stopped"))
45
45
  else
46
46
  ctx.abort(ctx.message("core.tunnel.error.stop"))
@@ -75,7 +75,7 @@ module ShopifyCli
75
75
  end
76
76
  ctx.puts(ctx.message("core.tunnel.start", url))
77
77
  ctx.puts(ctx.message("core.tunnel.will_timeout", seconds_to_hm(seconds_remaining)))
78
- ctx.puts(ctx.message("core.tunnel.signup_suggestion", ShopifyCli::TOOL_NAME))
78
+ ctx.puts(ctx.message("core.tunnel.signup_suggestion", ShopifyCLI::TOOL_NAME))
79
79
  end
80
80
  url
81
81
  end
@@ -91,7 +91,7 @@ module ShopifyCli
91
91
  #
92
92
  def auth(ctx, token)
93
93
  install(ctx)
94
- ctx.system(File.join(ShopifyCli.cache_dir, "ngrok"), "authtoken", token)
94
+ ctx.system(File.join(ShopifyCLI.cache_dir, "ngrok"), "authtoken", token)
95
95
  end
96
96
 
97
97
  ##
@@ -145,28 +145,28 @@ module ShopifyCli
145
145
 
146
146
  def install(ctx)
147
147
  ngrok = "ngrok#{ctx.executable_file_extension}"
148
- return if File.exist?(File.join(ShopifyCli.cache_dir, ngrok))
148
+ return if File.exist?(File.join(ShopifyCLI.cache_dir, ngrok))
149
149
  check_prereq_command(ctx, "curl")
150
150
  check_prereq_command(ctx, ctx.linux? ? "unzip" : "tar")
151
151
  spinner = CLI::UI::SpinGroup.new
152
152
  spinner.add(ctx.message("core.tunnel.installing")) do
153
- zip_dest = File.join(ShopifyCli.cache_dir, "ngrok.zip")
153
+ zip_dest = File.join(ShopifyCLI.cache_dir, "ngrok.zip")
154
154
  unless File.exist?(zip_dest)
155
- ctx.system("curl", "-o", zip_dest, DOWNLOAD_URLS[ctx.os], chdir: ShopifyCli.cache_dir)
155
+ ctx.system("curl", "-o", zip_dest, DOWNLOAD_URLS[ctx.os], chdir: ShopifyCLI.cache_dir)
156
156
  end
157
157
  args = if ctx.linux?
158
158
  %W(unzip -u #{zip_dest})
159
159
  else
160
160
  %W(tar -xf #{zip_dest})
161
161
  end
162
- ctx.system(*args, chdir: ShopifyCli.cache_dir)
162
+ ctx.system(*args, chdir: ShopifyCLI.cache_dir)
163
163
  ctx.rm(zip_dest)
164
164
  end
165
165
  spinner.wait
166
166
 
167
167
  # final check to see if ngrok is accessible
168
- unless File.exist?(File.join(ShopifyCli.cache_dir, ngrok))
169
- ctx.abort(ctx.message("core.tunnel.error.ngrok", ngrok, ShopifyCli.cache_dir))
168
+ unless File.exist?(File.join(ShopifyCLI.cache_dir, ngrok))
169
+ ctx.abort(ctx.message("core.tunnel.error.ngrok", ngrok, ShopifyCLI.cache_dir))
170
170
  end
171
171
  end
172
172
 
@@ -178,7 +178,7 @@ module ShopifyCli
178
178
  end
179
179
 
180
180
  def ngrok_command(port)
181
- "\"#{File.join(ShopifyCli.cache_dir, "ngrok")}\" http -inspect=false -log=stdout -log-level=debug #{port}"
181
+ "\"#{File.join(ShopifyCLI.cache_dir, "ngrok")}\" http -inspect=false -log=stdout -log-level=debug #{port}"
182
182
  end
183
183
 
184
184
  def seconds_to_hm(seconds)
@@ -186,14 +186,14 @@ module ShopifyCli
186
186
  end
187
187
 
188
188
  def start_ngrok(ctx, port)
189
- process = ShopifyCli::ProcessSupervision.start(:ngrok, ngrok_command(port))
189
+ process = ShopifyCLI::ProcessSupervision.start(:ngrok, ngrok_command(port))
190
190
  log = fetch_url(ctx, process.log_path)
191
191
  seconds_remaining = (process.time.to_i + log.timeout) - Time.now.to_i
192
192
  [log.url, log.account, seconds_remaining]
193
193
  end
194
194
 
195
195
  def restart_ngrok(ctx, port)
196
- unless ShopifyCli::ProcessSupervision.stop(:ngrok)
196
+ unless ShopifyCLI::ProcessSupervision.stop(:ngrok)
197
197
  ctx.abort(ctx.message("core.tunnel.error.stop"))
198
198
  end
199
199
  start_ngrok(ctx, port)
@@ -0,0 +1,3 @@
1
+ module ShopifyCLI
2
+ VERSION = "2.6.2"
3
+ end
data/lib/shopify_cli.rb CHANGED
@@ -24,7 +24,9 @@ end
24
24
  require "cli/ui"
25
25
  require "cli/kit"
26
26
  require "smart_properties"
27
- require_relative "shopify-cli/version"
27
+ require_relative "shopify_cli/version"
28
+ require_relative "shopify_cli/migrator"
29
+ require_relative "shopify_cli/exception_reporter"
28
30
 
29
31
  # Enable stdout routing. At this point all calls to STDOUT (and STDERR) will go through this class.
30
32
  # See https://github.com/Shopify/cli-ui/blob/main/lib/cli/ui/stdout_router.rb for more info
@@ -36,7 +38,7 @@ CLI::UI::StdoutRouter.enable
36
38
  #
37
39
  # It is recommended to read through CLI Kit (https://github.com/shopify/cli-kit) and a CLI Kit example
38
40
  # (https://github.com/Shopify/cli-kit-example) to fully understand how shopify-cli functions
39
- module ShopifyCli
41
+ module ShopifyCLI
40
42
  extend CLI::Kit::Autocall
41
43
 
42
44
  TOOL_NAME = "shopify"
@@ -75,66 +77,67 @@ module ShopifyCli
75
77
  # application and CLI kit framework.
76
78
  # To understand how this works, read https://github.com/Shopify/cli-kit/blob/main/lib/cli/kit.rb
77
79
 
78
- # ShopifyCli::Config
80
+ # ShopifyCLI::Config
79
81
  autocall(:Config) { CLI::Kit::Config.new(tool_name: TOOL_NAME) }
80
- # ShopifyCli::Logger
81
- autocall(:Logger) { CLI::Kit::Logger.new(debug_log_file: ShopifyCli.debug_log_file) }
82
- # ShopifyCli::Resolver
82
+ # ShopifyCLI::Logger
83
+ autocall(:Logger) { CLI::Kit::Logger.new(debug_log_file: ShopifyCLI.debug_log_file) }
84
+ # ShopifyCLI::Resolver
83
85
  autocall(:Resolver) do
84
- ShopifyCli::Core::HelpResolver.new(
86
+ ShopifyCLI::Core::HelpResolver.new(
85
87
  tool_name: TOOL_NAME,
86
- command_registry: ShopifyCli::Commands::Registry
88
+ command_registry: ShopifyCLI::Commands::Registry
87
89
  )
88
90
  end
89
- # ShopifyCli::ErrorHandler
91
+ # ShopifyCLI::ErrorHandler
90
92
  autocall(:ErrorHandler) do
91
93
  CLI::Kit::ErrorHandler.new(
92
- log_file: ShopifyCli.log_file,
93
- exception_reporter: nil,
94
+ log_file: ShopifyCLI.log_file,
95
+ exception_reporter: ->() { ShopifyCLI::ExceptionReporter },
94
96
  )
95
97
  end
96
98
 
97
- autoload :Constants, "shopify-cli/constants"
98
- autoload :Environment, "shopify-cli/environment"
99
- autoload :AdminAPI, "shopify-cli/admin_api"
100
- autoload :API, "shopify-cli/api"
101
- autoload :Command, "shopify-cli/command"
102
- autoload :Commands, "shopify-cli/commands"
103
- autoload :Connect, "shopify-cli/connect"
104
- autoload :Context, "shopify-cli/context"
105
- autoload :Core, "shopify-cli/core"
106
- autoload :DB, "shopify-cli/db"
107
- autoload :Feature, "shopify-cli/feature"
108
- autoload :Form, "shopify-cli/form"
109
- autoload :Git, "shopify-cli/git"
110
- autoload :Helpers, "shopify-cli/helpers"
111
- autoload :Heroku, "shopify-cli/heroku"
112
- autoload :IdentityAuth, "shopify-cli/identity_auth"
113
- autoload :JsDeps, "shopify-cli/js_deps"
114
- autoload :JsSystem, "shopify-cli/js_system"
115
- autoload :LazyDelegator, "shopify-cli/lazy_delegator"
116
- autoload :MethodObject, "shopify-cli/method_object"
117
- autoload :Options, "shopify-cli/options"
118
- autoload :PartnersAPI, "shopify-cli/partners_api"
119
- autoload :ProcessSupervision, "shopify-cli/process_supervision"
120
- autoload :Project, "shopify-cli/project"
121
- autoload :ProjectCommands, "shopify-cli/project_commands"
122
- autoload :ProjectType, "shopify-cli/project_type"
123
- autoload :ResolveConstant, "shopify-cli/resolve_constant"
124
- autoload :Resources, "shopify-cli/resources"
125
- autoload :Result, "shopify-cli/result"
126
- autoload :Shopifolk, "shopify-cli/shopifolk"
127
- autoload :SubCommand, "shopify-cli/sub_command"
128
- autoload :Task, "shopify-cli/task"
129
- autoload :Tasks, "shopify-cli/tasks"
130
- autoload :TransformDataStructure, "shopify-cli/transform_data_structure"
131
- autoload :Tunnel, "shopify-cli/tunnel"
132
-
133
- require "shopify-cli/messages/messages"
134
- Context.load_messages(ShopifyCli::Messages::MESSAGES)
99
+ autoload :Constants, "shopify_cli/constants"
100
+ autoload :Environment, "shopify_cli/environment"
101
+ autoload :AdminAPI, "shopify_cli/admin_api"
102
+ autoload :API, "shopify_cli/api"
103
+ autoload :Command, "shopify_cli/command"
104
+ autoload :Commands, "shopify_cli/commands"
105
+ autoload :Connect, "shopify_cli/connect"
106
+ autoload :Context, "shopify_cli/context"
107
+ autoload :Core, "shopify_cli/core"
108
+ autoload :DB, "shopify_cli/db"
109
+ autoload :Feature, "shopify_cli/feature"
110
+ autoload :Form, "shopify_cli/form"
111
+ autoload :Git, "shopify_cli/git"
112
+ autoload :Helpers, "shopify_cli/helpers"
113
+ autoload :Heroku, "shopify_cli/heroku"
114
+ autoload :IdentityAuth, "shopify_cli/identity_auth"
115
+ autoload :JsDeps, "shopify_cli/js_deps"
116
+ autoload :JsSystem, "shopify_cli/js_system"
117
+ autoload :PHPDeps, "shopify_cli/php_deps"
118
+ autoload :LazyDelegator, "shopify_cli/lazy_delegator"
119
+ autoload :MethodObject, "shopify_cli/method_object"
120
+ autoload :Options, "shopify_cli/options"
121
+ autoload :PartnersAPI, "shopify_cli/partners_api"
122
+ autoload :ProcessSupervision, "shopify_cli/process_supervision"
123
+ autoload :Project, "shopify_cli/project"
124
+ autoload :ProjectCommands, "shopify_cli/project_commands"
125
+ autoload :ProjectType, "shopify_cli/project_type"
126
+ autoload :ResolveConstant, "shopify_cli/resolve_constant"
127
+ autoload :Resources, "shopify_cli/resources"
128
+ autoload :Result, "shopify_cli/result"
129
+ autoload :Shopifolk, "shopify_cli/shopifolk"
130
+ autoload :SubCommand, "shopify_cli/sub_command"
131
+ autoload :Task, "shopify_cli/task"
132
+ autoload :Tasks, "shopify_cli/tasks"
133
+ autoload :TransformDataStructure, "shopify_cli/transform_data_structure"
134
+ autoload :Tunnel, "shopify_cli/tunnel"
135
+
136
+ require "shopify_cli/messages/messages"
137
+ Context.load_messages(ShopifyCLI::Messages::MESSAGES)
135
138
 
136
139
  def self.cache_dir
137
- cache_dir = if Environment.running_tests?
140
+ cache_dir = if Environment.test?
138
141
  TEMP_DIR
139
142
  elsif ENV["LOCALAPPDATA"].nil?
140
143
  File.join(File.expand_path(ENV.fetch("XDG_CACHE_HOME", "~/.cache")), TOOL_NAME)
@@ -149,7 +152,7 @@ module ShopifyCli
149
152
  end
150
153
 
151
154
  def self.tool_config_path
152
- if Environment.running_tests?
155
+ if Environment.test?
153
156
  TEMP_DIR
154
157
  elsif ENV["APPDATA"].nil?
155
158
  File.join(File.expand_path(ENV.fetch("XDG_CONFIG_HOME", "~/.config")), TOOL_NAME)
@@ -168,6 +171,12 @@ module ShopifyCli
168
171
 
169
172
  def self.sha
170
173
  return @sha if defined?(@sha)
171
- @sha = Git.sha(dir: ShopifyCli::ROOT)
174
+ @sha = Git.sha(dir: ShopifyCLI::ROOT)
175
+ end
176
+
177
+ # Migrate runs migrations that migrate the state of the environment
178
+ # in which the CLI runs.
179
+ unless ShopifyCLI::Environment.test? || ShopifyCLI::Environment.development?
180
+ ShopifyCLI::Migrator.migrate
172
181
  end
173
182
  end
data/shopify-cli.gemspec CHANGED
@@ -1,8 +1,8 @@
1
- require_relative "lib/shopify-cli/version"
1
+ require_relative "lib/shopify_cli/version"
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "shopify-cli"
5
- spec.version = ShopifyCli::VERSION
5
+ spec.version = ShopifyCLI::VERSION
6
6
  spec.authors = ["Shopify"]
7
7
  spec.email = ["dev-tools-education@shopify.com"]
8
8
  spec.license = "MIT"
@@ -43,6 +43,14 @@ Gem::Specification.new do |spec|
43
43
  spec.add_development_dependency("rake", "~> 12.3", ">= 12.3.3")
44
44
  spec.add_development_dependency("minitest", "~> 5.0")
45
45
 
46
+ spec.add_dependency("bugsnag", "~> 6.22")
46
47
  spec.add_dependency("listen", "~> 3.7.0")
47
- spec.add_dependency("theme-check", "~> 1.4.0")
48
+
49
+ # Note: theme-check is _intentionally_ not specifying the third
50
+ # digit. We _want_ new features to make their way into new installs
51
+ # of the Shopify CLI. Otherwise updates need to be released twice.
52
+ #
53
+ # That is, DO USE ~> 1.X, DO NOT USE ~> 1.X.Y, this would unnecessarily
54
+ # fix the feature version.
55
+ spec.add_dependency("theme-check", "~> 1.7")
48
56
  end
@@ -0,0 +1,47 @@
1
+ require "open3"
2
+
3
+ module Utilities
4
+ module Docker
5
+ Error = Class.new(StandardError)
6
+
7
+ class << self
8
+ def run_and_rm_container(*args)
9
+ build_image_if_needed
10
+ system(
11
+ "docker", "run",
12
+ "-t", "--rm",
13
+ "--volume", "#{Shellwords.escape(root_dir)}:/usr/src/app",
14
+ image_tag,
15
+ *args
16
+ ) || abort
17
+ end
18
+
19
+ private
20
+
21
+ def root_dir
22
+ File.expand_path("..", __dir__)
23
+ end
24
+
25
+ def build_image_if_needed
26
+ unless image_exists?(image_tag)
27
+ system("docker", "build", root_dir, "-t", image_tag) || abort
28
+ end
29
+ end
30
+
31
+ def image_tag
32
+ gemfile_lock_path = File.expand_path("./Gemfile.lock", root_dir)
33
+ image_sha = Digest::SHA256.hexdigest(File.read(gemfile_lock_path))
34
+ "shopify-cli-#{image_sha}"
35
+ end
36
+
37
+ def image_exists?(tag)
38
+ _, stat = Open3.capture2(
39
+ "docker", "inspect",
40
+ "--type=image",
41
+ tag
42
+ )
43
+ stat.success?
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,5 @@
1
+ $LOAD_PATH.unshift(__dir__) unless $LOAD_PATH.include?(__dir__)
2
+
3
+ module Utilities
4
+ autoload :Docker, "docker"
5
+ end