shopify-cli 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/shopify.yml +0 -2
- data/.rubocop.yml +14 -14
- data/.rubocop_todo.yml +3 -3
- data/CHANGELOG.md +5 -0
- data/Dockerfile +1 -1
- data/Gemfile.lock +1 -1
- data/RELEASING.md +1 -1
- data/Rakefile +18 -18
- data/bin/shopify +3 -3
- data/lib/project_types/extension/cli.rb +3 -3
- data/lib/project_types/extension/commands/build.rb +2 -2
- data/lib/project_types/extension/commands/check.rb +2 -2
- data/lib/project_types/extension/commands/connect.rb +1 -1
- data/lib/project_types/extension/commands/create.rb +41 -23
- data/lib/project_types/extension/commands/extension_command.rb +1 -1
- data/lib/project_types/extension/commands/info.rb +1 -1
- data/lib/project_types/extension/commands/push.rb +1 -1
- data/lib/project_types/extension/commands/register.rb +2 -2
- data/lib/project_types/extension/commands/serve.rb +5 -5
- data/lib/project_types/extension/commands/tunnel.rb +6 -6
- data/lib/project_types/extension/extension_project.rb +4 -4
- data/lib/project_types/extension/features/argo.rb +2 -2
- data/lib/project_types/extension/features/argo_config.rb +5 -5
- data/lib/project_types/extension/features/argo_serve.rb +20 -6
- data/lib/project_types/extension/features/argo_setup.rb +1 -1
- data/lib/project_types/extension/features/argo_setup_step.rb +1 -1
- data/lib/project_types/extension/features/argo_setup_steps.rb +2 -2
- data/lib/project_types/extension/forms/connect.rb +2 -2
- data/lib/project_types/extension/forms/create.rb +2 -2
- data/lib/project_types/extension/forms/questions/ask_app.rb +2 -2
- data/lib/project_types/extension/forms/questions/ask_name.rb +1 -1
- data/lib/project_types/extension/forms/questions/ask_registration.rb +2 -2
- data/lib/project_types/extension/forms/questions/ask_template.rb +2 -2
- data/lib/project_types/extension/forms/questions/ask_type.rb +2 -2
- data/lib/project_types/extension/messages/message_loading.rb +2 -2
- data/lib/project_types/extension/models/development_server.rb +45 -6
- data/lib/project_types/extension/models/development_server_requirements.rb +22 -3
- data/lib/project_types/extension/models/lazy_specification_handler.rb +1 -1
- data/lib/project_types/extension/models/specification.rb +1 -1
- data/lib/project_types/extension/models/specification_handlers/default.rb +10 -2
- data/lib/project_types/extension/models/specification_handlers/theme_app_extension.rb +1 -1
- data/lib/project_types/extension/models/specifications.rb +4 -4
- data/lib/project_types/extension/tasks/choose_next_available_port.rb +1 -1
- data/lib/project_types/extension/tasks/configure_features.rb +1 -1
- data/lib/project_types/extension/tasks/configure_options.rb +1 -1
- data/lib/project_types/extension/tasks/converters/product_converter.rb +1 -1
- data/lib/project_types/extension/tasks/create_extension.rb +2 -2
- data/lib/project_types/extension/tasks/fetch_specifications.rb +2 -2
- data/lib/project_types/extension/tasks/find_npm_packages.rb +3 -3
- data/lib/project_types/extension/tasks/get_app.rb +2 -2
- data/lib/project_types/extension/tasks/get_apps.rb +2 -2
- data/lib/project_types/extension/tasks/get_extensions.rb +2 -2
- data/lib/project_types/extension/tasks/get_product.rb +2 -2
- data/lib/project_types/extension/tasks/run_extension_command.rb +10 -3
- data/lib/project_types/extension/tasks/update_draft.rb +2 -2
- data/lib/project_types/node/cli.rb +3 -3
- data/lib/project_types/node/commands/connect.rb +4 -4
- data/lib/project_types/node/commands/create.rb +10 -10
- data/lib/project_types/node/commands/deploy/heroku.rb +4 -4
- data/lib/project_types/node/commands/deploy.rb +3 -3
- data/lib/project_types/node/commands/generate.rb +2 -2
- data/lib/project_types/node/commands/open.rb +3 -3
- data/lib/project_types/node/commands/serve.rb +7 -7
- data/lib/project_types/node/commands/tunnel.rb +6 -6
- data/lib/project_types/node/forms/create.rb +3 -3
- data/lib/project_types/php/cli.rb +27 -0
- data/lib/project_types/php/commands/connect.rb +19 -0
- data/lib/project_types/php/commands/create.rb +143 -0
- data/lib/project_types/php/commands/deploy/heroku.rb +129 -0
- data/lib/project_types/php/commands/deploy.rb +32 -0
- data/lib/project_types/php/commands/open.rb +16 -0
- data/lib/project_types/php/commands/serve.rb +51 -0
- data/lib/project_types/php/commands/tunnel.rb +37 -0
- data/lib/project_types/php/forms/create.rb +45 -0
- data/lib/project_types/php/messages/messages.rb +191 -0
- data/lib/project_types/rails/cli.rb +3 -3
- data/lib/project_types/rails/commands/connect.rb +4 -4
- data/lib/project_types/rails/commands/create.rb +12 -12
- data/lib/project_types/rails/commands/deploy/heroku.rb +4 -4
- data/lib/project_types/rails/commands/deploy.rb +3 -3
- data/lib/project_types/rails/commands/generate/webhook.rb +3 -3
- data/lib/project_types/rails/commands/generate.rb +3 -3
- data/lib/project_types/rails/commands/open.rb +3 -3
- data/lib/project_types/rails/commands/serve.rb +8 -8
- data/lib/project_types/rails/commands/tunnel.rb +6 -6
- data/lib/project_types/rails/forms/create.rb +3 -3
- data/lib/project_types/rails/gem.rb +1 -1
- data/lib/project_types/rails/ruby.rb +1 -1
- data/lib/project_types/script/cli.rb +11 -4
- data/lib/project_types/script/commands/create.rb +2 -2
- data/lib/project_types/script/commands/push.rb +2 -2
- data/lib/project_types/script/forms/create.rb +1 -1
- data/lib/project_types/script/layers/application/extension_points.rb +2 -2
- data/lib/project_types/script/layers/application/push_script.rb +4 -1
- data/lib/project_types/script/layers/domain/script_project.rb +2 -2
- data/lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb +55 -0
- data/lib/project_types/script/layers/infrastructure/api_clients/script_service_api_client.rb +35 -0
- data/lib/project_types/script/layers/infrastructure/command_runner.rb +1 -1
- data/lib/project_types/script/layers/infrastructure/languages/assemblyscript_project_creator.rb +1 -1
- data/lib/project_types/script/layers/infrastructure/languages/rust_project_creator.rb +1 -1
- data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +1 -1
- data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +5 -5
- data/lib/project_types/script/layers/infrastructure/script_service.rb +4 -8
- data/lib/project_types/script/layers/infrastructure/service_locator.rb +20 -0
- data/lib/project_types/script/tasks/ensure_env.rb +6 -6
- data/lib/project_types/script/ui/error_handler.rb +75 -75
- data/lib/project_types/script/ui/printing_spinner.rb +1 -1
- data/lib/project_types/theme/cli.rb +3 -3
- data/lib/project_types/theme/commands/check.rb +3 -3
- data/lib/project_types/theme/commands/delete.rb +7 -7
- data/lib/project_types/theme/commands/init.rb +3 -3
- data/lib/project_types/theme/commands/language_server.rb +2 -2
- data/lib/project_types/theme/commands/package.rb +2 -2
- data/lib/project_types/theme/commands/publish.rb +5 -5
- data/lib/project_types/theme/commands/pull.rb +9 -9
- data/lib/project_types/theme/commands/push.rb +12 -12
- data/lib/project_types/theme/commands/serve.rb +4 -4
- data/lib/project_types/theme/forms/confirm_store.rb +1 -1
- data/lib/project_types/theme/forms/select.rb +2 -2
- data/lib/{shopify-cli → shopify_cli}/admin_api/populate_resource_command.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/admin_api/schema.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/admin_api.rb +27 -27
- data/lib/{shopify-cli → shopify_cli}/api.rb +8 -8
- data/lib/{shopify-cli → shopify_cli}/command.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/commands/config.rb +14 -14
- data/lib/{shopify-cli → shopify_cli}/commands/help.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/commands/login.rb +7 -7
- data/lib/shopify_cli/commands/logout.rb +39 -0
- data/lib/{shopify-cli → shopify_cli}/commands/populate/customer.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/commands/populate/draft_order.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/commands/populate/product.rb +4 -4
- data/lib/shopify_cli/commands/populate.rb +23 -0
- data/lib/shopify_cli/commands/store.rb +15 -0
- data/lib/{shopify-cli → shopify_cli}/commands/switch.rb +5 -5
- data/lib/{shopify-cli → shopify_cli}/commands/system.rb +10 -10
- data/lib/shopify_cli/commands/version.rb +15 -0
- data/lib/{shopify-cli → shopify_cli}/commands/whoami.rb +7 -7
- data/lib/shopify_cli/commands.rb +34 -0
- data/lib/{shopify-cli → shopify_cli}/connect.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/constants.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/context.rb +6 -6
- data/lib/{shopify-cli → shopify_cli}/core/entry_point.rb +7 -7
- data/lib/{shopify-cli → shopify_cli}/core/executor.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/core/finalize.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/core/help_resolver.rb +2 -2
- data/lib/{shopify-cli → shopify_cli}/core/monorail.rb +8 -8
- data/lib/shopify_cli/core.rb +8 -0
- data/lib/{shopify-cli → shopify_cli}/db.rb +8 -8
- data/lib/{shopify-cli → shopify_cli}/environment.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/feature.rb +8 -8
- data/lib/{shopify-cli → shopify_cli}/form.rb +2 -2
- data/lib/{shopify-cli → shopify_cli}/git.rb +6 -6
- data/lib/{shopify-cli → shopify_cli}/helpers/haikunator.rb +1 -1
- data/lib/shopify_cli/helpers.rb +5 -0
- data/lib/{shopify-cli → shopify_cli}/heroku.rb +38 -13
- data/lib/{shopify-cli → shopify_cli}/http_request.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/identity_auth/servlet.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/identity_auth.rb +8 -8
- data/lib/{shopify-cli → shopify_cli}/js_deps.rb +7 -7
- data/lib/{shopify-cli → shopify_cli}/js_system.rb +10 -10
- data/lib/{shopify-cli → shopify_cli}/lazy_delegator.rb +2 -2
- data/lib/{shopify-cli → shopify_cli}/messages/messages.rb +17 -1
- data/lib/{shopify-cli → shopify_cli}/method_object.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/options.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/packager.rb +8 -8
- data/lib/{shopify-cli → shopify_cli}/partners_api/organizations.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/partners_api.rb +13 -13
- data/lib/shopify_cli/php_deps.rb +102 -0
- data/lib/{shopify-cli → shopify_cli}/process_supervision.rb +10 -8
- data/lib/{shopify-cli → shopify_cli}/project.rb +15 -15
- data/lib/{shopify-cli → shopify_cli}/project_commands.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/project_type.rb +5 -5
- data/lib/{shopify-cli → shopify_cli}/resolve_constant.rb +5 -5
- data/lib/{shopify-cli → shopify_cli}/resources/env_file.rb +1 -1
- data/lib/shopify_cli/resources.rb +5 -0
- data/lib/{shopify-cli → shopify_cli}/result.rb +11 -11
- data/lib/{shopify-cli → shopify_cli}/shopifolk.rb +6 -6
- data/lib/{shopify-cli → shopify_cli}/sub_command.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/task.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/tasks/confirm_store.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/tasks/create_api_client.rb +4 -4
- data/lib/shopify_cli/tasks/ensure_authenticated.rb +13 -0
- data/lib/{shopify-cli → shopify_cli}/tasks/ensure_dev_store.rb +5 -5
- data/lib/{shopify-cli → shopify_cli}/tasks/ensure_env.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/tasks/ensure_loopback_url.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/tasks/ensure_project_type.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/tasks/select_org_and_shop.rb +8 -8
- data/lib/{shopify-cli → shopify_cli}/tasks/update_dashboard_urls.rb +6 -6
- data/lib/{shopify-cli → shopify_cli}/tasks.rb +10 -10
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/certificate_manager.rb +5 -5
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/header_hash.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/hot-reload.js +0 -0
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/hot_reload.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/local_assets.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/proxy.rb +2 -2
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/sse.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/watcher.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/web_server.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/theme/development_theme.rb +9 -9
- data/lib/{shopify-cli → shopify_cli}/theme/file.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/ignore_filter.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/mime_type.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/syncer.rb +6 -6
- data/lib/{shopify-cli → shopify_cli}/theme/theme.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/transform_data_structure.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/tunnel.rb +14 -14
- data/lib/shopify_cli/version.rb +3 -0
- data/lib/shopify_cli.rb +50 -49
- data/shopify-cli.gemspec +2 -2
- metadata +104 -91
- data/lib/project_types/script/layers/infrastructure/api_clients.rb +0 -89
- data/lib/shopify-cli/commands/logout.rb +0 -39
- data/lib/shopify-cli/commands/populate.rb +0 -23
- data/lib/shopify-cli/commands/store.rb +0 -15
- data/lib/shopify-cli/commands/version.rb +0 -15
- data/lib/shopify-cli/commands.rb +0 -34
- data/lib/shopify-cli/core.rb +0 -8
- data/lib/shopify-cli/helpers.rb +0 -5
- data/lib/shopify-cli/resources.rb +0 -5
- data/lib/shopify-cli/tasks/ensure_authenticated.rb +0 -13
- data/lib/shopify-cli/version.rb +0 -3
@@ -1,9 +1,9 @@
|
|
1
1
|
require "shopify_cli"
|
2
2
|
require "rbconfig"
|
3
3
|
|
4
|
-
module
|
4
|
+
module ShopifyCLI
|
5
5
|
module Commands
|
6
|
-
class System <
|
6
|
+
class System < ShopifyCLI::Command
|
7
7
|
hidden_feature(feature_set: :debug)
|
8
8
|
|
9
9
|
def call(args, _name)
|
@@ -28,7 +28,7 @@ module ShopifyCli
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def self.help
|
31
|
-
|
31
|
+
ShopifyCLI::Context.message("core.system.help", ShopifyCLI::TOOL_NAME)
|
32
32
|
end
|
33
33
|
|
34
34
|
private
|
@@ -50,21 +50,21 @@ module ShopifyCli
|
|
50
50
|
|
51
51
|
@ctx.puts(@ctx.message("core.system.header"))
|
52
52
|
cli_constants.each do |s|
|
53
|
-
@ctx.puts(" " + @ctx.message("core.system.const", s,
|
53
|
+
@ctx.puts(" " + @ctx.message("core.system.const", s, ShopifyCLI.const_get(s.to_sym)) + "\n")
|
54
54
|
end
|
55
55
|
|
56
56
|
if show_all_details
|
57
57
|
cli_path_methods.each do |m|
|
58
|
-
@ctx.puts(" " + @ctx.message("core.system.const", m.upcase,
|
58
|
+
@ctx.puts(" " + @ctx.message("core.system.const", m.upcase, ShopifyCLI.send(m)) + "\n")
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
63
|
def display_shopify_store(_show_all_details)
|
64
|
-
shop = if
|
65
|
-
|
64
|
+
shop = if ShopifyCLI::DB.exists?(:shop)
|
65
|
+
ShopifyCLI::AdminAPI.get_shop_or_abort(@ctx)
|
66
66
|
else
|
67
|
-
@ctx.message("core.populate.error.no_shop",
|
67
|
+
@ctx.message("core.populate.error.no_shop", ShopifyCLI::TOOL_NAME)
|
68
68
|
end
|
69
69
|
|
70
70
|
@ctx.puts("\n" + @ctx.message("core.system.shop_header"))
|
@@ -96,7 +96,7 @@ module ShopifyCli
|
|
96
96
|
end
|
97
97
|
|
98
98
|
def display_ngrok
|
99
|
-
ngrok_location = File.join(
|
99
|
+
ngrok_location = File.join(ShopifyCLI.cache_dir, "ngrok#{@ctx.executable_file_extension}")
|
100
100
|
if File.exist?(ngrok_location)
|
101
101
|
@ctx.puts(" " + @ctx.message("core.system.ngrok_available", ngrok_location))
|
102
102
|
else
|
@@ -154,7 +154,7 @@ module ShopifyCli
|
|
154
154
|
end
|
155
155
|
|
156
156
|
def display_shopify_staff_identity
|
157
|
-
is_shopifolk =
|
157
|
+
is_shopifolk = ShopifyCLI::Shopifolk.check
|
158
158
|
if is_shopifolk
|
159
159
|
@ctx.puts("\n" + @ctx.message("core.system.identity_header"))
|
160
160
|
@ctx.puts(" " + @ctx.message("core.system.identity_is_shopifolk"))
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "shopify_cli"
|
2
|
+
|
3
|
+
module ShopifyCLI
|
4
|
+
module Commands
|
5
|
+
class Version < ShopifyCLI::Command
|
6
|
+
def self.help
|
7
|
+
ShopifyCLI::Context.message("core.version.help", ShopifyCLI::TOOL_NAME)
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(_args, _name)
|
11
|
+
@ctx.puts(ShopifyCLI::VERSION.to_s)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
require "shopify_cli"
|
2
2
|
|
3
|
-
module
|
3
|
+
module ShopifyCLI
|
4
4
|
module Commands
|
5
|
-
class Whoami <
|
5
|
+
class Whoami < ShopifyCLI::Command
|
6
6
|
def call(_args, _name)
|
7
|
-
shop =
|
8
|
-
org_id =
|
9
|
-
org =
|
7
|
+
shop = ShopifyCLI::DB.get(:shop)
|
8
|
+
org_id = ShopifyCLI::DB.get(:organization_id)
|
9
|
+
org = ShopifyCLI::PartnersAPI::Organizations.fetch(@ctx, id: org_id) unless org_id.nil?
|
10
10
|
|
11
11
|
output = if shop.nil? && org.nil?
|
12
|
-
@ctx.message("core.whoami.not_logged_in",
|
12
|
+
@ctx.message("core.whoami.not_logged_in", ShopifyCLI::TOOL_NAME)
|
13
13
|
elsif !shop.nil? && org.nil?
|
14
14
|
@ctx.message("core.whoami.logged_in_shop_only", shop)
|
15
15
|
elsif shop.nil? && !org.nil?
|
@@ -21,7 +21,7 @@ module ShopifyCli
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.help
|
24
|
-
|
24
|
+
ShopifyCLI::Context.message("core.whoami.help", ShopifyCLI::TOOL_NAME)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "shopify_cli"
|
2
|
+
|
3
|
+
module ShopifyCLI
|
4
|
+
module Commands
|
5
|
+
Registry = CLI::Kit::CommandRegistry.new(
|
6
|
+
default: "help",
|
7
|
+
contextual_resolver: nil,
|
8
|
+
)
|
9
|
+
@core_commands = []
|
10
|
+
|
11
|
+
def self.register(const, cmd, path = nil, is_core = false)
|
12
|
+
autoload(const, path) if path
|
13
|
+
Registry.add(->() { const_get(const) }, cmd)
|
14
|
+
@core_commands.push(cmd) if is_core
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.core_command?(cmd)
|
18
|
+
@core_commands.include?(cmd)
|
19
|
+
end
|
20
|
+
|
21
|
+
register :Config, "config", "shopify_cli/commands/config", true
|
22
|
+
register :Help, "help", "shopify_cli/commands/help", true
|
23
|
+
register :Login, "login", "shopify_cli/commands/login", true
|
24
|
+
register :Logout, "logout", "shopify_cli/commands/logout", true
|
25
|
+
register :Populate, "populate", "shopify_cli/commands/populate", true
|
26
|
+
register :Store, "store", "shopify_cli/commands/store", true
|
27
|
+
register :Switch, "switch", "shopify_cli/commands/switch", true
|
28
|
+
register :System, "system", "shopify_cli/commands/system", true
|
29
|
+
register :Version, "version", "shopify_cli/commands/version", true
|
30
|
+
register :Whoami, "whoami", "shopify_cli/commands/whoami", true
|
31
|
+
|
32
|
+
autoload :Connect, "shopify_cli/commands/connect"
|
33
|
+
end
|
34
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "shopify_cli"
|
2
2
|
|
3
|
-
module
|
3
|
+
module ShopifyCLI
|
4
4
|
class Connect
|
5
5
|
def initialize(ctx)
|
6
6
|
@ctx = ctx
|
@@ -10,14 +10,14 @@ module ShopifyCli
|
|
10
10
|
if Project.current&.env
|
11
11
|
@ctx.puts(@ctx.message("core.connect.already_connected_warning"))
|
12
12
|
end
|
13
|
-
org =
|
13
|
+
org = ShopifyCLI::Tasks::EnsureEnv.call(@ctx, regenerate: true)
|
14
14
|
write_cli_yml(project_type, org["id"]) unless Project.has_current?
|
15
15
|
api_key = Project.current(force_reload: true).env["api_key"]
|
16
16
|
get_app(org["apps"], api_key).first["title"]
|
17
17
|
end
|
18
18
|
|
19
19
|
def write_cli_yml(project_type, org_id)
|
20
|
-
|
20
|
+
ShopifyCLI::Project.write(
|
21
21
|
@ctx,
|
22
22
|
project_type: project_type,
|
23
23
|
organization_id: org_id,
|
@@ -5,7 +5,7 @@ require "rbconfig"
|
|
5
5
|
require "net/http"
|
6
6
|
require "json"
|
7
7
|
|
8
|
-
module
|
8
|
+
module ShopifyCLI
|
9
9
|
##
|
10
10
|
# Context captures a lot about the current running command. It captures the
|
11
11
|
# environment, output, system and file operations. It is useful to have the
|
@@ -97,7 +97,7 @@ module ShopifyCli
|
|
97
97
|
# See `#development?` for checking for development environment.
|
98
98
|
#
|
99
99
|
def system?
|
100
|
-
!Dir.exist?(File.join(
|
100
|
+
!Dir.exist?(File.join(ShopifyCLI::ROOT, "test"))
|
101
101
|
end
|
102
102
|
|
103
103
|
# will return true if the cli is running on your development instance.
|
@@ -382,7 +382,7 @@ module ShopifyCli
|
|
382
382
|
# * `text` - a string message to output
|
383
383
|
#
|
384
384
|
def abort(text)
|
385
|
-
raise
|
385
|
+
raise ShopifyCLI::Abort, "{{x}} #{text}"
|
386
386
|
end
|
387
387
|
|
388
388
|
# outputs a message, prefixed by a red `DEBUG` tag. This will only output to
|
@@ -559,7 +559,7 @@ module ShopifyCli
|
|
559
559
|
if (time_of_last_check + VERSION_CHECK_INTERVAL) < (now = Time.now.to_i)
|
560
560
|
update_time_of_last_check(now)
|
561
561
|
latest_version = retrieve_latest_gem_version
|
562
|
-
latest_version unless latest_version ==
|
562
|
+
latest_version unless latest_version == ShopifyCLI::VERSION
|
563
563
|
end
|
564
564
|
end
|
565
565
|
|
@@ -600,11 +600,11 @@ module ShopifyCli
|
|
600
600
|
end
|
601
601
|
|
602
602
|
def time_of_last_check
|
603
|
-
(val =
|
603
|
+
(val = ShopifyCLI::Config.get(VERSION_CHECK_SECTION, LAST_CHECKED_AT_FIELD)) ? val.to_i : 0
|
604
604
|
end
|
605
605
|
|
606
606
|
def update_time_of_last_check(time)
|
607
|
-
|
607
|
+
ShopifyCLI::Config.set(VERSION_CHECK_SECTION, LAST_CHECKED_AT_FIELD, time)
|
608
608
|
end
|
609
609
|
end
|
610
610
|
end
|
@@ -1,26 +1,26 @@
|
|
1
1
|
require "shopify_cli"
|
2
2
|
|
3
|
-
module
|
3
|
+
module ShopifyCLI
|
4
4
|
module Core
|
5
5
|
module EntryPoint
|
6
6
|
class << self
|
7
7
|
def call(args, ctx = Context.new)
|
8
8
|
if ctx.development?
|
9
9
|
ctx.warn(
|
10
|
-
ctx.message("core.warning.development_version", File.join(
|
10
|
+
ctx.message("core.warning.development_version", File.join(ShopifyCLI::ROOT, "bin", ShopifyCLI::TOOL_NAME))
|
11
11
|
)
|
12
12
|
elsif !ctx.testing?
|
13
13
|
new_version = ctx.new_version
|
14
|
-
ctx.warn(ctx.message("core.warning.new_version",
|
14
|
+
ctx.warn(ctx.message("core.warning.new_version", ShopifyCLI::VERSION, new_version)) unless new_version.nil?
|
15
15
|
end
|
16
16
|
|
17
17
|
ProjectType.load_all
|
18
18
|
|
19
|
-
task_registry =
|
19
|
+
task_registry = ShopifyCLI::Tasks::Registry
|
20
20
|
|
21
|
-
command, command_name, args =
|
22
|
-
executor =
|
23
|
-
|
21
|
+
command, command_name, args = ShopifyCLI::Resolver.call(args)
|
22
|
+
executor = ShopifyCLI::Core::Executor.new(ctx, task_registry, log_file: ShopifyCLI.log_file)
|
23
|
+
ShopifyCLI::Core::Monorail.log(command_name, args) do
|
24
24
|
executor.call(command, command_name, args)
|
25
25
|
end
|
26
26
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require "shopify_cli"
|
2
2
|
|
3
|
-
module
|
3
|
+
module ShopifyCLI
|
4
4
|
module Core
|
5
5
|
class Executor < CLI::Kit::Executor
|
6
6
|
def initialize(ctx, task_registry, *args, **kwargs)
|
7
|
-
@ctx = ctx ||
|
8
|
-
@task_registry = task_registry ||
|
7
|
+
@ctx = ctx || ShopifyCLI::Context.new
|
8
|
+
@task_registry = task_registry || ShopifyCLI::Tasks::TaskRegistry.new
|
9
9
|
super(*args, **kwargs)
|
10
10
|
end
|
11
11
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module ShopifyCLI
|
2
2
|
module Core
|
3
3
|
# This class is just a dummy to make sure that we don't trigger warnings on the first time the updated code runs.
|
4
4
|
# The old code would try to call the Finalizer after it is done updating, which would then trigger an autoload of
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "cli/kit"
|
2
2
|
|
3
|
-
module
|
3
|
+
module ShopifyCLI
|
4
4
|
module Core
|
5
5
|
class HelpResolver < CLI::Kit::Resolver
|
6
6
|
def call(args)
|
@@ -10,7 +10,7 @@ module ShopifyCli
|
|
10
10
|
help = Commands::Help
|
11
11
|
help.ctx = Context.new
|
12
12
|
help.call([], nil)
|
13
|
-
raise
|
13
|
+
raise ShopifyCLI::AbortSilent
|
14
14
|
else
|
15
15
|
super(args)
|
16
16
|
end
|
@@ -3,7 +3,7 @@ require "net/http"
|
|
3
3
|
require "time"
|
4
4
|
require "rbconfig"
|
5
5
|
|
6
|
-
module
|
6
|
+
module ShopifyCLI
|
7
7
|
module Core
|
8
8
|
module Monorail
|
9
9
|
ENDPOINT_URI = URI.parse("https://monorail-edge.shopifycloud.com/v1/produce")
|
@@ -50,16 +50,16 @@ module ShopifyCli
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def consented?
|
53
|
-
|
53
|
+
ShopifyCLI::Config.get_bool("analytics", "enabled")
|
54
54
|
end
|
55
55
|
|
56
56
|
def prompt_for_consent
|
57
57
|
return if Context.new.ci?
|
58
58
|
return unless enabled?
|
59
|
-
return if
|
59
|
+
return if ShopifyCLI::Config.get_section("analytics").key?("enabled")
|
60
60
|
msg = Context.message("core.monorail.consent_prompt")
|
61
61
|
opt = CLI::UI::Prompt.confirm(msg)
|
62
|
-
|
62
|
+
ShopifyCLI::Config.set("analytics", "enabled", opt)
|
63
63
|
end
|
64
64
|
|
65
65
|
def send_event(start_time, commands, args, err = nil)
|
@@ -100,12 +100,12 @@ module ShopifyCli
|
|
100
100
|
success: err.nil?,
|
101
101
|
error_message: err,
|
102
102
|
uname: RbConfig::CONFIG["host"],
|
103
|
-
cli_version:
|
103
|
+
cli_version: ShopifyCLI::VERSION,
|
104
104
|
ruby_version: RUBY_VERSION,
|
105
|
-
is_employee:
|
105
|
+
is_employee: ShopifyCLI::Shopifolk.acting_as_shopify_organization?,
|
106
106
|
}.tap do |payload|
|
107
107
|
payload[:api_key] = metadata.delete(:api_key)
|
108
|
-
payload[:partner_id] = metadata.delete(:organization_id) ||
|
108
|
+
payload[:partner_id] = metadata.delete(:organization_id) || ShopifyCLI::DB.get(:organization_id)
|
109
109
|
if Project.has_current?
|
110
110
|
project = Project.current(force_reload: true)
|
111
111
|
payload[:api_key] = project.env&.api_key
|
@@ -117,7 +117,7 @@ module ShopifyCli
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def project_type_from_dir_or_cmd(command)
|
120
|
-
Project.current_project_type || (command unless
|
120
|
+
Project.current_project_type || (command unless ShopifyCLI::Commands.core_command?(command)) || nil
|
121
121
|
end
|
122
122
|
end
|
123
123
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require "pstore"
|
2
2
|
require "forwardable"
|
3
3
|
|
4
|
-
module
|
4
|
+
module ShopifyCLI
|
5
5
|
# Persists transient data like access tokens that may be cleared
|
6
6
|
# when user clears their session
|
7
7
|
#
|
@@ -14,7 +14,7 @@ module ShopifyCli
|
|
14
14
|
|
15
15
|
attr_reader :db # :nodoc:
|
16
16
|
|
17
|
-
def initialize(path: File.join(
|
17
|
+
def initialize(path: File.join(ShopifyCLI.cache_dir, ".db.pstore")) # :nodoc:
|
18
18
|
@db = PStore.new(path)
|
19
19
|
end
|
20
20
|
|
@@ -25,7 +25,7 @@ module ShopifyCli
|
|
25
25
|
#
|
26
26
|
# #### Usage
|
27
27
|
#
|
28
|
-
#
|
28
|
+
# ShopifyCLI::DB.keys
|
29
29
|
#
|
30
30
|
def keys
|
31
31
|
db.transaction(true) { db.roots }
|
@@ -42,7 +42,7 @@ module ShopifyCli
|
|
42
42
|
#
|
43
43
|
# #### Usage
|
44
44
|
#
|
45
|
-
# exists =
|
45
|
+
# exists = ShopifyCLI::DB.exists?('shopify_exchange_token')
|
46
46
|
#
|
47
47
|
def exists?(key)
|
48
48
|
db.transaction(true) { db.root?(key) }
|
@@ -55,7 +55,7 @@ module ShopifyCli
|
|
55
55
|
#
|
56
56
|
# #### Usage
|
57
57
|
#
|
58
|
-
#
|
58
|
+
# ShopifyCLI::DB.set(shopify_exchange_token: 'token', metric_consent: true)
|
59
59
|
#
|
60
60
|
def set(**args)
|
61
61
|
db.transaction do
|
@@ -80,7 +80,7 @@ module ShopifyCli
|
|
80
80
|
#
|
81
81
|
# #### Usage
|
82
82
|
#
|
83
|
-
#
|
83
|
+
# ShopifyCLI::DB.get(:shopify_exchange_token)
|
84
84
|
#
|
85
85
|
def get(key)
|
86
86
|
val = db.transaction(true) { db[key] }
|
@@ -95,7 +95,7 @@ module ShopifyCli
|
|
95
95
|
#
|
96
96
|
# #### Usage
|
97
97
|
#
|
98
|
-
#
|
98
|
+
# ShopifyCLI::DB.del(:shopify_exchange_token)
|
99
99
|
#
|
100
100
|
def del(*args)
|
101
101
|
db.transaction { args.each { |key| db.delete(key) } }
|
@@ -105,7 +105,7 @@ module ShopifyCli
|
|
105
105
|
#
|
106
106
|
# #### Usage
|
107
107
|
#
|
108
|
-
#
|
108
|
+
# ShopifyCLI::DB.clear
|
109
109
|
#
|
110
110
|
def clear
|
111
111
|
del(*keys)
|
@@ -1,6 +1,6 @@
|
|
1
|
-
module
|
1
|
+
module ShopifyCLI
|
2
2
|
##
|
3
|
-
#
|
3
|
+
# ShopifyCLI::Feature contains the logic to hide and show features across the CLI
|
4
4
|
# These features can be either commands or project types currently.
|
5
5
|
#
|
6
6
|
# Feature flags will persist between runs so if the flag is enabled or disabled,
|
@@ -9,7 +9,7 @@ module ShopifyCli
|
|
9
9
|
SECTION = "features"
|
10
10
|
|
11
11
|
##
|
12
|
-
#
|
12
|
+
# ShopifyCLI::Feature::Set is included on commands and projects to allow you to hide
|
13
13
|
# and enable projects and commands based on feature flags.
|
14
14
|
module Set
|
15
15
|
##
|
@@ -21,9 +21,9 @@ module ShopifyCli
|
|
21
21
|
#
|
22
22
|
# #### Example
|
23
23
|
#
|
24
|
-
# module
|
24
|
+
# module ShopifyCLI
|
25
25
|
# module Commands
|
26
|
-
# class Config <
|
26
|
+
# class Config < ShopifyCLI::Command
|
27
27
|
# hidden_feature(feature_set: :basic)
|
28
28
|
# ....
|
29
29
|
#
|
@@ -41,7 +41,7 @@ module ShopifyCli
|
|
41
41
|
#
|
42
42
|
# #### Example
|
43
43
|
#
|
44
|
-
#
|
44
|
+
# ShopifyCLI::Commands::Config.hidden?
|
45
45
|
#
|
46
46
|
def hidden?
|
47
47
|
enabled = (@hidden_feature_set || []).any? do |feature|
|
@@ -84,11 +84,11 @@ module ShopifyCli
|
|
84
84
|
# * `is_enabled` - will be true if the feature has been enabled.
|
85
85
|
def enabled?(feature)
|
86
86
|
return false if feature.nil?
|
87
|
-
|
87
|
+
ShopifyCLI::Config.get_bool(SECTION, feature.to_s)
|
88
88
|
end
|
89
89
|
|
90
90
|
def set(feature, value)
|
91
|
-
|
91
|
+
ShopifyCLI::Config.set(SECTION, feature.to_s, value)
|
92
92
|
end
|
93
93
|
end
|
94
94
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "shopify_cli"
|
2
2
|
|
3
|
-
module
|
3
|
+
module ShopifyCLI
|
4
4
|
class Form
|
5
5
|
class << self
|
6
6
|
def ask(ctx, args, flags)
|
@@ -12,7 +12,7 @@ module ShopifyCli
|
|
12
12
|
begin
|
13
13
|
form.ask
|
14
14
|
form
|
15
|
-
rescue
|
15
|
+
rescue ShopifyCLI::Abort => err
|
16
16
|
ctx.puts(err.message)
|
17
17
|
nil
|
18
18
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
module
|
1
|
+
module ShopifyCLI
|
2
2
|
##
|
3
|
-
#
|
3
|
+
# ShopifyCLI::Git wraps git functionality to make it easier to integrate will
|
4
4
|
# git.
|
5
5
|
class Git
|
6
6
|
class << self
|
@@ -18,7 +18,7 @@ module ShopifyCli
|
|
18
18
|
#
|
19
19
|
# #### Example
|
20
20
|
#
|
21
|
-
#
|
21
|
+
# ShopifyCLI::Git.sha
|
22
22
|
#
|
23
23
|
def sha(dir: Dir.pwd, ctx: Context.new)
|
24
24
|
rev_parse("HEAD", dir: dir, ctx: ctx)
|
@@ -40,7 +40,7 @@ module ShopifyCli
|
|
40
40
|
#
|
41
41
|
# #### Example
|
42
42
|
#
|
43
|
-
#
|
43
|
+
# ShopifyCLI::Git.clone('git@github.com:shopify/test.git', 'test-app')
|
44
44
|
#
|
45
45
|
def clone(repository, dest, ctx: Context.new)
|
46
46
|
if Dir.exist?(dest)
|
@@ -66,7 +66,7 @@ module ShopifyCli
|
|
66
66
|
#
|
67
67
|
# #### Example
|
68
68
|
#
|
69
|
-
# branches =
|
69
|
+
# branches = ShopifyCLI::Git.branches(@ctx)
|
70
70
|
#
|
71
71
|
def branches(ctx)
|
72
72
|
output, status = ctx.capture2e("git", "branch", "--list", "--format=%(refname:short)")
|
@@ -91,7 +91,7 @@ module ShopifyCli
|
|
91
91
|
#
|
92
92
|
# #### Example
|
93
93
|
#
|
94
|
-
#
|
94
|
+
# ShopifyCLI::Git.init(@ctx)
|
95
95
|
#
|
96
96
|
def init(ctx)
|
97
97
|
output, status = ctx.capture2e("git", "status")
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module ShopifyCLI
|
2
2
|
class Heroku
|
3
3
|
DOWNLOAD_URLS = {
|
4
4
|
linux: "https://cli-assets.heroku.com/heroku-linux-x64.tar.gz",
|
@@ -36,7 +36,7 @@ module ShopifyCli
|
|
36
36
|
def download
|
37
37
|
return if installed?
|
38
38
|
|
39
|
-
result = @ctx.system("curl", "-o", download_path, DOWNLOAD_URLS[@ctx.os], chdir:
|
39
|
+
result = @ctx.system("curl", "-o", download_path, DOWNLOAD_URLS[@ctx.os], chdir: ShopifyCLI.cache_dir)
|
40
40
|
@ctx.abort(@ctx.message("core.heroku.error.download")) unless result.success?
|
41
41
|
@ctx.abort(@ctx.message("core.heroku.error.download")) unless File.exist?(download_path)
|
42
42
|
end
|
@@ -47,7 +47,7 @@ module ShopifyCli
|
|
47
47
|
result = if @ctx.windows?
|
48
48
|
@ctx.system("\"#{download_path}\"")
|
49
49
|
else
|
50
|
-
@ctx.system("tar", "-xf", download_path, chdir:
|
50
|
+
@ctx.system("tar", "-xf", download_path, chdir: ShopifyCLI.cache_dir)
|
51
51
|
end
|
52
52
|
@ctx.abort(@ctx.message("core.heroku.error.install")) unless result.success?
|
53
53
|
|
@@ -67,23 +67,33 @@ module ShopifyCli
|
|
67
67
|
nil
|
68
68
|
end
|
69
69
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
70
|
+
def get_config(config)
|
71
|
+
output, status = @ctx.capture2e(heroku_command, "config:get", config.to_s)
|
72
|
+
return output.strip if status.success?
|
73
|
+
nil
|
74
74
|
end
|
75
75
|
|
76
|
-
def
|
77
|
-
|
76
|
+
def set_config(config, value)
|
77
|
+
result = @ctx.system(heroku_command, "config:set", "#{config}=#{value}")
|
78
|
+
|
79
|
+
msg = @ctx.message("core.heroku.error.set_config", config, value)
|
80
|
+
@ctx.abort(msg) unless result.success?
|
78
81
|
end
|
79
82
|
|
80
|
-
def
|
81
|
-
|
82
|
-
|
83
|
+
def add_buildpacks(buildpacks)
|
84
|
+
result = @ctx.system(heroku_command, "buildpacks:clear")
|
85
|
+
msg = @ctx.message("core.heroku.error.add_buildpacks")
|
86
|
+
@ctx.abort(msg) unless result.success?
|
87
|
+
|
88
|
+
buildpacks.each do |buildpack|
|
89
|
+
result = @ctx.system(heroku_command, "buildpacks:add", buildpack)
|
90
|
+
msg = @ctx.message("core.heroku.error.add_buildpacks")
|
91
|
+
@ctx.abort(msg) unless result.success?
|
92
|
+
end
|
83
93
|
end
|
84
94
|
|
85
95
|
def heroku_command
|
86
|
-
local_path = File.join(
|
96
|
+
local_path = File.join(ShopifyCLI.cache_dir, "heroku", "bin", "heroku").to_s
|
87
97
|
if File.exist?(local_path)
|
88
98
|
local_path
|
89
99
|
elsif @ctx.windows?
|
@@ -103,6 +113,21 @@ module ShopifyCli
|
|
103
113
|
end
|
104
114
|
end
|
105
115
|
|
116
|
+
private
|
117
|
+
|
118
|
+
def download_filename
|
119
|
+
URI.parse(DOWNLOAD_URLS[@ctx.os]).path.split("/").last
|
120
|
+
end
|
121
|
+
|
122
|
+
def download_path
|
123
|
+
File.join(ShopifyCLI.cache_dir, download_filename)
|
124
|
+
end
|
125
|
+
|
126
|
+
def git_remote
|
127
|
+
output, status = @ctx.capture2e("git", "remote", "get-url", "heroku")
|
128
|
+
status.success? ? output : nil
|
129
|
+
end
|
130
|
+
|
106
131
|
def installed?
|
107
132
|
_output, status = @ctx.capture2e(heroku_command, "--version")
|
108
133
|
status.success?
|