shopify-cli 1.3.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) 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/.gitignore +0 -1
  8. data/.rubocop.yml +61 -8
  9. data/.rubocop_todo.yml +11 -0
  10. data/.travis.yml +1 -0
  11. data/CHANGELOG.md +30 -0
  12. data/Gemfile +12 -11
  13. data/Gemfile.lock +39 -37
  14. data/README.md +39 -7
  15. data/RELEASING.md +19 -29
  16. data/Rakefile +32 -28
  17. data/bin/load_shopify.rb +6 -6
  18. data/bin/shopify +2 -2
  19. data/dev.yml +2 -2
  20. data/docs/_config.yml +1 -18
  21. data/docs/app/node/commands/index.md +2 -80
  22. data/docs/app/node/index.md +2 -33
  23. data/docs/app/rails/commands/index.md +2 -78
  24. data/docs/app/rails/index.md +2 -34
  25. data/docs/core/index.md +2 -84
  26. data/docs/getting-started/index.md +2 -25
  27. data/docs/getting-started/install/index.md +1 -118
  28. data/docs/getting-started/migrate/index.md +2 -94
  29. data/docs/getting-started/uninstall/index.md +2 -35
  30. data/docs/getting-started/upgrade/index.md +2 -39
  31. data/docs/help/start-app/index.md +2 -4
  32. data/docs/index.md +2 -24
  33. data/ext/shopify-cli/extconf.rb +7 -7
  34. data/install.sh +1 -1
  35. data/lib/docgen/markdown.rb +11 -11
  36. data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
  37. data/lib/project_types/extension/cli.rb +64 -47
  38. data/lib/project_types/extension/commands/build.rb +3 -3
  39. data/lib/project_types/extension/commands/create.rb +16 -9
  40. data/lib/project_types/extension/commands/extension_command.rb +8 -5
  41. data/lib/project_types/extension/commands/push.rb +8 -8
  42. data/lib/project_types/extension/commands/register.rb +19 -30
  43. data/lib/project_types/extension/commands/serve.rb +2 -2
  44. data/lib/project_types/extension/commands/tunnel.rb +12 -12
  45. data/lib/project_types/extension/extension_project.rb +4 -4
  46. data/lib/project_types/extension/extension_project_keys.rb +4 -4
  47. data/lib/project_types/extension/features/argo.rb +117 -0
  48. data/lib/project_types/extension/features/argo_config.rb +5 -5
  49. data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
  50. data/lib/project_types/extension/features/argo_setup.rb +2 -2
  51. data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
  52. data/lib/project_types/extension/forms/create.rb +28 -34
  53. data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
  54. data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
  55. data/lib/project_types/extension/forms/questions/ask_type.rb +36 -0
  56. data/lib/project_types/extension/messages/messages.rb +53 -52
  57. data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
  58. data/lib/project_types/extension/models/specification.rb +35 -0
  59. data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +19 -0
  60. data/lib/project_types/extension/models/specification_handlers/default.rb +67 -0
  61. data/lib/project_types/extension/models/specifications.rb +77 -0
  62. data/lib/project_types/extension/tasks/configure_features.rb +52 -0
  63. data/lib/project_types/extension/tasks/converters/app_converter.rb +6 -6
  64. data/lib/project_types/extension/tasks/converters/registration_converter.rb +6 -6
  65. data/lib/project_types/extension/tasks/converters/validation_error_converter.rb +4 -4
  66. data/lib/project_types/extension/tasks/converters/version_converter.rb +7 -7
  67. data/lib/project_types/extension/tasks/create_extension.rb +4 -4
  68. data/lib/project_types/extension/tasks/fetch_specifications.rb +38 -0
  69. data/lib/project_types/extension/tasks/get_app.rb +4 -4
  70. data/lib/project_types/extension/tasks/get_apps.rb +3 -3
  71. data/lib/project_types/extension/tasks/update_draft.rb +4 -4
  72. data/lib/project_types/extension/tasks/user_errors.rb +4 -4
  73. data/lib/project_types/node/cli.rb +19 -16
  74. data/lib/project_types/node/commands/connect.rb +15 -0
  75. data/lib/project_types/node/commands/create.rb +46 -38
  76. data/lib/project_types/node/commands/deploy.rb +4 -4
  77. data/lib/project_types/node/commands/deploy/heroku.rb +24 -24
  78. data/lib/project_types/node/commands/generate.rb +9 -18
  79. data/lib/project_types/node/commands/open.rb +2 -2
  80. data/lib/project_types/node/commands/populate.rb +6 -6
  81. data/lib/project_types/node/commands/populate/customer.rb +5 -5
  82. data/lib/project_types/node/commands/populate/draft_order.rb +5 -5
  83. data/lib/project_types/node/commands/populate/product.rb +5 -5
  84. data/lib/project_types/node/commands/serve.rb +9 -9
  85. data/lib/project_types/node/commands/tunnel.rb +7 -7
  86. data/lib/project_types/node/forms/create.rb +7 -7
  87. data/lib/project_types/node/messages/messages.rb +19 -53
  88. data/lib/project_types/rails/cli.rb +21 -18
  89. data/lib/project_types/rails/commands/connect.rb +15 -0
  90. data/lib/project_types/rails/commands/create.rb +60 -54
  91. data/lib/project_types/rails/commands/deploy.rb +4 -4
  92. data/lib/project_types/rails/commands/deploy/heroku.rb +30 -30
  93. data/lib/project_types/rails/commands/generate.rb +7 -7
  94. data/lib/project_types/rails/commands/generate/webhook.rb +6 -6
  95. data/lib/project_types/rails/commands/open.rb +2 -2
  96. data/lib/project_types/rails/commands/populate.rb +6 -6
  97. data/lib/project_types/rails/commands/populate/customer.rb +5 -5
  98. data/lib/project_types/rails/commands/populate/draft_order.rb +5 -5
  99. data/lib/project_types/rails/commands/populate/product.rb +5 -5
  100. data/lib/project_types/rails/commands/serve.rb +11 -11
  101. data/lib/project_types/rails/commands/tunnel.rb +7 -7
  102. data/lib/project_types/rails/forms/create.rb +24 -24
  103. data/lib/project_types/rails/gem.rb +24 -24
  104. data/lib/project_types/rails/messages/messages.rb +12 -9
  105. data/lib/project_types/rails/ruby.rb +2 -2
  106. data/lib/project_types/script/cli.rb +42 -38
  107. data/lib/project_types/script/commands/create.rb +13 -10
  108. data/lib/project_types/script/commands/disable.rb +3 -3
  109. data/lib/project_types/script/commands/enable.rb +19 -9
  110. data/lib/project_types/script/commands/push.rb +10 -17
  111. data/lib/project_types/script/config/extension_points.yml +17 -12
  112. data/lib/project_types/script/errors.rb +38 -0
  113. data/lib/project_types/script/forms/create.rb +29 -5
  114. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +12 -1
  115. data/lib/project_types/script/layers/application/build_script.rb +18 -19
  116. data/lib/project_types/script/layers/application/create_script.rb +13 -11
  117. data/lib/project_types/script/layers/application/disable_script.rb +2 -2
  118. data/lib/project_types/script/layers/application/enable_script.rb +2 -2
  119. data/lib/project_types/script/layers/application/extension_points.rb +24 -0
  120. data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
  121. data/lib/project_types/script/layers/application/push_script.rb +12 -18
  122. data/lib/project_types/script/layers/domain/errors.rb +7 -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 -54
  127. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +49 -18
  128. data/lib/project_types/script/layers/infrastructure/errors.rb +17 -1
  129. data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +12 -6
  130. data/lib/project_types/script/layers/infrastructure/project_creator.rb +2 -1
  131. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +20 -13
  132. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +72 -0
  133. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +59 -0
  134. data/lib/project_types/script/layers/infrastructure/script_service.rb +26 -16
  135. data/lib/project_types/script/layers/infrastructure/task_runner.rb +4 -3
  136. data/lib/project_types/script/messages/messages.rb +67 -10
  137. data/lib/project_types/script/script_project.rb +47 -16
  138. data/lib/project_types/script/ui/error_handler.rb +115 -45
  139. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  140. data/lib/project_types/script/ui/strict_spinner.rb +1 -1
  141. data/lib/project_types/theme/cli.rb +40 -0
  142. data/lib/project_types/theme/commands/connect.rb +54 -0
  143. data/lib/project_types/theme/commands/create.rb +48 -0
  144. data/lib/project_types/theme/commands/deploy.rb +38 -0
  145. data/lib/project_types/theme/commands/generate.rb +20 -0
  146. data/lib/project_types/theme/commands/generate/env.rb +79 -0
  147. data/lib/project_types/theme/commands/push.rb +55 -0
  148. data/lib/project_types/theme/commands/serve.rb +31 -0
  149. data/lib/project_types/theme/forms/connect.rb +34 -0
  150. data/lib/project_types/theme/forms/create.rb +22 -0
  151. data/lib/project_types/theme/messages/messages.rb +147 -0
  152. data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +78 -0
  153. data/lib/project_types/theme/themekit.rb +113 -0
  154. data/lib/rubygems_plugin.rb +3 -3
  155. data/lib/shopify-cli/admin_api.rb +52 -12
  156. data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
  157. data/lib/shopify-cli/admin_api/schema.rb +3 -3
  158. data/lib/shopify-cli/api.rb +38 -37
  159. data/lib/shopify-cli/command.rb +1 -1
  160. data/lib/shopify-cli/commands.rb +9 -9
  161. data/lib/shopify-cli/commands/config.rb +28 -28
  162. data/lib/shopify-cli/commands/connect.rb +35 -18
  163. data/lib/shopify-cli/commands/create.rb +5 -5
  164. data/lib/shopify-cli/commands/help.rb +6 -6
  165. data/lib/shopify-cli/commands/logout.rb +3 -3
  166. data/lib/shopify-cli/commands/system.rb +40 -31
  167. data/lib/shopify-cli/commands/version.rb +2 -2
  168. data/lib/shopify-cli/context.rb +43 -22
  169. data/lib/shopify-cli/core.rb +4 -4
  170. data/lib/shopify-cli/core/entry_point.rb +6 -6
  171. data/lib/shopify-cli/core/executor.rb +1 -1
  172. data/lib/shopify-cli/core/help_resolver.rb +2 -2
  173. data/lib/shopify-cli/core/monorail.rb +21 -19
  174. data/lib/shopify-cli/db.rb +2 -2
  175. data/lib/shopify-cli/feature.rb +1 -3
  176. data/lib/shopify-cli/form.rb +1 -1
  177. data/lib/shopify-cli/git.rb +17 -17
  178. data/lib/shopify-cli/helpers.rb +1 -1
  179. data/lib/shopify-cli/helpers/haikunator.rb +1 -1
  180. data/lib/shopify-cli/heroku.rb +28 -28
  181. data/lib/shopify-cli/http_request.rb +27 -0
  182. data/lib/shopify-cli/js_deps.rb +13 -13
  183. data/lib/shopify-cli/js_system.rb +5 -5
  184. data/lib/shopify-cli/lazy_delegator.rb +55 -0
  185. data/lib/shopify-cli/messages/messages.rb +24 -10
  186. data/lib/shopify-cli/method_object.rb +104 -0
  187. data/lib/shopify-cli/oauth.rb +25 -25
  188. data/lib/shopify-cli/oauth/servlet.rb +9 -9
  189. data/lib/shopify-cli/options.rb +3 -3
  190. data/lib/shopify-cli/packager.rb +24 -24
  191. data/lib/shopify-cli/partners_api.rb +38 -16
  192. data/lib/shopify-cli/partners_api/organizations.rb +10 -10
  193. data/lib/shopify-cli/process_supervision.rb +8 -8
  194. data/lib/shopify-cli/project.rb +27 -23
  195. data/lib/shopify-cli/project_type.rb +21 -5
  196. data/lib/shopify-cli/resolve_constant.rb +25 -0
  197. data/lib/shopify-cli/resources.rb +1 -1
  198. data/lib/shopify-cli/resources/env_file.rb +9 -9
  199. data/lib/shopify-cli/result.rb +432 -0
  200. data/lib/shopify-cli/shopifolk.rb +84 -0
  201. data/lib/shopify-cli/sub_command.rb +1 -1
  202. data/lib/shopify-cli/task.rb +9 -1
  203. data/lib/shopify-cli/tasks.rb +7 -7
  204. data/lib/shopify-cli/tasks/create_api_client.rb +17 -6
  205. data/lib/shopify-cli/tasks/ensure_dev_store.rb +11 -11
  206. data/lib/shopify-cli/tasks/ensure_env.rb +18 -15
  207. data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
  208. data/lib/shopify-cli/tasks/select_org_and_shop.rb +29 -24
  209. data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
  210. data/lib/shopify-cli/transform_data_structure.rb +86 -0
  211. data/lib/shopify-cli/tunnel.rb +36 -30
  212. data/lib/shopify-cli/version.rb +1 -1
  213. data/lib/shopify_cli.rb +57 -51
  214. data/shopify-cli.gemspec +6 -6
  215. data/shopify.fish +1 -1
  216. data/shopify.sh +1 -1
  217. data/vendor/deps/cli-kit/REVISION +1 -1
  218. data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +2 -2
  219. data/vendor/deps/cli-kit/lib/cli/kit/system.rb +3 -3
  220. data/vendor/deps/cli-ui/REVISION +1 -1
  221. data/vendor/deps/cli-ui/lib/cli/ui.rb +26 -22
  222. data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +4 -6
  223. data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -3
  224. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +8 -9
  225. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -1
  226. data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +1 -0
  227. data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +15 -3
  228. data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +4 -11
  229. data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -5
  230. data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +10 -10
  231. data/vendor/deps/cli-ui/lib/cli/ui/version.rb +1 -1
  232. data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
  233. data/vendor/deps/webrick/.gitignore +9 -0
  234. data/vendor/deps/webrick/Gemfile +3 -0
  235. data/vendor/deps/webrick/LICENSE.txt +22 -0
  236. data/vendor/deps/webrick/README.md +61 -0
  237. data/vendor/deps/webrick/Rakefile +10 -0
  238. data/vendor/deps/webrick/lib/webrick.rb +232 -0
  239. data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
  240. data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
  241. data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
  242. data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
  243. data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
  244. data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
  245. data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
  246. data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
  247. data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
  248. data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
  249. data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
  250. data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
  251. data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
  252. data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
  253. data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
  254. data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
  255. data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
  256. data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
  257. data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
  258. data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
  259. data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
  260. data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  261. data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
  262. data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
  263. data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
  264. data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
  265. data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
  266. data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
  267. data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
  268. data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
  269. data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
  270. data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
  271. data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
  272. data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
  273. data/vendor/deps/webrick/webrick.gemspec +74 -0
  274. data/vendor/gen/template/bin/update-deps +9 -9
  275. metadata +84 -29
  276. data/docs/Gemfile +0 -5
  277. data/docs/Gemfile.lock +0 -258
  278. data/docs/_data/nav.yml +0 -35
  279. data/docs/_includes/footer.html +0 -15
  280. data/docs/_includes/head.html +0 -19
  281. data/docs/_includes/sidebar_nav.html +0 -22
  282. data/docs/_includes/toc.html +0 -112
  283. data/docs/_layouts/default.html +0 -79
  284. data/docs/css/docs.css +0 -157
  285. data/docs/images/header.png +0 -0
  286. data/docs/installing-ruby.md +0 -28
  287. data/lib/project_types/extension/features/argo/admin.rb +0 -20
  288. data/lib/project_types/extension/features/argo/base.rb +0 -129
  289. data/lib/project_types/extension/features/argo/checkout.rb +0 -20
  290. data/lib/project_types/extension/forms/register.rb +0 -47
  291. data/lib/project_types/extension/models/type.rb +0 -81
  292. data/lib/project_types/extension/models/types/checkout_post_purchase.rb +0 -23
  293. data/lib/project_types/extension/models/types/product_subscription.rb +0 -24
  294. data/lib/project_types/node/commands/generate/billing.rb +0 -39
  295. data/lib/project_types/node/commands/generate/page.rb +0 -59
  296. data/lib/project_types/node/commands/generate/webhook.rb +0 -37
  297. data/lib/project_types/script/layers/domain/script.rb +0 -18
  298. data/lib/project_types/script/layers/infrastructure/assemblyscript_tsconfig.rb +0 -38
  299. data/lib/project_types/script/layers/infrastructure/script_repository.rb +0 -59
  300. data/lib/project_types/script/templates/ts/as-pect.config.js +0 -27
  301. data/lib/project_types/script/templates/ts/as-pect.d.ts +0 -1
