shopify-cli 0.9.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 +7 -0
- data/.github/CODEOWNERS +1 -0
- data/.github/CODE_OF_CONDUCT.md +73 -0
- data/.github/CONTRIBUTING.md +51 -0
- data/.github/DESIGN.md +153 -0
- data/.github/ISSUE_TEMPLATE.md +38 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +22 -0
- data/.github/probots.yml +3 -0
- data/.gitignore +19 -0
- data/.rubocop.yml +47 -0
- data/.ruby-version +1 -0
- data/.travis.yml +12 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +77 -0
- data/LICENSE.md +7 -0
- data/README.md +13 -0
- data/Rakefile +101 -0
- data/SECURITY.md +59 -0
- data/Vagrantfile +17 -0
- data/bin/load_shopify.rb +20 -0
- data/bin/shopify +32 -0
- data/dev.yml +17 -0
- data/docs/Gemfile +5 -0
- data/docs/Gemfile.lock +248 -0
- data/docs/_config.yml +16 -0
- data/docs/_data/nav.yml +26 -0
- data/docs/_includes/footer.html +15 -0
- data/docs/_includes/head.html +19 -0
- data/docs/_includes/sidebar_nav.html +22 -0
- data/docs/_includes/toc.html +112 -0
- data/docs/_layouts/default.html +79 -0
- data/docs/app/node/commands/index.md +82 -0
- data/docs/app/node/index.md +35 -0
- data/docs/app/rails/commands/index.md +80 -0
- data/docs/app/rails/index.md +36 -0
- data/docs/core/index.md +70 -0
- data/docs/css/docs.css +157 -0
- data/docs/getting-started/index.md +61 -0
- data/docs/help/start-app/index.md +6 -0
- data/docs/images/header.png +0 -0
- data/docs/index.md +27 -0
- data/docs/installing-ruby.md +28 -0
- data/ext/shopify-cli/extconf.rb +27 -0
- data/install.sh +7 -0
- data/lib/docgen/class_template.md.erb +81 -0
- data/lib/docgen/index_template.md.erb +5 -0
- data/lib/docgen/markdown.rb +101 -0
- data/lib/graphql/admin_introspection.graphql +87 -0
- data/lib/graphql/all_organizations.graphql +19 -0
- data/lib/graphql/all_orgs_with_apps.graphql +30 -0
- data/lib/graphql/api_versions.graphql +6 -0
- data/lib/graphql/convert_dev_to_test_store.graphql +10 -0
- data/lib/graphql/create_app.graphql +20 -0
- data/lib/graphql/create_customer.graphql +9 -0
- data/lib/graphql/create_draft_order.graphql +8 -0
- data/lib/graphql/create_product.graphql +9 -0
- data/lib/graphql/extension_create.graphql +21 -0
- data/lib/graphql/extension_update_draft.graphql +18 -0
- data/lib/graphql/find_organization.graphql +17 -0
- data/lib/graphql/get_app_urls.graphql +6 -0
- data/lib/graphql/update_dashboard_urls.graphql +8 -0
- data/lib/project_types/extension/cli.rb +71 -0
- data/lib/project_types/extension/commands/build.rb +29 -0
- data/lib/project_types/extension/commands/create.rb +49 -0
- data/lib/project_types/extension/commands/extension_command.rb +22 -0
- data/lib/project_types/extension/commands/push.rb +69 -0
- data/lib/project_types/extension/commands/register.rb +78 -0
- data/lib/project_types/extension/commands/serve.rb +24 -0
- data/lib/project_types/extension/commands/tunnel.rb +69 -0
- data/lib/project_types/extension/extension_project.rb +85 -0
- data/lib/project_types/extension/extension_project_keys.rb +10 -0
- data/lib/project_types/extension/features/argo.rb +48 -0
- data/lib/project_types/extension/features/argo_dependencies.rb +28 -0
- data/lib/project_types/extension/features/argo_setup.rb +54 -0
- data/lib/project_types/extension/features/argo_setup_step.rb +31 -0
- data/lib/project_types/extension/features/argo_setup_steps.rb +53 -0
- data/lib/project_types/extension/features/tunnel_url.rb +20 -0
- data/lib/project_types/extension/forms/create.rb +52 -0
- data/lib/project_types/extension/forms/register.rb +48 -0
- data/lib/project_types/extension/messages/message_loading.rb +37 -0
- data/lib/project_types/extension/messages/messages.rb +126 -0
- data/lib/project_types/extension/models/app.rb +14 -0
- data/lib/project_types/extension/models/registration.rb +19 -0
- data/lib/project_types/extension/models/type.rb +76 -0
- data/lib/project_types/extension/models/types/checkout_post_purchase.rb +20 -0
- data/lib/project_types/extension/models/types/subscription_management.rb +20 -0
- data/lib/project_types/extension/models/validation_error.rb +17 -0
- data/lib/project_types/extension/models/version.rb +15 -0
- data/lib/project_types/extension/tasks/converters/registration_converter.rb +26 -0
- data/lib/project_types/extension/tasks/converters/validation_error_converter.rb +25 -0
- data/lib/project_types/extension/tasks/converters/version_converter.rb +28 -0
- data/lib/project_types/extension/tasks/create_extension.rb +31 -0
- data/lib/project_types/extension/tasks/get_apps.rb +34 -0
- data/lib/project_types/extension/tasks/update_draft.rb +29 -0
- data/lib/project_types/extension/tasks/user_errors.rb +45 -0
- data/lib/project_types/node/cli.rb +37 -0
- data/lib/project_types/node/commands/create.rb +117 -0
- data/lib/project_types/node/commands/deploy.rb +22 -0
- data/lib/project_types/node/commands/deploy/heroku.rb +91 -0
- data/lib/project_types/node/commands/generate.rb +51 -0
- data/lib/project_types/node/commands/generate/billing.rb +37 -0
- data/lib/project_types/node/commands/generate/page.rb +55 -0
- data/lib/project_types/node/commands/generate/webhook.rb +33 -0
- data/lib/project_types/node/commands/open.rb +16 -0
- data/lib/project_types/node/commands/populate.rb +23 -0
- data/lib/project_types/node/commands/populate/customer.rb +31 -0
- data/lib/project_types/node/commands/populate/draft_order.rb +28 -0
- data/lib/project_types/node/commands/populate/product.rb +30 -0
- data/lib/project_types/node/commands/serve.rb +45 -0
- data/lib/project_types/node/commands/tunnel.rb +39 -0
- data/lib/project_types/node/forms/create.rb +87 -0
- data/lib/project_types/node/messages/messages.rb +260 -0
- data/lib/project_types/rails/cli.rb +41 -0
- data/lib/project_types/rails/commands/create.rb +126 -0
- data/lib/project_types/rails/commands/deploy.rb +22 -0
- data/lib/project_types/rails/commands/deploy/heroku.rb +113 -0
- data/lib/project_types/rails/commands/generate.rb +49 -0
- data/lib/project_types/rails/commands/generate/webhook.rb +39 -0
- data/lib/project_types/rails/commands/open.rb +16 -0
- data/lib/project_types/rails/commands/populate.rb +23 -0
- data/lib/project_types/rails/commands/populate/customer.rb +31 -0
- data/lib/project_types/rails/commands/populate/draft_order.rb +28 -0
- data/lib/project_types/rails/commands/populate/product.rb +30 -0
- data/lib/project_types/rails/commands/serve.rb +47 -0
- data/lib/project_types/rails/commands/tunnel.rb +39 -0
- data/lib/project_types/rails/forms/create.rb +116 -0
- data/lib/project_types/rails/gem.rb +56 -0
- data/lib/project_types/rails/messages/messages.rb +283 -0
- data/lib/project_types/rails/ruby.rb +17 -0
- data/lib/project_types/script/cli.rb +76 -0
- data/lib/project_types/script/commands/create.rb +45 -0
- data/lib/project_types/script/commands/disable.rb +36 -0
- data/lib/project_types/script/commands/enable.rb +46 -0
- data/lib/project_types/script/commands/push.rb +39 -0
- data/lib/project_types/script/config/extension_points.yml +18 -0
- data/lib/project_types/script/errors.rb +16 -0
- data/lib/project_types/script/forms/create.rb +29 -0
- data/lib/project_types/script/forms/enable.rb +24 -0
- data/lib/project_types/script/forms/push.rb +19 -0
- data/lib/project_types/script/forms/script_form.rb +66 -0
- data/lib/project_types/script/graphql/app_script_update_or_create.graphql +27 -0
- data/lib/project_types/script/graphql/script_service_proxy.graphql +8 -0
- data/lib/project_types/script/graphql/shop_script_delete.graphql +14 -0
- data/lib/project_types/script/graphql/shop_script_update_or_create.graphql +28 -0
- data/lib/project_types/script/layers/application/build_script.rb +43 -0
- data/lib/project_types/script/layers/application/create_script.rb +47 -0
- data/lib/project_types/script/layers/application/disable_script.rb +19 -0
- data/lib/project_types/script/layers/application/enable_script.rb +21 -0
- data/lib/project_types/script/layers/application/extension_points.rb +17 -0
- data/lib/project_types/script/layers/application/project_dependencies.rb +34 -0
- data/lib/project_types/script/layers/application/push_script.rb +30 -0
- data/lib/project_types/script/layers/domain/errors.rb +25 -0
- data/lib/project_types/script/layers/domain/extension_point.rb +29 -0
- data/lib/project_types/script/layers/domain/push_package.rb +29 -0
- data/lib/project_types/script/layers/domain/script.rb +18 -0
- data/lib/project_types/script/layers/infrastructure/assemblyscript_dependency_manager.rb +73 -0
- data/lib/project_types/script/layers/infrastructure/assemblyscript_tsconfig.rb +38 -0
- data/lib/project_types/script/layers/infrastructure/assemblyscript_wasm_builder.rb +39 -0
- data/lib/project_types/script/layers/infrastructure/dependency_manager.rb +36 -0
- data/lib/project_types/script/layers/infrastructure/errors.rb +38 -0
- data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +31 -0
- data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +47 -0
- data/lib/project_types/script/layers/infrastructure/script_builder.rb +34 -0
- data/lib/project_types/script/layers/infrastructure/script_repository.rb +89 -0
- data/lib/project_types/script/layers/infrastructure/script_service.rb +165 -0
- data/lib/project_types/script/layers/infrastructure/test_suite_repository.rb +59 -0
- data/lib/project_types/script/messages/messages.rb +204 -0
- data/lib/project_types/script/script_project.rb +37 -0
- data/lib/project_types/script/templates/ts/as-pect.config.js +21 -0
- data/lib/project_types/script/ui/error_handler.rb +136 -0
- data/lib/project_types/script/ui/strict_spinner.rb +22 -0
- data/lib/rubygems_plugin.rb +18 -0
- data/lib/shopify-cli/admin_api.rb +99 -0
- data/lib/shopify-cli/admin_api/populate_resource_command.rb +165 -0
- data/lib/shopify-cli/admin_api/schema.rb +32 -0
- data/lib/shopify-cli/api.rb +104 -0
- data/lib/shopify-cli/command.rb +67 -0
- data/lib/shopify-cli/commands.rb +28 -0
- data/lib/shopify-cli/commands/connect.rb +108 -0
- data/lib/shopify-cli/commands/create.rb +50 -0
- data/lib/shopify-cli/commands/help.rb +79 -0
- data/lib/shopify-cli/commands/logout.rb +23 -0
- data/lib/shopify-cli/commands/system.rb +135 -0
- data/lib/shopify-cli/commands/version.rb +15 -0
- data/lib/shopify-cli/context.rb +372 -0
- data/lib/shopify-cli/core.rb +9 -0
- data/lib/shopify-cli/core/entry_point.rb +40 -0
- data/lib/shopify-cli/core/executor.rb +21 -0
- data/lib/shopify-cli/core/help_resolver.rb +20 -0
- data/lib/shopify-cli/core/monorail.rb +118 -0
- data/lib/shopify-cli/db.rb +114 -0
- data/lib/shopify-cli/form.rb +40 -0
- data/lib/shopify-cli/git.rb +141 -0
- data/lib/shopify-cli/helpers.rb +5 -0
- data/lib/shopify-cli/helpers/haikunator.rb +92 -0
- data/lib/shopify-cli/heroku.rb +97 -0
- data/lib/shopify-cli/js_deps.rb +110 -0
- data/lib/shopify-cli/js_system.rb +98 -0
- data/lib/shopify-cli/messages/messages.rb +287 -0
- data/lib/shopify-cli/oauth.rb +192 -0
- data/lib/shopify-cli/oauth/servlet.rb +61 -0
- data/lib/shopify-cli/options.rb +40 -0
- data/lib/shopify-cli/packager.rb +116 -0
- data/lib/shopify-cli/partners_api.rb +114 -0
- data/lib/shopify-cli/partners_api/organizations.rb +32 -0
- data/lib/shopify-cli/process_supervision.rb +187 -0
- data/lib/shopify-cli/project.rb +191 -0
- data/lib/shopify-cli/project_type.rb +83 -0
- data/lib/shopify-cli/resources.rb +5 -0
- data/lib/shopify-cli/resources/env_file.rb +96 -0
- data/lib/shopify-cli/sub_command.rb +15 -0
- data/lib/shopify-cli/task.rb +10 -0
- data/lib/shopify-cli/tasks.rb +32 -0
- data/lib/shopify-cli/tasks/create_api_client.rb +29 -0
- data/lib/shopify-cli/tasks/ensure_dev_store.rb +41 -0
- data/lib/shopify-cli/tasks/ensure_env.rb +31 -0
- data/lib/shopify-cli/tasks/ensure_loopback_url.rb +20 -0
- data/lib/shopify-cli/tasks/update_dashboard_urls.rb +44 -0
- data/lib/shopify-cli/tunnel.rb +154 -0
- data/lib/shopify-cli/version.rb +3 -0
- data/lib/shopify_cli.rb +132 -0
- data/shopify-cli.gemspec +40 -0
- data/shopify.fish +12 -0
- data/shopify.sh +11 -0
- data/vendor/deps/cli-kit/REVISION +1 -0
- data/vendor/deps/cli-kit/lib/cli/kit.rb +60 -0
- data/vendor/deps/cli-kit/lib/cli/kit/autocall.rb +21 -0
- data/vendor/deps/cli-kit/lib/cli/kit/base_command.rb +49 -0
- data/vendor/deps/cli-kit/lib/cli/kit/command_registry.rb +94 -0
- data/vendor/deps/cli-kit/lib/cli/kit/config.rb +133 -0
- data/vendor/deps/cli-kit/lib/cli/kit/error_handler.rb +115 -0
- data/vendor/deps/cli-kit/lib/cli/kit/executor.rb +81 -0
- data/vendor/deps/cli-kit/lib/cli/kit/ini.rb +102 -0
- data/vendor/deps/cli-kit/lib/cli/kit/levenshtein.rb +82 -0
- data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +76 -0
- data/vendor/deps/cli-kit/lib/cli/kit/resolver.rb +60 -0
- data/vendor/deps/cli-kit/lib/cli/kit/ruby_backports/enumerable.rb +6 -0
- data/vendor/deps/cli-kit/lib/cli/kit/support.rb +9 -0
- data/vendor/deps/cli-kit/lib/cli/kit/support/test_helper.rb +244 -0
- data/vendor/deps/cli-kit/lib/cli/kit/system.rb +207 -0
- data/vendor/deps/cli-kit/lib/cli/kit/util.rb +189 -0
- data/vendor/deps/cli-kit/lib/cli/kit/version.rb +5 -0
- data/vendor/deps/cli-ui/REVISION +1 -0
- data/vendor/deps/cli-ui/lib/cli/ui.rb +187 -0
- data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +153 -0
- data/vendor/deps/cli-ui/lib/cli/ui/box.rb +15 -0
- data/vendor/deps/cli-ui/lib/cli/ui/color.rb +79 -0
- data/vendor/deps/cli-ui/lib/cli/ui/formatter.rb +179 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +310 -0
- data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +78 -0
- data/vendor/deps/cli-ui/lib/cli/ui/progress.rb +88 -0
- data/vendor/deps/cli-ui/lib/cli/ui/prompt.rb +248 -0
- data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +472 -0
- data/vendor/deps/cli-ui/lib/cli/ui/prompt/options_handler.rb +24 -0
- data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +48 -0
- data/vendor/deps/cli-ui/lib/cli/ui/spinner/async.rb +40 -0
- data/vendor/deps/cli-ui/lib/cli/ui/spinner/spin_group.rb +241 -0
- data/vendor/deps/cli-ui/lib/cli/ui/stdout_router.rb +227 -0
- data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +36 -0
- data/vendor/deps/cli-ui/lib/cli/ui/truncater.rb +102 -0
- data/vendor/deps/cli-ui/lib/cli/ui/version.rb +5 -0
- data/vendor/deps/smart_properties/REVISION +1 -0
- data/vendor/deps/smart_properties/lib/smart_properties.rb +174 -0
- data/vendor/deps/smart_properties/lib/smart_properties/errors.rb +114 -0
- data/vendor/deps/smart_properties/lib/smart_properties/property.rb +162 -0
- data/vendor/deps/smart_properties/lib/smart_properties/property_collection.rb +83 -0
- data/vendor/deps/smart_properties/lib/smart_properties/validations.rb +8 -0
- data/vendor/deps/smart_properties/lib/smart_properties/validations/ancestor.rb +27 -0
- data/vendor/deps/smart_properties/lib/smart_properties/version.rb +3 -0
- data/vendor/lib/semantic/LICENSE +20 -0
- data/vendor/lib/semantic/semantic.rb +4 -0
- data/vendor/lib/semantic/version.rb +180 -0
- metadata +374 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Copyright (c) 2015 Usman Bashir
|
|
2
|
+
#
|
|
3
|
+
# MIT License
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
# a copy of this software and associated documentation files (the
|
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
# the following conditions:
|
|
12
|
+
#
|
|
13
|
+
# The above copyright notice and this permission notice shall be
|
|
14
|
+
# included in all copies or substantial portions of the Software.
|
|
15
|
+
#
|
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
|
+
|
|
24
|
+
require "securerandom"
|
|
25
|
+
|
|
26
|
+
module ShopifyCli
|
|
27
|
+
module Helpers
|
|
28
|
+
module Haikunator
|
|
29
|
+
class << self
|
|
30
|
+
def title
|
|
31
|
+
build(0, ' ')
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def haikunate(token_range = 9999, delimiter = "-")
|
|
35
|
+
build(token_range, delimiter)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def name
|
|
39
|
+
first = nouns[random_seed % nouns.length]
|
|
40
|
+
last = adjectives[random_seed % adjectives.length]
|
|
41
|
+
[first, last]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def build(token_range, delimiter)
|
|
47
|
+
sections = [
|
|
48
|
+
adjectives[random_seed % adjectives.length],
|
|
49
|
+
nouns[random_seed % nouns.length],
|
|
50
|
+
token(token_range),
|
|
51
|
+
]
|
|
52
|
+
|
|
53
|
+
sections.compact.join(delimiter)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def random_seed
|
|
57
|
+
SecureRandom.random_number(4096)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def token(range)
|
|
61
|
+
SecureRandom.random_number(range) if range > 0
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def adjectives
|
|
65
|
+
%w(
|
|
66
|
+
autumn hidden bitter misty silent empty dry dark summer
|
|
67
|
+
icy delicate quiet white cool spring winter patient
|
|
68
|
+
twilight dawn crimson wispy weathered blue billowing
|
|
69
|
+
broken cold damp falling frosty green long late lingering
|
|
70
|
+
bold little morning muddy old red rough still small
|
|
71
|
+
sparkling throbbing shy wandering withered wild black
|
|
72
|
+
young holy solitary fragrant aged snowy proud floral
|
|
73
|
+
restless divine polished ancient purple lively nameless
|
|
74
|
+
)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def nouns
|
|
78
|
+
%w(
|
|
79
|
+
waterfall river breeze moon rain wind sea morning
|
|
80
|
+
snow lake sunset pine shadow leaf dawn glitter forest
|
|
81
|
+
hill cloud meadow sun glade bird brook butterfly
|
|
82
|
+
bush dew dust field fire flower firefly feather grass
|
|
83
|
+
haze mountain night pond darkness snowflake silence
|
|
84
|
+
sound sky shape surf thunder violet water wildflower
|
|
85
|
+
wave water resonance sun wood dream cherry tree fog
|
|
86
|
+
frost voice paper frog smoke star
|
|
87
|
+
)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
module ShopifyCli
|
|
2
|
+
class Heroku
|
|
3
|
+
DOWNLOAD_URLS = {
|
|
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-win32-x64.tar.gz',
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
def initialize(ctx)
|
|
10
|
+
@ctx = ctx
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def app
|
|
14
|
+
return nil unless (app = git_remote)
|
|
15
|
+
app = app.split('/').last
|
|
16
|
+
app = app.split('.').first
|
|
17
|
+
app
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def authenticate
|
|
21
|
+
result = @ctx.system(heroku_command, 'login')
|
|
22
|
+
@ctx.abort(@ctx.message('core.heroku.error.authentication')) unless result.success?
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def create_new_app
|
|
26
|
+
output, status = @ctx.capture2e(heroku_command, 'create')
|
|
27
|
+
@ctx.abort(@ctx.message('core.heroku.error.creation')) unless status.success?
|
|
28
|
+
@ctx.puts(output)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def deploy(branch_to_deploy)
|
|
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
|
+
end
|
|
35
|
+
|
|
36
|
+
def download
|
|
37
|
+
return if installed?
|
|
38
|
+
|
|
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
|
+
end
|
|
43
|
+
|
|
44
|
+
def install
|
|
45
|
+
return if installed?
|
|
46
|
+
|
|
47
|
+
result = @ctx.system('tar', '-xf', download_path, chdir: ShopifyCli::CACHE_DIR)
|
|
48
|
+
@ctx.abort(@ctx.message('core.heroku.error.install')) unless result.success?
|
|
49
|
+
|
|
50
|
+
@ctx.rm(download_path)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def select_existing_app(app_name)
|
|
54
|
+
result = @ctx.system(heroku_command, 'git:remote', '-a', app_name)
|
|
55
|
+
|
|
56
|
+
msg = @ctx.message('core.heroku.error.could_not_select_app', app_name)
|
|
57
|
+
@ctx.abort(msg) unless result.success?
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def whoami
|
|
61
|
+
output, status = @ctx.capture2e(heroku_command, 'whoami')
|
|
62
|
+
return output.strip if status.success?
|
|
63
|
+
nil
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
private
|
|
67
|
+
|
|
68
|
+
def download_filename
|
|
69
|
+
URI.parse(DOWNLOAD_URLS[@ctx.os]).path.split('/').last
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def download_path
|
|
73
|
+
File.join(ShopifyCli::CACHE_DIR, download_filename)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def git_remote
|
|
77
|
+
output, status = @ctx.capture2e('git', 'remote', 'get-url', 'heroku')
|
|
78
|
+
status.success? ? output : nil
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def heroku_command
|
|
82
|
+
local_path = File.join(ShopifyCli::CACHE_DIR, 'heroku', 'bin', 'heroku').to_s
|
|
83
|
+
if File.exist?(local_path)
|
|
84
|
+
local_path
|
|
85
|
+
else
|
|
86
|
+
'heroku'
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def installed?
|
|
91
|
+
_output, status = @ctx.capture2e(heroku_command, '--version')
|
|
92
|
+
status.success?
|
|
93
|
+
rescue
|
|
94
|
+
false
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
require 'shopify_cli'
|
|
2
|
+
|
|
3
|
+
module ShopifyCli
|
|
4
|
+
##
|
|
5
|
+
# ShopifyCli::JsDeps ensures that all JavaScript dependencies are installed for projects.
|
|
6
|
+
#
|
|
7
|
+
class JsDeps
|
|
8
|
+
include SmartProperties
|
|
9
|
+
|
|
10
|
+
property! :ctx, accepts: ShopifyCli::Context
|
|
11
|
+
property! :system, accepts: JsSystem, default: -> { JsSystem.new(ctx: ctx) }
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Proxy to instance method ShopifyCli::JsDeps.new.install.
|
|
15
|
+
#
|
|
16
|
+
# #### Parameters
|
|
17
|
+
# - `ctx`: running context from your command
|
|
18
|
+
# - `verbose`: whether to run the installation tools in silent mode
|
|
19
|
+
#
|
|
20
|
+
# #### Example
|
|
21
|
+
#
|
|
22
|
+
# ShopifyCli::JsDeps.install(ctx)
|
|
23
|
+
#
|
|
24
|
+
def self.install(ctx, verbose = false)
|
|
25
|
+
new(ctx: ctx).install(verbose)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
##
|
|
29
|
+
# Installs all of a project's JavaScript dependencies using Yarn or NPM, based on the project's settings.
|
|
30
|
+
#
|
|
31
|
+
# #### Parameters
|
|
32
|
+
# - `verbose`: whether to run the installation tools in silent mode
|
|
33
|
+
#
|
|
34
|
+
# #### Example
|
|
35
|
+
#
|
|
36
|
+
# # context is the running context for the command
|
|
37
|
+
# ShopifyCli::JsDeps.new(context).install(true)
|
|
38
|
+
#
|
|
39
|
+
def install(verbose = false)
|
|
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
|
+
|
|
44
|
+
CLI::UI::Frame.open(title, success_text: success, failure_text: failure) do
|
|
45
|
+
@system.call(
|
|
46
|
+
yarn: -> { yarn(verbose) },
|
|
47
|
+
npm: -> { npm(verbose) }
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
def yarn(verbose = false)
|
|
55
|
+
cmd = %w(yarn install)
|
|
56
|
+
cmd << '--silent' unless verbose
|
|
57
|
+
|
|
58
|
+
run_install_command(cmd)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def npm(verbose = false)
|
|
62
|
+
cmd = %w(npm install --no-audit --no-optional)
|
|
63
|
+
cmd << '--quiet' unless verbose
|
|
64
|
+
|
|
65
|
+
run_install_command(cmd)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def run_install_command(cmd)
|
|
69
|
+
deps = parse_dependencies
|
|
70
|
+
errors = nil
|
|
71
|
+
|
|
72
|
+
spinner_title = ctx.message('core.js_deps.installing_deps', deps.size)
|
|
73
|
+
success = CLI::UI::Spinner.spin(spinner_title, auto_debrief: false) do |spinner|
|
|
74
|
+
_, errors, status = CLI::Kit::System.capture3(*cmd, env: @ctx.env, chdir: ctx.root)
|
|
75
|
+
update_spinner_title_and_status(spinner, status, deps)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
errors.lines.each { |e| ctx.puts e } unless success || errors.nil?
|
|
79
|
+
success
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def update_spinner_title_and_status(spinner, status, deps)
|
|
83
|
+
if status.success?
|
|
84
|
+
spinner.update_title(ctx.message('core.js_deps.installed_deps', deps.size))
|
|
85
|
+
else
|
|
86
|
+
spinner.update_title(ctx.message('core.js_deps.error.install_spinner_error', deps.size))
|
|
87
|
+
CLI::UI::Spinner::TASK_FAILED
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def parse_dependencies
|
|
92
|
+
package_json = File.join(ctx.root, 'package.json')
|
|
93
|
+
pkg = begin
|
|
94
|
+
JSON.parse(File.read(package_json))
|
|
95
|
+
rescue Errno::ENOENT, Errno::ENOTDIR
|
|
96
|
+
ctx.abort(ctx.message('core.js_deps.error.missing_package', package_json))
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
%w(dependencies devDependencies).map do |key|
|
|
100
|
+
pkg.fetch(key, []).keys
|
|
101
|
+
end.flatten
|
|
102
|
+
rescue JSON::ParserError
|
|
103
|
+
ctx.puts(
|
|
104
|
+
ctx.message('core.js_deps.error.invalid_package', File.read(File.join(path, 'package.json'))),
|
|
105
|
+
error: true
|
|
106
|
+
)
|
|
107
|
+
raise ShopifyCli::AbortSilent
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
require 'shopify_cli'
|
|
2
|
+
|
|
3
|
+
module ShopifyCli
|
|
4
|
+
##
|
|
5
|
+
# ShopifyCli::JsSystem allows conditional system calls of npm or yarn commands.
|
|
6
|
+
#
|
|
7
|
+
class JsSystem
|
|
8
|
+
include SmartProperties
|
|
9
|
+
|
|
10
|
+
YARN_CORE_COMMAND = 'yarn'
|
|
11
|
+
NPM_CORE_COMMAND = 'npm'
|
|
12
|
+
|
|
13
|
+
class << self
|
|
14
|
+
##
|
|
15
|
+
# Proxy to instance method `ShopifyCli::JsSystem.new.yarn?`
|
|
16
|
+
#
|
|
17
|
+
# #### Parameters
|
|
18
|
+
# - `ctx`: running context from your command
|
|
19
|
+
#
|
|
20
|
+
# #### Example
|
|
21
|
+
#
|
|
22
|
+
# ShopifyCli::JsSystem.yarn?(ctx)
|
|
23
|
+
#
|
|
24
|
+
def yarn?(ctx)
|
|
25
|
+
JsSystem.new(ctx: ctx).yarn?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
##
|
|
29
|
+
# Proxy to instance method `ShopifyCli::JsSystem.new.call`
|
|
30
|
+
#
|
|
31
|
+
# #### Parameters
|
|
32
|
+
# - `ctx`: running context from your command
|
|
33
|
+
# - `yarn`: The proc, array, or string command to run if yarn is available
|
|
34
|
+
# - `npm`: The proc, array, or string command to run if npm is available
|
|
35
|
+
#
|
|
36
|
+
# #### Example
|
|
37
|
+
#
|
|
38
|
+
# ShopifyCli::JsSystem.call(ctx, yarn: ['install', '--silent'], npm: ['install', '--no-audit'])
|
|
39
|
+
#
|
|
40
|
+
def call(ctx, yarn:, npm:)
|
|
41
|
+
JsSystem.new(ctx: ctx).call(yarn: yarn, npm: npm)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
property :ctx, accepts: ShopifyCli::Context
|
|
46
|
+
|
|
47
|
+
##
|
|
48
|
+
# Returns the name of the JS package manager being used
|
|
49
|
+
#
|
|
50
|
+
# #### Example
|
|
51
|
+
#
|
|
52
|
+
# ShopifyCli::JsSystem.new(ctx: ctx).package_manager
|
|
53
|
+
#
|
|
54
|
+
def package_manager
|
|
55
|
+
yarn? ? YARN_CORE_COMMAND : NPM_CORE_COMMAND
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
##
|
|
59
|
+
# Returns true if yarn is available and false otherwise
|
|
60
|
+
#
|
|
61
|
+
# #### Example
|
|
62
|
+
#
|
|
63
|
+
# ShopifyCli::JsSystem.new(ctx: ctx).yarn?
|
|
64
|
+
#
|
|
65
|
+
def yarn?
|
|
66
|
+
@has_yarn ||= begin
|
|
67
|
+
_, status = CLI::Kit::System.capture2('which', 'yarn')
|
|
68
|
+
File.exist?(File.join(ctx.root, 'yarn.lock')) && status.success?
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
##
|
|
73
|
+
# Runs a command with the proper JS package manager depending on the result of `yarn?`
|
|
74
|
+
#
|
|
75
|
+
# #### Parameters
|
|
76
|
+
# - `ctx`: running context from your command
|
|
77
|
+
# - `yarn`: The proc, array, or string command to run if yarn is available
|
|
78
|
+
# - `npm`: The proc, array, or string command to run if npm is available
|
|
79
|
+
#
|
|
80
|
+
# #### Example
|
|
81
|
+
#
|
|
82
|
+
# ShopifyCli::JsSystem.new(ctx: ctx).call(yarn: ['install', '--silent'], npm: ['install', '--no-audit'])
|
|
83
|
+
#
|
|
84
|
+
def call(yarn:, npm:)
|
|
85
|
+
yarn? ? call_command(yarn, YARN_CORE_COMMAND) : call_command(npm, NPM_CORE_COMMAND)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
private
|
|
89
|
+
|
|
90
|
+
def call_command(command, core_command)
|
|
91
|
+
if command.is_a?(String) || command.is_a?(Array)
|
|
92
|
+
CLI::Kit::System.system(core_command, *command, chdir: ctx.root).success?
|
|
93
|
+
else
|
|
94
|
+
command.call
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ShopifyCli
|
|
4
|
+
module Messages
|
|
5
|
+
MESSAGES = {
|
|
6
|
+
core: {
|
|
7
|
+
connect: {
|
|
8
|
+
help: <<~HELP,
|
|
9
|
+
Connect (or re-connect) an existing project to a Shopify partner organization and/or a store. Creates or updates the {{green:.env}} file, and creates the {{green:.shopify-cli.yml}} file.
|
|
10
|
+
Usage: {{command:%s connect}}
|
|
11
|
+
HELP
|
|
12
|
+
|
|
13
|
+
production_warning: <<~MESSAGE,
|
|
14
|
+
{{yellow:! Warning: if you have connected to an {{bold:app in production}}, running {{command:serve}} may update the app URL and cause an outage.
|
|
15
|
+
MESSAGE
|
|
16
|
+
already_connected_warning: "{{yellow:! This app appears to be already connected}}",
|
|
17
|
+
connected: "{{v}} Project now connected to {{green:%s}}",
|
|
18
|
+
project_type_select: "What type of project would you like to connect?",
|
|
19
|
+
organization_select: "To which partner organization does this project belong?",
|
|
20
|
+
app_select: "To which app does this project belong?",
|
|
21
|
+
no_development_stores: <<~MESSAGE,
|
|
22
|
+
No development stores available.
|
|
23
|
+
Visit {{underline:https://partners.shopify.com/%d/stores}} to create one
|
|
24
|
+
MESSAGE
|
|
25
|
+
development_store_select: "Which development store would you like to use?",
|
|
26
|
+
cli_yml_saved: ".shopify-cli.yml saved to project root",
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
context: {
|
|
30
|
+
open_url: <<~OPEN,
|
|
31
|
+
Please open this URL in your browser:
|
|
32
|
+
{{green:%s}}
|
|
33
|
+
OPEN
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
create: {
|
|
37
|
+
help: <<~HELP,
|
|
38
|
+
Create a new project.
|
|
39
|
+
Usage: {{command:%s create [ %s ]}}
|
|
40
|
+
HELP
|
|
41
|
+
|
|
42
|
+
error: {
|
|
43
|
+
invalid_app_type: "{{red:Error}}: invalid app type {{bold:%s}}",
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
project_type_select: "What type of project would you like to create?",
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
env_file: {
|
|
50
|
+
saving_header: "writing %s file...",
|
|
51
|
+
saving: "writing %s file",
|
|
52
|
+
saved: "%s saved to project root",
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
git: {
|
|
56
|
+
error: {
|
|
57
|
+
directory_exists: "Project directory already exists. Please create a project with a new name.",
|
|
58
|
+
no_branches_found: "Could not find any git branches",
|
|
59
|
+
repo_not_initiated: "Git repo is not initiated. Please run `git init` and make at least one commit.",
|
|
60
|
+
no_commits_made: "No git commits have been made. Please make at least one commit.",
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
cloning: "Cloning into %s...",
|
|
64
|
+
cloned: "Cloned into %s",
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
help: {
|
|
68
|
+
error: {
|
|
69
|
+
command_not_found: "Command %s not found.",
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
preamble: <<~MESSAGE,
|
|
73
|
+
Use {{command:%s help <command>}} to display detailed information about a specific command.
|
|
74
|
+
|
|
75
|
+
{{bold:Available core commands:}}
|
|
76
|
+
|
|
77
|
+
MESSAGE
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
heroku: {
|
|
81
|
+
error: {
|
|
82
|
+
authentication: "Could not authenticate with Heroku",
|
|
83
|
+
creation: "Heroku app could not be created",
|
|
84
|
+
deploy: "Could not deploy to Heroku",
|
|
85
|
+
download: "Heroku CLI could not be downloaded",
|
|
86
|
+
install: "Could not install Heroku CLI",
|
|
87
|
+
could_not_select_app: "Heroku app `%s` could not be selected",
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
js_deps: {
|
|
92
|
+
error: {
|
|
93
|
+
missing_package: "expected to have a file at: %s",
|
|
94
|
+
invalid_package: "{{info:%s}} was not valid JSON. Fix this then try again",
|
|
95
|
+
install_spinner_error: "Unable to install all %d dependencies",
|
|
96
|
+
install_error: 'An error occurred while installing dependencies',
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
installing: "Installing dependencies with %s...",
|
|
100
|
+
installed: "Dependencies installed",
|
|
101
|
+
npm_installing_deps: "Installing %d dependencies...",
|
|
102
|
+
npm_installed_deps: "%d npm dependencies installed",
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
logout: {
|
|
106
|
+
help: <<~HELP,
|
|
107
|
+
Log out of a currently authenticated partner organization and store, or clear invalid credentials
|
|
108
|
+
Usage: {{command:%s logout}}
|
|
109
|
+
HELP
|
|
110
|
+
|
|
111
|
+
success: "Logged out of partner organization and store",
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
monorail: {
|
|
115
|
+
consent_prompt: <<~MSG,
|
|
116
|
+
Would you like to enable anonymous usage reporting?
|
|
117
|
+
If you select “Yes”, we’ll collect data about which commands you use and which errors you encounter.
|
|
118
|
+
Sharing this anonymous data helps Shopify improve this tool.
|
|
119
|
+
MSG
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
oauth: {
|
|
123
|
+
error: {
|
|
124
|
+
timeout: "Timed out while waiting for response from Shopify",
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
location: {
|
|
128
|
+
admin: "development store",
|
|
129
|
+
partner: "Shopify Partners account",
|
|
130
|
+
},
|
|
131
|
+
authentication_required:
|
|
132
|
+
"{{i}} Authentication required. Login to the URL below with your %s credentials to continue.",
|
|
133
|
+
|
|
134
|
+
servlet: {
|
|
135
|
+
success_response: "Authenticated successfully. You may now close this page.",
|
|
136
|
+
invalid_request_response: "Invalid request: %s",
|
|
137
|
+
invalid_state_response: "Anti-forgery state token does not match the initial request.",
|
|
138
|
+
authenticated: "Authenticated successfully",
|
|
139
|
+
not_authenticated: "Failed to authenticate",
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
|
|
143
|
+
options: {
|
|
144
|
+
help_text: "Print help for command",
|
|
145
|
+
},
|
|
146
|
+
|
|
147
|
+
partners_api: {
|
|
148
|
+
org_name_and_id: "%s (%s)",
|
|
149
|
+
error: {
|
|
150
|
+
account_not_found: <<~MESSAGE,
|
|
151
|
+
{{x}} error: Your account was not found. Please sign up at https://partners.shopify.com/signup
|
|
152
|
+
For authentication issues, run {{command:%s logout}} to clear invalid credentials
|
|
153
|
+
MESSAGE
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
|
|
157
|
+
populate: {
|
|
158
|
+
options: {
|
|
159
|
+
header: "{{bold:{{cyan:%s}} options:}}",
|
|
160
|
+
count_help: "Number of resources to generate",
|
|
161
|
+
},
|
|
162
|
+
populating: "Populating %d %ss...",
|
|
163
|
+
completion_message: <<~COMPLETION_MESSAGE,
|
|
164
|
+
Successfully added %d %s to {{green:%s}}
|
|
165
|
+
{{*}} View all %ss at {{underline:%s%ss}}
|
|
166
|
+
COMPLETION_MESSAGE
|
|
167
|
+
},
|
|
168
|
+
|
|
169
|
+
project: {
|
|
170
|
+
error: {
|
|
171
|
+
not_in_project: <<~MESSAGE,
|
|
172
|
+
{{x}} You are not in a Shopify app project
|
|
173
|
+
{{yellow:{{*}}}}{{reset: Run}}{{cyan: shopify create}}{{reset: to create your app}}
|
|
174
|
+
MESSAGE
|
|
175
|
+
cli_yaml: {
|
|
176
|
+
not_hash: "{{x}} .shopify-cli.yml was not a proper YAML file. Expecting a hash.",
|
|
177
|
+
invalid: "{{x}} %s contains invalid YAML: %s",
|
|
178
|
+
not_found: "{{x}} %s not found",
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
|
|
183
|
+
project_type: {
|
|
184
|
+
error: {
|
|
185
|
+
cannot_override_core: "Can't register duplicate core command '%s' from %s",
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
|
|
189
|
+
system: {
|
|
190
|
+
help: <<~HELP,
|
|
191
|
+
Print details about the development system.
|
|
192
|
+
Usage: {{command:%s system [all]}}
|
|
193
|
+
|
|
194
|
+
{{cyan:all}}: displays more details about development system and environment
|
|
195
|
+
|
|
196
|
+
HELP
|
|
197
|
+
|
|
198
|
+
error: {
|
|
199
|
+
unknown_option: "{{x}} {{red:unknown option '%s'}}",
|
|
200
|
+
},
|
|
201
|
+
|
|
202
|
+
header: "{{bold:Shopify App CLI}}",
|
|
203
|
+
const: "%17s = %s",
|
|
204
|
+
ruby_header: <<~RUBY_MESSAGE,
|
|
205
|
+
{{bold:Ruby (via RbConfig)}}
|
|
206
|
+
%s
|
|
207
|
+
RUBY_MESSAGE
|
|
208
|
+
rb_config: "%-25s - RbConfig[\"%s\"]",
|
|
209
|
+
command_header: "{{bold:Commands}}",
|
|
210
|
+
command_with_path: "{{v}} %s, %s",
|
|
211
|
+
command_not_found: "{{x}} %s",
|
|
212
|
+
ngrok_available: "{{v}} ngrok, %s",
|
|
213
|
+
ngrok_not_available: "{{x}} ngrok NOT available",
|
|
214
|
+
project: {
|
|
215
|
+
header: "{{bold:In a {{cyan:%s}} project directory}}",
|
|
216
|
+
command_with_path: "{{v}} %s, %s, version %s",
|
|
217
|
+
command_not_found: "{{x}} %s",
|
|
218
|
+
env_header: "{{bold:Project environment}}",
|
|
219
|
+
env_not_set: "not set",
|
|
220
|
+
env: "%-18s = %s",
|
|
221
|
+
no_env: "{{x}} .env file not present",
|
|
222
|
+
},
|
|
223
|
+
environment_header: "{{bold:Environment}}",
|
|
224
|
+
env: "%-17s = %s",
|
|
225
|
+
},
|
|
226
|
+
|
|
227
|
+
tasks: {
|
|
228
|
+
ensure_env: {
|
|
229
|
+
api_key_question: "What is your Shopify API key?",
|
|
230
|
+
api_secret_key_question: "What is your Shopify API secret key?",
|
|
231
|
+
development_store_question: "What is your development store URL? (Example: my-dev-store.myshopify.com)",
|
|
232
|
+
},
|
|
233
|
+
ensure_dev_store: {
|
|
234
|
+
could_not_verify_store: "Couldn't verify your store %s",
|
|
235
|
+
convert_to_dev_store: <<~MESSAGE,
|
|
236
|
+
Do you want to convert %s to a development store?
|
|
237
|
+
Doing this will allow you to install your app, but the store will become {{bold:transfer-disabled}}.
|
|
238
|
+
Learn more: https://shopify.dev/tutorials/transfer-a-development-store-to-a-merchant#transfer-disabled-stores
|
|
239
|
+
MESSAGE
|
|
240
|
+
transfer_disabled: "{{v}} Transfer has been disabled on %s.",
|
|
241
|
+
},
|
|
242
|
+
update_dashboard_urls: {
|
|
243
|
+
updated: "{{v}} Whitelist URLS updated in Partners Dashboard}}",
|
|
244
|
+
update_error:
|
|
245
|
+
"{{x}} error: For authentication issues, run {{command:%s logout}} to clear invalid credentials",
|
|
246
|
+
update_prompt: "Do you want to update your application url?",
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
|
|
250
|
+
tunnel: {
|
|
251
|
+
error: {
|
|
252
|
+
stop: "ngrok tunnel could not be stopped. Try running {{command:killall -9 ngrok}}",
|
|
253
|
+
url_fetch_failure: "Unable to fetch external url",
|
|
254
|
+
},
|
|
255
|
+
|
|
256
|
+
stopped: "{{green:x}} ngrok tunnel stopped",
|
|
257
|
+
not_running: "{{green:x}} ngrok tunnel not running",
|
|
258
|
+
start_with_account: "{{v}} ngrok tunnel running at {{underline:%s}}, with account %s",
|
|
259
|
+
start: "{{v}} ngrok tunnel running at {{underline:%s}}",
|
|
260
|
+
},
|
|
261
|
+
|
|
262
|
+
version: {
|
|
263
|
+
help: <<~HELP,
|
|
264
|
+
Prints version number.
|
|
265
|
+
Usage: {{command:%s version}}
|
|
266
|
+
HELP
|
|
267
|
+
},
|
|
268
|
+
|
|
269
|
+
warning: {
|
|
270
|
+
development_version: <<~DEVELOPMENT,
|
|
271
|
+
{{*}} {{yellow:You are running a development version of the CLI at:}}
|
|
272
|
+
{{yellow:%s}}
|
|
273
|
+
|
|
274
|
+
DEVELOPMENT
|
|
275
|
+
|
|
276
|
+
shell_shim: <<~MESSAGE,
|
|
277
|
+
{{x}} This version of Shopify App CLI is no longer supported. You’ll need to migrate to the new CLI version to continue.
|
|
278
|
+
|
|
279
|
+
Please visit this page for complete instructions:
|
|
280
|
+
{{underline:https://shopify.github.io/shopify-app-cli/migrate/}}
|
|
281
|
+
|
|
282
|
+
MESSAGE
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
}.freeze
|
|
286
|
+
end
|
|
287
|
+
end
|