shopify-cli 1.1.1 → 1.4.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.
- checksums.yaml +4 -4
- data/.github/CONTRIBUTING.md +1 -1
- data/.gitignore +0 -1
- data/.rubocop.yml +6 -2
- data/.rubocop_todo.yml +20 -0
- data/CHANGELOG.md +24 -0
- data/Gemfile +1 -2
- data/Gemfile.lock +11 -11
- data/RELEASING.md +22 -10
- data/docs/core/index.md +16 -0
- data/lib/project_types/extension/cli.rb +6 -1
- data/lib/project_types/extension/commands/register.rb +1 -1
- data/lib/project_types/extension/features/argo/admin.rb +20 -0
- data/lib/project_types/extension/features/argo/base.rb +129 -0
- data/lib/project_types/extension/features/argo/checkout.rb +20 -0
- data/lib/project_types/extension/features/argo_config.rb +60 -0
- data/lib/project_types/extension/messages/messages.rb +11 -2
- data/lib/project_types/extension/models/type.rb +4 -0
- data/lib/project_types/extension/models/types/checkout_post_purchase.rb +6 -3
- data/lib/project_types/extension/models/types/product_subscription.rb +24 -0
- data/lib/project_types/node/commands/create.rb +6 -1
- data/lib/project_types/node/commands/serve.rb +5 -5
- data/lib/project_types/node/messages/messages.rb +4 -1
- data/lib/project_types/rails/commands/create.rb +10 -2
- data/lib/project_types/rails/commands/serve.rb +5 -5
- data/lib/project_types/rails/messages/messages.rb +5 -1
- data/lib/project_types/script/config/extension_points.yml +8 -8
- data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +2 -2
- data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +36 -1
- data/lib/project_types/script/layers/infrastructure/errors.rb +7 -0
- data/lib/project_types/script/messages/messages.rb +12 -37
- data/lib/project_types/script/ui/error_handler.rb +13 -5
- data/lib/shopify-cli/api.rb +5 -9
- data/lib/shopify-cli/commands/config.rb +33 -1
- data/lib/shopify-cli/commands/system.rb +9 -0
- data/lib/shopify-cli/context.rb +40 -0
- data/lib/shopify-cli/core/entry_point.rb +3 -0
- data/lib/shopify-cli/git.rb +1 -1
- data/lib/shopify-cli/http_request.rb +15 -0
- data/lib/shopify-cli/js_system.rb +22 -5
- data/lib/shopify-cli/messages/messages.rb +39 -11
- data/lib/shopify-cli/project.rb +3 -3
- data/lib/shopify-cli/shopifolk.rb +67 -0
- data/lib/shopify-cli/tunnel.rb +1 -1
- data/lib/shopify-cli/version.rb +1 -1
- data/lib/shopify_cli.rb +1 -0
- metadata +10 -4
- data/lib/project_types/extension/features/argo.rb +0 -48
- data/lib/project_types/extension/models/types/subscription_management.rb +0 -20
data/lib/shopify-cli/api.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'shopify_cli'
|
2
|
-
require 'net/http'
|
3
2
|
|
4
3
|
module ShopifyCli
|
5
4
|
class API
|
@@ -32,8 +31,9 @@ module ShopifyCli
|
|
32
31
|
)
|
33
32
|
ctx.debug(resp)
|
34
33
|
resp
|
35
|
-
rescue API::APIRequestServerError, API::APIRequestUnexpectedError
|
34
|
+
rescue API::APIRequestServerError, API::APIRequestUnexpectedError => e
|
36
35
|
ctx.puts(ctx.message('core.api.error.internal_server_error'))
|
36
|
+
ctx.debug(ctx.message('core.api.error.internal_server_error_debug', e.message))
|
37
37
|
end
|
38
38
|
|
39
39
|
protected
|
@@ -58,14 +58,10 @@ module ShopifyCli
|
|
58
58
|
unless uri.is_a?(URI::HTTP)
|
59
59
|
ctx.abort("Invalid URL: #{graphql_url}")
|
60
60
|
end
|
61
|
-
http = ::Net::HTTP.new(uri.host, uri.port)
|
62
|
-
http.use_ssl = true
|
63
61
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
headers.each { |header, value| req[header] = value }
|
68
|
-
response = http.request(req)
|
62
|
+
# we delay this require so as to avoid a performance hit on starting the CLI
|
63
|
+
require 'shopify-cli/http_request'
|
64
|
+
response = HttpRequest.call(uri, body, variables, headers)
|
69
65
|
|
70
66
|
case response.code.to_i
|
71
67
|
when 200..399
|
@@ -6,6 +6,7 @@ module ShopifyCli
|
|
6
6
|
hidden_feature(feature_set: :debug)
|
7
7
|
|
8
8
|
subcommand :Feature, 'feature'
|
9
|
+
subcommand :Analytics, 'analytics'
|
9
10
|
|
10
11
|
def call(*)
|
11
12
|
@ctx.puts(self.class.help)
|
@@ -16,6 +17,10 @@ module ShopifyCli
|
|
16
17
|
end
|
17
18
|
|
18
19
|
class Feature < ShopifyCli::SubCommand
|
20
|
+
def self.help
|
21
|
+
ShopifyCli::Context.message('core.config.feature.help', ShopifyCli::TOOL_NAME)
|
22
|
+
end
|
23
|
+
|
19
24
|
options do |parser, flags|
|
20
25
|
parser.on('--enable') { flags[:action] = 'enable' }
|
21
26
|
parser.on('--disable') { flags[:action] = 'disable' }
|
@@ -28,7 +33,7 @@ module ShopifyCli
|
|
28
33
|
is_enabled = ShopifyCli::Feature.enabled?(feature_name)
|
29
34
|
if options.flags[:action] == 'disable' && is_enabled
|
30
35
|
ShopifyCli::Feature.disable(feature_name)
|
31
|
-
@ctx.puts(@ctx.message('core.config.feature.disabled',
|
36
|
+
@ctx.puts(@ctx.message('core.config.feature.disabled', feature_name))
|
32
37
|
elsif options.flags[:action] == 'enable' && !is_enabled
|
33
38
|
ShopifyCli::Feature.enable(feature_name)
|
34
39
|
@ctx.puts(@ctx.message('core.config.feature.enabled', feature_name))
|
@@ -39,6 +44,33 @@ module ShopifyCli
|
|
39
44
|
end
|
40
45
|
end
|
41
46
|
end
|
47
|
+
|
48
|
+
class Analytics < ShopifyCli::SubCommand
|
49
|
+
def self.help
|
50
|
+
ShopifyCli::Context.message('core.config.analytics.help', ShopifyCli::TOOL_NAME)
|
51
|
+
end
|
52
|
+
|
53
|
+
options do |parser, flags|
|
54
|
+
parser.on('--enable') { flags[:action] = 'enable' }
|
55
|
+
parser.on('--disable') { flags[:action] = 'disable' }
|
56
|
+
parser.on('--status') { flags[:action] = 'status' }
|
57
|
+
end
|
58
|
+
|
59
|
+
def call(_args, _name)
|
60
|
+
is_enabled = ShopifyCli::Config.get_bool('analytics', 'enabled')
|
61
|
+
if options.flags[:action] == 'disable' && is_enabled
|
62
|
+
ShopifyCli::Config.set('analytics', 'enabled', false)
|
63
|
+
@ctx.puts(@ctx.message('core.config.analytics.disabled'))
|
64
|
+
elsif options.flags[:action] == 'enable' && !is_enabled
|
65
|
+
ShopifyCli::Config.set('analytics', 'enabled', true)
|
66
|
+
@ctx.puts(@ctx.message('core.config.analytics.enabled'))
|
67
|
+
elsif is_enabled
|
68
|
+
@ctx.puts(@ctx.message('core.config.analytics.is_enabled'))
|
69
|
+
else
|
70
|
+
@ctx.puts(@ctx.message('core.config.analytics.is_disabled'))
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
42
74
|
end
|
43
75
|
end
|
44
76
|
end
|
@@ -23,6 +23,7 @@ module ShopifyCli
|
|
23
23
|
display_cli_ruby(show_all_details)
|
24
24
|
display_utility_commands(show_all_details)
|
25
25
|
display_project_commands(show_all_details)
|
26
|
+
display_shopify_staff_identity if show_all_details
|
26
27
|
end
|
27
28
|
|
28
29
|
def self.help
|
@@ -139,6 +140,14 @@ module ShopifyCli
|
|
139
140
|
end
|
140
141
|
@ctx.puts("")
|
141
142
|
end
|
143
|
+
|
144
|
+
def display_shopify_staff_identity
|
145
|
+
is_shopifolk = ShopifyCli::Shopifolk.check
|
146
|
+
if is_shopifolk
|
147
|
+
@ctx.puts("\n" + @ctx.message('core.system.identity_header'))
|
148
|
+
@ctx.puts(" " + @ctx.message('core.system.identity_is_shopifolk'))
|
149
|
+
end
|
150
|
+
end
|
142
151
|
end
|
143
152
|
end
|
144
153
|
end
|
data/lib/shopify-cli/context.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
require 'shopify_cli'
|
3
3
|
require 'fileutils'
|
4
4
|
require 'rbconfig'
|
5
|
+
require 'net/http'
|
6
|
+
require 'json'
|
5
7
|
|
6
8
|
module ShopifyCli
|
7
9
|
##
|
@@ -11,6 +13,11 @@ module ShopifyCli
|
|
11
13
|
# resoures.
|
12
14
|
#
|
13
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'
|
19
|
+
VERSION_CHECK_INTERVAL = 86400
|
20
|
+
|
14
21
|
class << self
|
15
22
|
attr_reader :messages
|
16
23
|
|
@@ -446,6 +453,23 @@ module ShopifyCli
|
|
446
453
|
nil
|
447
454
|
end
|
448
455
|
|
456
|
+
# Checks if there's a newer version of the CLI available and returns version string if
|
457
|
+
# this should be conveyed to the user (i.e., if it's been over 24 hours since last check)
|
458
|
+
#
|
459
|
+
# #### Parameters
|
460
|
+
#
|
461
|
+
# #### Returns
|
462
|
+
# - `version`: string of newer version available, IFF new version is available AND it's time to inform user,
|
463
|
+
# : nil otherwise
|
464
|
+
#
|
465
|
+
def new_version
|
466
|
+
if (time_of_last_check + VERSION_CHECK_INTERVAL) < (now = Time.now.to_i)
|
467
|
+
update_time_of_last_check(now)
|
468
|
+
latest_version = retrieve_latest_gem_version
|
469
|
+
latest_version unless latest_version == ShopifyCli::VERSION
|
470
|
+
end
|
471
|
+
end
|
472
|
+
|
449
473
|
private
|
450
474
|
|
451
475
|
def ctx_path(fname)
|
@@ -456,5 +480,21 @@ module ShopifyCli
|
|
456
480
|
File.join(root, fname)
|
457
481
|
end
|
458
482
|
end
|
483
|
+
|
484
|
+
def retrieve_latest_gem_version
|
485
|
+
response = Net::HTTP.get_response(GEM_LATEST_URI)
|
486
|
+
latest = JSON.parse(response.body)
|
487
|
+
latest["version"]
|
488
|
+
rescue
|
489
|
+
nil
|
490
|
+
end
|
491
|
+
|
492
|
+
def time_of_last_check
|
493
|
+
(val = ShopifyCli::Config.get(VERSION_CHECK_SECTION, LAST_CHECKED_AT_FIELD)) ? val.to_i : 0
|
494
|
+
end
|
495
|
+
|
496
|
+
def update_time_of_last_check(time)
|
497
|
+
ShopifyCli::Config.set(VERSION_CHECK_SECTION, LAST_CHECKED_AT_FIELD, time)
|
498
|
+
end
|
459
499
|
end
|
460
500
|
end
|
@@ -28,6 +28,9 @@ module ShopifyCli
|
|
28
28
|
ctx.puts(
|
29
29
|
ctx.message('core.warning.development_version', File.join(ShopifyCli::ROOT, 'bin', ShopifyCli::TOOL_NAME))
|
30
30
|
)
|
31
|
+
elsif !ctx.testing?
|
32
|
+
new_version = ctx.new_version
|
33
|
+
ctx.puts(ctx.message('core.warning.new_version', ShopifyCli::VERSION, new_version)) unless new_version.nil?
|
31
34
|
end
|
32
35
|
|
33
36
|
ProjectType.load_type(Project.current_project_type)
|
data/lib/shopify-cli/git.rb
CHANGED
@@ -125,13 +125,13 @@ module ShopifyCli
|
|
125
125
|
|
126
126
|
success = Open3.popen3('git', *git_command, '--progress') do |_stdin, _stdout, stderr, thread|
|
127
127
|
while (line = stderr.gets)
|
128
|
+
msg << line.chomp
|
128
129
|
next unless line.strip.start_with?('Receiving objects:')
|
129
130
|
percent = (line.match(/Receiving objects:\s+(\d+)/)[1].to_f / 100).round(2)
|
130
131
|
bar.tick(set_percent: percent)
|
131
132
|
next
|
132
133
|
end
|
133
134
|
|
134
|
-
msg << stderr
|
135
135
|
thread.value
|
136
136
|
end.success?
|
137
137
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
module ShopifyCli
|
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)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -76,23 +76,40 @@ module ShopifyCli
|
|
76
76
|
# - `ctx`: running context from your command
|
77
77
|
# - `yarn`: The proc, array, or string command to run if yarn is available
|
78
78
|
# - `npm`: The proc, array, or string command to run if npm is available
|
79
|
+
# - `capture_response`: The boolean flag to capture the output of the running command if it is set to true
|
79
80
|
#
|
80
81
|
# #### Example
|
81
82
|
#
|
82
|
-
# ShopifyCli::JsSystem.new(ctx: ctx).call(
|
83
|
+
# ShopifyCli::JsSystem.new(ctx: ctx).call(
|
84
|
+
# yarn: ['install', '--silent'],
|
85
|
+
# npm: ['install', '--no-audit'],
|
86
|
+
# capture_response: false
|
87
|
+
# )
|
83
88
|
#
|
84
|
-
def call(yarn:, npm:)
|
85
|
-
yarn?
|
89
|
+
def call(yarn:, npm:, capture_response: false)
|
90
|
+
if yarn?
|
91
|
+
call_command(yarn, YARN_CORE_COMMAND, capture_response)
|
92
|
+
else
|
93
|
+
call_command(npm, NPM_CORE_COMMAND, capture_response)
|
94
|
+
end
|
86
95
|
end
|
87
96
|
|
88
97
|
private
|
89
98
|
|
90
|
-
def call_command(command, core_command)
|
99
|
+
def call_command(command, core_command, capture_response)
|
91
100
|
if command.is_a?(String) || command.is_a?(Array)
|
92
|
-
|
101
|
+
capture_response ? call_with_capture(command, core_command) : call_without_capture(command, core_command)
|
93
102
|
else
|
94
103
|
command.call
|
95
104
|
end
|
96
105
|
end
|
106
|
+
|
107
|
+
def call_with_capture(command, core_command)
|
108
|
+
CLI::Kit::System.capture3(core_command, *command, chdir: ctx.root)
|
109
|
+
end
|
110
|
+
|
111
|
+
def call_without_capture(command, core_command)
|
112
|
+
CLI::Kit::System.system(core_command, *command, chdir: ctx.root).success?
|
113
|
+
end
|
97
114
|
end
|
98
115
|
end
|
@@ -48,13 +48,27 @@ module ShopifyCli
|
|
48
48
|
config: {
|
49
49
|
help: <<~HELP,
|
50
50
|
Change configuration of how the CLI operates
|
51
|
-
Usage: {{command:%s config [ feature
|
51
|
+
Usage: {{command:%s config [ feature | analytics ] }}
|
52
52
|
HELP
|
53
53
|
feature: {
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
help: <<~HELP,
|
55
|
+
Change configuration of various features
|
56
|
+
Usage: {{command:%s config [ feature ] [ feature_name ] }}
|
57
|
+
HELP
|
58
|
+
enabled: "{{v}} feature {{green:%s}} has been enabled",
|
59
|
+
disabled: "{{v}} feature {{green:%s}} has been disabled",
|
60
|
+
is_enabled: "{{v}} feature {{green:%s}} is currently enabled",
|
61
|
+
is_disabled: "{{v}} feature {{green:%s}} is currently disabled",
|
62
|
+
},
|
63
|
+
analytics: {
|
64
|
+
help: <<~HELP,
|
65
|
+
Opt in/out of anonymous usage reporting
|
66
|
+
Usage: {{command:%s config [ analytics ] }}
|
67
|
+
HELP
|
68
|
+
enabled: "{{v}} analytics have been enabled",
|
69
|
+
disabled: "{{v}} analytics have been disabled",
|
70
|
+
is_enabled: "{{v}} analytics are currently enabled",
|
71
|
+
is_disabled: "{{v}} analytics are currently disabled",
|
58
72
|
},
|
59
73
|
},
|
60
74
|
|
@@ -163,6 +177,7 @@ module ShopifyCli
|
|
163
177
|
api: {
|
164
178
|
error: {
|
165
179
|
internal_server_error: '{{red:{{x}} An unexpected error occurred on Shopify.}}',
|
180
|
+
internal_server_error_debug: "\n{{red:Response details:}}\n%s\n\n",
|
166
181
|
},
|
167
182
|
},
|
168
183
|
|
@@ -184,11 +199,14 @@ module ShopifyCli
|
|
184
199
|
{{x}} You are not in a Shopify app project
|
185
200
|
{{yellow:{{*}}}}{{reset: Run}}{{cyan: shopify create}}{{reset: to create your app}}
|
186
201
|
MESSAGE
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
202
|
+
},
|
203
|
+
},
|
204
|
+
|
205
|
+
yaml: {
|
206
|
+
error: {
|
207
|
+
not_hash: "{{x}} %s was not a proper YAML file. Expecting a hash.",
|
208
|
+
invalid: "{{x}} %s contains invalid YAML: %s",
|
209
|
+
not_found: "{{x}} %s not found",
|
192
210
|
},
|
193
211
|
},
|
194
212
|
|
@@ -234,6 +252,8 @@ module ShopifyCli
|
|
234
252
|
},
|
235
253
|
environment_header: "{{bold:Environment}}",
|
236
254
|
env: "%-17s = %s",
|
255
|
+
identity_header: "{{bold:Identity}}",
|
256
|
+
identity_is_shopifolk: "{{v}} Checked user settings: you’re Shopify staff!",
|
237
257
|
},
|
238
258
|
|
239
259
|
tasks: {
|
@@ -317,7 +337,7 @@ module ShopifyCli
|
|
317
337
|
warning: {
|
318
338
|
development_version: <<~DEVELOPMENT,
|
319
339
|
{{*}} {{yellow:You are running a development version of the CLI at:}}
|
320
|
-
|
340
|
+
{{yellow:%s}}
|
321
341
|
|
322
342
|
DEVELOPMENT
|
323
343
|
|
@@ -328,6 +348,14 @@ module ShopifyCli
|
|
328
348
|
{{underline:https://shopify.github.io/shopify-app-cli/migrate/}}
|
329
349
|
|
330
350
|
MESSAGE
|
351
|
+
|
352
|
+
new_version: <<~MESSAGE,
|
353
|
+
{{*}} {{yellow:A new version of the Shopify App CLI is available! You have version %s and the latest version is %s.
|
354
|
+
|
355
|
+
To upgrade, follow the instructions for the package manager you’re using:
|
356
|
+
{{underline:https://shopify.github.io/shopify-app-cli/getting-started/upgrade/}}}}
|
357
|
+
|
358
|
+
MESSAGE
|
331
359
|
},
|
332
360
|
},
|
333
361
|
}.freeze
|
data/lib/shopify-cli/project.rb
CHANGED
@@ -166,7 +166,7 @@ module ShopifyCli
|
|
166
166
|
@config ||= begin
|
167
167
|
config = load_yaml_file('.shopify-cli.yml')
|
168
168
|
unless config.is_a?(Hash)
|
169
|
-
raise ShopifyCli::Abort, Context.message('core.
|
169
|
+
raise ShopifyCli::Abort, Context.message('core.yaml.error.not_hash', '.shopify-cli.yml')
|
170
170
|
end
|
171
171
|
|
172
172
|
# The app_type key was deprecated in favour of project_type, so replace it
|
@@ -187,12 +187,12 @@ module ShopifyCli
|
|
187
187
|
begin
|
188
188
|
YAML.load_file(f)
|
189
189
|
rescue Psych::SyntaxError => e
|
190
|
-
raise(ShopifyCli::Abort, Context.message('core.
|
190
|
+
raise(ShopifyCli::Abort, Context.message('core.yaml.error.invalid', relative_path, e.message))
|
191
191
|
# rescue Errno::EACCES => e
|
192
192
|
# TODO
|
193
193
|
# Dev::Helpers::EaccesHandler.diagnose_and_raise(f, e, mode: :read)
|
194
194
|
rescue Errno::ENOENT
|
195
|
-
raise ShopifyCli::Abort, Context.message('core.
|
195
|
+
raise ShopifyCli::Abort, Context.message('core.yaml.error.not_found', f)
|
196
196
|
end
|
197
197
|
end
|
198
198
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module ShopifyCli
|
2
|
+
##
|
3
|
+
# ShopifyCli::Shopifolk contains the logic to determine if the user appears to be a Shopify staff
|
4
|
+
#
|
5
|
+
# The Shopifolk Feature flag will persist between runs so if the flag is enabled or disabled,
|
6
|
+
# it will still be in that same state until the next class invocation.
|
7
|
+
class Shopifolk
|
8
|
+
GCLOUD_CONFIG_FILE = File.expand_path('~/.config/gcloud/configurations/config_default')
|
9
|
+
DEV_PATH = '/opt/dev'
|
10
|
+
SECTION = 'core'
|
11
|
+
FEATURE_NAME = 'shopifolk'
|
12
|
+
|
13
|
+
##
|
14
|
+
# will return if the user appears to be a Shopify employee, based on several heuristics
|
15
|
+
#
|
16
|
+
# #### Returns
|
17
|
+
#
|
18
|
+
# * `is_shopifolk` - returns true if the user is a Shopify Employee
|
19
|
+
#
|
20
|
+
# #### Example
|
21
|
+
#
|
22
|
+
# ShopifyCli::Shopifolk.check
|
23
|
+
#
|
24
|
+
def self.check
|
25
|
+
ShopifyCli::Shopifolk.new.shopifolk?
|
26
|
+
end
|
27
|
+
|
28
|
+
##
|
29
|
+
# will return if the user is a Shopify employee
|
30
|
+
#
|
31
|
+
# #### Returns
|
32
|
+
#
|
33
|
+
# * `is_shopifolk` - returns true if the user has `dev` installed and
|
34
|
+
# a valid google cloud config file with email ending in "@shopify.com"
|
35
|
+
#
|
36
|
+
def shopifolk?
|
37
|
+
return true if Feature.enabled?(FEATURE_NAME)
|
38
|
+
if shopifolk_by_gcloud? && shopifolk_by_dev?
|
39
|
+
ShopifyCli::Feature.enable(FEATURE_NAME)
|
40
|
+
true
|
41
|
+
else
|
42
|
+
ShopifyCli::Feature.disable(FEATURE_NAME)
|
43
|
+
false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def shopifolk_by_gcloud?
|
50
|
+
ini&.dig("[#{SECTION}]", 'account')&.match?(/@shopify.com\z/)
|
51
|
+
end
|
52
|
+
|
53
|
+
def shopifolk_by_dev?
|
54
|
+
File.exist?("#{DEV_PATH}/bin/dev") && File.exist?("#{DEV_PATH}/.shopify-build")
|
55
|
+
end
|
56
|
+
|
57
|
+
def ini
|
58
|
+
@ini ||= begin
|
59
|
+
if File.exist?(GCLOUD_CONFIG_FILE)
|
60
|
+
CLI::Kit::Ini
|
61
|
+
.new(GCLOUD_CONFIG_FILE, default_section: "[#{SECTION}]", convert_types: false)
|
62
|
+
.tap(&:parse).ini
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|