shopify-cli 1.3.1 → 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/.github/CODEOWNERS +2 -2
- data/.github/CONTRIBUTING.md +9 -1
- data/.github/PULL_REQUEST_TEMPLATE.md +10 -1
- data/.github/workflows/release.yml +61 -0
- data/.github/workflows/triage.yml +22 -0
- data/.gitignore +0 -1
- data/.rubocop.yml +61 -8
- data/.rubocop_todo.yml +11 -0
- data/.travis.yml +1 -0
- data/CHANGELOG.md +30 -0
- data/Gemfile +12 -11
- data/Gemfile.lock +39 -37
- data/README.md +39 -7
- data/RELEASING.md +19 -29
- data/Rakefile +32 -28
- data/bin/load_shopify.rb +6 -6
- data/bin/shopify +2 -2
- data/dev.yml +2 -2
- data/docs/_config.yml +1 -18
- data/docs/app/node/commands/index.md +2 -80
- data/docs/app/node/index.md +2 -33
- data/docs/app/rails/commands/index.md +2 -78
- data/docs/app/rails/index.md +2 -34
- data/docs/core/index.md +2 -84
- data/docs/getting-started/index.md +2 -25
- data/docs/getting-started/install/index.md +1 -118
- data/docs/getting-started/migrate/index.md +2 -94
- data/docs/getting-started/uninstall/index.md +2 -35
- data/docs/getting-started/upgrade/index.md +2 -39
- data/docs/help/start-app/index.md +2 -4
- data/docs/index.md +2 -24
- data/ext/shopify-cli/extconf.rb +7 -7
- data/install.sh +1 -1
- 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 +64 -47
- 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 +117 -0
- 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.rb +35 -0
- data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +19 -0
- data/lib/project_types/extension/models/specification_handlers/default.rb +67 -0
- data/lib/project_types/extension/models/specifications.rb +77 -0
- data/lib/project_types/extension/tasks/configure_features.rb +52 -0
- 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 +38 -0
- 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 -16
- data/lib/project_types/node/commands/connect.rb +15 -0
- data/lib/project_types/node/commands/create.rb +46 -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 +9 -18
- 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 +19 -53
- data/lib/project_types/rails/cli.rb +21 -18
- data/lib/project_types/rails/commands/connect.rb +15 -0
- data/lib/project_types/rails/commands/create.rb +60 -54
- 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 +24 -24
- data/lib/project_types/rails/gem.rb +24 -24
- data/lib/project_types/rails/messages/messages.rb +12 -9
- data/lib/project_types/rails/ruby.rb +2 -2
- data/lib/project_types/script/cli.rb +42 -38
- data/lib/project_types/script/commands/create.rb +13 -10
- data/lib/project_types/script/commands/disable.rb +3 -3
- data/lib/project_types/script/commands/enable.rb +19 -9
- data/lib/project_types/script/commands/push.rb +10 -17
- data/lib/project_types/script/config/extension_points.yml +17 -12
- data/lib/project_types/script/errors.rb +38 -0
- data/lib/project_types/script/forms/create.rb +29 -5
- data/lib/project_types/script/graphql/app_script_update_or_create.graphql +12 -1
- data/lib/project_types/script/layers/application/build_script.rb +18 -19
- data/lib/project_types/script/layers/application/create_script.rb +13 -11
- 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/extension_points.rb +24 -0
- data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
- data/lib/project_types/script/layers/application/push_script.rb +12 -18
- data/lib/project_types/script/layers/domain/errors.rb +7 -0
- data/lib/project_types/script/layers/domain/extension_point.rb +62 -7
- data/lib/project_types/script/layers/domain/metadata.rb +55 -0
- data/lib/project_types/script/layers/domain/push_package.rb +29 -6
- data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +19 -54
- data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +49 -18
- data/lib/project_types/script/layers/infrastructure/errors.rb +17 -1
- data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +12 -6
- data/lib/project_types/script/layers/infrastructure/project_creator.rb +2 -1
- data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +20 -13
- data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +72 -0
- data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +59 -0
- data/lib/project_types/script/layers/infrastructure/script_service.rb +26 -16
- data/lib/project_types/script/layers/infrastructure/task_runner.rb +4 -3
- data/lib/project_types/script/messages/messages.rb +67 -10
- data/lib/project_types/script/script_project.rb +47 -16
- data/lib/project_types/script/ui/error_handler.rb +115 -45
- 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 +40 -0
- data/lib/project_types/theme/commands/connect.rb +54 -0
- data/lib/project_types/theme/commands/create.rb +48 -0
- data/lib/project_types/theme/commands/deploy.rb +38 -0
- data/lib/project_types/theme/commands/generate.rb +20 -0
- data/lib/project_types/theme/commands/generate/env.rb +79 -0
- data/lib/project_types/theme/commands/push.rb +55 -0
- data/lib/project_types/theme/commands/serve.rb +31 -0
- data/lib/project_types/theme/forms/connect.rb +34 -0
- data/lib/project_types/theme/forms/create.rb +22 -0
- data/lib/project_types/theme/messages/messages.rb +147 -0
- data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +78 -0
- data/lib/project_types/theme/themekit.rb +113 -0
- data/lib/rubygems_plugin.rb +3 -3
- data/lib/shopify-cli/admin_api.rb +52 -12
- 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 +38 -37
- data/lib/shopify-cli/command.rb +1 -1
- data/lib/shopify-cli/commands.rb +9 -9
- data/lib/shopify-cli/commands/config.rb +28 -28
- data/lib/shopify-cli/commands/connect.rb +35 -18
- 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 +40 -31
- data/lib/shopify-cli/commands/version.rb +2 -2
- data/lib/shopify-cli/context.rb +43 -22
- data/lib/shopify-cli/core.rb +4 -4
- data/lib/shopify-cli/core/entry_point.rb +6 -6
- 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 +21 -19
- data/lib/shopify-cli/db.rb +2 -2
- data/lib/shopify-cli/feature.rb +1 -3
- 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 +27 -0
- data/lib/shopify-cli/js_deps.rb +13 -13
- 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 +24 -10
- data/lib/shopify-cli/method_object.rb +104 -0
- 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 +38 -16
- data/lib/shopify-cli/partners_api/organizations.rb +10 -10
- data/lib/shopify-cli/process_supervision.rb +8 -8
- data/lib/shopify-cli/project.rb +27 -23
- data/lib/shopify-cli/project_type.rb +21 -5
- data/lib/shopify-cli/resolve_constant.rb +25 -0
- data/lib/shopify-cli/resources.rb +1 -1
- data/lib/shopify-cli/resources/env_file.rb +9 -9
- data/lib/shopify-cli/result.rb +432 -0
- data/lib/shopify-cli/shopifolk.rb +84 -0
- data/lib/shopify-cli/sub_command.rb +1 -1
- data/lib/shopify-cli/task.rb +9 -1
- data/lib/shopify-cli/tasks.rb +7 -7
- data/lib/shopify-cli/tasks/create_api_client.rb +17 -6
- data/lib/shopify-cli/tasks/ensure_dev_store.rb +11 -11
- data/lib/shopify-cli/tasks/ensure_env.rb +18 -15
- data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
- data/lib/shopify-cli/tasks/select_org_and_shop.rb +29 -24
- 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 +36 -30
- data/lib/shopify-cli/version.rb +1 -1
- data/lib/shopify_cli.rb +57 -51
- data/shopify-cli.gemspec +6 -6
- data/shopify.fish +1 -1
- data/shopify.sh +1 -1
- data/vendor/deps/cli-kit/REVISION +1 -1
- data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +2 -2
- data/vendor/deps/cli-kit/lib/cli/kit/system.rb +3 -3
- data/vendor/deps/cli-ui/REVISION +1 -1
- data/vendor/deps/cli-ui/lib/cli/ui.rb +26 -22
- data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +4 -6
- data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -3
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +8 -9
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -1
- data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +1 -0
- data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +15 -3
- data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +4 -11
- data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -5
- data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +10 -10
- data/vendor/deps/cli-ui/lib/cli/ui/version.rb +1 -1
- data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
- data/vendor/deps/webrick/.gitignore +9 -0
- data/vendor/deps/webrick/Gemfile +3 -0
- data/vendor/deps/webrick/LICENSE.txt +22 -0
- data/vendor/deps/webrick/README.md +61 -0
- data/vendor/deps/webrick/Rakefile +10 -0
- data/vendor/deps/webrick/lib/webrick.rb +232 -0
- data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
- data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
- data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
- data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
- data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
- data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
- data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
- data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
- data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
- data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
- data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
- data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
- data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
- data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
- data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
- data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
- data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
- data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
- data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
- data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
- data/vendor/deps/webrick/webrick.gemspec +74 -0
- data/vendor/gen/template/bin/update-deps +9 -9
- metadata +84 -29
- data/docs/Gemfile +0 -5
- data/docs/Gemfile.lock +0 -258
- data/docs/_data/nav.yml +0 -35
- data/docs/_includes/footer.html +0 -15
- data/docs/_includes/head.html +0 -19
- data/docs/_includes/sidebar_nav.html +0 -22
- data/docs/_includes/toc.html +0 -112
- data/docs/_layouts/default.html +0 -79
- data/docs/css/docs.css +0 -157
- data/docs/images/header.png +0 -0
- data/docs/installing-ruby.md +0 -28
- data/lib/project_types/extension/features/argo/admin.rb +0 -20
- data/lib/project_types/extension/features/argo/base.rb +0 -129
- data/lib/project_types/extension/features/argo/checkout.rb +0 -20
- data/lib/project_types/extension/forms/register.rb +0 -47
- data/lib/project_types/extension/models/type.rb +0 -81
- data/lib/project_types/extension/models/types/checkout_post_purchase.rb +0 -23
- data/lib/project_types/extension/models/types/product_subscription.rb +0 -24
- data/lib/project_types/node/commands/generate/billing.rb +0 -39
- data/lib/project_types/node/commands/generate/page.rb +0 -59
- data/lib/project_types/node/commands/generate/webhook.rb +0 -37
- data/lib/project_types/script/layers/domain/script.rb +0 -18
- data/lib/project_types/script/layers/infrastructure/assemblyscript_tsconfig.rb +0 -38
- data/lib/project_types/script/layers/infrastructure/script_repository.rb +0 -59
- data/lib/project_types/script/templates/ts/as-pect.config.js +0 -27
- data/lib/project_types/script/templates/ts/as-pect.d.ts +0 -1
|
@@ -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.
|
|
@@ -329,14 +329,18 @@ module ShopifyCli
|
|
|
329
329
|
# - `**kwargs`: additional keyword arguments to pass to Process.spawn
|
|
330
330
|
#
|
|
331
331
|
# #### Returns
|
|
332
|
-
# - `status`:
|
|
332
|
+
# - `status`: The `Process::Status` result of the command execution.
|
|
333
333
|
#
|
|
334
334
|
# #### Usage
|
|
335
335
|
#
|
|
336
336
|
# stat = @ctx.system('ls', 'a_folder')
|
|
337
337
|
#
|
|
338
338
|
def system(*args, **kwargs)
|
|
339
|
-
CLI::Kit::System.system(*args, env: @env, **kwargs)
|
|
339
|
+
process_status = CLI::Kit::System.system(*args, env: @env, **kwargs)
|
|
340
|
+
unless process_status.success?
|
|
341
|
+
abort("System call failed: #{args.join(" ")}")
|
|
342
|
+
end
|
|
343
|
+
process_status
|
|
340
344
|
end
|
|
341
345
|
|
|
342
346
|
# Execute a command in the user's environment
|
|
@@ -410,13 +414,13 @@ module ShopifyCli
|
|
|
410
414
|
#
|
|
411
415
|
def on_siginfo
|
|
412
416
|
# Reset any previous SIGINFO handling we had so the only action we take is the given block
|
|
413
|
-
trap(
|
|
417
|
+
trap("INFO", "DEFAULT")
|
|
414
418
|
|
|
415
419
|
fork do
|
|
416
420
|
begin
|
|
417
421
|
r, w = IO.pipe
|
|
418
422
|
@signal = false
|
|
419
|
-
trap(
|
|
423
|
+
trap("SIGINFO") do
|
|
420
424
|
@signal = true
|
|
421
425
|
w.write(0)
|
|
422
426
|
end
|
|
@@ -442,8 +446,8 @@ module ShopifyCli
|
|
|
442
446
|
# @todo This is currently a duplicate of CLI::Kit::System.which() - we should make that method public when we make
|
|
443
447
|
# Kit changes and make this a wrapper instead.
|
|
444
448
|
def which(cmd)
|
|
445
|
-
exts = ENV[
|
|
446
|
-
ENV[
|
|
449
|
+
exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""]
|
|
450
|
+
ENV["PATH"].split(File::PATH_SEPARATOR).each do |path|
|
|
447
451
|
exts.each do |ext|
|
|
448
452
|
exe = File.join(File.expand_path(path), "#{cmd}#{ext}")
|
|
449
453
|
return exe if File.executable?(exe) && !File.directory?(exe)
|
|
@@ -470,10 +474,27 @@ module ShopifyCli
|
|
|
470
474
|
end
|
|
471
475
|
end
|
|
472
476
|
|
|
477
|
+
# Returns file extension depending on OS
|
|
478
|
+
# since windows has multiple extensions, the default is .exe unless otherwise specified
|
|
479
|
+
#
|
|
480
|
+
# #### Parameters
|
|
481
|
+
# - ext: optional extension for windows file
|
|
482
|
+
#
|
|
483
|
+
# #### Returns
|
|
484
|
+
# - ext: string for file extension on windows
|
|
485
|
+
# : empty string otherwise
|
|
486
|
+
def executable_file_extension(ext = ".exe")
|
|
487
|
+
if windows?
|
|
488
|
+
ext
|
|
489
|
+
else
|
|
490
|
+
""
|
|
491
|
+
end
|
|
492
|
+
end
|
|
493
|
+
|
|
473
494
|
private
|
|
474
495
|
|
|
475
496
|
def ctx_path(fname)
|
|
476
|
-
require
|
|
497
|
+
require "pathname"
|
|
477
498
|
if Pathname.new(fname).absolute?
|
|
478
499
|
fname
|
|
479
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,
|
|
@@ -101,14 +101,16 @@ module ShopifyCli
|
|
|
101
101
|
uname: RbConfig::CONFIG["host"],
|
|
102
102
|
cli_version: ShopifyCli::VERSION,
|
|
103
103
|
ruby_version: RUBY_VERSION,
|
|
104
|
+
is_employee: ShopifyCli::Shopifolk.acting_as_shopify_organization?,
|
|
104
105
|
}.tap do |payload|
|
|
105
|
-
payload[:
|
|
106
|
-
|
|
106
|
+
payload[:api_key] = metadata.delete(:api_key)
|
|
107
|
+
payload[:partner_id] = metadata.delete(:organization_id)
|
|
107
108
|
if Project.has_current?
|
|
108
|
-
project = Project.current
|
|
109
|
+
project = Project.current(force_reload: true)
|
|
109
110
|
payload[:api_key] = project.env&.api_key
|
|
110
|
-
payload[:partner_id] = project.config[
|
|
111
|
+
payload[:partner_id] = project.config["organization_id"]
|
|
111
112
|
end
|
|
113
|
+
payload[:metadata] = JSON.dump(metadata) unless metadata.empty?
|
|
112
114
|
end,
|
|
113
115
|
}
|
|
114
116
|
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
|
|
@@ -87,8 +87,6 @@ module ShopifyCli
|
|
|
87
87
|
ShopifyCli::Config.get_bool(SECTION, feature.to_s)
|
|
88
88
|
end
|
|
89
89
|
|
|
90
|
-
private
|
|
91
|
-
|
|
92
90
|
def set(feature, value)
|
|
93
91
|
ShopifyCli::Config.set(SECTION, feature.to_s, value)
|
|
94
92
|
end
|
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
|