shopify-cli 2.10.2 → 2.11.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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.yaml +117 -0
  3. data/.github/ISSUE_TEMPLATE/enhancement.yaml +38 -0
  4. data/.github/ISSUE_TEMPLATE/feature.yaml +47 -0
  5. data/CHANGELOG.md +20 -3
  6. data/Gemfile.lock +1 -1
  7. data/dev.yml +3 -0
  8. data/lib/project_types/extension/commands/build.rb +3 -0
  9. data/lib/project_types/extension/commands/check.rb +3 -0
  10. data/lib/project_types/extension/commands/create.rb +3 -0
  11. data/lib/project_types/extension/commands/push.rb +3 -0
  12. data/lib/project_types/extension/commands/serve.rb +3 -0
  13. data/lib/project_types/extension/models/specification_handlers/default.rb +1 -1
  14. data/lib/project_types/extension/tasks/convert_server_config.rb +3 -1
  15. data/lib/project_types/script/commands/connect.rb +3 -1
  16. data/lib/project_types/script/commands/create.rb +2 -0
  17. data/lib/project_types/script/commands/push.rb +6 -0
  18. data/lib/project_types/script/layers/infrastructure/errors.rb +4 -3
  19. data/lib/project_types/script/layers/infrastructure/script_service.rb +2 -2
  20. data/lib/project_types/script/loaders/project.rb +2 -1
  21. data/lib/project_types/script/messages/messages.rb +87 -86
  22. data/lib/project_types/script/ui/error_handler.rb +34 -14
  23. data/lib/project_types/theme/commands/check.rb +3 -0
  24. data/lib/project_types/theme/commands/delete.rb +3 -0
  25. data/lib/project_types/theme/commands/init.rb +3 -0
  26. data/lib/project_types/theme/commands/language_server.rb +3 -0
  27. data/lib/project_types/theme/commands/package.rb +3 -0
  28. data/lib/project_types/theme/commands/publish.rb +3 -0
  29. data/lib/project_types/theme/commands/pull.rb +7 -1
  30. data/lib/project_types/theme/commands/push.rb +7 -1
  31. data/lib/project_types/theme/commands/serve.rb +3 -0
  32. data/lib/shopify_cli/command/sub_command.rb +2 -0
  33. data/lib/shopify_cli/command.rb +66 -0
  34. data/lib/shopify_cli/commands/app/create/node.rb +3 -0
  35. data/lib/shopify_cli/commands/app/create/rails.rb +3 -0
  36. data/lib/shopify_cli/commands/app/create.rb +3 -0
  37. data/lib/shopify_cli/commands/app/deploy.rb +3 -0
  38. data/lib/shopify_cli/commands/app/serve.rb +3 -0
  39. data/lib/shopify_cli/constants.rb +12 -0
  40. data/lib/shopify_cli/environment.rb +27 -1
  41. data/lib/shopify_cli/exception_reporter.rb +9 -0
  42. data/lib/shopify_cli/github/issue_url_generator.rb +19 -8
  43. data/lib/shopify_cli/identity_auth/env_auth_token.rb +34 -0
  44. data/lib/shopify_cli/identity_auth.rb +33 -15
  45. data/lib/shopify_cli/messages/messages.rb +1 -1
  46. data/lib/shopify_cli/partners_api.rb +7 -2
  47. data/lib/shopify_cli/services/app/create/rails_service.rb +37 -13
  48. data/lib/shopify_cli/theme/include_filter.rb +39 -17
  49. data/lib/shopify_cli/utilities.rb +7 -0
  50. data/lib/shopify_cli/version.rb +1 -1
  51. data/lib/shopify_cli.rb +1 -0
  52. data/vendor/deps/cli-kit/lib/cli/kit/system.rb +1 -1
  53. data/vendor/deps/cli-kit/lib/cli/kit/util.rb +5 -1
  54. data/vendor/lib/semantic/version.rb +0 -1
  55. metadata +7 -3
  56. data/lib/project_types/rails/commands/create.rb +0 -210
