shopify-cli 1.0.5 → 1.3.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/CHANGELOG.md +20 -0
- data/bin/load_shopify.rb +3 -1
- data/bin/shopify +2 -0
- data/docs/core/index.md +16 -0
- data/docs/getting-started/index.md +3 -2
- data/docs/getting-started/install/index.md +55 -9
- data/docs/getting-started/uninstall/index.md +1 -1
- data/docs/getting-started/upgrade/index.md +8 -4
- data/ext/shopify-cli/extconf.rb +40 -20
- 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 +4 -4
- data/lib/project_types/node/commands/deploy/heroku.rb +6 -1
- data/lib/project_types/node/commands/generate/billing.rb +7 -5
- data/lib/project_types/node/commands/generate/page.rb +9 -5
- data/lib/project_types/node/commands/generate/webhook.rb +5 -1
- data/lib/project_types/node/commands/serve.rb +5 -5
- data/lib/project_types/node/messages/messages.rb +5 -1
- data/lib/project_types/rails/commands/create.rb +56 -5
- data/lib/project_types/rails/commands/generate.rb +1 -0
- data/lib/project_types/rails/commands/generate/webhook.rb +3 -2
- data/lib/project_types/rails/commands/serve.rb +11 -7
- data/lib/project_types/rails/gem.rb +61 -6
- data/lib/project_types/rails/messages/messages.rb +32 -12
- data/lib/project_types/script/config/extension_points.yml +4 -4
- data/lib/project_types/script/forms/create.rb +1 -1
- 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/layers/infrastructure/script_service.rb +6 -2
- data/lib/project_types/script/messages/messages.rb +12 -37
- data/lib/project_types/script/ui/error_handler.rb +13 -5
- data/lib/rubygems_plugin.rb +18 -10
- data/lib/shopify-cli/admin_api/populate_resource_command.rb +1 -1
- data/lib/shopify-cli/commands/config.rb +33 -1
- data/lib/shopify-cli/commands/connect.rb +1 -1
- data/lib/shopify-cli/commands/system.rb +9 -8
- data/lib/shopify-cli/context.rb +68 -0
- data/lib/shopify-cli/core/entry_point.rb +3 -0
- data/lib/shopify-cli/git.rb +1 -1
- data/lib/shopify-cli/heroku.rb +18 -2
- data/lib/shopify-cli/js_deps.rb +2 -2
- data/lib/shopify-cli/js_system.rb +24 -7
- data/lib/shopify-cli/messages/messages.rb +39 -11
- data/lib/shopify-cli/process_supervision.rb +52 -15
- data/lib/shopify-cli/project.rb +17 -9
- data/lib/shopify-cli/tunnel.rb +19 -4
- data/lib/shopify-cli/version.rb +1 -1
- data/lib/shopify_cli.rb +6 -2
- data/shopify-cli.gemspec +4 -1
- data/vendor/deps/cli-kit/REVISION +1 -1
- data/vendor/deps/cli-kit/lib/cli/kit.rb +1 -1
- data/vendor/deps/cli-kit/lib/cli/kit/autocall.rb +2 -2
- data/vendor/deps/cli-kit/lib/cli/kit/error_handler.rb +12 -6
- data/vendor/deps/cli-kit/lib/cli/kit/executor.rb +9 -11
- data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +8 -2
- data/vendor/deps/cli-kit/lib/cli/kit/support/test_helper.rb +7 -7
- data/vendor/deps/cli-kit/lib/cli/kit/system.rb +48 -17
- data/vendor/deps/cli-ui/REVISION +1 -1
- data/vendor/deps/cli-ui/lib/cli/ui.rb +5 -4
- data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +9 -3
- data/vendor/deps/cli-ui/lib/cli/ui/color.rb +1 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -2
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/box.rb +13 -5
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/bracket.rb +29 -2
- data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +21 -10
- data/vendor/deps/cli-ui/lib/cli/ui/os.rb +63 -0
- data/vendor/deps/cli-ui/lib/cli/ui/prompt.rb +11 -2
- data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +1 -0
- data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -3
- data/vendor/deps/cli-ui/lib/cli/ui/spinner/spin_group.rb +6 -8
- data/vendor/deps/cli-ui/lib/cli/ui/widgets.rb +2 -0
- data/vendor/gen/lib/gen.rb +39 -0
- data/vendor/gen/lib/gen/commands.rb +18 -0
- data/vendor/gen/lib/gen/commands/help.rb +20 -0
- data/vendor/gen/lib/gen/commands/new.rb +21 -0
- data/vendor/gen/lib/gen/entry_point.rb +10 -0
- data/vendor/gen/lib/gen/generator.rb +165 -0
- data/vendor/gen/template/.gitignore +2 -0
- data/vendor/gen/template/Gemfile +10 -0
- data/vendor/gen/template/README.md +1 -0
- data/vendor/gen/template/bin/testunit +23 -0
- data/vendor/gen/template/bin/update-deps +97 -0
- data/vendor/gen/template/dev-gems.yml +3 -0
- data/vendor/gen/template/dev-vendor.yml +4 -0
- data/vendor/gen/template/exe/__app__-gems +17 -0
- data/vendor/gen/template/exe/__app__-vendor +18 -0
- data/vendor/gen/template/lib/__app__.rb +33 -0
- data/vendor/gen/template/lib/__app__/commands.rb +18 -0
- data/vendor/gen/template/lib/__app__/commands/example.rb +19 -0
- data/vendor/gen/template/lib/__app__/commands/help.rb +21 -0
- data/vendor/gen/template/lib/__app__/entry_point.rb +10 -0
- data/vendor/gen/template/test/example_test.rb +17 -0
- data/vendor/gen/template/test/test_helper.rb +22 -0
- metadata +30 -6
- data/Vagrantfile +0 -17
- data/lib/project_types/extension/features/argo.rb +0 -48
- data/lib/project_types/extension/models/types/subscription_management.rb +0 -20
- data/lib/project_types/script/forms/script_form.rb +0 -69
|
@@ -96,14 +96,11 @@ module Script
|
|
|
96
96
|
{
|
|
97
97
|
cause_of_error: ShopifyCli::Context.message('script.error.app_not_installed_cause'),
|
|
98
98
|
}
|
|
99
|
-
when Layers::Infrastructure::Errors::AppScriptNotPushedError
|
|
99
|
+
when Layers::Infrastructure::Errors::AppScriptNotPushedError,
|
|
100
|
+
Layers::Infrastructure::Errors::AppScriptUndefinedError
|
|
100
101
|
{
|
|
101
102
|
cause_of_error: ShopifyCli::Context.message('script.error.app_script_not_pushed_help'),
|
|
102
103
|
}
|
|
103
|
-
when Layers::Infrastructure::Errors::AppScriptUndefinedError
|
|
104
|
-
{
|
|
105
|
-
help_suggestion: ShopifyCli::Context.message('script.error.app_script_undefined_help'),
|
|
106
|
-
}
|
|
107
104
|
when Layers::Infrastructure::Errors::BuildError
|
|
108
105
|
{
|
|
109
106
|
cause_of_error: ShopifyCli::Context.message('script.error.build_error_cause'),
|
|
@@ -142,6 +139,17 @@ module Script
|
|
|
142
139
|
{
|
|
143
140
|
cause_of_error: ShopifyCli::Context.message('script.error.shop_script_undefined_cause'),
|
|
144
141
|
}
|
|
142
|
+
when Layers::Infrastructure::Errors::PackagesOutdatedError
|
|
143
|
+
{
|
|
144
|
+
cause_of_error: ShopifyCli::Context.message(
|
|
145
|
+
'script.error.packages_outdated_cause',
|
|
146
|
+
e.outdated_packages.join(', ')
|
|
147
|
+
),
|
|
148
|
+
help_suggestion: ShopifyCli::Context.message(
|
|
149
|
+
'script.error.packages_outdated_help',
|
|
150
|
+
e.outdated_packages.collect { |package| "#{package}@latest" }.join(' ')
|
|
151
|
+
),
|
|
152
|
+
}
|
|
145
153
|
end
|
|
146
154
|
end
|
|
147
155
|
end
|
data/lib/rubygems_plugin.rb
CHANGED
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
Gem.post_uninstall do |uninstaller|
|
|
2
2
|
if uninstaller.spec.name == 'shopify-cli'
|
|
3
|
-
|
|
3
|
+
if RUBY_PLATFORM.match(/mingw32/)
|
|
4
|
+
bat_path = File.dirname(RbConfig.ruby)
|
|
5
|
+
bat = "#{bat_path}\\shopify.bat"
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
# delete the auto-generated batch script
|
|
8
|
+
File.unlink(bat)
|
|
9
|
+
else
|
|
10
|
+
require 'fileutils'
|
|
6
11
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
symlink = '/usr/local/bin/shopify'
|
|
13
|
+
|
|
14
|
+
# delete the symbolic link IFF it exists AND it does not point to a file
|
|
15
|
+
# (i.e., it's been left hanging as a result of the uninstall, as expected)
|
|
16
|
+
#
|
|
17
|
+
# if the file still exists, either the uninstall failed (possible but
|
|
18
|
+
# unlikely) OR
|
|
19
|
+
# there's another installation of the gem in another ruby folder that has
|
|
20
|
+
# overwritten it, so leave the symbolic link alone
|
|
21
|
+
system("sudo rm -f #{symlink}") if File.symlink?(symlink) && !File.exist?(symlink)
|
|
22
|
+
end
|
|
15
23
|
end
|
|
16
24
|
|
|
17
25
|
true
|
|
@@ -118,7 +118,7 @@ module ShopifyCli
|
|
|
118
118
|
kwargs = { input: data }
|
|
119
119
|
kwargs[:shop] = @shop
|
|
120
120
|
resp = AdminAPI.query(
|
|
121
|
-
@ctx, "create_#{snake_case_resource_type}", kwargs
|
|
121
|
+
@ctx, "create_#{snake_case_resource_type}", **kwargs
|
|
122
122
|
)
|
|
123
123
|
@ctx.abort(resp['errors']) if resp['errors']
|
|
124
124
|
@ctx.done(message(resp['data'])) unless @silent
|
|
@@ -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
|
|
@@ -13,8 +13,8 @@ module ShopifyCli
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
org = ShopifyCli::Tasks::EnsureEnv.call(@ctx, regenerate: true)
|
|
16
|
-
api_key = Project.current.env['api_key']
|
|
17
16
|
write_cli_yml(project_type, org['id']) unless Project.has_current?
|
|
17
|
+
api_key = Project.current(force_reload: true).env['api_key']
|
|
18
18
|
@ctx.puts(@ctx.message('core.connect.connected', get_app(org['apps'], api_key).first["title"]))
|
|
19
19
|
end
|
|
20
20
|
|
|
@@ -68,13 +68,14 @@ module ShopifyCli
|
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
def display_utility_commands(_show_all_details)
|
|
71
|
-
commands = %w(git curl tar
|
|
71
|
+
commands = %w(git curl tar)
|
|
72
72
|
|
|
73
73
|
@ctx.puts("\n" + @ctx.message('core.system.command_header'))
|
|
74
74
|
commands.each do |s|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
cmd_path = @ctx.which(s)
|
|
76
|
+
|
|
77
|
+
if !cmd_path.nil?
|
|
78
|
+
@ctx.puts(" " + @ctx.message('core.system.command_with_path', s, cmd_path))
|
|
78
79
|
else
|
|
79
80
|
@ctx.puts(" " + @ctx.message('core.system.command_not_found', s))
|
|
80
81
|
end
|
|
@@ -82,7 +83,7 @@ module ShopifyCli
|
|
|
82
83
|
end
|
|
83
84
|
|
|
84
85
|
def display_ngrok
|
|
85
|
-
ngrok_location = File.join(ShopifyCli.cache_dir, 'ngrok')
|
|
86
|
+
ngrok_location = File.join(ShopifyCli.cache_dir, @ctx.windows? ? 'ngrok.exe' : 'ngrok')
|
|
86
87
|
if File.exist?(ngrok_location)
|
|
87
88
|
@ctx.puts(" " + @ctx.message('core.system.ngrok_available', ngrok_location))
|
|
88
89
|
else
|
|
@@ -102,11 +103,11 @@ module ShopifyCli
|
|
|
102
103
|
def display_project(project_type, commands)
|
|
103
104
|
@ctx.puts("\n" + @ctx.message('core.system.project.header', project_type))
|
|
104
105
|
commands.each do |s|
|
|
105
|
-
|
|
106
|
-
if
|
|
106
|
+
cmd_path = @ctx.which(s)
|
|
107
|
+
if !cmd_path.nil?
|
|
107
108
|
version_output, _ = @ctx.capture2e(s, '--version')
|
|
108
109
|
version = version_output.match(/(\d+\.[^\s]+)/)[0]
|
|
109
|
-
@ctx.puts(" " + @ctx.message('core.system.project.command_with_path', s,
|
|
110
|
+
@ctx.puts(" " + @ctx.message('core.system.project.command_with_path', s, cmd_path.strip, version.strip))
|
|
110
111
|
else
|
|
111
112
|
@ctx.puts(" " + @ctx.message('core.system.project.command_not_found', s))
|
|
112
113
|
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
|
|
|
@@ -56,6 +63,7 @@ module ShopifyCli
|
|
|
56
63
|
host = uname
|
|
57
64
|
return :mac if /darwin/.match(host)
|
|
58
65
|
return :linux if /linux/.match(host)
|
|
66
|
+
return :windows if /mingw32/.match(host)
|
|
59
67
|
end
|
|
60
68
|
|
|
61
69
|
# will return true if the cli is running on an apple computer.
|
|
@@ -68,6 +76,11 @@ module ShopifyCli
|
|
|
68
76
|
os == :linux
|
|
69
77
|
end
|
|
70
78
|
|
|
79
|
+
# will return true if the cli is running on Windows
|
|
80
|
+
def windows?
|
|
81
|
+
os == :windows
|
|
82
|
+
end
|
|
83
|
+
|
|
71
84
|
# will return true if the cli is being run from an installation, and not a
|
|
72
85
|
# development instance. The gem installation will not have a 'test' directory.
|
|
73
86
|
# See `#development?` for checking for development environment.
|
|
@@ -418,6 +431,45 @@ module ShopifyCli
|
|
|
418
431
|
end
|
|
419
432
|
end
|
|
420
433
|
|
|
434
|
+
# Checks if the given command exists in the system
|
|
435
|
+
#
|
|
436
|
+
# #### Parameters
|
|
437
|
+
# - `cmd`: The command to test
|
|
438
|
+
#
|
|
439
|
+
# #### Returns
|
|
440
|
+
# The path of the executable if it is found
|
|
441
|
+
#
|
|
442
|
+
# @todo This is currently a duplicate of CLI::Kit::System.which() - we should make that method public when we make
|
|
443
|
+
# Kit changes and make this a wrapper instead.
|
|
444
|
+
def which(cmd)
|
|
445
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
|
446
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
|
447
|
+
exts.each do |ext|
|
|
448
|
+
exe = File.join(File.expand_path(path), "#{cmd}#{ext}")
|
|
449
|
+
return exe if File.executable?(exe) && !File.directory?(exe)
|
|
450
|
+
end
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
nil
|
|
454
|
+
end
|
|
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
|
+
|
|
421
473
|
private
|
|
422
474
|
|
|
423
475
|
def ctx_path(fname)
|
|
@@ -428,5 +480,21 @@ module ShopifyCli
|
|
|
428
480
|
File.join(root, fname)
|
|
429
481
|
end
|
|
430
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
|
|
431
499
|
end
|
|
432
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
|
+
else
|
|
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
|
|
data/lib/shopify-cli/heroku.rb
CHANGED
|
@@ -3,7 +3,7 @@ module ShopifyCli
|
|
|
3
3
|
DOWNLOAD_URLS = {
|
|
4
4
|
linux: 'https://cli-assets.heroku.com/heroku-linux-x64.tar.gz',
|
|
5
5
|
mac: 'https://cli-assets.heroku.com/heroku-darwin-x64.tar.gz',
|
|
6
|
-
windows: 'https://cli-assets.heroku.com/heroku-
|
|
6
|
+
windows: 'https://cli-assets.heroku.com/heroku-x64.exe',
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
def initialize(ctx)
|
|
@@ -44,7 +44,11 @@ module ShopifyCli
|
|
|
44
44
|
def install
|
|
45
45
|
return if installed?
|
|
46
46
|
|
|
47
|
-
result = @ctx.
|
|
47
|
+
result = if @ctx.windows?
|
|
48
|
+
@ctx.system("\"#{download_path}\"")
|
|
49
|
+
else
|
|
50
|
+
@ctx.system('tar', '-xf', download_path, chdir: ShopifyCli.cache_dir)
|
|
51
|
+
end
|
|
48
52
|
@ctx.abort(@ctx.message('core.heroku.error.install')) unless result.success?
|
|
49
53
|
|
|
50
54
|
@ctx.rm(download_path)
|
|
@@ -82,6 +86,18 @@ module ShopifyCli
|
|
|
82
86
|
local_path = File.join(ShopifyCli.cache_dir, 'heroku', 'bin', 'heroku').to_s
|
|
83
87
|
if File.exist?(local_path)
|
|
84
88
|
local_path
|
|
89
|
+
elsif @ctx.windows?
|
|
90
|
+
# Check if Heroku exists in the Windows registry and run it from there
|
|
91
|
+
require 'win32/registry'
|
|
92
|
+
begin
|
|
93
|
+
windows_path = Win32::Registry::HKEY_CURRENT_USER.open('SOFTWARE\heroku') do |reg|
|
|
94
|
+
reg[''] # This reads the 'Default' registry key
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
File.join(windows_path, 'bin', 'heroku').to_s
|
|
98
|
+
rescue
|
|
99
|
+
'heroku'
|
|
100
|
+
end
|
|
85
101
|
else
|
|
86
102
|
'heroku'
|
|
87
103
|
end
|
data/lib/shopify-cli/js_deps.rb
CHANGED
|
@@ -69,7 +69,7 @@ module ShopifyCli
|
|
|
69
69
|
deps = parse_dependencies
|
|
70
70
|
errors = nil
|
|
71
71
|
|
|
72
|
-
spinner_title = ctx.message('core.js_deps.
|
|
72
|
+
spinner_title = ctx.message('core.js_deps.installing', @system.package_manager)
|
|
73
73
|
success = CLI::UI::Spinner.spin(spinner_title, auto_debrief: false) do |spinner|
|
|
74
74
|
_, errors, status = CLI::Kit::System.capture3(*cmd, env: @ctx.env, chdir: ctx.root)
|
|
75
75
|
update_spinner_title_and_status(spinner, status, deps)
|
|
@@ -81,7 +81,7 @@ module ShopifyCli
|
|
|
81
81
|
|
|
82
82
|
def update_spinner_title_and_status(spinner, status, deps)
|
|
83
83
|
if status.success?
|
|
84
|
-
spinner.update_title(ctx.message('core.js_deps.
|
|
84
|
+
spinner.update_title(ctx.message('core.js_deps.installed', deps.size))
|
|
85
85
|
else
|
|
86
86
|
spinner.update_title(ctx.message('core.js_deps.error.install_spinner_error', deps.size))
|
|
87
87
|
CLI::UI::Spinner::TASK_FAILED
|
|
@@ -64,8 +64,8 @@ module ShopifyCli
|
|
|
64
64
|
#
|
|
65
65
|
def yarn?
|
|
66
66
|
@has_yarn ||= begin
|
|
67
|
-
|
|
68
|
-
File.exist?(File.join(ctx.root, 'yarn.lock')) &&
|
|
67
|
+
cmd_path = @ctx.which('yarn')
|
|
68
|
+
File.exist?(File.join(ctx.root, 'yarn.lock')) && !cmd_path.nil?
|
|
69
69
|
end
|
|
70
70
|
end
|
|
71
71
|
|
|
@@ -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
|
|
|
@@ -184,11 +198,14 @@ module ShopifyCli
|
|
|
184
198
|
{{x}} You are not in a Shopify app project
|
|
185
199
|
{{yellow:{{*}}}}{{reset: Run}}{{cyan: shopify create}}{{reset: to create your app}}
|
|
186
200
|
MESSAGE
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
|
|
204
|
+
yaml: {
|
|
205
|
+
error: {
|
|
206
|
+
not_hash: "{{x}} %s was not a proper YAML file. Expecting a hash.",
|
|
207
|
+
invalid: "{{x}} %s contains invalid YAML: %s",
|
|
208
|
+
not_found: "{{x}} %s not found",
|
|
192
209
|
},
|
|
193
210
|
},
|
|
194
211
|
|
|
@@ -289,6 +306,8 @@ module ShopifyCli
|
|
|
289
306
|
error: {
|
|
290
307
|
stop: "ngrok tunnel could not be stopped. Try running {{command:killall -9 ngrok}}",
|
|
291
308
|
url_fetch_failure: "Unable to fetch external url",
|
|
309
|
+
prereq_command_required: "%1$s is required for installing ngrok. Please install %1$s using the appropriate"\
|
|
310
|
+
" package manager for your system.",
|
|
292
311
|
},
|
|
293
312
|
|
|
294
313
|
not_running: "{{green:x}} ngrok tunnel not running",
|
|
@@ -302,6 +321,7 @@ module ShopifyCli
|
|
|
302
321
|
stopped: "{{green:x}} ngrok tunnel stopped",
|
|
303
322
|
timed_out: "{{x}} ngrok tunnel has timed out, restarting ...",
|
|
304
323
|
will_timeout: "{{*}} This tunnel will timeout in {{red:%s}}",
|
|
324
|
+
prereq_command_location: "%s @ %s",
|
|
305
325
|
},
|
|
306
326
|
|
|
307
327
|
version: {
|
|
@@ -314,7 +334,7 @@ module ShopifyCli
|
|
|
314
334
|
warning: {
|
|
315
335
|
development_version: <<~DEVELOPMENT,
|
|
316
336
|
{{*}} {{yellow:You are running a development version of the CLI at:}}
|
|
317
|
-
|
|
337
|
+
{{yellow:%s}}
|
|
318
338
|
|
|
319
339
|
DEVELOPMENT
|
|
320
340
|
|
|
@@ -325,6 +345,14 @@ module ShopifyCli
|
|
|
325
345
|
{{underline:https://shopify.github.io/shopify-app-cli/migrate/}}
|
|
326
346
|
|
|
327
347
|
MESSAGE
|
|
348
|
+
|
|
349
|
+
new_version: <<~MESSAGE,
|
|
350
|
+
{{*}} {{yellow:A new version of the Shopify App CLI is available! You have version %s and the latest version is %s.
|
|
351
|
+
|
|
352
|
+
To upgrade, follow the instructions for the package manager you’re using:
|
|
353
|
+
{{underline:https://shopify.github.io/shopify-app-cli/getting-started/upgrade/}}}}
|
|
354
|
+
|
|
355
|
+
MESSAGE
|
|
328
356
|
},
|
|
329
357
|
},
|
|
330
358
|
}.freeze
|