shopify-cli 1.4.0 → 1.7.1

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 (302) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +2 -2
  3. data/.github/CONTRIBUTING.md +9 -1
  4. data/.github/PULL_REQUEST_TEMPLATE.md +10 -1
  5. data/.github/workflows/release.yml +61 -0
  6. data/.github/workflows/triage.yml +22 -0
  7. data/.rubocop.yml +56 -7
  8. data/.rubocop_todo.yml +4 -13
  9. data/.travis.yml +1 -0
  10. data/CHANGELOG.md +27 -1
  11. data/Gemfile +12 -10
  12. data/Gemfile.lock +33 -31
  13. data/README.md +39 -7
  14. data/RELEASING.md +5 -27
  15. data/Rakefile +32 -28
  16. data/bin/load_shopify.rb +6 -6
  17. data/bin/shopify +2 -2
  18. data/dev.yml +2 -2
  19. data/docs/_config.yml +1 -18
  20. data/docs/app/node/commands/index.md +2 -80
  21. data/docs/app/node/index.md +2 -33
  22. data/docs/app/rails/commands/index.md +2 -78
  23. data/docs/app/rails/index.md +2 -34
  24. data/docs/core/index.md +2 -84
  25. data/docs/getting-started/index.md +2 -25
  26. data/docs/getting-started/install/index.md +1 -118
  27. data/docs/getting-started/migrate/index.md +2 -94
  28. data/docs/getting-started/uninstall/index.md +2 -35
  29. data/docs/getting-started/upgrade/index.md +2 -39
  30. data/docs/help/start-app/index.md +2 -4
  31. data/docs/index.md +2 -24
  32. data/ext/shopify-cli/extconf.rb +7 -7
  33. data/install.sh +1 -1
  34. data/lib/docgen/markdown.rb +11 -11
  35. data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
  36. data/lib/project_types/extension/cli.rb +64 -47
  37. data/lib/project_types/extension/commands/build.rb +3 -3
  38. data/lib/project_types/extension/commands/create.rb +16 -9
  39. data/lib/project_types/extension/commands/extension_command.rb +8 -5
  40. data/lib/project_types/extension/commands/push.rb +8 -8
  41. data/lib/project_types/extension/commands/register.rb +19 -30
  42. data/lib/project_types/extension/commands/serve.rb +23 -3
  43. data/lib/project_types/extension/commands/tunnel.rb +12 -12
  44. data/lib/project_types/extension/extension_project.rb +4 -4
  45. data/lib/project_types/extension/extension_project_keys.rb +4 -4
  46. data/lib/project_types/extension/features/argo.rb +117 -0
  47. data/lib/project_types/extension/features/argo_config.rb +5 -5
  48. data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
  49. data/lib/project_types/extension/features/argo_setup.rb +2 -2
  50. data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
  51. data/lib/project_types/extension/forms/create.rb +28 -34
  52. data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
  53. data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
  54. data/lib/project_types/extension/forms/questions/ask_type.rb +36 -0
  55. data/lib/project_types/extension/messages/messages.rb +53 -52
  56. data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
  57. data/lib/project_types/extension/models/specification.rb +35 -0
  58. data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +19 -0
  59. data/lib/project_types/extension/models/specification_handlers/default.rb +67 -0
  60. data/lib/project_types/extension/models/specifications.rb +77 -0
  61. data/lib/project_types/extension/tasks/configure_features.rb +52 -0
  62. data/lib/project_types/extension/tasks/converters/app_converter.rb +6 -6
  63. data/lib/project_types/extension/tasks/converters/registration_converter.rb +6 -6
  64. data/lib/project_types/extension/tasks/converters/validation_error_converter.rb +4 -4
  65. data/lib/project_types/extension/tasks/converters/version_converter.rb +7 -7
  66. data/lib/project_types/extension/tasks/create_extension.rb +4 -4
  67. data/lib/project_types/extension/tasks/fetch_specifications.rb +38 -0
  68. data/lib/project_types/extension/tasks/get_app.rb +4 -4
  69. data/lib/project_types/extension/tasks/get_apps.rb +3 -3
  70. data/lib/project_types/extension/tasks/update_draft.rb +4 -4
  71. data/lib/project_types/extension/tasks/user_errors.rb +4 -4
  72. data/lib/project_types/node/cli.rb +19 -16
  73. data/lib/project_types/node/commands/connect.rb +15 -0
  74. data/lib/project_types/node/commands/create.rb +44 -41
  75. data/lib/project_types/node/commands/deploy.rb +4 -4
  76. data/lib/project_types/node/commands/deploy/heroku.rb +24 -24
  77. data/lib/project_types/node/commands/generate.rb +9 -18
  78. data/lib/project_types/node/commands/open.rb +2 -2
  79. data/lib/project_types/node/commands/populate.rb +6 -6
  80. data/lib/project_types/node/commands/populate/customer.rb +5 -5
  81. data/lib/project_types/node/commands/populate/draft_order.rb +5 -5
  82. data/lib/project_types/node/commands/populate/product.rb +5 -5
  83. data/lib/project_types/node/commands/serve.rb +9 -9
  84. data/lib/project_types/node/commands/tunnel.rb +7 -7
  85. data/lib/project_types/node/forms/create.rb +7 -7
  86. data/lib/project_types/node/messages/messages.rb +19 -53
  87. data/lib/project_types/rails/cli.rb +21 -18
  88. data/lib/project_types/rails/commands/connect.rb +15 -0
  89. data/lib/project_types/rails/commands/create.rb +58 -57
  90. data/lib/project_types/rails/commands/deploy.rb +4 -4
  91. data/lib/project_types/rails/commands/deploy/heroku.rb +30 -30
  92. data/lib/project_types/rails/commands/generate.rb +7 -7
  93. data/lib/project_types/rails/commands/generate/webhook.rb +6 -6
  94. data/lib/project_types/rails/commands/open.rb +2 -2
  95. data/lib/project_types/rails/commands/populate.rb +6 -6
  96. data/lib/project_types/rails/commands/populate/customer.rb +5 -5
  97. data/lib/project_types/rails/commands/populate/draft_order.rb +5 -5
  98. data/lib/project_types/rails/commands/populate/product.rb +5 -5
  99. data/lib/project_types/rails/commands/serve.rb +11 -11
  100. data/lib/project_types/rails/commands/tunnel.rb +7 -7
  101. data/lib/project_types/rails/forms/create.rb +24 -24
  102. data/lib/project_types/rails/gem.rb +24 -24
  103. data/lib/project_types/rails/messages/messages.rb +12 -9
  104. data/lib/project_types/rails/ruby.rb +2 -2
  105. data/lib/project_types/script/cli.rb +44 -38
  106. data/lib/project_types/script/commands/create.rb +15 -10
  107. data/lib/project_types/script/commands/disable.rb +3 -3
  108. data/lib/project_types/script/commands/enable.rb +19 -9
  109. data/lib/project_types/script/commands/push.rb +10 -17
  110. data/lib/project_types/script/config/extension_points.yml +17 -12
  111. data/lib/project_types/script/errors.rb +22 -0
  112. data/lib/project_types/script/forms/create.rb +29 -5
  113. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +12 -1
  114. data/lib/project_types/script/layers/application/build_script.rb +19 -19
  115. data/lib/project_types/script/layers/application/create_script.rb +41 -12
  116. data/lib/project_types/script/layers/application/disable_script.rb +2 -2
  117. data/lib/project_types/script/layers/application/enable_script.rb +2 -2
  118. data/lib/project_types/script/layers/application/extension_points.rb +24 -0
  119. data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
  120. data/lib/project_types/script/layers/application/push_script.rb +15 -18
  121. data/lib/project_types/script/layers/domain/config_ui.rb +16 -0
  122. data/lib/project_types/script/layers/domain/errors.rb +23 -0
  123. data/lib/project_types/script/layers/domain/extension_point.rb +62 -7
  124. data/lib/project_types/script/layers/domain/metadata.rb +55 -0
  125. data/lib/project_types/script/layers/domain/push_package.rb +29 -6
  126. data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +19 -55
  127. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +49 -18
  128. data/lib/project_types/script/layers/infrastructure/config_ui_repository.rb +46 -0
  129. data/lib/project_types/script/layers/infrastructure/errors.rb +37 -1
  130. data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +12 -6
  131. data/lib/project_types/script/layers/infrastructure/project_creator.rb +2 -1
  132. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +20 -13
  133. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +72 -0
  134. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +59 -0
  135. data/lib/project_types/script/layers/infrastructure/script_service.rb +39 -17
  136. data/lib/project_types/script/layers/infrastructure/task_runner.rb +4 -3
  137. data/lib/project_types/script/messages/messages.rb +79 -10
  138. data/lib/project_types/script/script_project.rb +26 -16
  139. data/lib/project_types/script/ui/error_handler.rb +141 -45
  140. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  141. data/lib/project_types/script/ui/strict_spinner.rb +1 -1
  142. data/lib/project_types/theme/cli.rb +40 -0
  143. data/lib/project_types/theme/commands/connect.rb +54 -0
  144. data/lib/project_types/theme/commands/create.rb +48 -0
  145. data/lib/project_types/theme/commands/deploy.rb +38 -0
  146. data/lib/project_types/theme/commands/generate.rb +20 -0
  147. data/lib/project_types/theme/commands/generate/env.rb +79 -0
  148. data/lib/project_types/theme/commands/push.rb +55 -0
  149. data/lib/project_types/theme/commands/serve.rb +31 -0
  150. data/lib/project_types/theme/forms/connect.rb +34 -0
  151. data/lib/project_types/theme/forms/create.rb +22 -0
  152. data/lib/project_types/theme/messages/messages.rb +147 -0
  153. data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +78 -0
  154. data/lib/project_types/theme/themekit.rb +113 -0
  155. data/lib/rubygems_plugin.rb +3 -3
  156. data/lib/shopify-cli/admin_api.rb +52 -12
  157. data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
  158. data/lib/shopify-cli/admin_api/schema.rb +3 -3
  159. data/lib/shopify-cli/api.rb +36 -31
  160. data/lib/shopify-cli/command.rb +1 -1
  161. data/lib/shopify-cli/commands.rb +9 -9
  162. data/lib/shopify-cli/commands/config.rb +28 -28
  163. data/lib/shopify-cli/commands/connect.rb +35 -18
  164. data/lib/shopify-cli/commands/create.rb +5 -5
  165. data/lib/shopify-cli/commands/help.rb +6 -6
  166. data/lib/shopify-cli/commands/logout.rb +3 -3
  167. data/lib/shopify-cli/commands/system.rb +33 -33
  168. data/lib/shopify-cli/commands/version.rb +2 -2
  169. data/lib/shopify-cli/context.rb +43 -22
  170. data/lib/shopify-cli/core.rb +4 -4
  171. data/lib/shopify-cli/core/entry_point.rb +5 -5
  172. data/lib/shopify-cli/core/executor.rb +1 -1
  173. data/lib/shopify-cli/core/help_resolver.rb +2 -2
  174. data/lib/shopify-cli/core/monorail.rb +21 -19
  175. data/lib/shopify-cli/db.rb +2 -2
  176. data/lib/shopify-cli/feature.rb +1 -3
  177. data/lib/shopify-cli/form.rb +1 -1
  178. data/lib/shopify-cli/git.rb +17 -17
  179. data/lib/shopify-cli/helpers.rb +1 -1
  180. data/lib/shopify-cli/helpers/haikunator.rb +1 -1
  181. data/lib/shopify-cli/heroku.rb +28 -28
  182. data/lib/shopify-cli/http_request.rb +21 -9
  183. data/lib/shopify-cli/js_deps.rb +13 -13
  184. data/lib/shopify-cli/js_system.rb +5 -5
  185. data/lib/shopify-cli/lazy_delegator.rb +55 -0
  186. data/lib/shopify-cli/messages/messages.rb +21 -10
  187. data/lib/shopify-cli/method_object.rb +104 -0
  188. data/lib/shopify-cli/oauth.rb +25 -25
  189. data/lib/shopify-cli/oauth/servlet.rb +9 -9
  190. data/lib/shopify-cli/options.rb +3 -3
  191. data/lib/shopify-cli/packager.rb +24 -24
  192. data/lib/shopify-cli/partners_api.rb +38 -16
  193. data/lib/shopify-cli/partners_api/organizations.rb +10 -10
  194. data/lib/shopify-cli/process_supervision.rb +8 -8
  195. data/lib/shopify-cli/project.rb +27 -23
  196. data/lib/shopify-cli/project_type.rb +21 -5
  197. data/lib/shopify-cli/resolve_constant.rb +25 -0
  198. data/lib/shopify-cli/resources.rb +1 -1
  199. data/lib/shopify-cli/resources/env_file.rb +9 -9
  200. data/lib/shopify-cli/result.rb +432 -0
  201. data/lib/shopify-cli/shopifolk.rb +35 -18
  202. data/lib/shopify-cli/sub_command.rb +1 -1
  203. data/lib/shopify-cli/task.rb +9 -1
  204. data/lib/shopify-cli/tasks.rb +7 -7
  205. data/lib/shopify-cli/tasks/create_api_client.rb +17 -6
  206. data/lib/shopify-cli/tasks/ensure_dev_store.rb +11 -11
  207. data/lib/shopify-cli/tasks/ensure_env.rb +18 -15
  208. data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
  209. data/lib/shopify-cli/tasks/select_org_and_shop.rb +29 -24
  210. data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
  211. data/lib/shopify-cli/transform_data_structure.rb +86 -0
  212. data/lib/shopify-cli/tunnel.rb +36 -30
  213. data/lib/shopify-cli/version.rb +1 -1
  214. data/lib/shopify_cli.rb +57 -52
  215. data/shopify-cli.gemspec +6 -6
  216. data/shopify.fish +1 -1
  217. data/shopify.sh +1 -1
  218. data/vendor/deps/cli-kit/REVISION +1 -1
  219. data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +2 -2
  220. data/vendor/deps/cli-kit/lib/cli/kit/system.rb +3 -3
  221. data/vendor/deps/cli-ui/REVISION +1 -1
  222. data/vendor/deps/cli-ui/lib/cli/ui.rb +26 -22
  223. data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +4 -6
  224. data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -3
  225. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +8 -9
  226. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -1
  227. data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +1 -0
  228. data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +15 -3
  229. data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +4 -11
  230. data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -5
  231. data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +10 -10
  232. data/vendor/deps/cli-ui/lib/cli/ui/version.rb +1 -1
  233. data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
  234. data/vendor/deps/webrick/.gitignore +9 -0
  235. data/vendor/deps/webrick/Gemfile +3 -0
  236. data/vendor/deps/webrick/LICENSE.txt +22 -0
  237. data/vendor/deps/webrick/README.md +61 -0
  238. data/vendor/deps/webrick/Rakefile +10 -0
  239. data/vendor/deps/webrick/lib/webrick.rb +232 -0
  240. data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
  241. data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
  242. data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
  243. data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
  244. data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
  245. data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
  246. data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
  247. data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
  248. data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
  249. data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
  250. data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
  251. data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
  252. data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
  253. data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
  254. data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
  255. data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
  256. data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
  257. data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
  258. data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
  259. data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
  260. data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
  261. data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  262. data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
  263. data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
  264. data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
  265. data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
  266. data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
  267. data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
  268. data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
  269. data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
  270. data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
  271. data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
  272. data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
  273. data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
  274. data/vendor/deps/webrick/webrick.gemspec +74 -0
  275. data/vendor/gen/template/bin/update-deps +9 -9
  276. metadata +83 -29
  277. data/docs/Gemfile +0 -5
  278. data/docs/Gemfile.lock +0 -258
  279. data/docs/_data/nav.yml +0 -35
  280. data/docs/_includes/footer.html +0 -15
  281. data/docs/_includes/head.html +0 -19
  282. data/docs/_includes/sidebar_nav.html +0 -22
  283. data/docs/_includes/toc.html +0 -112
  284. data/docs/_layouts/default.html +0 -79
  285. data/docs/css/docs.css +0 -157
  286. data/docs/images/header.png +0 -0
  287. data/docs/installing-ruby.md +0 -28
  288. data/lib/project_types/extension/features/argo/admin.rb +0 -20
  289. data/lib/project_types/extension/features/argo/base.rb +0 -129
  290. data/lib/project_types/extension/features/argo/checkout.rb +0 -20
  291. data/lib/project_types/extension/forms/register.rb +0 -47
  292. data/lib/project_types/extension/models/type.rb +0 -81
  293. data/lib/project_types/extension/models/types/checkout_post_purchase.rb +0 -23
  294. data/lib/project_types/extension/models/types/product_subscription.rb +0 -24
  295. data/lib/project_types/node/commands/generate/billing.rb +0 -39
  296. data/lib/project_types/node/commands/generate/page.rb +0 -59
  297. data/lib/project_types/node/commands/generate/webhook.rb +0 -37
  298. data/lib/project_types/script/layers/domain/script.rb +0 -18
  299. data/lib/project_types/script/layers/infrastructure/assemblyscript_tsconfig.rb +0 -38
  300. data/lib/project_types/script/layers/infrastructure/script_repository.rb +0 -59
  301. data/lib/project_types/script/templates/ts/as-pect.config.js +0 -27
  302. data/lib/project_types/script/templates/ts/as-pect.d.ts +0 -1