@@ -1,10 +1,10 @@
1
- require 'shopify_cli'
1
+ require "shopify_cli"
2
2
 
3
3
  module ShopifyCli
4
4
  module Commands
5
5
  class Version < ShopifyCli::Command
6
6
  def self.help
7
- ShopifyCli::Context.message('core.version.help', ShopifyCli::TOOL_NAME)
7
+ ShopifyCli::Context.message("core.version.help", ShopifyCli::TOOL_NAME)
8
8
  end
9
9
 
10
10
  def call(_args, _name)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
- require 'shopify_cli'
3
- require 'fileutils'
4
- require 'rbconfig'
5
- require 'net/http'
6
- require 'json'
2
+ require "shopify_cli"
3
+ require "fileutils"
4
+ require "rbconfig"
5
+ require "net/http"
6
+ require "json"
7
7
 
8
8
  module ShopifyCli
9
9
  ##
@@ -13,9 +13,9 @@ module ShopifyCli
13
13
  # resoures.
14
14
  #
15
15
  class Context
16
- GEM_LATEST_URI = URI.parse('https://rubygems.org/api/v1/versions/shopify-cli/latest.json')
17
- VERSION_CHECK_SECTION = 'versioncheck'
18
- LAST_CHECKED_AT_FIELD = 'last_checked_at'
16
+ GEM_LATEST_URI = URI.parse("https://rubygems.org/api/v1/versions/shopify-cli/latest.json")
17
+ VERSION_CHECK_SECTION = "versioncheck"
18
+ LAST_CHECKED_AT_FIELD = "last_checked_at"
19
19
  VERSION_CHECK_INTERVAL = 86400
