shopify-cli 1.6.0 → 1.9.1
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/.rubocop_todo.yml +15 -2
- data/CHANGELOG.md +21 -0
- data/Gemfile +12 -12
- data/Gemfile.lock +14 -14
- data/Rakefile +32 -30
- data/bin/load_shopify.rb +6 -6
- data/bin/shopify +2 -2
- data/dev.yml +3 -0
- data/ext/shopify-cli/extconf.rb +7 -7
- data/lib/docgen/markdown.rb +12 -12
- data/lib/graphql/extension_create.graphql +17 -2
- data/lib/graphql/fetch_specifications.graphql +14 -0
- data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
- data/lib/project_types/extension/cli.rb +56 -55
- data/lib/project_types/extension/commands/build.rb +3 -3
- data/lib/project_types/extension/commands/create.rb +17 -10
- data/lib/project_types/extension/commands/extension_command.rb +14 -7
- data/lib/project_types/extension/commands/push.rb +10 -10
- data/lib/project_types/extension/commands/register.rb +22 -32
- data/lib/project_types/extension/commands/serve.rb +1 -7
- data/lib/project_types/extension/commands/tunnel.rb +12 -12
- data/lib/project_types/extension/extension_project.rb +22 -7
- data/lib/project_types/extension/extension_project_keys.rb +5 -4
- data/lib/project_types/extension/features/argo.rb +26 -42
- 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_renderer_package.rb +47 -0
- data/lib/project_types/extension/features/argo_serve.rb +69 -0
- data/lib/project_types/extension/features/argo_setup.rb +3 -3
- 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 +47 -0
- data/lib/project_types/extension/messages/message_loading.rb +3 -1
- data/lib/project_types/extension/messages/messages.rb +55 -55
- data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
- data/lib/project_types/extension/models/registration.rb +1 -0
- data/lib/project_types/extension/models/specification.rb +6 -2
- data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +1 -1
- data/lib/project_types/extension/models/specification_handlers/default.rb +10 -2
- data/lib/project_types/extension/models/specifications.rb +14 -3
- data/lib/project_types/extension/models/version.rb +1 -1
- data/lib/project_types/extension/tasks/configure_features.rb +7 -5
- data/lib/project_types/extension/tasks/converters/app_converter.rb +6 -6
- data/lib/project_types/extension/tasks/converters/registration_converter.rb +8 -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 +8 -28
- 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 +2 -24
- 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 +17 -8
- data/lib/project_types/node/messages/messages.rb +8 -7
- 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 +34 -24
- data/lib/project_types/rails/gem.rb +23 -23
- data/lib/project_types/rails/messages/messages.rb +9 -8
- data/lib/project_types/rails/ruby.rb +2 -2
- data/lib/project_types/script/cli.rb +36 -40
- data/lib/project_types/script/commands/create.rb +9 -13
- data/lib/project_types/script/commands/push.rb +6 -5
- data/lib/project_types/script/config/extension_points.yml +25 -10
- data/lib/project_types/script/errors.rb +1 -19
- data/lib/project_types/script/forms/create.rb +7 -18
- data/lib/project_types/script/graphql/app_script_update_or_create.graphql +7 -5
- data/lib/project_types/script/graphql/script_service_proxy.graphql +1 -2
- data/lib/project_types/script/layers/application/build_script.rb +6 -8
- data/lib/project_types/script/layers/application/create_script.rb +34 -24
- data/lib/project_types/script/layers/application/extension_points.rb +3 -2
- data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
- data/lib/project_types/script/layers/application/push_script.rb +10 -15
- data/lib/project_types/script/layers/domain/config_ui.rb +16 -0
- data/lib/project_types/script/layers/domain/errors.rb +16 -0
- data/lib/project_types/script/layers/domain/extension_point.rb +60 -45
- data/lib/project_types/script/layers/domain/metadata.rb +18 -25
- data/lib/project_types/script/layers/domain/push_package.rb +9 -5
- data/lib/project_types/script/layers/domain/script_project.rb +38 -0
- data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +39 -10
- data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +9 -44
- data/lib/project_types/script/layers/infrastructure/errors.rb +50 -19
- data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +2 -2
- data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +16 -21
- data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +4 -4
- data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +2 -2
- data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +179 -0
- data/lib/project_types/script/layers/infrastructure/script_service.rb +35 -78
- data/lib/project_types/script/messages/messages.rb +33 -57
- data/lib/project_types/script/ui/error_handler.rb +116 -88
- 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 +51 -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 +7 -7
- data/lib/shopify-cli/lazy_delegator.rb +55 -0
- data/lib/shopify-cli/messages/messages.rb +7 -16
- data/lib/shopify-cli/method_object.rb +1 -1
- data/lib/shopify-cli/oauth.rb +27 -27
- data/lib/shopify-cli/oauth/servlet.rb +9 -9
- data/lib/shopify-cli/options.rb +3 -3
- data/lib/shopify-cli/packager.rb +25 -25
- 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/resolve_constant.rb +1 -1
- data/lib/shopify-cli/resources.rb +1 -1
- data/lib/shopify-cli/resources/env_file.rb +10 -10
- data/lib/shopify-cli/result.rb +11 -11
- 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 +12 -12
- 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/deps/smart_properties/REVISION +1 -1
- data/vendor/deps/smart_properties/lib/smart_properties/property.rb +7 -1
- data/vendor/deps/smart_properties/lib/smart_properties/version.rb +1 -1
- data/vendor/gen/template/bin/update-deps +9 -9
- metadata +15 -11
- data/lib/project_types/extension/forms/register.rb +0 -47
- data/lib/project_types/script/commands/disable.rb +0 -25
- data/lib/project_types/script/commands/enable.rb +0 -78
- data/lib/project_types/script/graphql/shop_script_delete.graphql +0 -14
- data/lib/project_types/script/graphql/shop_script_update_or_create.graphql +0 -28
- data/lib/project_types/script/layers/application/disable_script.rb +0 -21
- data/lib/project_types/script/layers/application/enable_script.rb +0 -23
- data/lib/project_types/script/script_project.rb +0 -63
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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "net/http"
|
|
2
2
|
|
|
3
3
|
module ShopifyCli
|
|
4
4
|
class HttpRequest
|
|
@@ -18,7 +18,7 @@ module ShopifyCli
|
|
|
18
18
|
http.use_ssl = true
|
|
19
19
|
|
|
20
20
|
req.body = body unless body.nil?
|
|
21
|
-
req[
|
|
21
|
+
req["Content-Type"] = "application/json"
|
|
22
22
|
headers.each { |header, value| req[header] = value }
|
|
23
23
|
http.request(req)
|
|
24
24
|
end
|
data/lib/shopify-cli/js_deps.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "shopify_cli"
|
|
2
2
|
|
|
3
3
|
module ShopifyCli
|
|
4
4
|
##
|
|
@@ -37,9 +37,9 @@ module ShopifyCli
|
|
|
37
37
|
# ShopifyCli::JsDeps.new(context).install(true)
|
|
38
38
|
#
|
|
39
39
|
def install(verbose = false)
|
|
40
|
-
title = ctx.message(
|
|
41
|
-
success = ctx.message(
|
|
42
|
-
failure = ctx.message(
|
|
40
|
+
title = ctx.message("core.js_deps.installing", @system.package_manager)
|
|
41
|
+
success = ctx.message("core.js_deps.installed")
|
|
42
|
+
failure = ctx.message("core.js_deps.error.install_error", @system.package_manager)
|
|
43
43
|
|
|
44
44
|
CLI::UI::Frame.open(title, success_text: success, failure_text: failure) do
|
|
45
45
|
@system.call(
|
|
@@ -53,14 +53,14 @@ module ShopifyCli
|
|
|
53
53
|
|
|
54
54
|
def yarn(verbose = false)
|
|
55
55
|
cmd = %w(yarn install)
|
|
56
|
-
cmd <<
|
|
56
|
+
cmd << "--silent" unless verbose
|
|
57
57
|
|
|
58
58
|
run_install_command(cmd)
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
def npm(verbose = false)
|
|
62
62
|
cmd = %w(npm install --no-audit)
|
|
63
|
-
cmd <<
|
|
63
|
+
cmd << "--quiet" unless verbose
|
|
64
64
|
|
|
65
65
|
run_install_command(cmd)
|
|
66
66
|
end
|
|
@@ -69,7 +69,7 @@ module ShopifyCli
|
|
|
69
69
|
deps = parse_dependencies
|
|
70
70
|
errors = nil
|
|
71
71
|
|
|
72
|
-
spinner_title = ctx.message(
|
|
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,19 +81,19 @@ 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(
|
|
84
|
+
spinner.update_title(ctx.message("core.js_deps.installed", deps.size))
|
|
85
85
|
else
|
|
86
|
-
spinner.update_title(ctx.message(
|
|
86
|
+
spinner.update_title(ctx.message("core.js_deps.error.install_spinner_error", deps.size))
|
|
87
87
|
CLI::UI::Spinner::TASK_FAILED
|
|
88
88
|
end
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
def parse_dependencies
|
|
92
|
-
package_json = File.join(ctx.root,
|
|
92
|
+
package_json = File.join(ctx.root, "package.json")
|
|
93
93
|
pkg = begin
|
|
94
94
|
JSON.parse(File.read(package_json))
|
|
95
95
|
rescue Errno::ENOENT, Errno::ENOTDIR
|
|
96
|
-
ctx.abort(ctx.message(
|
|
96
|
+
ctx.abort(ctx.message("core.js_deps.error.missing_package", package_json))
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
%w(dependencies devDependencies).map do |key|
|
|
@@ -101,7 +101,7 @@ module ShopifyCli
|
|
|
101
101
|
end.flatten
|
|
102
102
|
rescue JSON::ParserError
|
|
103
103
|
ctx.puts(
|
|
104
|
-
ctx.message(
|
|
104
|
+
ctx.message("core.js_deps.error.invalid_package", File.read(File.join(path, "package.json"))),
|
|
105
105
|
error: true
|
|
106
106
|
)
|
|
107
107
|
raise ShopifyCli::AbortSilent
|