@@ -1,4 +1,4 @@
1
- require 'shopify_cli'
1
+ require "shopify_cli"
2
2
 
3
3
  module ShopifyCli
4
4
  module Core
@@ -14,23 +14,23 @@ module ShopifyCli
14
14
  rescue ArgumentError => e
15
15
  # This can happen on RVM, because it can use fd 9 itself and block access to it. That only happens if the fd
16
16
  # did not exist beforehand, so that means there was no fd 9 before Ruby started.
17
- unless e.message == 'The given fd is not accessible because RubyVM reserves it'
17
+ unless e.message == "The given fd is not accessible because RubyVM reserves it"
18
18
  raise e
19
19
  end
20
20
  end
21
21
 
22
22
  if !ctx.testing? && is_shell_shim
23
- ctx.puts(ctx.message('core.warning.shell_shim'))
23
+ ctx.puts(ctx.message("core.warning.shell_shim"))
24
24
  return
25
25
  end
26
26
 
27
27
  if ctx.development?
28
28
  ctx.puts(
29
- ctx.message('core.warning.development_version', File.join(ShopifyCli::ROOT, 'bin', ShopifyCli::TOOL_NAME))
29
+ ctx.message("core.warning.development_version", File.join(ShopifyCli::ROOT, "bin", ShopifyCli::TOOL_NAME))
30
30
  )
