shopify-cli 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile +12 -12
- data/Rakefile +32 -30
- data/bin/load_shopify.rb +6 -6
- data/bin/shopify +2 -2
- data/ext/shopify-cli/extconf.rb +7 -7
- data/lib/docgen/markdown.rb +11 -11
- data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
- data/lib/project_types/extension/cli.rb +52 -45
- data/lib/project_types/extension/commands/build.rb +3 -3
- data/lib/project_types/extension/commands/create.rb +16 -9
- data/lib/project_types/extension/commands/extension_command.rb +8 -5
- data/lib/project_types/extension/commands/push.rb +8 -8
- data/lib/project_types/extension/commands/register.rb +19 -30
- data/lib/project_types/extension/commands/serve.rb +2 -2
- data/lib/project_types/extension/commands/tunnel.rb +12 -12
- data/lib/project_types/extension/extension_project.rb +4 -4
- data/lib/project_types/extension/extension_project_keys.rb +4 -4
- data/lib/project_types/extension/features/argo.rb +13 -13
- data/lib/project_types/extension/features/argo_config.rb +5 -5
- data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
- data/lib/project_types/extension/features/argo_setup.rb +2 -2
- data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
- data/lib/project_types/extension/forms/create.rb +28 -34
- data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
- data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
- data/lib/project_types/extension/forms/questions/ask_type.rb +36 -0
- data/lib/project_types/extension/messages/messages.rb +53 -52
- data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
- data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +1 -1
- data/lib/project_types/extension/models/specification_handlers/default.rb +2 -2
- data/lib/project_types/extension/models/specifications.rb +3 -3
- data/lib/project_types/extension/tasks/configure_features.rb +4 -4
- data/lib/project_types/extension/tasks/converters/app_converter.rb +6 -6
- data/lib/project_types/extension/tasks/converters/registration_converter.rb +6 -6
- data/lib/project_types/extension/tasks/converters/validation_error_converter.rb +4 -4
- data/lib/project_types/extension/tasks/converters/version_converter.rb +7 -7
- data/lib/project_types/extension/tasks/create_extension.rb +4 -4
- data/lib/project_types/extension/tasks/fetch_specifications.rb +4 -4
- data/lib/project_types/extension/tasks/get_app.rb +4 -4
- data/lib/project_types/extension/tasks/get_apps.rb +3 -3
- data/lib/project_types/extension/tasks/update_draft.rb +4 -4
- data/lib/project_types/extension/tasks/user_errors.rb +4 -4
- data/lib/project_types/node/cli.rb +19 -19
- data/lib/project_types/node/commands/connect.rb +3 -3
- data/lib/project_types/node/commands/create.rb +40 -38
- data/lib/project_types/node/commands/deploy.rb +4 -4
- data/lib/project_types/node/commands/deploy/heroku.rb +24 -24
- data/lib/project_types/node/commands/generate.rb +8 -8
- data/lib/project_types/node/commands/open.rb +2 -2
- data/lib/project_types/node/commands/populate.rb +6 -6
- data/lib/project_types/node/commands/populate/customer.rb +5 -5
- data/lib/project_types/node/commands/populate/draft_order.rb +5 -5
- data/lib/project_types/node/commands/populate/product.rb +5 -5
- data/lib/project_types/node/commands/serve.rb +9 -9
- data/lib/project_types/node/commands/tunnel.rb +7 -7
- data/lib/project_types/node/forms/create.rb +7 -7
- data/lib/project_types/node/messages/messages.rb +3 -3
- data/lib/project_types/rails/cli.rb +21 -21
- data/lib/project_types/rails/commands/connect.rb +3 -3
- data/lib/project_types/rails/commands/create.rb +51 -48
- data/lib/project_types/rails/commands/deploy.rb +4 -4
- data/lib/project_types/rails/commands/deploy/heroku.rb +30 -30
- data/lib/project_types/rails/commands/generate.rb +7 -7
- data/lib/project_types/rails/commands/generate/webhook.rb +6 -6
- data/lib/project_types/rails/commands/open.rb +2 -2
- data/lib/project_types/rails/commands/populate.rb +6 -6
- data/lib/project_types/rails/commands/populate/customer.rb +5 -5
- data/lib/project_types/rails/commands/populate/draft_order.rb +5 -5
- data/lib/project_types/rails/commands/populate/product.rb +5 -5
- data/lib/project_types/rails/commands/serve.rb +11 -11
- data/lib/project_types/rails/commands/tunnel.rb +7 -7
- data/lib/project_types/rails/forms/create.rb +23 -23
- data/lib/project_types/rails/gem.rb +23 -23
- data/lib/project_types/rails/messages/messages.rb +4 -4
- data/lib/project_types/rails/ruby.rb +2 -2
- data/lib/project_types/script/cli.rb +40 -40
- data/lib/project_types/script/commands/create.rb +9 -8
- data/lib/project_types/script/commands/disable.rb +3 -3
- data/lib/project_types/script/commands/enable.rb +9 -7
- data/lib/project_types/script/commands/push.rb +5 -4
- data/lib/project_types/script/errors.rb +17 -0
- data/lib/project_types/script/forms/create.rb +5 -5
- data/lib/project_types/script/graphql/app_script_update_or_create.graphql +2 -0
- data/lib/project_types/script/layers/application/build_script.rb +6 -8
- data/lib/project_types/script/layers/application/create_script.rb +2 -2
- data/lib/project_types/script/layers/application/disable_script.rb +2 -2
- data/lib/project_types/script/layers/application/enable_script.rb +2 -2
- data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
- data/lib/project_types/script/layers/application/push_script.rb +4 -12
- data/lib/project_types/script/layers/domain/push_package.rb +5 -1
- data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +3 -3
- data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +10 -10
- data/lib/project_types/script/layers/infrastructure/errors.rb +1 -1
- data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +2 -2
- data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +12 -17
- data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +4 -4
- data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +1 -1
- data/lib/project_types/script/layers/infrastructure/script_service.rb +18 -16
- data/lib/project_types/script/messages/messages.rb +14 -8
- data/lib/project_types/script/script_project.rb +27 -5
- data/lib/project_types/script/ui/error_handler.rb +80 -68
- data/lib/project_types/script/ui/printing_spinner.rb +1 -1
- data/lib/project_types/script/ui/strict_spinner.rb +1 -1
- data/lib/project_types/theme/cli.rb +19 -19
- data/lib/project_types/theme/commands/connect.rb +12 -12
- data/lib/project_types/theme/commands/create.rb +11 -11
- data/lib/project_types/theme/commands/deploy.rb +8 -8
- data/lib/project_types/theme/commands/generate.rb +3 -3
- data/lib/project_types/theme/commands/generate/env.rb +15 -15
- data/lib/project_types/theme/commands/push.rb +15 -15
- data/lib/project_types/theme/commands/serve.rb +5 -5
- data/lib/project_types/theme/forms/connect.rb +4 -4
- data/lib/project_types/theme/forms/create.rb +5 -5
- data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +22 -22
- data/lib/project_types/theme/themekit.rb +15 -15
- data/lib/rubygems_plugin.rb +3 -3
- data/lib/shopify-cli/admin_api.rb +11 -11
- data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
- data/lib/shopify-cli/admin_api/schema.rb +3 -3
- data/lib/shopify-cli/api.rb +10 -10
- data/lib/shopify-cli/command.rb +1 -1
- data/lib/shopify-cli/commands.rb +9 -9
- data/lib/shopify-cli/commands/config.rb +28 -52
- data/lib/shopify-cli/commands/connect.rb +10 -10
- data/lib/shopify-cli/commands/create.rb +5 -5
- data/lib/shopify-cli/commands/help.rb +6 -6
- data/lib/shopify-cli/commands/logout.rb +3 -3
- data/lib/shopify-cli/commands/system.rb +32 -32
- data/lib/shopify-cli/commands/version.rb +2 -2
- data/lib/shopify-cli/context.rb +23 -23
- data/lib/shopify-cli/core.rb +4 -4
- data/lib/shopify-cli/core/entry_point.rb +5 -5
- data/lib/shopify-cli/core/executor.rb +1 -1
- data/lib/shopify-cli/core/help_resolver.rb +2 -2
- data/lib/shopify-cli/core/monorail.rb +16 -16
- data/lib/shopify-cli/db.rb +2 -2
- data/lib/shopify-cli/feature.rb +1 -1
- data/lib/shopify-cli/form.rb +1 -1
- data/lib/shopify-cli/git.rb +17 -17
- data/lib/shopify-cli/helpers.rb +1 -1
- data/lib/shopify-cli/helpers/haikunator.rb +1 -1
- data/lib/shopify-cli/heroku.rb +28 -28
- data/lib/shopify-cli/http_request.rb +2 -2
- data/lib/shopify-cli/js_deps.rb +12 -12
- data/lib/shopify-cli/js_system.rb +5 -5
- data/lib/shopify-cli/lazy_delegator.rb +55 -0
- data/lib/shopify-cli/messages/messages.rb +4 -14
- data/lib/shopify-cli/oauth.rb +25 -25
- data/lib/shopify-cli/oauth/servlet.rb +9 -9
- data/lib/shopify-cli/options.rb +3 -3
- data/lib/shopify-cli/packager.rb +24 -24
- data/lib/shopify-cli/partners_api.rb +16 -16
- data/lib/shopify-cli/partners_api/organizations.rb +10 -10
- data/lib/shopify-cli/process_supervision.rb +7 -7
- data/lib/shopify-cli/project.rb +16 -16
- data/lib/shopify-cli/project_type.rb +3 -3
- data/lib/shopify-cli/resources.rb +1 -1
- data/lib/shopify-cli/resources/env_file.rb +9 -9
- data/lib/shopify-cli/result.rb +8 -8
- data/lib/shopify-cli/shopifolk.rb +6 -9
- data/lib/shopify-cli/sub_command.rb +1 -1
- data/lib/shopify-cli/task.rb +3 -3
- data/lib/shopify-cli/tasks.rb +7 -7
- data/lib/shopify-cli/tasks/create_api_client.rb +5 -5
- data/lib/shopify-cli/tasks/ensure_dev_store.rb +11 -11
- data/lib/shopify-cli/tasks/ensure_env.rb +15 -15
- data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
- data/lib/shopify-cli/tasks/select_org_and_shop.rb +19 -19
- data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
- data/lib/shopify-cli/transform_data_structure.rb +86 -0
- data/lib/shopify-cli/tunnel.rb +30 -30
- data/lib/shopify-cli/version.rb +1 -1
- data/lib/shopify_cli.rb +56 -54
- data/shopify-cli.gemspec +6 -6
- data/vendor/gen/template/bin/update-deps +9 -9
- metadata +9 -4
- data/lib/project_types/extension/forms/register.rb +0 -47
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "shopify_cli"
|
|
2
2
|
|
|
3
3
|
module ShopifyCli
|
|
4
4
|
module Commands
|
|
5
5
|
class Version < ShopifyCli::Command
|
|
6
6
|
def self.help
|
|
7
|
-
ShopifyCli::Context.message(
|
|
7
|
+
ShopifyCli::Context.message("core.version.help", ShopifyCli::TOOL_NAME)
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def call(_args, _name)
|
data/lib/shopify-cli/context.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
2
|
+
require "shopify_cli"
|
|
3
|
+
require "fileutils"
|
|
4
|
+
require "rbconfig"
|
|
5
|
+
require "net/http"
|
|
6
|
+
require "json"
|
|
7
7
|
|
|
8
8
|
module ShopifyCli
|
|
9
9
|
##
|
|
@@ -13,9 +13,9 @@ module ShopifyCli
|
|
|
13
13
|
# resoures.
|
|
14
14
|
#
|
|
15
15
|
class Context
|
|
16
|
-
GEM_LATEST_URI = URI.parse(
|
|
17
|
-
VERSION_CHECK_SECTION =
|
|
18
|
-
LAST_CHECKED_AT_FIELD =
|
|
16
|
+
GEM_LATEST_URI = URI.parse("https://rubygems.org/api/v1/versions/shopify-cli/latest.json")
|
|
17
|
+
VERSION_CHECK_SECTION = "versioncheck"
|
|
18
|
+
LAST_CHECKED_AT_FIELD = "last_checked_at"
|
|
19
19
|
VERSION_CHECK_INTERVAL = 86400
|
|
20
20
|
|
|
21
21
|
class << self
|
|
@@ -40,7 +40,7 @@ module ShopifyCli
|
|
|
40
40
|
# * `key` - a symbol representing the message
|
|
41
41
|
# * `params` - the parameters to format the string with
|
|
42
42
|
def message(key, *params)
|
|
43
|
-
key_parts = key.split(
|
|
43
|
+
key_parts = key.split(".").map(&:to_sym)
|
|
44
44
|
str = Context.messages.dig(*key_parts)
|
|
45
45
|
str ? str % params : key
|
|
46
46
|
end
|
|
@@ -86,7 +86,7 @@ module ShopifyCli
|
|
|
86
86
|
# See `#development?` for checking for development environment.
|
|
87
87
|
#
|
|
88
88
|
def system?
|
|
89
|
-
!Dir.exist?(File.join(ShopifyCli::ROOT,
|
|
89
|
+
!Dir.exist?(File.join(ShopifyCli::ROOT, "test"))
|
|
90
90
|
end
|
|
91
91
|
|
|
92
92
|
# will return true if the cli is running on your development instance.
|
|
@@ -97,13 +97,13 @@ module ShopifyCli
|
|
|
97
97
|
|
|
98
98
|
# will return true while tests are running, either locally or on CI
|
|
99
99
|
def testing?
|
|
100
|
-
ci? || ENV[
|
|
100
|
+
ci? || ENV["TEST"]
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
##
|
|
104
104
|
# will return true if the cli is being tested on CI
|
|
105
105
|
def ci?
|
|
106
|
-
ENV[
|
|
106
|
+
ENV["CI"]
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
# get a environment variable value by name.
|
|
@@ -116,7 +116,7 @@ module ShopifyCli
|
|
|
116
116
|
#
|
|
117
117
|
def getenv(name)
|
|
118
118
|
v = @env[name]
|
|
119
|
-
v ==
|
|
119
|
+
v == "" ? nil : v
|
|
120
120
|
end
|
|
121
121
|
|
|
122
122
|
# set a environment variable value by name.
|
|
@@ -254,7 +254,7 @@ module ShopifyCli
|
|
|
254
254
|
# * `uri` - a http URI to open in a browser
|
|
255
255
|
#
|
|
256
256
|
def open_url!(uri)
|
|
257
|
-
help = message(
|
|
257
|
+
help = message("core.context.open_url", uri)
|
|
258
258
|
puts(help)
|
|
259
259
|
end
|
|
260
260
|
|
|
@@ -303,7 +303,7 @@ module ShopifyCli
|
|
|
303
303
|
# * `text` - a string message to output
|
|
304
304
|
#
|
|
305
305
|
def debug(text)
|
|
306
|
-
puts("{{red:DEBUG}} #{text}") if getenv(
|
|
306
|
+
puts("{{red:DEBUG}} #{text}") if getenv("DEBUG")
|
|
307
307
|
end
|
|
308
308
|
|
|
309
309
|
# proxy call to Context.message.
|
|
@@ -338,7 +338,7 @@ module ShopifyCli
|
|
|
338
338
|
def system(*args, **kwargs)
|
|
339
339
|
process_status = CLI::Kit::System.system(*args, env: @env, **kwargs)
|
|
340
340
|
unless process_status.success?
|
|
341
|
-
abort("System call failed: #{args.join(
|
|
341
|
+
abort("System call failed: #{args.join(" ")}")
|
|
342
342
|
end
|
|
343
343
|
process_status
|
|
344
344
|
end
|
|
@@ -414,13 +414,13 @@ module ShopifyCli
|
|
|
414
414
|
#
|
|
415
415
|
def on_siginfo
|
|
416
416
|
# Reset any previous SIGINFO handling we had so the only action we take is the given block
|
|
417
|
-
trap(
|
|
417
|
+
trap("INFO", "DEFAULT")
|
|
418
418
|
|
|
419
419
|
fork do
|
|
420
420
|
begin
|
|
421
421
|
r, w = IO.pipe
|
|
422
422
|
@signal = false
|
|
423
|
-
trap(
|
|
423
|
+
trap("SIGINFO") do
|
|
424
424
|
@signal = true
|
|
425
425
|
w.write(0)
|
|
426
426
|
end
|
|
@@ -446,8 +446,8 @@ module ShopifyCli
|
|
|
446
446
|
# @todo This is currently a duplicate of CLI::Kit::System.which() - we should make that method public when we make
|
|
447
447
|
# Kit changes and make this a wrapper instead.
|
|
448
448
|
def which(cmd)
|
|
449
|
-
exts = ENV[
|
|
450
|
-
ENV[
|
|
449
|
+
exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""]
|
|
450
|
+
ENV["PATH"].split(File::PATH_SEPARATOR).each do |path|
|
|
451
451
|
exts.each do |ext|
|
|
452
452
|
exe = File.join(File.expand_path(path), "#{cmd}#{ext}")
|
|
453
453
|
return exe if File.executable?(exe) && !File.directory?(exe)
|
|
@@ -483,18 +483,18 @@ module ShopifyCli
|
|
|
483
483
|
# #### Returns
|
|
484
484
|
# - ext: string for file extension on windows
|
|
485
485
|
# : empty string otherwise
|
|
486
|
-
def executable_file_extension(ext =
|
|
486
|
+
def executable_file_extension(ext = ".exe")
|
|
487
487
|
if windows?
|
|
488
488
|
ext
|
|
489
489
|
else
|
|
490
|
-
|
|
490
|
+
""
|
|
491
491
|
end
|
|
492
492
|
end
|
|
493
493
|
|
|
494
494
|
private
|
|
495
495
|
|
|
496
496
|
def ctx_path(fname)
|
|
497
|
-
require
|
|
497
|
+
require "pathname"
|
|
498
498
|
if Pathname.new(fname).absolute?
|
|
499
499
|
fname
|
|
500
500
|
else
|
data/lib/shopify-cli/core.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
module ShopifyCli
|
|
2
2
|
module Core
|
|
3
|
-
autoload :EntryPoint,
|
|
4
|
-
autoload :Executor,
|
|
5
|
-
autoload :HelpResolver,
|
|
6
|
-
autoload :Monorail,
|
|
3
|
+
autoload :EntryPoint, "shopify-cli/core/entry_point"
|
|
4
|
+
autoload :Executor, "shopify-cli/core/executor"
|
|
5
|
+
autoload :HelpResolver, "shopify-cli/core/help_resolver"
|
|
6
|
+
autoload :Monorail, "shopify-cli/core/monorail"
|
|
7
7
|
end
|
|
8
8
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "shopify_cli"
|
|
2
2
|
|
|
3
3
|
module ShopifyCli
|
|
4
4
|
module Core
|
|
@@ -14,23 +14,23 @@ module ShopifyCli
|
|
|
14
14
|
rescue ArgumentError => e
|
|
15
15
|
# This can happen on RVM, because it can use fd 9 itself and block access to it. That only happens if the fd
|
|
16
16
|
# did not exist beforehand, so that means there was no fd 9 before Ruby started.
|
|
17
|
-
unless e.message ==
|
|
17
|
+
unless e.message == "The given fd is not accessible because RubyVM reserves it"
|
|
18
18
|
raise e
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
if !ctx.testing? && is_shell_shim
|
|
23
|
-
ctx.puts(ctx.message(
|
|
23
|
+
ctx.puts(ctx.message("core.warning.shell_shim"))
|
|
24
24
|
return
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
if ctx.development?
|
|
28
28
|
ctx.puts(
|
|
29
|
-
ctx.message(
|
|
29
|
+
ctx.message("core.warning.development_version", File.join(ShopifyCli::ROOT, "bin", ShopifyCli::TOOL_NAME))
|
|
30
30
|
)
|
|
31
31
|
elsif !ctx.testing?
|
|
32
32
|
new_version = ctx.new_version
|
|
33
|
-
ctx.puts(ctx.message(
|
|
33
|
+
ctx.puts(ctx.message("core.warning.new_version", ShopifyCli::VERSION, new_version)) unless new_version.nil?
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
ProjectType.load_type(Project.current_project_type)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "cli/kit"
|
|
2
2
|
|
|
3
3
|
module ShopifyCli
|
|
4
4
|
module Core
|
|
@@ -6,7 +6,7 @@ module ShopifyCli
|
|
|
6
6
|
def call(args)
|
|
7
7
|
args = args.dup
|
|
8
8
|
return super(args) unless args.first
|
|
9
|
-
if args.first.include?(
|
|
9
|
+
if args.first.include?("-h") || args.first.include?("--help")
|
|
10
10
|
help = Commands::Help
|
|
11
11
|
help.ctx = Context.new
|
|
12
12
|
help.call([], nil)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
require
|
|
1
|
+
require "json"
|
|
2
|
+
require "net/http"
|
|
3
|
+
require "time"
|
|
4
|
+
require "rbconfig"
|
|
5
5
|
|
|
6
6
|
module ShopifyCli
|
|
7
7
|
module Core
|
|
8
8
|
module Monorail
|
|
9
|
-
ENDPOINT_URI = URI.parse(
|
|
10
|
-
INVOCATIONS_SCHEMA =
|
|
9
|
+
ENDPOINT_URI = URI.parse("https://monorail-edge.shopifycloud.com/v1/produce")
|
|
10
|
+
INVOCATIONS_SCHEMA = "app_cli_command/5.0"
|
|
11
11
|
|
|
12
12
|
# Extra hash of data that will be sent in the payload
|
|
13
13
|
@metadata = {}
|
|
@@ -46,25 +46,25 @@ module ShopifyCli
|
|
|
46
46
|
|
|
47
47
|
# we only want to send Monorail events in production or when explicitly developing
|
|
48
48
|
def enabled?
|
|
49
|
-
Context.new.system? || ENV[
|
|
49
|
+
Context.new.system? || ENV["MONORAIL_REAL_EVENTS"] == "1"
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
def consented?
|
|
53
|
-
ShopifyCli::Config.get_bool(
|
|
53
|
+
ShopifyCli::Config.get_bool("analytics", "enabled")
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
def prompt_for_consent
|
|
57
57
|
return unless enabled?
|
|
58
|
-
return if ShopifyCli::Config.get_section(
|
|
59
|
-
msg = Context.message(
|
|
58
|
+
return if ShopifyCli::Config.get_section("analytics").key?("enabled")
|
|
59
|
+
msg = Context.message("core.monorail.consent_prompt")
|
|
60
60
|
opt = CLI::UI::Prompt.confirm(msg)
|
|
61
|
-
ShopifyCli::Config.set(
|
|
61
|
+
ShopifyCli::Config.set("analytics", "enabled", opt)
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
def send_event(start_time, commands, args, err = nil)
|
|
65
65
|
end_time = now_in_milliseconds
|
|
66
66
|
headers = {
|
|
67
|
-
'Content-Type':
|
|
67
|
+
'Content-Type': "application/json; charset=utf-8",
|
|
68
68
|
'X-Monorail-Edge-Event-Created-At-Ms': start_time.to_s,
|
|
69
69
|
'X-Monorail-Edge-Event-Sent-At-Ms': end_time.to_s,
|
|
70
70
|
}
|
|
@@ -74,7 +74,7 @@ module ShopifyCli
|
|
|
74
74
|
ENDPOINT_URI.port,
|
|
75
75
|
# timeouts for opening a connection, reading, writing (in seconds)
|
|
76
76
|
open_timeout: 0.2, read_timeout: 0.2, write_timeout: 0.2,
|
|
77
|
-
use_ssl: ENDPOINT_URI.scheme ==
|
|
77
|
+
use_ssl: ENDPOINT_URI.scheme == "https"
|
|
78
78
|
) do |http|
|
|
79
79
|
payload = build_payload(start_time, end_time, commands, args, err)
|
|
80
80
|
post = Net::HTTP::Post.new(ENDPOINT_URI.request_uri, headers)
|
|
@@ -91,8 +91,8 @@ module ShopifyCli
|
|
|
91
91
|
schema_id: INVOCATIONS_SCHEMA,
|
|
92
92
|
payload: {
|
|
93
93
|
project_type: Project.current_project_type.to_s,
|
|
94
|
-
command: commands.join(
|
|
95
|
-
args: args.join(
|
|
94
|
+
command: commands.join(" "),
|
|
95
|
+
args: args.join(" "),
|
|
96
96
|
time_start: start_time,
|
|
97
97
|
time_end: end_time,
|
|
98
98
|
total_time: end_time - start_time,
|
|
@@ -108,7 +108,7 @@ module ShopifyCli
|
|
|
108
108
|
if Project.has_current?
|
|
109
109
|
project = Project.current(force_reload: true)
|
|
110
110
|
payload[:api_key] = project.env&.api_key
|
|
111
|
-
payload[:partner_id] = project.config[
|
|
111
|
+
payload[:partner_id] = project.config["organization_id"]
|
|
112
112
|
end
|
|
113
113
|
payload[:metadata] = JSON.dump(metadata) unless metadata.empty?
|
|
114
114
|
end,
|
data/lib/shopify-cli/db.rb
CHANGED
data/lib/shopify-cli/feature.rb
CHANGED
|
@@ -6,7 +6,7 @@ module ShopifyCli
|
|
|
6
6
|
# Feature flags will persist between runs so if the flag is enabled or disabled,
|
|
7
7
|
# it will still be in that same state on the next cli invocation.
|
|
8
8
|
class Feature
|
|
9
|
-
SECTION =
|
|
9
|
+
SECTION = "features"
|
|
10
10
|
|
|
11
11
|
##
|
|
12
12
|
# ShopifyCli::Feature::Set is included on commands and projects to allow you to hide
|
data/lib/shopify-cli/form.rb
CHANGED
data/lib/shopify-cli/git.rb
CHANGED
|
@@ -21,7 +21,7 @@ module ShopifyCli
|
|
|
21
21
|
# ShopifyCli::Git.sha
|
|
22
22
|
#
|
|
23
23
|
def sha(dir: Dir.pwd, ctx: Context.new)
|
|
24
|
-
rev_parse(
|
|
24
|
+
rev_parse("HEAD", dir: dir, ctx: ctx)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
##
|
|
@@ -44,11 +44,11 @@ module ShopifyCli
|
|
|
44
44
|
#
|
|
45
45
|
def clone(repository, dest, ctx: Context.new)
|
|
46
46
|
if Dir.exist?(dest)
|
|
47
|
-
ctx.abort(ctx.message(
|
|
47
|
+
ctx.abort(ctx.message("core.git.error.directory_exists"))
|
|
48
48
|
else
|
|
49
|
-
success_message = ctx.message(
|
|
50
|
-
CLI::UI::Frame.open(ctx.message(
|
|
51
|
-
clone_progress(
|
|
49
|
+
success_message = ctx.message("core.git.cloned", dest)
|
|
50
|
+
CLI::UI::Frame.open(ctx.message("core.git.cloning", repository, dest), success_text: success_message) do
|
|
51
|
+
clone_progress("clone", "--single-branch", repository, dest, ctx: ctx)
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
end
|
|
@@ -69,11 +69,11 @@ module ShopifyCli
|
|
|
69
69
|
# branches = ShopifyCli::Git.branches(@ctx)
|
|
70
70
|
#
|
|
71
71
|
def branches(ctx)
|
|
72
|
-
output, status = ctx.capture2e(
|
|
73
|
-
ctx.abort(ctx.message(
|
|
72
|
+
output, status = ctx.capture2e("git", "branch", "--list", "--format=%(refname:short)")
|
|
73
|
+
ctx.abort(ctx.message("core.git.error.no_branches_found")) unless status.success?
|
|
74
74
|
|
|
75
|
-
branches = if output ==
|
|
76
|
-
[
|
|
75
|
+
branches = if output == ""
|
|
76
|
+
["master"]
|
|
77
77
|
else
|
|
78
78
|
output.split("\n")
|
|
79
79
|
end
|
|
@@ -94,14 +94,14 @@ module ShopifyCli
|
|
|
94
94
|
# ShopifyCli::Git.init(@ctx)
|
|
95
95
|
#
|
|
96
96
|
def init(ctx)
|
|
97
|
-
output, status = ctx.capture2e(
|
|
97
|
+
output, status = ctx.capture2e("git", "status")
|
|
98
98
|
|
|
99
99
|
unless status.success?
|
|
100
|
-
ctx.abort(ctx.message(
|
|
100
|
+
ctx.abort(ctx.message("core.git.error.repo_not_initiated"))
|
|
101
101
|
end
|
|
102
102
|
|
|
103
|
-
if output.include?(
|
|
104
|
-
ctx.abort(ctx.message(
|
|
103
|
+
if output.include?("No commits yet")
|
|
104
|
+
ctx.abort(ctx.message("core.git.error.no_commits_made"))
|
|
105
105
|
end
|
|
106
106
|
end
|
|
107
107
|
|
|
@@ -115,18 +115,18 @@ module ShopifyCli
|
|
|
115
115
|
end
|
|
116
116
|
|
|
117
117
|
def rev_parse(*args, dir: nil, ctx: Context.new)
|
|
118
|
-
exec(
|
|
118
|
+
exec("rev-parse", *args, dir: dir, ctx: ctx)
|
|
119
119
|
end
|
|
120
120
|
|
|
121
121
|
def clone_progress(*git_command, ctx:)
|
|
122
122
|
CLI::UI::Progress.progress do |bar|
|
|
123
123
|
msg = []
|
|
124
|
-
require
|
|
124
|
+
require "open3"
|
|
125
125
|
|
|
126
|
-
success = Open3.popen3(
|
|
126
|
+
success = Open3.popen3("git", *git_command, "--progress") do |_stdin, _stdout, stderr, thread|
|
|
127
127
|
while (line = stderr.gets)
|
|
128
128
|
msg << line.chomp
|
|
129
|
-
next unless line.strip.start_with?(
|
|
129
|
+
next unless line.strip.start_with?("Receiving objects:")
|
|
130
130
|
percent = (line.match(/Receiving objects:\s+(\d+)/)[1].to_f / 100).round(2)
|
|
131
131
|
bar.tick(set_percent: percent)
|
|
132
132
|
next
|
data/lib/shopify-cli/helpers.rb
CHANGED
data/lib/shopify-cli/heroku.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
module ShopifyCli
|
|
2
2
|
class Heroku
|
|
3
3
|
DOWNLOAD_URLS = {
|
|
4
|
-
linux:
|
|
5
|
-
mac:
|
|
6
|
-
windows:
|
|
4
|
+
linux: "https://cli-assets.heroku.com/heroku-linux-x64.tar.gz",
|
|
5
|
+
mac: "https://cli-assets.heroku.com/heroku-darwin-x64.tar.gz",
|
|
6
|
+
windows: "https://cli-assets.heroku.com/heroku-x64.exe",
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
def initialize(ctx)
|
|
@@ -12,33 +12,33 @@ module ShopifyCli
|
|
|
12
12
|
|
|
13
13
|
def app
|
|
14
14
|
return nil unless (app = git_remote)
|
|
15
|
-
app = app.split(
|
|
16
|
-
app = app.split(
|
|
15
|
+
app = app.split("/").last
|
|
16
|
+
app = app.split(".").first
|
|
17
17
|
app
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def authenticate
|
|
21
|
-
result = @ctx.system(heroku_command,
|
|
22
|
-
@ctx.abort(@ctx.message(
|
|
21
|
+
result = @ctx.system(heroku_command, "login")
|
|
22
|
+
@ctx.abort(@ctx.message("core.heroku.error.authentication")) unless result.success?
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def create_new_app
|
|
26
|
-
output, status = @ctx.capture2e(heroku_command,
|
|
27
|
-
@ctx.abort(@ctx.message(
|
|
26
|
+
output, status = @ctx.capture2e(heroku_command, "create")
|
|
27
|
+
@ctx.abort(@ctx.message("core.heroku.error.creation")) unless status.success?
|
|
28
28
|
@ctx.puts(output)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def deploy(branch_to_deploy)
|
|
32
|
-
result = @ctx.system(
|
|
33
|
-
@ctx.abort(@ctx.message(
|
|
32
|
+
result = @ctx.system("git", "push", "-u", "heroku", "#{branch_to_deploy}:master")
|
|
33
|
+
@ctx.abort(@ctx.message("core.heroku.error.deploy")) unless result.success?
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
def download
|
|
37
37
|
return if installed?
|
|
38
38
|
|
|
39
|
-
result = @ctx.system(
|
|
40
|
-
@ctx.abort(@ctx.message(
|
|
41
|
-
@ctx.abort(@ctx.message(
|
|
39
|
+
result = @ctx.system("curl", "-o", download_path, DOWNLOAD_URLS[@ctx.os], chdir: ShopifyCli.cache_dir)
|
|
40
|
+
@ctx.abort(@ctx.message("core.heroku.error.download")) unless result.success?
|
|
41
|
+
@ctx.abort(@ctx.message("core.heroku.error.download")) unless File.exist?(download_path)
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
def install
|
|
@@ -47,22 +47,22 @@ module ShopifyCli
|
|
|
47
47
|
result = if @ctx.windows?
|
|
48
48
|
@ctx.system("\"#{download_path}\"")
|
|
49
49
|
else
|
|
50
|
-
@ctx.system(
|
|
50
|
+
@ctx.system("tar", "-xf", download_path, chdir: ShopifyCli.cache_dir)
|
|
51
51
|
end
|
|
52
|
-
@ctx.abort(@ctx.message(
|
|
52
|
+
@ctx.abort(@ctx.message("core.heroku.error.install")) unless result.success?
|
|
53
53
|
|
|
54
54
|
@ctx.rm(download_path)
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
def select_existing_app(app_name)
|
|
58
|
-
result = @ctx.system(heroku_command,
|
|
58
|
+
result = @ctx.system(heroku_command, "git:remote", "-a", app_name)
|
|
59
59
|
|
|
60
|
-
msg = @ctx.message(
|
|
60
|
+
msg = @ctx.message("core.heroku.error.could_not_select_app", app_name)
|
|
61
61
|
@ctx.abort(msg) unless result.success?
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
def whoami
|
|
65
|
-
output, status = @ctx.capture2e(heroku_command,
|
|
65
|
+
output, status = @ctx.capture2e(heroku_command, "whoami")
|
|
66
66
|
return output.strip if status.success?
|
|
67
67
|
nil
|
|
68
68
|
end
|
|
@@ -70,7 +70,7 @@ module ShopifyCli
|
|
|
70
70
|
private
|
|
71
71
|
|
|
72
72
|
def download_filename
|
|
73
|
-
URI.parse(DOWNLOAD_URLS[@ctx.os]).path.split(
|
|
73
|
+
URI.parse(DOWNLOAD_URLS[@ctx.os]).path.split("/").last
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
def download_path
|
|
@@ -78,33 +78,33 @@ module ShopifyCli
|
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
def git_remote
|
|
81
|
-
output, status = @ctx.capture2e(
|
|
81
|
+
output, status = @ctx.capture2e("git", "remote", "get-url", "heroku")
|
|
82
82
|
status.success? ? output : nil
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
def heroku_command
|
|
86
|
-
local_path = File.join(ShopifyCli.cache_dir,
|
|
86
|
+
local_path = File.join(ShopifyCli.cache_dir, "heroku", "bin", "heroku").to_s
|
|
87
87
|
if File.exist?(local_path)
|
|
88
88
|
local_path
|
|
89
89
|
elsif @ctx.windows?
|
|
90
90
|
# Check if Heroku exists in the Windows registry and run it from there
|
|
91
|
-
require
|
|
91
|
+
require "win32/registry"
|
|
92
92
|
begin
|
|
93
93
|
windows_path = Win32::Registry::HKEY_CURRENT_USER.open('SOFTWARE\heroku') do |reg|
|
|
94
|
-
reg[
|
|
94
|
+
reg[""] # This reads the 'Default' registry key
|
|
95
95
|
end
|
|
96
96
|
|
|
97
|
-
File.join(windows_path,
|
|
97
|
+
File.join(windows_path, "bin", "heroku").to_s
|
|
98
98
|
rescue
|
|
99
|
-
|
|
99
|
+
"heroku"
|
|
100
100
|
end
|
|
101
101
|
else
|
|
102
|
-
|
|
102
|
+
"heroku"
|
|
103
103
|
end
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
def installed?
|
|
107
|
-
_output, status = @ctx.capture2e(heroku_command,
|
|
107
|
+
_output, status = @ctx.capture2e(heroku_command, "--version")
|
|
108
108
|
status.success?
|
|
109
109
|
rescue
|
|
110
110
|
false
|