shopify-cli 2.4.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/shopify.yml +0 -2
  3. data/.rubocop.yml +14 -14
  4. data/.rubocop_todo.yml +3 -3
  5. data/CHANGELOG.md +5 -0
  6. data/Dockerfile +1 -1
  7. data/Gemfile.lock +1 -1
  8. data/RELEASING.md +1 -1
  9. data/Rakefile +18 -18
  10. data/bin/shopify +3 -3
  11. data/lib/project_types/extension/cli.rb +3 -3
  12. data/lib/project_types/extension/commands/build.rb +2 -2
  13. data/lib/project_types/extension/commands/check.rb +2 -2
  14. data/lib/project_types/extension/commands/connect.rb +1 -1
  15. data/lib/project_types/extension/commands/create.rb +41 -23
  16. data/lib/project_types/extension/commands/extension_command.rb +1 -1
  17. data/lib/project_types/extension/commands/info.rb +1 -1
  18. data/lib/project_types/extension/commands/push.rb +1 -1
  19. data/lib/project_types/extension/commands/register.rb +2 -2
  20. data/lib/project_types/extension/commands/serve.rb +5 -5
  21. data/lib/project_types/extension/commands/tunnel.rb +6 -6
  22. data/lib/project_types/extension/extension_project.rb +4 -4
  23. data/lib/project_types/extension/features/argo.rb +2 -2
  24. data/lib/project_types/extension/features/argo_config.rb +5 -5
  25. data/lib/project_types/extension/features/argo_serve.rb +20 -6
  26. data/lib/project_types/extension/features/argo_setup.rb +1 -1
  27. data/lib/project_types/extension/features/argo_setup_step.rb +1 -1
  28. data/lib/project_types/extension/features/argo_setup_steps.rb +2 -2
  29. data/lib/project_types/extension/forms/connect.rb +2 -2
  30. data/lib/project_types/extension/forms/create.rb +2 -2
  31. data/lib/project_types/extension/forms/questions/ask_app.rb +2 -2
  32. data/lib/project_types/extension/forms/questions/ask_name.rb +1 -1
  33. data/lib/project_types/extension/forms/questions/ask_registration.rb +2 -2
  34. data/lib/project_types/extension/forms/questions/ask_template.rb +2 -2
  35. data/lib/project_types/extension/forms/questions/ask_type.rb +2 -2
  36. data/lib/project_types/extension/messages/message_loading.rb +2 -2
  37. data/lib/project_types/extension/models/development_server.rb +45 -6
  38. data/lib/project_types/extension/models/development_server_requirements.rb +22 -3
  39. data/lib/project_types/extension/models/lazy_specification_handler.rb +1 -1
  40. data/lib/project_types/extension/models/specification.rb +1 -1
  41. data/lib/project_types/extension/models/specification_handlers/default.rb +10 -2
  42. data/lib/project_types/extension/models/specification_handlers/theme_app_extension.rb +1 -1
  43. data/lib/project_types/extension/models/specifications.rb +4 -4
  44. data/lib/project_types/extension/tasks/choose_next_available_port.rb +1 -1
  45. data/lib/project_types/extension/tasks/configure_features.rb +1 -1
  46. data/lib/project_types/extension/tasks/configure_options.rb +1 -1
  47. data/lib/project_types/extension/tasks/converters/product_converter.rb +1 -1
  48. data/lib/project_types/extension/tasks/create_extension.rb +2 -2
  49. data/lib/project_types/extension/tasks/fetch_specifications.rb +2 -2
  50. data/lib/project_types/extension/tasks/find_npm_packages.rb +3 -3
  51. data/lib/project_types/extension/tasks/get_app.rb +2 -2
  52. data/lib/project_types/extension/tasks/get_apps.rb +2 -2
  53. data/lib/project_types/extension/tasks/get_extensions.rb +2 -2
  54. data/lib/project_types/extension/tasks/get_product.rb +2 -2
  55. data/lib/project_types/extension/tasks/run_extension_command.rb +10 -3
  56. data/lib/project_types/extension/tasks/update_draft.rb +2 -2
  57. data/lib/project_types/node/cli.rb +3 -3
  58. data/lib/project_types/node/commands/connect.rb +4 -4
  59. data/lib/project_types/node/commands/create.rb +10 -10
  60. data/lib/project_types/node/commands/deploy/heroku.rb +4 -4
  61. data/lib/project_types/node/commands/deploy.rb +3 -3
  62. data/lib/project_types/node/commands/generate.rb +2 -2
  63. data/lib/project_types/node/commands/open.rb +3 -3
  64. data/lib/project_types/node/commands/serve.rb +7 -7
  65. data/lib/project_types/node/commands/tunnel.rb +6 -6
  66. data/lib/project_types/node/forms/create.rb +3 -3
  67. data/lib/project_types/php/cli.rb +27 -0
  68. data/lib/project_types/php/commands/connect.rb +19 -0
  69. data/lib/project_types/php/commands/create.rb +143 -0
  70. data/lib/project_types/php/commands/deploy/heroku.rb +129 -0
  71. data/lib/project_types/php/commands/deploy.rb +32 -0
  72. data/lib/project_types/php/commands/open.rb +16 -0
  73. data/lib/project_types/php/commands/serve.rb +51 -0
  74. data/lib/project_types/php/commands/tunnel.rb +37 -0
  75. data/lib/project_types/php/forms/create.rb +45 -0
  76. data/lib/project_types/php/messages/messages.rb +191 -0
  77. data/lib/project_types/rails/cli.rb +3 -3
  78. data/lib/project_types/rails/commands/connect.rb +4 -4
  79. data/lib/project_types/rails/commands/create.rb +12 -12
  80. data/lib/project_types/rails/commands/deploy/heroku.rb +4 -4
  81. data/lib/project_types/rails/commands/deploy.rb +3 -3
  82. data/lib/project_types/rails/commands/generate/webhook.rb +3 -3
  83. data/lib/project_types/rails/commands/generate.rb +3 -3
  84. data/lib/project_types/rails/commands/open.rb +3 -3
  85. data/lib/project_types/rails/commands/serve.rb +8 -8
  86. data/lib/project_types/rails/commands/tunnel.rb +6 -6
  87. data/lib/project_types/rails/forms/create.rb +3 -3
  88. data/lib/project_types/rails/gem.rb +1 -1
  89. data/lib/project_types/rails/ruby.rb +1 -1
  90. data/lib/project_types/script/cli.rb +11 -4
  91. data/lib/project_types/script/commands/create.rb +2 -2
  92. data/lib/project_types/script/commands/push.rb +2 -2
  93. data/lib/project_types/script/forms/create.rb +1 -1
  94. data/lib/project_types/script/layers/application/extension_points.rb +2 -2
  95. data/lib/project_types/script/layers/application/push_script.rb +4 -1
  96. data/lib/project_types/script/layers/domain/script_project.rb +2 -2
  97. data/lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb +55 -0
  98. data/lib/project_types/script/layers/infrastructure/api_clients/script_service_api_client.rb +35 -0
  99. data/lib/project_types/script/layers/infrastructure/command_runner.rb +1 -1
  100. data/lib/project_types/script/layers/infrastructure/languages/assemblyscript_project_creator.rb +1 -1
  101. data/lib/project_types/script/layers/infrastructure/languages/rust_project_creator.rb +1 -1
  102. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +1 -1
  103. data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +5 -5
  104. data/lib/project_types/script/layers/infrastructure/script_service.rb +4 -8
  105. data/lib/project_types/script/layers/infrastructure/service_locator.rb +20 -0
  106. data/lib/project_types/script/tasks/ensure_env.rb +6 -6
  107. data/lib/project_types/script/ui/error_handler.rb +75 -75
  108. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  109. data/lib/project_types/theme/cli.rb +3 -3
  110. data/lib/project_types/theme/commands/check.rb +3 -3
  111. data/lib/project_types/theme/commands/delete.rb +7 -7
  112. data/lib/project_types/theme/commands/init.rb +3 -3
  113. data/lib/project_types/theme/commands/language_server.rb +2 -2
  114. data/lib/project_types/theme/commands/package.rb +2 -2
  115. data/lib/project_types/theme/commands/publish.rb +5 -5
  116. data/lib/project_types/theme/commands/pull.rb +9 -9
  117. data/lib/project_types/theme/commands/push.rb +12 -12
  118. data/lib/project_types/theme/commands/serve.rb +4 -4
  119. data/lib/project_types/theme/forms/confirm_store.rb +1 -1
  120. data/lib/project_types/theme/forms/select.rb +2 -2
  121. data/lib/{shopify-cli → shopify_cli}/admin_api/populate_resource_command.rb +3 -3
  122. data/lib/{shopify-cli → shopify_cli}/admin_api/schema.rb +4 -4
  123. data/lib/{shopify-cli → shopify_cli}/admin_api.rb +27 -27
  124. data/lib/{shopify-cli → shopify_cli}/api.rb +8 -8
  125. data/lib/{shopify-cli → shopify_cli}/command.rb +3 -3
  126. data/lib/{shopify-cli → shopify_cli}/commands/config.rb +14 -14
  127. data/lib/{shopify-cli → shopify_cli}/commands/help.rb +4 -4
  128. data/lib/{shopify-cli → shopify_cli}/commands/login.rb +7 -7
  129. data/lib/shopify_cli/commands/logout.rb +39 -0
  130. data/lib/{shopify-cli → shopify_cli}/commands/populate/customer.rb +4 -4
  131. data/lib/{shopify-cli → shopify_cli}/commands/populate/draft_order.rb +4 -4
  132. data/lib/{shopify-cli → shopify_cli}/commands/populate/product.rb +4 -4
  133. data/lib/shopify_cli/commands/populate.rb +23 -0
  134. data/lib/shopify_cli/commands/store.rb +15 -0
  135. data/lib/{shopify-cli → shopify_cli}/commands/switch.rb +5 -5
  136. data/lib/{shopify-cli → shopify_cli}/commands/system.rb +10 -10
  137. data/lib/shopify_cli/commands/version.rb +15 -0
  138. data/lib/{shopify-cli → shopify_cli}/commands/whoami.rb +7 -7
  139. data/lib/shopify_cli/commands.rb +34 -0
  140. data/lib/{shopify-cli → shopify_cli}/connect.rb +3 -3
  141. data/lib/{shopify-cli → shopify_cli}/constants.rb +1 -1
  142. data/lib/{shopify-cli → shopify_cli}/context.rb +6 -6
  143. data/lib/{shopify-cli → shopify_cli}/core/entry_point.rb +7 -7
  144. data/lib/{shopify-cli → shopify_cli}/core/executor.rb +3 -3
  145. data/lib/{shopify-cli → shopify_cli}/core/finalize.rb +1 -1
  146. data/lib/{shopify-cli → shopify_cli}/core/help_resolver.rb +2 -2
  147. data/lib/{shopify-cli → shopify_cli}/core/monorail.rb +8 -8
  148. data/lib/shopify_cli/core.rb +8 -0
  149. data/lib/{shopify-cli → shopify_cli}/db.rb +8 -8
  150. data/lib/{shopify-cli → shopify_cli}/environment.rb +1 -1
  151. data/lib/{shopify-cli → shopify_cli}/feature.rb +8 -8
  152. data/lib/{shopify-cli → shopify_cli}/form.rb +2 -2
  153. data/lib/{shopify-cli → shopify_cli}/git.rb +6 -6
  154. data/lib/{shopify-cli → shopify_cli}/helpers/haikunator.rb +1 -1
  155. data/lib/shopify_cli/helpers.rb +5 -0
  156. data/lib/{shopify-cli → shopify_cli}/heroku.rb +38 -13
  157. data/lib/{shopify-cli → shopify_cli}/http_request.rb +1 -1
  158. data/lib/{shopify-cli → shopify_cli}/identity_auth/servlet.rb +1 -1
  159. data/lib/{shopify-cli → shopify_cli}/identity_auth.rb +8 -8
  160. data/lib/{shopify-cli → shopify_cli}/js_deps.rb +7 -7
  161. data/lib/{shopify-cli → shopify_cli}/js_system.rb +10 -10
  162. data/lib/{shopify-cli → shopify_cli}/lazy_delegator.rb +2 -2
  163. data/lib/{shopify-cli → shopify_cli}/messages/messages.rb +17 -1
  164. data/lib/{shopify-cli → shopify_cli}/method_object.rb +4 -4
  165. data/lib/{shopify-cli → shopify_cli}/options.rb +1 -1
  166. data/lib/{shopify-cli → shopify_cli}/packager.rb +8 -8
  167. data/lib/{shopify-cli → shopify_cli}/partners_api/organizations.rb +1 -1
  168. data/lib/{shopify-cli → shopify_cli}/partners_api.rb +13 -13
  169. data/lib/shopify_cli/php_deps.rb +102 -0
  170. data/lib/{shopify-cli → shopify_cli}/process_supervision.rb +10 -8
  171. data/lib/{shopify-cli → shopify_cli}/project.rb +15 -15
  172. data/lib/{shopify-cli → shopify_cli}/project_commands.rb +3 -3
  173. data/lib/{shopify-cli → shopify_cli}/project_type.rb +5 -5
  174. data/lib/{shopify-cli → shopify_cli}/resolve_constant.rb +5 -5
  175. data/lib/{shopify-cli → shopify_cli}/resources/env_file.rb +1 -1
  176. data/lib/shopify_cli/resources.rb +5 -0
  177. data/lib/{shopify-cli → shopify_cli}/result.rb +11 -11
  178. data/lib/{shopify-cli → shopify_cli}/shopifolk.rb +6 -6
  179. data/lib/{shopify-cli → shopify_cli}/sub_command.rb +1 -1
  180. data/lib/{shopify-cli → shopify_cli}/task.rb +1 -1
  181. data/lib/{shopify-cli → shopify_cli}/tasks/confirm_store.rb +3 -3
  182. data/lib/{shopify-cli → shopify_cli}/tasks/create_api_client.rb +4 -4
  183. data/lib/shopify_cli/tasks/ensure_authenticated.rb +13 -0
  184. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_dev_store.rb +5 -5
  185. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_env.rb +3 -3
  186. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_loopback_url.rb +4 -4
  187. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_project_type.rb +3 -3
  188. data/lib/{shopify-cli → shopify_cli}/tasks/select_org_and_shop.rb +8 -8
  189. data/lib/{shopify-cli → shopify_cli}/tasks/update_dashboard_urls.rb +6 -6
  190. data/lib/{shopify-cli → shopify_cli}/tasks.rb +10 -10
  191. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/certificate_manager.rb +5 -5
  192. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/header_hash.rb +1 -1
  193. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/hot-reload.js +0 -0
  194. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/hot_reload.rb +1 -1
  195. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/local_assets.rb +1 -1
  196. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/proxy.rb +2 -2
  197. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/sse.rb +1 -1
  198. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/watcher.rb +1 -1
  199. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/web_server.rb +1 -1
  200. data/lib/{shopify-cli → shopify_cli}/theme/dev_server.rb +3 -3
  201. data/lib/{shopify-cli → shopify_cli}/theme/development_theme.rb +9 -9
  202. data/lib/{shopify-cli → shopify_cli}/theme/file.rb +1 -1
  203. data/lib/{shopify-cli → shopify_cli}/theme/ignore_filter.rb +1 -1
  204. data/lib/{shopify-cli → shopify_cli}/theme/mime_type.rb +1 -1
  205. data/lib/{shopify-cli → shopify_cli}/theme/syncer.rb +6 -6
  206. data/lib/{shopify-cli → shopify_cli}/theme/theme.rb +4 -4
  207. data/lib/{shopify-cli → shopify_cli}/transform_data_structure.rb +4 -4
  208. data/lib/{shopify-cli → shopify_cli}/tunnel.rb +14 -14
  209. data/lib/shopify_cli/version.rb +3 -0
  210. data/lib/shopify_cli.rb +50 -49
  211. data/shopify-cli.gemspec +2 -2
  212. metadata +104 -91
  213. data/lib/project_types/script/layers/infrastructure/api_clients.rb +0 -89
  214. data/lib/shopify-cli/commands/logout.rb +0 -39
  215. data/lib/shopify-cli/commands/populate.rb +0 -23
  216. data/lib/shopify-cli/commands/store.rb +0 -15
  217. data/lib/shopify-cli/commands/version.rb +0 -15
  218. data/lib/shopify-cli/commands.rb +0 -34
  219. data/lib/shopify-cli/core.rb +0 -8
  220. data/lib/shopify-cli/helpers.rb +0 -5
  221. data/lib/shopify-cli/resources.rb +0 -5
  222. data/lib/shopify-cli/tasks/ensure_authenticated.rb +0 -13
  223. data/lib/shopify-cli/version.rb +0 -3
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+ require "shopify_cli"
3
+
4
+ module PHP
5
+ class Command
6
+ class Deploy < ShopifyCLI::SubCommand
7
+ prerequisite_task ensure_project_type: :php
8
+
9
+ autoload :Heroku, Project.project_filepath("commands/deploy/heroku")
10
+
11
+ HEROKU = "heroku"
12
+
13
+ def call(args, _name)
14
+ subcommand = args.shift
15
+ case subcommand
16
+ when HEROKU
17
+ PHP::Command::Deploy::Heroku.start(@ctx)
18
+ else
19
+ @ctx.puts(self.class.help)
20
+ end
21
+ end
22
+
23
+ def self.help
24
+ ShopifyCLI::Context.message("php.deploy.help", ShopifyCLI::TOOL_NAME)
25
+ end
26
+
27
+ def self.extended_help
28
+ ShopifyCLI::Context.message("php.deploy.extended_help", ShopifyCLI::TOOL_NAME)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PHP
4
+ class Command
5
+ class Open < ShopifyCLI::SubCommand
6
+ def call(*)
7
+ project = ShopifyCLI::Project.current
8
+ @ctx.open_url!("#{project.env.host}/login?shop=#{project.env.shop}")
9
+ end
10
+
11
+ def self.help
12
+ ShopifyCLI::Context.message("php.open.help", ShopifyCLI::TOOL_NAME)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+ module PHP
3
+ class Command
4
+ class Serve < ShopifyCLI::SubCommand
5
+ PORT = 3000
6
+
7
+ prerequisite_task :ensure_env, :ensure_dev_store
8
+
9
+ options do |parser, flags|
10
+ parser.on("--host=HOST") do |h|
11
+ flags[:host] = h.gsub('"', "")
12
+ end
13
+ end
14
+
15
+ def call(*)
16
+ project = ShopifyCLI::Project.current
17
+ url = options.flags[:host] || ShopifyCLI::Tunnel.start(@ctx, port: PORT)
18
+ @ctx.abort(@ctx.message("php.serve.error.host_must_be_https")) if url.match(/^https/i).nil?
19
+ project.env.update(@ctx, :host, url)
20
+ ShopifyCLI::Tasks::UpdateDashboardURLS.call(
21
+ @ctx,
22
+ url: url,
23
+ callback_url: "/auth/callback",
24
+ )
25
+
26
+ if project.env.shop
27
+ project_url = "#{project.env.host}/login?shop=#{project.env.shop}"
28
+ @ctx.puts("\n" + @ctx.message("php.serve.open_info", project_url) + "\n")
29
+ end
30
+
31
+ CLI::UI::Frame.open(@ctx.message("php.serve.running_server")) do
32
+ if ShopifyCLI::ProcessSupervision.running?(:npm_watch)
33
+ ShopifyCLI::ProcessSupervision.stop(:npm_watch)
34
+ end
35
+ ShopifyCLI::ProcessSupervision.start(:npm_watch, "npm run watch", force_spawn: true)
36
+
37
+ env = project.env.to_h
38
+ @ctx.system("php", "artisan", "serve", "--port", PORT.to_s, env: env)
39
+ end
40
+ end
41
+
42
+ def self.help
43
+ ShopifyCLI::Context.message("php.serve.help", ShopifyCLI::TOOL_NAME)
44
+ end
45
+
46
+ def self.extended_help
47
+ ShopifyCLI::Context.message("php.serve.extended_help")
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "shopify_cli"
4
+
5
+ module PHP
6
+ class Command
7
+ class Tunnel < ShopifyCLI::SubCommand
8
+ def call(args, _name)
9
+ subcommand = args.shift
10
+ case subcommand
11
+ when "auth"
12
+ token = args.shift
13
+ if token.nil?
14
+ @ctx.puts(@ctx.message("php.tunnel.error.token_argument_missing"))
15
+ @ctx.puts("#{self.class.help}\n#{self.class.extended_help}")
16
+ else
17
+ ShopifyCLI::Tunnel.auth(@ctx, token)
18
+ end
19
+ when "start"
20
+ ShopifyCLI::Tunnel.start(@ctx)
21
+ when "stop"
22
+ ShopifyCLI::Tunnel.stop(@ctx)
23
+ else
24
+ @ctx.puts(self.class.help)
25
+ end
26
+ end
27
+
28
+ def self.help
29
+ ShopifyCLI::Context.message("php.tunnel.help", ShopifyCLI::TOOL_NAME)
30
+ end
31
+
32
+ def self.extended_help
33
+ ShopifyCLI::Context.message("php.tunnel.extended_help", ShopifyCLI::TOOL_NAME)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,45 @@
1
+ require "uri"
2
+
3
+ module PHP
4
+ module Forms
5
+ class Create < ShopifyCLI::Form
6
+ attr_accessor :name
7
+ flag_arguments :title, :organization_id, :shop_domain, :type
8
+
9
+ def ask
10
+ self.title ||= CLI::UI::Prompt.ask(ctx.message("php.forms.create.app_name"))
11
+ self.name = format_name
12
+ self.type = ask_type
13
+ res = ShopifyCLI::Tasks::SelectOrgAndShop.call(ctx, organization_id: organization_id, shop_domain: shop_domain)
14
+ self.organization_id = res[:organization_id]
15
+ self.shop_domain = res[:shop_domain]
16
+ end
17
+
18
+ private
19
+
20
+ def format_name
21
+ name = title.downcase.split(" ").join("_")
22
+
23
+ if name.include?("shopify")
24
+ ctx.abort(ctx.message("php.forms.create.error.invalid_app_name"))
25
+ end
26
+ name
27
+ end
28
+
29
+ def ask_type
30
+ if type.nil?
31
+ return CLI::UI::Prompt.ask(ctx.message("php.forms.create.app_type.select")) do |handler|
32
+ handler.option(ctx.message("php.forms.create.app_type.select_public")) { "public" }
33
+ handler.option(ctx.message("php.forms.create.app_type.select_custom")) { "custom" }
34
+ end
35
+ end
36
+
37
+ unless ShopifyCLI::Tasks::CreateApiClient::VALID_APP_TYPES.include?(type)
38
+ ctx.abort(ctx.message("php.forms.create.error.invalid_app_type", type))
39
+ end
40
+ ctx.puts(ctx.message("php.forms.create.app_type.selected", type))
41
+ type
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,191 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PHP
4
+ module Messages
5
+ MESSAGES = {
6
+ php: {
7
+ help: <<~HELP,
8
+ Suite of commands for developing PHP apps with Laravel. See {{command:%1$s php <command> --help}} for usage of each command.
9
+ Usage: {{command:%1$s php [ %2$s ]}}
10
+ HELP
11
+
12
+ connect: {
13
+ connected: "Project now connected to {{green:%s}}",
14
+ help: <<~HELP,
15
+ {{command:%s php connect}}: Connects an existing PHP app to Shopify CLI. Creates a config file.
16
+ Usage: {{command:%s php connect}}
17
+ HELP
18
+ production_warning: <<~MESSAGE,
19
+ {{yellow:! Warning: if you have connected to an {{bold:app in production}}, running {{command:serve}} may update the app URL and cause an outage.
20
+ MESSAGE
21
+ },
22
+
23
+ create: {
24
+ help: <<~HELP,
25
+ {{command:%s create php}}: Creates an embedded PHP app.
26
+ Usage: {{command:%s create php}}
27
+ Options:
28
+ {{command:--name=NAME}} App name. Any string.
29
+ {{command:--organization-id=ID}} Partner organization ID. Must be an existing organization.
30
+ {{command:--shop-domain=MYSHOPIFYDOMAIN}} Development store URL. Must be an existing development store.
31
+ {{command:--type=APPTYPE}} Whether this app is public or custom.
32
+ {{command:--verbose}} Output verbose information when installing dependencies.
33
+ HELP
34
+
35
+ error: {
36
+ php_required: <<~VERSION,
37
+ PHP is required to create an app project. For installation instructions, visit:
38
+ {{underline:https://www.php.net/manual/en/install.php}}
39
+ VERSION
40
+ php_version_failure: <<~VERSION,
41
+ Failed to get the current PHP version. Please make sure it is installed as per the instructions at:
42
+ {{underline:https://www.php.net/manual/en/install.php.}}
43
+ VERSION
44
+ php_version_too_low: "Your PHP version is too low. Please use version %s or higher.",
45
+ composer_required: <<~COMPOSER,
46
+ Composer is required to create an app project. Download at:
47
+ {{underline:https://getcomposer.org/download/}}
48
+ COMPOSER
49
+ npm_required: "npm is required to create an app project. Download at https://www.npmjs.com/get-npm.",
50
+ npm_version_failure: "Failed to get the current npm version. Please make sure it is installed as per " \
51
+ "the instructions at https://www.npmjs.com/get-npm.",
52
+ app_setup: "Failed to set up the app",
53
+ },
54
+
55
+ php_version: "PHP %s",
56
+ npm_version: "npm %s",
57
+ app_setting_up: "Setting up app…",
58
+ app_set_up: "App is now set up",
59
+ },
60
+
61
+ open: {
62
+ help: <<~HELP,
63
+ Open your local development app in the default browser.
64
+ Usage: {{command:%s open}}
65
+ HELP
66
+ },
67
+
68
+ deploy: {
69
+ help: <<~HELP,
70
+ Deploy the current PHP project to a hosting service. Heroku ({{underline:https://www.heroku.com}}) is currently the only option, but more will be added in the future.
71
+ Usage: {{command:%s deploy [ heroku ]}}
72
+ HELP
73
+
74
+ extended_help: <<~HELP,
75
+ {{bold:Subcommands:}}
76
+ {{cyan:heroku}}: Deploys the current PHP project to Heroku.
77
+ Usage: {{command:%s deploy heroku}}
78
+ HELP
79
+
80
+ heroku: {
81
+ help: <<~HELP,
82
+ Deploy the current PHP project to Heroku
83
+ Usage: {{command:%s deploy heroku}}
84
+ HELP
85
+
86
+ error: {
87
+ generate_app_key: "Failed to generate Laravel APP_KEY",
88
+ },
89
+
90
+ downloading: "Downloading Heroku CLI…",
91
+ downloaded: "Downloaded Heroku CLI",
92
+ installing: "Installing Heroku CLI…",
93
+ installing_windows: "Running Heroku CLI install wizard…",
94
+ installed: "Installed Heroku CLI",
95
+ authenticating: "Authenticating with Heroku…",
96
+ authenticated: "{{v}} Authenticated with Heroku",
97
+ authenticated_with_account: "{{v}} Authenticated with Heroku as `%s`",
98
+ deploying: "Deploying to Heroku…",
99
+ deployed: "Deployed to Heroku",
100
+ post_deploy: <<~DEPLOYED,
101
+ {{v}} Deployed to Heroku, you can access your app at {{green:%s}}
102
+
103
+ If you're deploying this app for the first time, make sure to set up your database and your app's environment at {{bold:App dashboard -> Settings -> Config Vars}}.
104
+
105
+ When setting your config vars, don't forget to set up your database and the appropriate Laravel values for it, particularly {{bold:DB_CONNECTION and DB_DATABASE}}.
106
+ DEPLOYED
107
+ git: {
108
+ checking: "Checking git repo…",
109
+ initialized: "Git repo initialized",
110
+ what_branch: "What branch would you like to deploy?",
111
+ branch_selected: "{{v}} Git branch `%s` selected for deploy",
112
+ },
113
+ app: {
114
+ no_apps_found: "No existing Heroku app found. What would you like to do?",
115
+ name: "What is your Heroku app’s name?",
116
+ select: "Specify an existing Heroku app",
117
+ selecting: "Selecting Heroku app `%s`…",
118
+ selected: "{{v}} Heroku app `%s` selected",
119
+ create: "Create a new Heroku app",
120
+ creating: "Creating new Heroku app…",
121
+ created: "{{v}} New Heroku app created",
122
+ setting_configs: "Setting Shopify app configs…",
123
+ configs_set: "{{v}} Shopify app configs set",
124
+ },
125
+ },
126
+ },
127
+
128
+ serve: {
129
+ help: <<~HELP,
130
+ Start a local development PHP server for your project, as well as a public ngrok tunnel to your localhost.
131
+ Usage: {{command:%s serve}}
132
+ HELP
133
+ extended_help: <<~HELP,
134
+ {{bold:Options:}}
135
+ {{cyan:--host=HOST}}: Bypass running tunnel and use custom host. HOST must be HTTPS url.
136
+ HELP
137
+
138
+ error: {
139
+ host_must_be_https: "HOST must be a HTTPS url.",
140
+ },
141
+
142
+ open_info: <<~MESSAGE,
143
+ {{*}} To install and start using your app, open this URL in your browser:
144
+ {{green:%s}}
145
+ MESSAGE
146
+ running_server: "Running server…",
147
+ },
148
+
149
+ tunnel: {
150
+ help: <<~HELP,
151
+ Start or stop an http tunnel to your local development app using ngrok.
152
+ Usage: {{command:%s tunnel [ auth | start | stop ]}}
153
+ HELP
154
+ extended_help: <<~HELP,
155
+ {{bold:Subcommands:}}
156
+
157
+ {{cyan:auth}}: Writes an ngrok auth token to ~/.ngrok2/ngrok.yml to connect with an ngrok account. Visit https://dashboard.ngrok.com/signup to sign up.
158
+ Usage: {{command:%1$s tunnel auth <token>}}
159
+
160
+ {{cyan:start}}: Starts an ngrok tunnel, will print the URL for an existing tunnel if already running.
161
+ Usage: {{command:%1$s tunnel start}}
162
+
163
+ {{cyan:stop}}: Stops the ngrok tunnel.
164
+ Usage: {{command:%1$s tunnel stop}}
165
+
166
+ HELP
167
+
168
+ error: {
169
+ token_argument_missing: "{{x}} {{red:auth requires a token argument}}\n\n",
170
+ },
171
+ },
172
+
173
+ forms: {
174
+ create: {
175
+ error: {
176
+ invalid_app_name: "App name cannot contain 'Shopify'",
177
+ invalid_app_type: "Invalid app type %s",
178
+ },
179
+ app_name: "App name",
180
+ app_type: {
181
+ select: "What type of app are you building?",
182
+ select_public: "Public: An app built for a wide merchant audience.",
183
+ select_custom: "Custom: An app custom built for a single client.",
184
+ selected: "App type {{green:%s}}",
185
+ },
186
+ },
187
+ },
188
+ },
189
+ }.freeze
190
+ end
191
+ end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
  module Rails
3
- class Project < ShopifyCli::ProjectType
3
+ class Project < ShopifyCLI::ProjectType
4
4
  require Project.project_filepath("messages/messages")
5
5
  register_messages(Rails::Messages::MESSAGES)
6
6
  end
7
7
 
8
8
  # define/autoload project specific Commands
9
- class Command < ShopifyCli::ProjectCommands
9
+ class Command < ShopifyCLI::ProjectCommands
10
10
  subcommand :Connect, "connect", Project.project_filepath("commands/connect")
11
11
  subcommand :Create, "create", Project.project_filepath("commands/create")
12
12
  subcommand :Deploy, "deploy", Project.project_filepath("commands/deploy")
@@ -15,7 +15,7 @@ module Rails
15
15
  subcommand :Serve, "serve", Project.project_filepath("commands/serve")
16
16
  subcommand :Tunnel, "tunnel", Project.project_filepath("commands/tunnel")
17
17
  end
18
- ShopifyCli::Commands.register("Rails::Command", "rails")
18
+ ShopifyCLI::Commands.register("Rails::Command", "rails")
19
19
 
20
20
  # define/autoload project specific Tasks
21
21
  module Tasks
@@ -1,20 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
  module Rails
3
3
  class Command
4
- class Connect < ShopifyCli::SubCommand
4
+ class Connect < ShopifyCLI::SubCommand
5
5
  prerequisite_task ensure_project_type: :rails
6
6
 
7
7
  def call(*)
8
- if ShopifyCli::Project.has_current? && ShopifyCli::Project.current.env
8
+ if ShopifyCLI::Project.has_current? && ShopifyCLI::Project.current.env
9
9
  @ctx.puts(@ctx.message("rails.connect.production_warning"))
10
10
  end
11
11
 
12
- app = ShopifyCli::Connect.new(@ctx).default_connect("rails")
12
+ app = ShopifyCLI::Connect.new(@ctx).default_connect("rails")
13
13
  @ctx.done(@ctx.message("rails.connect.connected", app))
14
14
  end
15
15
 
16
16
  def self.help
17
- ShopifyCli::Context.message("rails.connect.help", ShopifyCli::TOOL_NAME, ShopifyCli::TOOL_NAME)
17
+ ShopifyCLI::Context.message("rails.connect.help", ShopifyCLI::TOOL_NAME, ShopifyCLI::TOOL_NAME)
18
18
  end
19
19
  end
20
20
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  module Rails
3
3
  class Command
4
- class Create < ShopifyCli::SubCommand
4
+ class Create < ShopifyCLI::SubCommand
5
5
  prerequisite_task :ensure_authenticated
6
6
 
7
7
  USER_AGENT_CODE = <<~USERAGENT
@@ -43,37 +43,37 @@ module Rails
43
43
 
44
44
  build(form.name, form.db)
45
45
  set_custom_ua
46
- ShopifyCli::Project.write(
46
+ ShopifyCLI::Project.write(
47
47
  @ctx,
48
48
  project_type: "rails",
49
49
  organization_id: form.organization_id,
50
50
  )
51
51
 
52
- api_client = ShopifyCli::Tasks::CreateApiClient.call(
52
+ api_client = ShopifyCLI::Tasks::CreateApiClient.call(
53
53
  @ctx,
54
54
  org_id: form.organization_id,
55
55
  title: form.title,
56
56
  type: form.type,
57
57
  )
58
58
 
59
- ShopifyCli::Resources::EnvFile.new(
59
+ ShopifyCLI::Resources::EnvFile.new(
60
60
  api_key: api_client["apiKey"],
61
61
  secret: api_client["apiSecretKeys"].first["secret"],
62
62
  shop: form.shop_domain,
63
63
  scopes: "write_products,write_customers,write_draft_orders",
64
64
  ).write(@ctx)
65
65
 
66
- partners_url = ShopifyCli::PartnersAPI.partners_url_for(form.organization_id, api_client["id"])
66
+ partners_url = ShopifyCLI::PartnersAPI.partners_url_for(form.organization_id, api_client["id"])
67
67
 
68
68
  @ctx.puts(@ctx.message("apps.create.info.created", form.title, partners_url))
69
- @ctx.puts(@ctx.message("apps.create.info.serve", form.name, ShopifyCli::TOOL_NAME, "rails"))
70
- unless ShopifyCli::Shopifolk.acting_as_shopify_organization?
69
+ @ctx.puts(@ctx.message("apps.create.info.serve", form.name, ShopifyCLI::TOOL_NAME, "rails"))
70
+ unless ShopifyCLI::Shopifolk.acting_as_shopify_organization?
71
71
  @ctx.puts(@ctx.message("apps.create.info.install", partners_url, form.title))
72
72
  end
73
73
  end
74
74
 
75
75
  def self.help
76
- ShopifyCli::Context.message("rails.create.help", ShopifyCli::TOOL_NAME, ShopifyCli::TOOL_NAME)
76
+ ShopifyCLI::Context.message("rails.create.help", ShopifyCLI::TOOL_NAME, ShopifyCLI::TOOL_NAME)
77
77
  end
78
78
 
79
79
  private
@@ -84,7 +84,7 @@ module Rails
84
84
  @ctx.abort(@ctx.message("rails.create.error.node_required")) unless @ctx.windows?
85
85
  @ctx.puts("{{x}} {{red:" + @ctx.message("rails.create.error.node_required") + "}}")
86
86
  @ctx.puts(@ctx.message("rails.create.info.open_new_shell", "node"))
87
- raise ShopifyCli::AbortSilent
87
+ raise ShopifyCLI::AbortSilent
88
88
  end
89
89
 
90
90
  version, stat = @ctx.capture2e("node", "-v")
@@ -93,7 +93,7 @@ module Rails
93
93
  # execution stops above if not Windows
94
94
  @ctx.puts("{{x}} {{red:" + @ctx.message("rails.create.error.node_version_failure") + "}}")
95
95
  @ctx.puts(@ctx.message("rails.create.info.open_new_shell", "node"))
96
- raise ShopifyCli::AbortSilent
96
+ raise ShopifyCLI::AbortSilent
97
97
  end
98
98
 
99
99
  @ctx.done(@ctx.message("rails.create.node_version", version))
@@ -105,7 +105,7 @@ module Rails
105
105
  @ctx.abort(@ctx.message("rails.create.error.yarn_required")) unless @ctx.windows?
106
106
  @ctx.puts("{{x}} {{red:" + @ctx.message("rails.create.error.yarn_required") + "}}")
107
107
  @ctx.puts(@ctx.message("rails.create.info.open_new_shell", "yarn"))
108
- raise ShopifyCli::AbortSilent
108
+ raise ShopifyCLI::AbortSilent
109
109
  end
110
110
 
111
111
  version, stat = @ctx.capture2e("yarn", "-v")
@@ -113,7 +113,7 @@ module Rails
113
113
  @ctx.abort(@ctx.message("rails.create.error.yarn_version_failure")) unless @ctx.windows?
114
114
  @ctx.puts("{{x}} {{red:" + @ctx.message("rails.create.error.yarn_version_failure") + "}}")
115
115
  @ctx.puts(@ctx.message("rails.create.info.open_new_shell", "yarn"))
116
- raise ShopifyCli::AbortSilent
116
+ raise ShopifyCLI::AbortSilent
117
117
  end
118
118
 
119
119
  @ctx.done(@ctx.message("rails.create.yarn_version", version))
@@ -9,7 +9,7 @@ module Rails
9
9
  DB_CHECK_CMD = 'bundle exec rails runner "puts ActiveRecord::Base.connection.adapter_name.downcase"'
10
10
 
11
11
  def help
12
- ShopifyCli::Context.message("rails.deploy.heroku.help", ShopifyCli::TOOL_NAME)
12
+ ShopifyCLI::Context.message("rails.deploy.heroku.help", ShopifyCLI::TOOL_NAME)
13
13
  end
14
14
 
15
15
  def start(ctx)
@@ -23,7 +23,7 @@ module Rails
23
23
  end
24
24
 
25
25
  spin_group = CLI::UI::SpinGroup.new
26
- heroku_service = ShopifyCli::Heroku.new(ctx)
26
+ heroku_service = ShopifyCLI::Heroku.new(ctx)
27
27
 
28
28
  spin_group.add(ctx.message("rails.deploy.heroku.downloading")) do |spinner|
29
29
  heroku_service.download
@@ -36,7 +36,7 @@ module Rails
36
36
  spinner.update_title(ctx.message("rails.deploy.heroku.installed"))
37
37
  end
38
38
  spin_group.add(ctx.message("rails.deploy.heroku.git.checking")) do |spinner|
39
- ShopifyCli::Git.init(ctx)
39
+ ShopifyCLI::Git.init(ctx)
40
40
  spinner.update_title(ctx.message("rails.deploy.heroku.git.initialized"))
41
41
  end
42
42
  spin_group.wait
@@ -78,7 +78,7 @@ module Rails
78
78
  end
79
79
  end
80
80
 
81
- branches = ShopifyCli::Git.branches(ctx)
81
+ branches = ShopifyCLI::Git.branches(ctx)
82
82
  if branches.length == 1
83
83
  branch_to_deploy = branches[0]
84
84
  ctx.puts(ctx.message("rails.deploy.heroku.git.branch_selected", branch_to_deploy))
@@ -3,7 +3,7 @@ require "shopify_cli"
3
3
 
4
4
  module Rails
5
5
  class Command
6
- class Deploy < ShopifyCli::SubCommand
6
+ class Deploy < ShopifyCLI::SubCommand
7
7
  prerequisite_task ensure_project_type: :rails
8
8
 
9
9
  autoload :Heroku, Project.project_filepath("commands/deploy/heroku")
@@ -21,11 +21,11 @@ module Rails
21
21
  end
22
22
 
23
23
  def self.help
24
- ShopifyCli::Context.message("rails.deploy.help", ShopifyCli::TOOL_NAME)
24
+ ShopifyCLI::Context.message("rails.deploy.help", ShopifyCLI::TOOL_NAME)
25
25
  end
26
26
 
27
27
  def self.extended_help
28
- ShopifyCli::Context.message("rails.deploy.extended_help", ShopifyCli::TOOL_NAME)
28
+ ShopifyCLI::Context.message("rails.deploy.extended_help", ShopifyCLI::TOOL_NAME)
29
29
  end
30
30
  end
31
31
  end
@@ -7,7 +7,7 @@ module Rails
7
7
  class << self
8
8
  def start(ctx, args)
9
9
  selected_type = args.first
10
- schema = ShopifyCli::AdminAPI::Schema.get(ctx)
10
+ schema = ShopifyCLI::AdminAPI::Schema.get(ctx)
11
11
  webhooks = schema.get_names_from_type("WebhookSubscriptionTopic")
12
12
  unless selected_type && webhooks.include?(selected_type)
13
13
  selected_type = CLI::UI::Prompt.ask(ctx.message("rails.generate.webhook.select")) do |handler|
@@ -25,12 +25,12 @@ module Rails
25
25
  end
26
26
 
27
27
  def help
28
- ShopifyCli::Context.message("rails.generate.webhook.help", ShopifyCli::TOOL_NAME)
28
+ ShopifyCLI::Context.message("rails.generate.webhook.help", ShopifyCLI::TOOL_NAME)
29
29
  end
30
30
 
31
31
  def generate_command(selected_type, ctx)
32
32
  parts = selected_type.downcase.split("_")
33
- host = ShopifyCli::Project.current.env.host
33
+ host = ShopifyCLI::Project.current.env.host
34
34
  selected_type = parts[0..-2].join("_") + "/" + parts[-1]
35
35
  command = ctx.windows? ? "ruby bin\\rails" : "bin/rails"
36
36
  "#{command} g shopify_app:add_webhook -t #{selected_type} -a #{host}/webhooks/#{selected_type.downcase}"
@@ -3,7 +3,7 @@ require "shopify_cli"
3
3
 
4
4
  module Rails
5
5
  class Command
6
- class Generate < ShopifyCli::SubCommand
6
+ class Generate < ShopifyCLI::SubCommand
7
7
  prerequisite_task ensure_project_type: :rails
8
8
 
9
9
  autoload :Webhook, Project.project_filepath("commands/generate/webhook")
@@ -21,7 +21,7 @@ module Rails
21
21
  end
22
22
 
23
23
  def self.help
24
- ShopifyCli::Context.message("rails.generate.help", ShopifyCli::TOOL_NAME)
24
+ ShopifyCLI::Context.message("rails.generate.help", ShopifyCLI::TOOL_NAME)
25
25
  end
26
26
 
27
27
  def self.extended_help
@@ -34,7 +34,7 @@ module Rails
34
34
  end
35
35
  extended_help += "\n"
36
36
  end
37
- extended_help += ShopifyCli::Context.message("rails.generate.extended_help", ShopifyCli::TOOL_NAME)
37
+ extended_help += ShopifyCLI::Context.message("rails.generate.extended_help", ShopifyCLI::TOOL_NAME)
38
38
  end
39
39
 
40
40
  def self.run_generate(script, name, ctx)
@@ -2,16 +2,16 @@ require "shopify_cli"
2
2
 
3
3
  module Rails
4
4
  class Command
5
- class Open < ShopifyCli::SubCommand
5
+ class Open < ShopifyCLI::SubCommand
6
6
  prerequisite_task ensure_project_type: :rails
7
7
 
8
8
  def call(*)
9
- project = ShopifyCli::Project.current
9
+ project = ShopifyCLI::Project.current
10
10
  @ctx.open_url!("#{project.env.host}/login?shop=#{project.env.shop}")
11
11
  end
12
12
 
13
13
  def self.help
14
- ShopifyCli::Context.message("rails.open.help", ShopifyCli::TOOL_NAME)
14
+ ShopifyCLI::Context.message("rails.open.help", ShopifyCLI::TOOL_NAME)
15
15
  end
16
16
  end
17
17
  end