31
31
  elsif !ctx.testing?
32
32
  new_version = ctx.new_version
33
- ctx.puts(ctx.message('core.warning.new_version', ShopifyCli::VERSION, new_version)) unless new_version.nil?
33
+ ctx.puts(ctx.message("core.warning.new_version", ShopifyCli::VERSION, new_version)) unless new_version.nil?
34
34
  end
35
35
 
36
36
  ProjectType.load_type(Project.current_project_type)
@@ -1,4 +1,4 @@
1
- require 'shopify_cli'
1
+ require "shopify_cli"
2
2
 
3
3
  module ShopifyCli
4
4
  module Core
@@ -1,4 +1,4 @@
1
- require 'cli/kit'
1
+ require "cli/kit"
2
2
 
3
3
  module ShopifyCli
4
4
  module Core
@@ -6,7 +6,7 @@ module ShopifyCli
6
6
  def call(args)
7
7
  args = args.dup
8
8
  return super(args) unless args.first
9
- if args.first.include?('-h') || args.first.include?('--help')
9
+ if args.first.include?("-h") || args.first.include?("--help")
10
10
  help = Commands::Help
11
11
  help.ctx = Context.new
12
12
  help.call([], nil)
@@ -1,13 +1,13 @@
1
- require 'json'
2
- require 'net/http'
3
- require 'time'
4
- require 'rbconfig'
1
+ require "json"
2
+ require "net/http"
3
+ require "time"
4
+ require "rbconfig"
5
5
 