20
20
 
21
21
  class << self
@@ -40,7 +40,7 @@ module ShopifyCli
40
40
  # * `key` - a symbol representing the message
41
41
  # * `params` - the parameters to format the string with
42
42
  def message(key, *params)
43
- key_parts = key.split('.').map(&:to_sym)
43
+ key_parts = key.split(".").map(&:to_sym)
44
44
  str = Context.messages.dig(*key_parts)
45
45
  str ? str % params : key
46
46
  end
@@ -86,7 +86,7 @@ module ShopifyCli
86
86
  # See `#development?` for checking for development environment.
87
87
  #
88
88
  def system?
89
- !Dir.exist?(File.join(ShopifyCli::ROOT, 'test'))
89
+ !Dir.exist?(File.join(ShopifyCli::ROOT, "test"))
90
90
  end
91
91
 
92
92
  # will return true if the cli is running on your development instance.
@@ -97,13 +97,13 @@ module ShopifyCli
97
97
 
98
98
  # will return true while tests are running, either locally or on CI
99
99
  def testing?
100
- ci? || ENV['TEST']
100
+ ci? || ENV["TEST"]
101
101
  end
102
102
 
103
103
  ##
104
104
  # will return true if the cli is being tested on CI
105
105
  def ci?
106
- ENV['CI']
106
+ ENV["CI"]
107
107
  end