@@ -1,210 +0,0 @@
1
- # frozen_string_literal: true
2
- module Rails
3
- class Command
4
- class Create < ShopifyCLI::Command::AppSubCommand
5
- prerequisite_task :ensure_authenticated
6
-
7
- USER_AGENT_CODE = <<~USERAGENT
8
- module ShopifyAPI
9
- class Base < ActiveResource::Base
10
- self.headers['User-Agent'] << " | ShopifyApp/\#{ShopifyApp::VERSION} | Shopify CLI"
11
- end
12
- end
13
- USERAGENT
14
-
15
- DEFAULT_RAILS_FLAGS = %w(--skip-spring)
16
-
17
- options do |parser, flags|
18
- # backwards compatibility allow 'title' for now
19
- parser.on("--title=TITLE") { |t| flags[:title] = t }
20
- parser.on("--name=NAME") { |t| flags[:title] = t }
21
- parser.on("--organization_id=ID") { |id| flags[:organization_id] = id }
22
- parser.on("--organization-id=ID") { |id| flags[:organization_id] = id }
23
- parser.on("--store=MYSHOPIFYDOMAIN") { |url| flags[:shop_domain] = url }
24
- # backwards compatibility allow 'shop domain' for now
25
- parser.on("--shop_domain=MYSHOPIFYDOMAIN") { |url| flags[:shop_domain] = url }
26
- parser.on("--shop-domain=MYSHOPIFYDOMAIN") { |url| flags[:shop_domain] = url }
27
- parser.on("--type=APPTYPE") { |type| flags[:type] = type }
28
- parser.on("--db=DB") { |db| flags[:db] = db }
29
- parser.on("--rails_opts=RAILSOPTS") { |opts| flags[:rails_opts] = opts }
30
- parser.on("--rails-opts=RAILSOPTS") { |opts| flags[:rails_opts] = opts }
31
- end
32
-
33
- def call(args, _name)
34
- form_data = self.form_data(args)
35
- return @ctx.puts(self.class.help) if form_data.nil?
36
-
37
- ruby_version = Ruby.version(@ctx)
38
- @ctx.abort(@ctx.message("rails.create.error.invalid_ruby_version")) unless
39
- ruby_version.satisfies?("~>2.5") || ruby_version.satisfies?("~>3.0.0")
40
-
41
- check_node
42
- check_yarn
43
-
44
- build(form_data.name, form_data.db)
45
-
46
- set_custom_ua
47
- ShopifyCLI::Project.write(
48
- @ctx,
49
- project_type: "rails",
50
- organization_id: form_data.organization_id,
51
- )
52
-
53
- api_client = if ShopifyCLI::Environment.acceptance_test?
54
- {
55
- "apiKey" => "public_api_key",
56
- "apiSecretKeys" => [
57
- {
58
- "secret" => "api_secret_key",
59
- },
60
- ],
61
- }
62
- else
63
- ShopifyCLI::Tasks::CreateApiClient.call(
64
- @ctx,
65
- org_id: form_data.organization_id,
66
- title: form_data.title,
67
- type: form_data.type,
68
- )
69
- end
70
-
71
- ShopifyCLI::Resources::EnvFile.new(
72
- api_key: api_client["apiKey"],
73
- secret: api_client["apiSecretKeys"].first["secret"],
74
- shop: form_data.shop_domain,
75
- scopes: "write_products,write_customers,write_draft_orders",
76
- ).write(@ctx)
77
-
78
- partners_url = ShopifyCLI::PartnersAPI.partners_url_for(form_data.organization_id, api_client["id"])
79
-
80
- @ctx.puts(@ctx.message("apps.create.info.created", form_data.title, partners_url))
81
- @ctx.puts(@ctx.message("apps.create.info.serve", form_data.name, ShopifyCLI::TOOL_NAME, "rails"))
82
- unless ShopifyCLI::Shopifolk.acting_as_shopify_organization?
83
- @ctx.puts(@ctx.message("apps.create.info.install", partners_url, form_data.title))
84
- end
85
- end
86
-
87
- def form_data(args)
88
- if ShopifyCLI::Environment.acceptance_test?
89
- Struct.new(:title, :name, :organization_id, :type, :shop_domain, :db, keyword_init: true).new(
90
- title: options.flags[:title],
91
- name: options.flags[:title],
92
- organization_id: "123",
93
- shop_domain: "test.shopify.io",
94
- type: "public",
95
- db: options.flags[:db]
96
- )
97
- else
98
- Forms::Create.ask(@ctx, args, options.flags)
99
- end
100
- end
101
-
102
- def self.help
103
- ShopifyCLI::Context.message("rails.create.help", ShopifyCLI::TOOL_NAME, ShopifyCLI::TOOL_NAME)
104
- end
105
-
106
- private
107
-
108
- def check_node
109
- cmd_path = @ctx.which("node")
110
- if cmd_path.nil?
111
- @ctx.abort(@ctx.message("rails.create.error.node_required")) unless @ctx.windows?
112
- @ctx.puts("{{x}} {{red:" + @ctx.message("rails.create.error.node_required") + "}}")
113
- @ctx.puts(@ctx.message("rails.create.info.open_new_shell", "node"))
114
- raise ShopifyCLI::AbortSilent
115
- end
116
-
117
- version, stat = @ctx.capture2e("node", "-v")
118
- unless stat.success?
119
- @ctx.abort(@ctx.message("rails.create.error.node_version_failure")) unless @ctx.windows?
120
- # execution stops above if not Windows
121
- @ctx.puts("{{x}} {{red:" + @ctx.message("rails.create.error.node_version_failure") + "}}")
122
- @ctx.puts(@ctx.message("rails.create.info.open_new_shell", "node"))
123
- raise ShopifyCLI::AbortSilent
124
- end
125
-
126
- @ctx.done(@ctx.message("rails.create.node_version", version))
127
- end
128
-
129
- def check_yarn
130
- cmd_path = @ctx.which("yarn")
131
- if cmd_path.nil?
132
- @ctx.abort(@ctx.message("rails.create.error.yarn_required")) unless @ctx.windows?
133
- @ctx.puts("{{x}} {{red:" + @ctx.message("rails.create.error.yarn_required") + "}}")
134
- @ctx.puts(@ctx.message("rails.create.info.open_new_shell", "yarn"))
135
- raise ShopifyCLI::AbortSilent
136
- end
137
-
138
- version, stat = @ctx.capture2e("yarn", "-v")
139
- unless stat.success?
140
- @ctx.abort(@ctx.message("rails.create.error.yarn_version_failure")) unless @ctx.windows?
141
- @ctx.puts("{{x}} {{red:" + @ctx.message("rails.create.error.yarn_version_failure") + "}}")
142
- @ctx.puts(@ctx.message("rails.create.info.open_new_shell", "yarn"))
143
- raise ShopifyCLI::AbortSilent
144
- end
145
-
146
- @ctx.done(@ctx.message("rails.create.yarn_version", version))
147
- end
148
-
149
- def build(name, db)
150
- @ctx.abort(@ctx.message("rails.create.error.install_failure", "rails")) unless install_gem("rails", "<6.1")
151
- @ctx.abort(@ctx.message("rails.create.error.install_failure", "bundler ~>2.0")) unless
152
- install_gem("bundler", "~>2.0")
153
-
154
- full_path = File.join(@ctx.root, name)
155
- @ctx.abort(@ctx.message("rails.create.error.dir_exists", name)) if Dir.exist?(full_path)
156
-
157
- CLI::UI::Frame.open(@ctx.message("rails.create.generating_app", name)) do
158
- new_command = %w(rails new)
159
- new_command << name
160
- new_command += DEFAULT_RAILS_FLAGS
161
- new_command << "--database=#{db}"
162
- new_command += options.flags[:rails_opts].split unless options.flags[:rails_opts].nil?
163
-
164
- syscall(new_command)
165
- end
166
-
167
- @ctx.root = full_path
168
-
169
- File.open(File.join(@ctx.root, ".gitignore"), "a") { |f| f.write(".env") }
170
-
171
- @ctx.puts(@ctx.message("rails.create.adding_shopify_gem"))
172
- File.open(File.join(@ctx.root, "Gemfile"), "a") do |f|
173
- f.puts "\ngem 'shopify_app', '>=17.0.3'"
174
- end
175
- CLI::UI::Frame.open(@ctx.message("rails.create.running_bundle_install")) do
176
- syscall(%w(bundle install))
177
- end
178
-
179
- CLI::UI::Frame.open(@ctx.message("rails.create.running_generator")) do
180
- syscall(%w(rails generate shopify_app --new-shopify-cli-app))
181
- end
182
-
183
- CLI::UI::Frame.open(@ctx.message("rails.create.running_migrations")) do
184
- syscall(%w(rails db:create))
185
- syscall(%w(rails db:migrate RAILS_ENV=development))
186
- end
187
-
188
- unless File.exist?(File.join(@ctx.root, "config/webpacker.yml"))
189
- CLI::UI::Frame.open(@ctx.message("rails.create.running_webpacker_install")) do
190
- syscall(%w(rails webpacker:install))
191
- end
192
- end
193
- end
194
-
195
- def set_custom_ua
196
- ua_path = File.join("config", "initializers", "user_agent.rb")
197
- @ctx.write(ua_path, USER_AGENT_CODE)
198
- end
199
-
200
- def syscall(args)
201
- args[0] = Gem.binary_path_for(@ctx, args[0])
202
- @ctx.system(*args, chdir: @ctx.root)
203
- end
204
-
205
- def install_gem(name, version = nil)
206
- Gem.install(@ctx, name, version)
207
- end
208
- end
209
- end
210
- end