6
6
  module ShopifyCli
7
7
  module Core
8
8
  module Monorail
9
- ENDPOINT_URI = URI.parse('https://monorail-edge.shopifycloud.com/v1/produce')
10
- INVOCATIONS_SCHEMA = 'app_cli_command/4.0'
9
+ ENDPOINT_URI = URI.parse("https://monorail-edge.shopifycloud.com/v1/produce")
10
+ INVOCATIONS_SCHEMA = "app_cli_command/5.0"
11
11
 
12
12
  # Extra hash of data that will be sent in the payload
13
13
  @metadata = {}
@@ -46,25 +46,25 @@ module ShopifyCli
46
46
 
47
47
  # we only want to send Monorail events in production or when explicitly developing
48
48
  def enabled?
49
- Context.new.system? || ENV['MONORAIL_REAL_EVENTS'] == '1'
49
+ Context.new.system? || ENV["MONORAIL_REAL_EVENTS"] == "1"
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 unless enabled?
58
- return if ShopifyCli::Config.get_section('analytics').key?('enabled')
59
- msg = Context.message('core.monorail.consent_prompt')
58
+ return if ShopifyCli::Config.get_section("analytics").key?("enabled")
59
+ msg = Context.message("core.monorail.consent_prompt")
60
60
  opt = CLI::UI::Prompt.confirm(msg)