108
108
 
109
109
  # get a environment variable value by name.
@@ -116,7 +116,7 @@ module ShopifyCli
116
116
  #
117
117
  def getenv(name)
118
118
  v = @env[name]
119
- v == '' ? nil : v
119
+ v == "" ? nil : v
120
120
  end
121
121
 
122
122
  # set a environment variable value by name.
@@ -254,7 +254,7 @@ module ShopifyCli
254
254
  # * `uri` - a http URI to open in a browser
255
255
  #
256
256
  def open_url!(uri)
257
- help = message('core.context.open_url', uri)
257
+ help = message("core.context.open_url", uri)
258
258
  puts(help)
259
259
  end
260
260
 
@@ -303,7 +303,7 @@ module ShopifyCli
303
303
  # * `text` - a string message to output
304
304
  #
305
305
  def debug(text)
306
- puts("{{red:DEBUG}} #{text}") if getenv('DEBUG')
306
+ puts("{{red:DEBUG}} #{text}") if getenv("DEBUG")
307
307
  end
308
308
 
309
309
  # proxy call to Context.message.
@@ -329,14 +329,18 @@ module ShopifyCli
329
329
  # - `**kwargs`: additional keyword arguments to pass to Process.spawn
330
330
  #
331
331
  # #### Returns
332
- # - `status`: boolean success status of the command execution
332
+ # - `status`: The `Process::Status` result of the command execution.
333
333
  #