61
- ShopifyCli::Config.set('analytics', 'enabled', opt)
61
+ ShopifyCli::Config.set("analytics", "enabled", opt)
62
62
  end
63
63
 
64
64
  def send_event(start_time, commands, args, err = nil)
65
65
  end_time = now_in_milliseconds
66
66
  headers = {
67
- 'Content-Type': 'application/json; charset=utf-8',
67
+ 'Content-Type': "application/json; charset=utf-8",
68
68
  'X-Monorail-Edge-Event-Created-At-Ms': start_time.to_s,
69
69
  'X-Monorail-Edge-Event-Sent-At-Ms': end_time.to_s,
70
70
  }
@@ -74,7 +74,7 @@ module ShopifyCli
74
74
  ENDPOINT_URI.port,
75
75
  # timeouts for opening a connection, reading, writing (in seconds)
76
76
  open_timeout: 0.2, read_timeout: 0.2, write_timeout: 0.2,
77
- use_ssl: ENDPOINT_URI.scheme == 'https'
77
+ use_ssl: ENDPOINT_URI.scheme == "https"
78
78
  ) do |http|
79
79
  payload = build_payload(start_time, end_time, commands, args, err)
80
80
  post = Net::HTTP::Post.new(ENDPOINT_URI.request_uri, headers)
@@ -91,8 +91,8 @@ module ShopifyCli
91
91
  schema_id: INVOCATIONS_SCHEMA,
92
92
  payload: {
93
93
  project_type: Project.current_project_type.to_s,
94
- command: commands.join(' '),
95
- args: args.join(' '),
94
+ command: commands.join(" "),
95
+ args: args.join(" "),
96
96
  time_start: start_time,
97
97
  time_end: end_time,
98
98
  total_time: end_time - start_time,
@@ -101,14 +101,16 @@ module ShopifyCli
101
101
  uname: RbConfig::CONFIG["host"],
102
102
  cli_version: ShopifyCli::VERSION,
103
103
  ruby_version: RUBY_VERSION,
104
+ is_employee: ShopifyCli::Shopifolk.acting_as_shopify_organization?,
104
105
  }.tap do |payload|
105
- payload[:metadata] = JSON.dump(metadata) unless metadata.empty?
106
-
106
+ payload[:api_key] = metadata.delete(:api_key)
107
+ payload[:partner_id] = metadata.delete(:organization_id)
107
108
  if Project.has_current?
108
- project = Project.current
109
+ project = Project.current(force_reload: true)
109
110
  payload[:api_key] = project.env&.api_key
110
- payload[:partner_id] = project.config['organization_id']
111
+ payload[:partner_id] = project.config["organization_id"]
111
112
  end
113
+ payload[:metadata] = JSON.dump(metadata) unless metadata.empty?
112
114
  end,
113
115
  }
114
116
  end
@@ -1,5 +1,5 @@
1
- require 'pstore'
2
- require 'forwardable'
1
+ require "pstore"
2
+ require "forwardable"
3
3
 
4
4
  module ShopifyCli
5
5
  # Persists transient data like access tokens that may be cleared
@@ -6,7 +6,7 @@ module ShopifyCli
6
6
  # Feature flags will persist between runs so if the flag is enabled or disabled,
7
7
  # it will still be in that same state on the next cli invocation.
8
8
  class Feature
9
- SECTION = 'features'
9
+ SECTION = "features"
10
10
 
11
11
  ##
12
12
  # ShopifyCli::Feature::Set is included on commands and projects to allow you to hide
@@ -87,8 +87,6 @@ module ShopifyCli
87
87
  ShopifyCli::Config.get_bool(SECTION, feature.to_s)
88
88
  end
89
89
 
90
- private
91
-
92
90
  def set(feature, value)
93
91
  ShopifyCli::Config.set(SECTION, feature.to_s, value)
94
92
  end
@@ -1,4 +1,4 @@
1
- require 'shopify_cli'
1
+ require "shopify_cli"
2
2
 
3
3
  module ShopifyCli
4
4
  class Form
@@ -21,7 +21,7 @@ module ShopifyCli
21
21
  # ShopifyCli::Git.sha
22
22
  #
23
23
  def sha(dir: Dir.pwd, ctx: Context.new)
24
- rev_parse('HEAD', dir: dir, ctx: ctx)
24
+ rev_parse("HEAD", dir: dir, ctx: ctx)
25
25
  end
26
26
 
27
27
  ##
@@ -44,11 +44,11 @@ module ShopifyCli
44
44
  #
45
45
  def clone(repository, dest, ctx: Context.new)
46
46
  if Dir.exist?(dest)
47
- ctx.abort(ctx.message('core.git.error.directory_exists'))
47
+ ctx.abort(ctx.message("core.git.error.directory_exists"))
48
48
  else
49
- success_message = ctx.message('core.git.cloned', dest)
50
- CLI::UI::Frame.open(ctx.message('core.git.cloning', repository, dest), success_text: success_message) do
51
- clone_progress('clone', '--single-branch', repository, dest, ctx: ctx)
49
+ success_message = ctx.message("core.git.cloned", dest)
50
+ CLI::UI::Frame.open(ctx.message("core.git.cloning", repository, dest), success_text: success_message) do
51
+ clone_progress("clone", "--single-branch", repository, dest, ctx: ctx)
52
52
  end
53
53
  end
54
54
  end
@@ -69,11 +69,11 @@ module ShopifyCli
69
69
  # branches = ShopifyCli::Git.branches(@ctx)
70
70
  #
71
71
  def branches(ctx)
72
- output, status = ctx.capture2e('git', 'branch', '--list', '--format=%(refname:short)')
73
- ctx.abort(ctx.message('core.git.error.no_branches_found')) unless status.success?
72
+ output, status = ctx.capture2e("git", "branch", "--list", "--format=%(refname:short)")
73
+ ctx.abort(ctx.message("core.git.error.no_branches_found")) unless status.success?
74
74
 
75
- branches = if output == ''
76
- ['master']
75
+ branches = if output == ""
76
+ ["master"]
77
77
  else
78
78
  output.split("\n")
79
79
  end
@@ -94,14 +94,14 @@ module ShopifyCli
94
94
  # ShopifyCli::Git.init(@ctx)
95
95
  #
96
96
  def init(ctx)
97
- output, status = ctx.capture2e('git', 'status')
97
+ output, status = ctx.capture2e("git", "status")
98
98
 
99
99
  unless status.success?
100
- ctx.abort(ctx.message('core.git.error.repo_not_initiated'))
100
+ ctx.abort(ctx.message("core.git.error.repo_not_initiated"))
101
101
  end
102
102
 
103
- if output.include?('No commits yet')
104
- ctx.abort(ctx.message('core.git.error.no_commits_made'))
103
+ if output.include?("No commits yet")
104
+ ctx.abort(ctx.message("core.git.error.no_commits_made"))
105
105
  end