334
334
  # #### Usage
335
335
  #
336
336
  # stat = @ctx.system('ls', 'a_folder')
337
337
  #
338
338
  def system(*args, **kwargs)
339
- CLI::Kit::System.system(*args, env: @env, **kwargs)
339
+ process_status = CLI::Kit::System.system(*args, env: @env, **kwargs)
340
+ unless process_status.success?
341
+ abort("System call failed: #{args.join(" ")}")
342
+ end
343
+ process_status
340
344
  end
341
345
 
342
346
  # Execute a command in the user's environment
@@ -410,13 +414,13 @@ module ShopifyCli
410
414
  #
411
415
  def on_siginfo
412
416
  # Reset any previous SIGINFO handling we had so the only action we take is the given block
413
- trap('INFO', 'DEFAULT')
417
+ trap("INFO", "DEFAULT")
414
418
 
415
419
  fork do
416
420
  begin
417
421
  r, w = IO.pipe
418
422
  @signal = false
419
- trap('SIGINFO') do
423
+ trap("SIGINFO") do
420
424
  @signal = true
421
425
  w.write(0)
422
426
  end
@@ -442,8 +446,8 @@ module ShopifyCli
442
446
  # @todo This is currently a duplicate of CLI::Kit::System.which() - we should make that method public when we make