106
106
  end
107
107
 
@@ -115,18 +115,18 @@ module ShopifyCli
115
115
  end
116
116
 
117
117
  def rev_parse(*args, dir: nil, ctx: Context.new)
118
- exec('rev-parse', *args, dir: dir, ctx: ctx)
118
+ exec("rev-parse", *args, dir: dir, ctx: ctx)
119
119
  end
120
120
 
121
121
  def clone_progress(*git_command, ctx:)
122
122
  CLI::UI::Progress.progress do |bar|
123
123
  msg = []
124
- require 'open3'
124
+ require "open3"
125
125
 
126
- success = Open3.popen3('git', *git_command, '--progress') do |_stdin, _stdout, stderr, thread|
126
+ success = Open3.popen3("git", *git_command, "--progress") do |_stdin, _stdout, stderr, thread|
127
127
  while (line = stderr.gets)
128
128
  msg << line.chomp
129
- next unless line.strip.start_with?('Receiving objects:')
129
+ next unless line.strip.start_with?("Receiving objects:")
130
130
  percent = (line.match(/Receiving objects:\s+(\d+)/)[1].to_f / 100).round(2)
131
131
  bar.tick(set_percent: percent)
132
132
  next
@@ -1,5 +1,5 @@
1
1
  module ShopifyCli
2
2
  module Helpers
3
- autoload :Haikunator, 'shopify-cli/helpers/haikunator'
3
+ autoload :Haikunator, "shopify-cli/helpers/haikunator"
4
4
  end
5
5
  end
@@ -28,7 +28,7 @@ module ShopifyCli
28
28
  module Haikunator
29
29
  class << self
30
30
  def title
31
- build(0, ' ')
31
+ build(0, " ")
32
32
  end
33
33
 
34
34
  def haikunate(token_range = 9999, delimiter = "-")
@@ -1,9 +1,9 @@
1
1
  module ShopifyCli
2
2
  class Heroku
3
3
  DOWNLOAD_URLS = {
4
- linux: 'https://cli-assets.heroku.com/heroku-linux-x64.tar.gz',
5
- mac: 'https://cli-assets.heroku.com/heroku-darwin-x64.tar.gz',
6
- windows: 'https://cli-assets.heroku.com/heroku-x64.exe',
4
+ linux: "https://cli-assets.heroku.com/heroku-linux-x64.tar.gz",
5
+ mac: "https://cli-assets.heroku.com/heroku-darwin-x64.tar.gz",
6
+ windows: "https://cli-assets.heroku.com/heroku-x64.exe",
7
7
  }
8
8
 
9
9
  def initialize(ctx)
@@ -12,33 +12,33 @@ module ShopifyCli
12
12
 
13
13
  def app
14
14
  return nil unless (app = git_remote)
15
- app = app.split('/').last
16
- app = app.split('.').first
15
+ app = app.split("/").last
16
+ app = app.split(".").first
17
17
  app
18
18
  end
19
19
 
20
20
  def authenticate
21
- result = @ctx.system(heroku_command, 'login')
22
- @ctx.abort(@ctx.message('core.heroku.error.authentication')) unless result.success?
21
+ result = @ctx.system(heroku_command, "login")
22
+ @ctx.abort(@ctx.message("core.heroku.error.authentication")) unless result.success?
23
23
  end
24
24
 
25
25
  def create_new_app
26
- output, status = @ctx.capture2e(heroku_command, 'create')
27
- @ctx.abort(@ctx.message('core.heroku.error.creation')) unless status.success?
26
+ output, status = @ctx.capture2e(heroku_command, "create")
27
+ @ctx.abort(@ctx.message("core.heroku.error.creation")) unless status.success?
28
28
  @ctx.puts(output)
29
29
  end
30
30
 
31
31
  def deploy(branch_to_deploy)
32
- result = @ctx.system('git', 'push', '-u', 'heroku', "#{branch_to_deploy}:master")
33
- @ctx.abort(@ctx.message('core.heroku.error.deploy')) unless result.success?
32
+ result = @ctx.system("git", "push", "-u", "heroku", "#{branch_to_deploy}:master")
33
+ @ctx.abort(@ctx.message("core.heroku.error.deploy")) unless result.success?
34
34
  end
35
35
 
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)
40
- @ctx.abort(@ctx.message('core.heroku.error.download')) unless result.success?
41
- @ctx.abort(@ctx.message('core.heroku.error.download')) unless File.exist?(download_path)
39
+ result = @ctx.system("curl", "-o", download_path, DOWNLOAD_URLS[@ctx.os], chdir: ShopifyCli.cache_dir)
40
+ @ctx.abort(@ctx.message("core.heroku.error.download")) unless result.success?
41
+ @ctx.abort(@ctx.message("core.heroku.error.download")) unless File.exist?(download_path)
42
42
  end
43
43
 
44
44
  def install
@@ -47,22 +47,22 @@ 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
- @ctx.abort(@ctx.message('core.heroku.error.install')) unless result.success?
52
+ @ctx.abort(@ctx.message("core.heroku.error.install")) unless result.success?
53
53
 
54
54
  @ctx.rm(download_path)
55
55
  end
56
56
 
57
57
  def select_existing_app(app_name)
58
- result = @ctx.system(heroku_command, 'git:remote', '-a', app_name)
58
+ result = @ctx.system(heroku_command, "git:remote", "-a", app_name)
59
59
 
60
- msg = @ctx.message('core.heroku.error.could_not_select_app', app_name)
60
+ msg = @ctx.message("core.heroku.error.could_not_select_app", app_name)
61
61
  @ctx.abort(msg) unless result.success?
62
62
  end
63
63
 
64
64
  def whoami
65
- output, status = @ctx.capture2e(heroku_command, 'whoami')
65
+ output, status = @ctx.capture2e(heroku_command, "whoami")
66
66
  return output.strip if status.success?
67
67
  nil
68
68
  end
@@ -70,7 +70,7 @@ module ShopifyCli
70
70
  private
71
71
 
72
72
  def download_filename
73
- URI.parse(DOWNLOAD_URLS[@ctx.os]).path.split('/').last
73
+ URI.parse(DOWNLOAD_URLS[@ctx.os]).path.split("/").last
74
74
  end
75
75
 
76
76
  def download_path
@@ -78,33 +78,33 @@ module ShopifyCli
78
78
  end
79
79
 
80
80
  def git_remote
81
- output, status = @ctx.capture2e('git', 'remote', 'get-url', 'heroku')
81
+ output, status = @ctx.capture2e("git", "remote", "get-url", "heroku")
82
82
  status.success? ? output : nil
83
83
  end
84
84
 
85
85
  def heroku_command
86
- local_path = File.join(ShopifyCli.cache_dir, 'heroku', 'bin', 'heroku').to_s
86
+ local_path = File.join(ShopifyCli.cache_dir, "heroku", "bin", "heroku").to_s
87
87
  if File.exist?(local_path)
88
88
  local_path
89
89
  elsif @ctx.windows?
90
90
  # Check if Heroku exists in the Windows registry and run it from there
91
- require 'win32/registry'
91
+ require "win32/registry"
92
92
  begin
93
93
  windows_path = Win32::Registry::HKEY_CURRENT_USER.open('SOFTWARE\heroku') do |reg|
94
- reg[''] # This reads the 'Default' registry key
94
+ reg[""] # This reads the 'Default' registry key
95
95
  end
96
96
 
97
- File.join(windows_path, 'bin', 'heroku').to_s
97
+ File.join(windows_path, "bin", "heroku").to_s
98
98
  rescue
99
- 'heroku'
99
+ "heroku"
100
100
  end
101
101
  else
102
- 'heroku'
102
+ "heroku"
103
103
  end
104
104
  end
105
105
 
106
106
  def installed?
107
- _output, status = @ctx.capture2e(heroku_command, '--version')
107
+ _output, status = @ctx.capture2e(heroku_command, "--version")
108
108
  status.success?
109
109
  rescue
110
110
  false
@@ -1,15 +1,27 @@
1
- require 'net/http'
1
+ require "net/http"
2
2
 
3
3
  module ShopifyCli
4
4
  class HttpRequest
5
- def self.call(uri, body, variables, headers)
6
- http = ::Net::HTTP.new(uri.host, uri.port)
7
- http.use_ssl = true
8
- req = ::Net::HTTP::Post.new(uri.request_uri)
9
- req.body = JSON.dump(query: body.tr("\n", ""), variables: variables)
10
- req['Content-Type'] = 'application/json'
11
- headers.each { |header, value| req[header] = value }
12
- http.request(req)
5
+ class << self
6
+ def post(uri, body, headers)
7
+ req = ::Net::HTTP::Post.new(uri.request_uri)
8
+ request(uri, body, headers, req)
9
+ end
10
+
11
+ def get(uri, body, headers)
12
+ req = ::Net::HTTP::Get.new(uri.request_uri)
13
+ request(uri, body, headers, req)
14
+ end
15
+
16
+ def request(uri, body, headers, req)
17
+ http = ::Net::HTTP.new(uri.host, uri.port)
18
+ http.use_ssl = true
19
+
20
+ req.body = body unless body.nil?
21
+ req["Content-Type"] = "application/json"
22
+ headers.each { |header, value| req[header] = value }
23
+ http.request(req)
24
+ end
13
25
  end
14
26
  end
15
27
  end