443
447
  # Kit changes and make this a wrapper instead.
444
448
  def which(cmd)
445
- exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
446
- ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
449
+ exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""]
450
+ ENV["PATH"].split(File::PATH_SEPARATOR).each do |path|
447
451
  exts.each do |ext|
448
452
  exe = File.join(File.expand_path(path), "#{cmd}#{ext}")
449
453
  return exe if File.executable?(exe) && !File.directory?(exe)
@@ -470,10 +474,27 @@ module ShopifyCli
470
474
  end
471
475
  end
472
476
 
477
+ # Returns file extension depending on OS
478
+ # since windows has multiple extensions, the default is .exe unless otherwise specified
479
+ #
480
+ # #### Parameters
481
+ # - ext: optional extension for windows file
482
+ #
483
+ # #### Returns
484
+ # - ext: string for file extension on windows
485
+ # : empty string otherwise
486
+ def executable_file_extension(ext = ".exe")
487
+ if windows?
488
+ ext
489
+ else
490
+ ""
491
+ end
492
+ end
493
+
473
494
  private
474
495
 
475
496
  def ctx_path(fname)
476
- require 'pathname'
497
+ require "pathname"
477
498
  if Pathname.new(fname).absolute?
478
499
  fname
479
500
  else
@@ -1,8 +1,8 @@
1
1
  module ShopifyCli
2
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'
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
7
  end
8
8
  end
@@ -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
- else
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