shopify-cli 1.13.0 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -1
  3. data/.github/CONTRIBUTING.md +7 -7
  4. data/.github/DESIGN.md +3 -3
  5. data/.github/workflows/build.yml +1 -1
  6. data/.gitignore +3 -0
  7. data/.rubocop.yml +3 -1
  8. data/.ruby-version +1 -1
  9. data/CHANGELOG.md +57 -24
  10. data/Gemfile +4 -0
  11. data/Gemfile.lock +32 -0
  12. data/LICENSE +4 -1
  13. data/README.md +94 -26
  14. data/RELEASING.md +31 -7
  15. data/Rakefile +2 -2
  16. data/SECURITY.md +1 -1
  17. data/THEMEKIT_MIGRATION.md +18 -0
  18. data/bin/load_shopify.rb +1 -1
  19. data/bin/shopify +3 -3
  20. data/dev.yml +1 -1
  21. data/docs/app/node/index.md +1 -1
  22. data/docs/app/rails/index.md +1 -1
  23. data/docs/core/index.md +1 -1
  24. data/docs/getting-started/index.md +1 -1
  25. data/docs/getting-started/install/index.md +1 -1
  26. data/docs/getting-started/migrate/index.md +1 -1
  27. data/docs/getting-started/uninstall/index.md +1 -1
  28. data/docs/getting-started/upgrade/index.md +1 -1
  29. data/docs/help/start-app/index.md +1 -1
  30. data/docs/index.md +1 -1
  31. data/ext/shopify-cli/extconf.rb +17 -5
  32. data/install.sh +1 -1
  33. data/lib/docgen/index_template.md.erb +2 -2
  34. data/lib/graphql/all_orgs_with_extensions.graphql +37 -0
  35. data/lib/graphql/api_versions.graphql +1 -1
  36. data/lib/graphql/find_organization.graphql +2 -1
  37. data/lib/project_types/extension/cli.rb +18 -15
  38. data/lib/project_types/extension/commands/build.rb +4 -5
  39. data/lib/project_types/extension/commands/connect.rb +35 -0
  40. data/lib/project_types/extension/commands/create.rb +12 -16
  41. data/lib/project_types/extension/commands/extension_command.rb +2 -2
  42. data/lib/project_types/extension/commands/info.rb +86 -0
  43. data/lib/project_types/extension/commands/push.rb +8 -7
  44. data/lib/project_types/extension/commands/register.rb +4 -5
  45. data/lib/project_types/extension/commands/serve.rb +5 -8
  46. data/lib/project_types/extension/commands/tunnel.rb +3 -1
  47. data/lib/project_types/extension/errors.rb +9 -0
  48. data/lib/project_types/extension/extension_project.rb +17 -1
  49. data/lib/project_types/extension/extension_project_keys.rb +1 -0
  50. data/lib/project_types/extension/features/argo.rb +6 -6
  51. data/lib/project_types/extension/features/argo_runtime.rb +22 -56
  52. data/lib/project_types/extension/features/argo_serve.rb +25 -18
  53. data/lib/project_types/extension/forms/connect.rb +42 -0
  54. data/lib/project_types/extension/forms/questions/ask_name.rb +14 -6
  55. data/lib/project_types/extension/forms/questions/ask_registration.rb +51 -0
  56. data/lib/project_types/extension/messages/messages.rb +80 -16
  57. data/lib/project_types/extension/models/specification.rb +1 -0
  58. data/lib/project_types/extension/models/specification_handlers/{checkout_argo_extension.rb → checkout_ui_extension.rb} +3 -1
  59. data/lib/project_types/extension/models/specification_handlers/default.rb +13 -3
  60. data/lib/project_types/extension/models/specification_handlers/theme_app_extension.rb +89 -0
  61. data/lib/project_types/extension/models/specifications.rb +1 -0
  62. data/lib/project_types/extension/tasks/configure_features.rb +6 -7
  63. data/lib/project_types/extension/tasks/configure_options.rb +20 -0
  64. data/lib/project_types/extension/tasks/get_extensions.rb +32 -0
  65. data/lib/project_types/node/cli.rb +9 -21
  66. data/lib/project_types/node/commands/connect.rb +8 -2
  67. data/lib/project_types/node/commands/create.rb +9 -5
  68. data/lib/project_types/node/commands/deploy.rb +15 -5
  69. data/lib/project_types/node/commands/deploy/heroku.rb +29 -29
  70. data/lib/project_types/node/commands/generate.rb +4 -2
  71. data/lib/project_types/node/commands/open.rb +4 -2
  72. data/lib/project_types/node/commands/serve.rb +3 -2
  73. data/lib/project_types/node/commands/tunnel.rb +4 -2
  74. data/lib/project_types/node/messages/messages.rb +47 -90
  75. data/lib/project_types/rails/cli.rb +9 -21
  76. data/lib/project_types/rails/commands/connect.rb +8 -2
  77. data/lib/project_types/rails/commands/create.rb +10 -6
  78. data/lib/project_types/rails/commands/deploy.rb +15 -5
  79. data/lib/project_types/rails/commands/deploy/heroku.rb +84 -82
  80. data/lib/project_types/rails/commands/generate.rb +15 -5
  81. data/lib/project_types/rails/commands/generate/webhook.rb +28 -26
  82. data/lib/project_types/rails/commands/open.rb +4 -2
  83. data/lib/project_types/rails/commands/serve.rb +3 -2
  84. data/lib/project_types/rails/commands/tunnel.rb +4 -2
  85. data/lib/project_types/rails/messages/messages.rb +72 -119
  86. data/lib/project_types/script/cli.rb +6 -8
  87. data/lib/project_types/script/commands/create.rb +3 -1
  88. data/lib/project_types/script/commands/push.rb +12 -5
  89. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +9 -3
  90. data/lib/project_types/script/layers/application/create_script.rb +4 -3
  91. data/lib/project_types/script/layers/domain/errors.rb +6 -11
  92. data/lib/project_types/script/layers/domain/push_package.rb +4 -8
  93. data/lib/project_types/script/layers/domain/script_json.rb +32 -0
  94. data/lib/project_types/script/layers/domain/script_project.rb +1 -1
  95. data/lib/project_types/script/layers/infrastructure/errors.rb +13 -17
  96. data/lib/project_types/script/layers/infrastructure/languages/assemblyscript_project_creator.rb +29 -21
  97. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +2 -4
  98. data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +45 -34
  99. data/lib/project_types/script/layers/infrastructure/script_service.rb +37 -16
  100. data/lib/project_types/script/messages/messages.rb +66 -55
  101. data/lib/project_types/script/tasks/ensure_env.rb +22 -1
  102. data/lib/project_types/script/ui/error_handler.rb +32 -32
  103. data/lib/project_types/theme/cli.rb +16 -27
  104. data/lib/project_types/theme/commands/check.rb +33 -0
  105. data/lib/project_types/theme/commands/delete.rb +64 -0
  106. data/lib/project_types/theme/commands/init.rb +42 -0
  107. data/lib/project_types/theme/commands/language_server.rb +16 -0
  108. data/lib/project_types/theme/commands/package.rb +55 -0
  109. data/lib/project_types/theme/commands/publish.rb +43 -0
  110. data/lib/project_types/theme/commands/pull.rb +51 -0
  111. data/lib/project_types/theme/commands/push.rb +58 -32
  112. data/lib/project_types/theme/commands/serve.rb +8 -16
  113. data/lib/project_types/theme/forms/confirm_store.rb +15 -0
  114. data/lib/project_types/theme/forms/select.rb +59 -0
  115. data/lib/project_types/theme/messages/messages.rb +118 -103
  116. data/lib/project_types/theme/ui/sync_progress_bar.rb +20 -0
  117. data/lib/shopify-cli/admin_api.rb +57 -38
  118. data/lib/shopify-cli/admin_api/populate_resource_command.rb +6 -14
  119. data/lib/shopify-cli/admin_api/schema.rb +1 -10
  120. data/lib/shopify-cli/api.rb +29 -14
  121. data/lib/shopify-cli/command.rb +15 -3
  122. data/lib/shopify-cli/commands.rb +7 -2
  123. data/lib/shopify-cli/commands/help.rb +2 -29
  124. data/lib/shopify-cli/commands/login.rb +95 -0
  125. data/lib/shopify-cli/commands/logout.rb +24 -8
  126. data/lib/shopify-cli/commands/populate.rb +23 -0
  127. data/lib/{project_types/node → shopify-cli}/commands/populate/customer.rb +2 -8
  128. data/lib/{project_types/node → shopify-cli}/commands/populate/draft_order.rb +2 -2
  129. data/lib/{project_types/node → shopify-cli}/commands/populate/product.rb +2 -8
  130. data/lib/shopify-cli/commands/store.rb +15 -0
  131. data/lib/shopify-cli/commands/switch.rb +39 -0
  132. data/lib/shopify-cli/commands/system.rb +12 -0
  133. data/lib/shopify-cli/commands/whoami.rb +28 -0
  134. data/lib/shopify-cli/connect.rb +32 -0
  135. data/lib/shopify-cli/context.rb +65 -4
  136. data/lib/shopify-cli/core/entry_point.rb +3 -22
  137. data/lib/shopify-cli/core/monorail.rb +6 -2
  138. data/lib/shopify-cli/db.rb +4 -4
  139. data/lib/shopify-cli/http_request.rb +16 -0
  140. data/lib/shopify-cli/identity_auth.rb +282 -0
  141. data/lib/shopify-cli/{oauth → identity_auth}/servlet.rb +11 -12
  142. data/lib/shopify-cli/messages/messages.rb +140 -46
  143. data/lib/shopify-cli/packager.rb +5 -5
  144. data/lib/shopify-cli/partners_api.rb +21 -44
  145. data/lib/shopify-cli/partners_api/organizations.rb +8 -0
  146. data/lib/shopify-cli/project_commands.rb +16 -0
  147. data/lib/shopify-cli/project_type.rb +0 -31
  148. data/lib/shopify-cli/shopifolk.rb +8 -11
  149. data/lib/shopify-cli/sub_command.rb +1 -0
  150. data/lib/shopify-cli/tasks.rb +3 -0
  151. data/lib/shopify-cli/tasks/confirm_store.rb +18 -0
  152. data/lib/shopify-cli/tasks/create_api_client.rb +2 -2
  153. data/lib/shopify-cli/tasks/ensure_authenticated.rb +13 -0
  154. data/lib/shopify-cli/tasks/ensure_loopback_url.rb +1 -1
  155. data/lib/shopify-cli/tasks/ensure_project_type.rb +12 -0
  156. data/lib/shopify-cli/tasks/select_org_and_shop.rb +0 -3
  157. data/lib/shopify-cli/theme/dev_server.rb +98 -0
  158. data/lib/shopify-cli/theme/dev_server/certificate_manager.rb +79 -0
  159. data/lib/shopify-cli/theme/dev_server/header_hash.rb +94 -0
  160. data/lib/shopify-cli/theme/dev_server/hot-reload.js +93 -0
  161. data/lib/shopify-cli/theme/dev_server/hot_reload.rb +76 -0
  162. data/lib/shopify-cli/theme/dev_server/local_assets.rb +87 -0
  163. data/lib/shopify-cli/theme/dev_server/proxy.rb +205 -0
  164. data/lib/shopify-cli/theme/dev_server/sse.rb +75 -0
  165. data/lib/shopify-cli/theme/dev_server/watcher.rb +59 -0
  166. data/lib/shopify-cli/theme/dev_server/web_server.rb +140 -0
  167. data/lib/shopify-cli/theme/development_theme.rb +69 -0
  168. data/lib/shopify-cli/theme/file.rb +112 -0
  169. data/lib/shopify-cli/theme/ignore_filter.rb +109 -0
  170. data/lib/shopify-cli/theme/mime_type.rb +34 -0
  171. data/lib/shopify-cli/theme/syncer.rb +332 -0
  172. data/lib/shopify-cli/theme/theme.rb +204 -0
  173. data/lib/shopify-cli/tunnel.rb +1 -1
  174. data/lib/shopify-cli/version.rb +1 -1
  175. data/lib/shopify_cli.rb +18 -11
  176. data/shopify-cli.gemspec +12 -5
  177. data/shopify.fish +1 -1
  178. data/shopify.sh +1 -1
  179. metadata +91 -35
  180. data/.github/workflows/release.yml +0 -59
  181. data/lib/project_types/extension/features/argo_serve_options.rb +0 -41
  182. data/lib/project_types/node/commands/populate.rb +0 -23
  183. data/lib/project_types/rails/commands/populate.rb +0 -23
  184. data/lib/project_types/rails/commands/populate/customer.rb +0 -31
  185. data/lib/project_types/rails/commands/populate/draft_order.rb +0 -28
  186. data/lib/project_types/rails/commands/populate/product.rb +0 -30
  187. data/lib/project_types/script/layers/domain/config_ui.rb +0 -16
  188. data/lib/project_types/theme/commands/connect.rb +0 -54
  189. data/lib/project_types/theme/commands/create.rb +0 -48
  190. data/lib/project_types/theme/commands/deploy.rb +0 -38
  191. data/lib/project_types/theme/commands/generate.rb +0 -20
  192. data/lib/project_types/theme/commands/generate/env.rb +0 -79
  193. data/lib/project_types/theme/forms/connect.rb +0 -34
  194. data/lib/project_types/theme/forms/create.rb +0 -22
  195. data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +0 -78
  196. data/lib/project_types/theme/themekit.rb +0 -113
  197. data/lib/shopify-cli/commands/connect.rb +0 -64
  198. data/lib/shopify-cli/commands/create.rb +0 -50
  199. data/lib/shopify-cli/oauth.rb +0 -198
@@ -4,22 +4,28 @@ module Script
4
4
  module Messages
5
5
  MESSAGES = {
6
6
  script: {
7
+ help: <<~HELP,
8
+ Suite of commands for developing script applications. See {{command:%1$s script <command> --help}} for usage of each command.
9
+ Usage: {{command:%1$s script [ %2$s ]}}
10
+ HELP
11
+
7
12
  error: {
8
- deprecated_ep: "This project uses an extension point %s which has been deprecated. "\
9
- "This Script will no longer function in production.",
10
- deprecated_ep_cause: "Try using a different extension point.",
13
+ deprecated_ep: "This project uses a Script API (%s) that has been deprecated. "\
14
+ "This Script won't work in production.",
15
+ deprecated_ep_cause: "Try using a different Script API.",
11
16
  generic: "{{red:{{x}} Error}}",
12
17
  eacces_cause: "You don't have permission to write to this directory.",
13
- eacces_help: "Change your directory permissions and try again.",
18
+ eacces_help: "Try again and choose a different directory.",
14
19
 
15
- enospc_cause: "You don't have enough disk space to perform this action.",
20
+ enospc_cause: "You don't have enough disk space to do this action.",
16
21
  enospc_help: "Free up some space and try again.",
17
22
 
18
23
  oauth_cause: "Something went wrong while authenticating your account with the Partner Dashboard.",
19
24
  oauth_help: "Try again.",
20
25
 
21
- invalid_context_cause: "Your .shopify-cli.yml file is not correct.",
22
- invalid_context_help: "See https://help.shopify.com",
26
+ invalid_context_cause: "Your .shopify-cli.yml file is not correct. Values are missing for "\
27
+ "extension_point_type or script_name.",
28
+ invalid_context_help: "Add these values and try again.",
23
29
 
24
30
  invalid_config_props_cause: "{{command:--config-props}} is formatted incorrectly.",
25
31
  invalid_config_props_help: "Try again using this format: "\
@@ -29,68 +35,72 @@ module Script
29
35
  invalid_script_name_help: "Replace or remove unsupported characters. Valid characters "\
30
36
  "are numbers, letters, hyphens, or underscores.",
31
37
 
32
- no_existing_apps_cause: "You don't have any apps.",
33
- no_existing_apps_help: "Create an app with {{command:shopify create}} or "\
34
- "visit https://partners.shopify.com/.",
38
+ no_existing_apps_cause: "You don't have any apps in your Partner Dashboard.",
39
+ no_existing_apps_help: "Create an app with {{command:shopify [node|rails] create}}" \
40
+ " or visit https://partners.shopify.com/.",
35
41
 
36
42
  no_existing_orgs_cause: "You don't have any partner organizations.",
37
43
  no_existing_orgs_help: "Visit https://partners.shopify.com/ to create a partners account.",
38
44
 
39
- no_existing_stores_cause: "You don't have any stores.",
45
+ no_existing_stores_cause: "You don't have any stores in your Partner Dashboard.",
40
46
  no_existing_stores_help: "Visit https://partners.shopify.com/%{organization_id}/stores/ to create one.",
41
47
 
42
- project_exists_cause: "Directory with the same name as the script already exists.",
43
- project_exists_help: "Use different script name and try again.",
48
+ project_exists_cause: "A directory with this same name already exists.",
49
+ project_exists_help: "Try again and enter a different name for the script.",
44
50
 
45
- invalid_extension_cause: "Invalid extension point %s.",
51
+ invalid_extension_cause: "Invalid Script API %s.",
46
52
  invalid_extension_help: "Allowed values: %s.",
47
53
 
48
54
  invalid_language_cause: "Invalid language %s.",
49
55
  invalid_language_help: "Allowed values: %s.",
50
56
 
51
57
  invalid_config: "Can't change the configuration values because %1$s is missing or "\
52
- "it is not formatted properly.",
58
+ "it isn't formatted properly.",
59
+
60
+ missing_script_json_field_cause: "The script.json file is missing the required %s field.",
61
+ missing_script_json_field_help: "Add the field and try again.",
53
62
 
54
- invalid_config_ui_definition_cause: "The UI configuration file %s contains invalid YAML.",
55
- invalid_config_ui_definition_help: "Fix the errors and try again.",
63
+ invalid_script_json_definition_cause: "The script.json file contains invalid JSON.",
64
+ invalid_script_json_definition_help: "Fix the errors and try again.",
56
65
 
57
- missing_config_ui_definition_cause: "You are missing the UI configuration file %s.",
58
- missing_config_ui_definition_help: "Create this file and try again.",
66
+ no_script_json_file_cause: "The script.json file is missing.",
67
+ no_script_json_file_help: "Create this file and try again.",
59
68
 
60
- config_ui_syntax_error_cause: "The UI configuration file %{filename} is not formatted properly.",
61
- config_ui_syntax_error_help: "Fix the errors and try again.",
69
+ configuration_syntax_error_cause: "The script.json is not formatted properly.",
70
+ configuration_syntax_error_help: "Fix the errors and try again.",
62
71
 
63
- config_ui_missing_keys_error_cause: "The UI configuration file %{filename} is missing required keys: "\
72
+ configuration_missing_keys_error_cause: "The script.json file is missing required keys: "\
64
73
  "%{missing_keys}.",
65
- config_ui_missing_keys_error_help: "Add the keys and try again.",
74
+ configuration_missing_keys_error_help: "Add the keys and try again.",
66
75
 
67
- config_ui_invalid_input_mode_error_cause: "The UI configuration file %{filename} only accept "\
68
- "one of the following input mode(s): %{valid_input_modes}.",
69
- config_ui_invalid_input_mode_error_help: "Change the input modes and try again.",
76
+ configuration_invalid_value_error_cause: "The script.json configuration only accepts "\
77
+ "one of the following types(s): %{valid_input_modes}.",
78
+ configuration_invalid_value_error_help: "Change the type and try again.",
70
79
 
71
- config_ui_fields_missing_keys_error_cause: "A field entry in the UI configuration file %{filename} is "\
72
- "missing required keys: %{missing_keys}.",
73
- config_ui_fields_missing_keys_error_help: "Add the keys and try again.",
80
+ configuration_schema_field_missing_keys_error_cause: "A configuration entry in the script.json file "\
81
+ "is missing required keys: %{missing_keys}.",
82
+ configuration_definition_schema_field_missing_keys_error_help: "Add the keys and try again.",
74
83
 
75
- config_ui_fields_invalid_type_error_cause: "The UI configuration file %{filename} fields only accept "\
76
- "one of the following type(s): %{valid_types}.",
77
- config_ui_fields_invalid_type_error_help: "Change the types and try again.",
84
+ configuration_schema_field_invalid_value_error_cause: "The configuration entries in the "\
85
+ "script.json file only accept one of the following "\
86
+ "type(s): %{valid_types}.",
87
+ configuration_schema_field_invalid_value_error_help: "Change the types and try again.",
78
88
 
79
- script_not_found_cause: "Couldn't find script %s for extension point %s",
89
+ script_not_found_cause: "Couldn't find a script %s for the Script API %s",
80
90
 
81
91
  system_call_failure_cause: "An error was returned while running {{command:%{cmd}}}.",
82
92
  system_call_failure_help: "Review the following error and try again.\n{{red:%{out}}}",
83
93
 
84
- metadata_validation_cause: "Invalid script extension metadata.",
94
+ metadata_validation_cause: "Invalid Script API metadata.",
85
95
  metadata_validation_help: "Ensure the 'shopify/scripts-toolchain-as' package is up to date.",
86
96
 
87
- metadata_schema_versions_missing: "Invalid script metadata:" \
97
+ metadata_schema_versions_missing: "Invalid Script metadata:" \
88
98
  " 'schemaVersions' field is missing",
89
- metadata_schema_versions_single_key: "Invalid script extension metadata:" \
90
- " 'schemaVersions' can have only one extension point name.",
91
- metadata_schema_versions_missing_major: "Invalid script extension metadata:" \
99
+ metadata_schema_versions_single_key: "Invalid Script API metadata:" \
100
+ " 'schemaVersions' can have only one Script API name.",
101
+ metadata_schema_versions_missing_major: "Invalid Script API metadata:" \
92
102
  " 'schemaVersions' is missing the 'major' field",
93
- metadata_schema_versions_missing_minor: "Invalid script extension metadata:" \
103
+ metadata_schema_versions_missing_minor: "Invalid Script API metadata:" \
94
104
  " 'schemaVersions' is missing the 'minor' field",
95
105
 
96
106
  metadata_not_found_cause: "Script version file (%s) cannot be found.",
@@ -102,7 +112,7 @@ module Script
102
112
  build_error_cause: "Something went wrong while building the script.",
103
113
  build_error_help: "Correct the errors and try again.",
104
114
 
105
- dependency_install_cause: "Something went wrong while installing the dependencies that are needed.",
115
+ dependency_install_cause: "Something went wrong while installing the needed dependencies.",
106
116
  dependency_install_help: "Correct the errors and try again.",
107
117
 
108
118
  failed_api_request_cause: "Something went wrong while communicating with Shopify.",
@@ -113,7 +123,7 @@ module Script
113
123
  graphql_error_cause: "An error was returned: %s.",
114
124
  graphql_error_help: "\nReview the error and try again.",
115
125
 
116
- script_repush_cause: "A script with this UUID already exists (UUID: %s).",
126
+ script_repush_cause: "A version of this script already exists on the app.",
117
127
  script_repush_help: "Use {{cyan:--force}} to replace the existing script.",
118
128
 
119
129
  shop_auth_cause: "Unable to authenticate with the store.",
@@ -135,12 +145,12 @@ module Script
135
145
 
136
146
  create: {
137
147
  help: <<~HELP,
138
- {{command:%1$s create script}}: Creates a script project.
139
- Usage: {{command:%1$s create script}}
140
- Options:
141
- {{command:--name=NAME}} Script project name. Use any string.
142
- {{command:--extension-point=TYPE}} Extension point name. Allowed values: %2$s.
143
- {{command:--no-config-ui}} Specify this option if you don’t want Scripts to render an interface in the Shopify admin.
148
+ {{command:%1$s script create}}: Creates a script project.
149
+ Usage: {{command:%1$s script create}}
150
+ Options:
151
+ {{command:--name=NAME}} Script project name. Use any string.
152
+ {{command:--extension-point=TYPE}} Script API name. Allowed values: %2$s.
153
+ {{command:--no-config-ui}} Specify this option when you don’t want your script to render an interface in Shopify admin.
144
154
  HELP
145
155
 
146
156
  error: {
@@ -154,14 +164,15 @@ module Script
154
164
 
155
165
  push: {
156
166
  help: <<~HELP,
157
- Build the script and put it into production. If you've already pushed a script with the same extension point, use --force to replace the current script with the newest one.
158
- Usage: {{command:%s push}}
159
- Options:
160
- {{command:[--force]}} Forces the script to be overwritten if an instance of it already exists.
167
+ Build the script, upload it to Shopify, and register it to an app. If you've already pushed the script to this app, then use --force to replace the existing version on the app.
168
+ Usage: {{command:%s script push}}
169
+ Options:
170
+ {{command:[--force]}} Replaces the existing script on the app with this version.
161
171
  HELP
162
172
 
163
173
  error: {
164
- operation_failed: "Couldn't push script to app (API key: %{api_key}).",
174
+ operation_failed_with_api_key: "Couldn't push script to app (API key: %{api_key}).",
175
+ operation_failed_no_api_key: "Couldn't push script to app.",
165
176
  },
166
177
 
167
178
  script_pushed: "{{v}} Script pushed to app (API key: %{api_key}).",
@@ -176,9 +187,9 @@ module Script
176
187
 
177
188
  forms: {
178
189
  create: {
179
- select_extension_point: "Which extension point do you want to use?",
190
+ select_extension_point: "Which Script API do you want to use?",
180
191
  select_language: "Which language do you want to use?",
181
- script_name: "Script Name",
192
+ script_name: "Script name",
182
193
  },
183
194
  },
184
195
 
@@ -198,7 +209,7 @@ module Script
198
209
  app: "Script will be pushed to app {{green:%s}}.",
199
210
  app_select: "Which app do you want to push this script to?",
200
211
  ask_connect_to_existing_script: "The selected app has some scripts. Do you want to replace any of the "\
201
- "existing scripts with the current script?",
212
+ "existing scripts on the app with this script?",
202
213
  ask_which_script_to_connect_to: "Which script do you want to replace?",
203
214
  },
204
215
  },
@@ -11,7 +11,7 @@ module Script
11
11
  script_project_repo = Layers::Infrastructure::ScriptProjectRepository.new(ctx: ctx)
12
12
  script_project = script_project_repo.get
13
13
 
14
- return if script_project.api_key && script_project.api_secret && script_project.uuid_defined?
14
+ return false if script_project.api_key && script_project.api_secret && script_project.uuid_defined?
15
15
 
16
16
  org = ask_org
17
17
  app = ask_app(org["apps"])
@@ -22,11 +22,15 @@ module Script
22
22
  secret: app["apiSecretKeys"].first["secret"],
23
23
  uuid: uuid
24
24
  )
25
+
26
+ true
25
27
  end
26
28
 
27
29
  private
28
30
 
29
31
  def ask_org
32
+ return stubbed_org if partner_proxy_bypass
33
+
30
34
  if ShopifyCli::Shopifolk.check && wants_to_run_against_shopify_org?
31
35
  ShopifyCli::Shopifolk.act_as_shopify_organization
32
36
  end
@@ -47,6 +51,23 @@ module Script
47
51
  end
48
52
  end
49
53
 
54
+ def stubbed_org
55
+ {
56
+ "apps" => [
57
+ {
58
+ "appType" => "custom",
59
+ "apiKey" => "stubbed-api-key",
60
+ "apiSecretKeys" => [{ "secret" => "stubbed-api-secret" }],
61
+ "title" => "Fake App (Not connected to Partners)",
62
+ },
63
+ ],
64
+ }
65
+ end
66
+
67
+ def partner_proxy_bypass
68
+ !ENV["BYPASS_PARTNERS_PROXY"].nil?
69
+ end
70
+
50
71
  def ask_app(apps)
51
72
  unless ShopifyCli::Shopifolk.acting_as_shopify_organization?
52
73
  apps = apps.select { |app| app["appType"] == "custom" }
@@ -34,7 +34,7 @@ module Script
34
34
  cause_of_error: ShopifyCli::Context.message("script.error.enospc_cause"),
35
35
  help_suggestion: ShopifyCli::Context.message("script.error.enospc_help"),
36
36
  }
37
- when ShopifyCli::OAuth::Error
37
+ when ShopifyCli::IdentityAuth::Error
38
38
  {
39
39
  cause_of_error: ShopifyCli::Context.message("script.error.oauth_cause"),
40
40
  help_suggestion: ShopifyCli::Context.message("script.error.oauth_help"),
@@ -120,17 +120,20 @@ module Script
120
120
  cause_of_error: ShopifyCli::Context.message("script.error.metadata_not_found_cause"),
121
121
  help_suggestion: ShopifyCli::Context.message("script.error.metadata_not_found_help"),
122
122
  }
123
- when Layers::Domain::Errors::InvalidConfigUiDefinitionError
123
+ when Layers::Domain::Errors::MissingScriptJsonFieldError
124
124
  {
125
- cause_of_error: ShopifyCli::Context
126
- .message("script.error.invalid_config_ui_definition_cause", e.filename),
127
- help_suggestion: ShopifyCli::Context.message("script.error.invalid_config_ui_definition_help"),
125
+ cause_of_error: ShopifyCli::Context.message("script.error.missing_script_json_field_cause", e.field),
126
+ help_suggestion: ShopifyCli::Context.message("script.error.missing_script_json_field_help"),
128
127
  }
129
- when Layers::Domain::Errors::MissingSpecifiedConfigUiDefinitionError
128
+ when Layers::Domain::Errors::InvalidScriptJsonDefinitionError
130
129
  {
131
- cause_of_error: ShopifyCli::Context
132
- .message("script.error.missing_config_ui_definition_cause", e.filename),
133
- help_suggestion: ShopifyCli::Context.message("script.error.missing_config_ui_definition_help"),
130
+ cause_of_error: ShopifyCli::Context.message("script.error.invalid_script_json_definition_cause"),
131
+ help_suggestion: ShopifyCli::Context.message("script.error.invalid_script_json_definition_help"),
132
+ }
133
+ when Layers::Domain::Errors::NoScriptJsonFile
134
+ {
135
+ cause_of_error: ShopifyCli::Context.message("script.error.no_script_json_file_cause"),
136
+ help_suggestion: ShopifyCli::Context.message("script.error.no_script_json_file_help"),
134
137
  }
135
138
  when Layers::Infrastructure::Errors::AppNotInstalledError
136
139
  {
@@ -141,49 +144,46 @@ module Script
141
144
  cause_of_error: ShopifyCli::Context.message("script.error.build_error_cause"),
142
145
  help_suggestion: ShopifyCli::Context.message("script.error.build_error_help"),
143
146
  }
144
- when Layers::Infrastructure::Errors::ConfigUiSyntaxError
147
+ when Layers::Infrastructure::Errors::ScriptJsonSyntaxError
145
148
  {
146
- cause_of_error: ShopifyCli::Context.message(
147
- "script.error.config_ui_syntax_error_cause",
148
- filename: e.message
149
- ),
150
- help_suggestion: ShopifyCli::Context.message("script.error.config_ui_syntax_error_help"),
149
+ cause_of_error: ShopifyCli::Context.message("script.error.configuration_syntax_error_cause"),
150
+ help_suggestion: ShopifyCli::Context.message("script.error.configuration_syntax_error_help"),
151
151
  }
152
- when Layers::Infrastructure::Errors::ConfigUiMissingKeysError
152
+ when Layers::Infrastructure::Errors::ScriptJsonMissingKeysError
153
153
  {
154
154
  cause_of_error: ShopifyCli::Context.message(
155
- "script.error.config_ui_missing_keys_error_cause",
156
- filename: e.filename,
155
+ "script.error.configuration_missing_keys_error_cause",
157
156
  missing_keys: e.missing_keys
158
157
  ),
159
- help_suggestion: ShopifyCli::Context.message("script.error.config_ui_missing_keys_error_help"),
158
+ help_suggestion: ShopifyCli::Context.message("script.error.configuration_missing_keys_error_help"),
160
159
  }
161
- when Layers::Infrastructure::Errors::ConfigUiInvalidInputModeError
160
+ when Layers::Infrastructure::Errors::ScriptJsonInvalidValueError
162
161
  {
163
162
  cause_of_error: ShopifyCli::Context.message(
164
- "script.error.config_ui_invalid_input_mode_error_cause",
165
- filename: e.filename,
163
+ "script.error.configuration_invalid_value_error_cause",
166
164
  valid_input_modes: e.valid_input_modes
167
165
  ),
168
- help_suggestion: ShopifyCli::Context.message("script.error.config_ui_invalid_input_mode_error_help"),
166
+ help_suggestion: ShopifyCli::Context.message("script.error.configuration_invalid_value_error_help"),
169
167
  }
170
- when Layers::Infrastructure::Errors::ConfigUiFieldsMissingKeysError
168
+ when Layers::Infrastructure::Errors::ScriptJsonFieldsMissingKeysError
171
169
  {
172
170
  cause_of_error: ShopifyCli::Context.message(
173
- "script.error.config_ui_fields_missing_keys_error_cause",
174
- filename: e.filename,
171
+ "script.error.configuration_schema_field_missing_keys_error_cause",
175
172
  missing_keys: e.missing_keys
176
173
  ),
177
- help_suggestion: ShopifyCli::Context.message("script.error.config_ui_fields_missing_keys_error_help"),
174
+ help_suggestion: ShopifyCli::Context.message(
175
+ "script.error.configuration_definition_schema_field_missing_keys_error_help"
176
+ ),
178
177
  }
179
- when Layers::Infrastructure::Errors::ConfigUiFieldsInvalidTypeError
178
+ when Layers::Infrastructure::Errors::ScriptJsonFieldsInvalidValueError
180
179
  {
181
180
  cause_of_error: ShopifyCli::Context.message(
182
- "script.error.config_ui_fields_invalid_type_error_cause",
183
- filename: e.filename,
181
+ "script.error.configuration_schema_field_invalid_value_error_cause",
184
182
  valid_types: e.valid_types
185
183
  ),
186
- help_suggestion: ShopifyCli::Context.message("script.error.config_ui_fields_invalid_type_error_help"),
184
+ help_suggestion: ShopifyCli::Context.message(
185
+ "script.error.configuration_schema_field_invalid_value_error_help"
186
+ ),
187
187
  }
188
188
  when Layers::Infrastructure::Errors::DependencyInstallError
189
189
  {
@@ -214,7 +214,7 @@ module Script
214
214
  }
215
215
  when Layers::Infrastructure::Errors::ScriptRepushError
216
216
  {
217
- cause_of_error: ShopifyCli::Context.message("script.error.script_repush_cause", e.uuid),
217
+ cause_of_error: ShopifyCli::Context.message("script.error.script_repush_cause"),
218
218
  help_suggestion: ShopifyCli::Context.message("script.error.script_repush_help"),
219
219
  }
220
220
  when Layers::Infrastructure::Errors::ShopAuthenticationError
@@ -1,40 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
  module Theme
3
3
  class Project < ShopifyCli::ProjectType
4
- hidden_feature
5
-
6
- title("Theme")
7
- creator("Theme::Commands::Create")
8
- connector("Theme::Commands::Connect")
9
-
10
- register_command("Theme::Commands::Deploy", "deploy")
11
- register_command("Theme::Commands::Generate", "generate")
12
- register_command("Theme::Commands::Push", "push")
13
- register_command("Theme::Commands::Serve", "serve")
14
-
15
- register_task("Theme::Tasks::EnsureThemekitInstalled", :ensure_themekit_installed)
16
-
17
4
  require Project.project_filepath("messages/messages")
18
5
  register_messages(Theme::Messages::MESSAGES)
19
6
  end
20
7
 
21
- module Commands
22
- autoload :Connect, Project.project_filepath("commands/connect")
23
- autoload :Create, Project.project_filepath("commands/create")
24
- autoload :Deploy, Project.project_filepath("commands/deploy")
25
- autoload :Generate, Project.project_filepath("commands/generate")
26
- autoload :Push, Project.project_filepath("commands/push")
27
- autoload :Serve, Project.project_filepath("commands/serve")
28
- end
29
-
30
- module Tasks
31
- autoload :EnsureThemekitInstalled, Project.project_filepath("tasks/ensure_themekit_installed")
8
+ class Command < ShopifyCli::ProjectCommands
9
+ subcommand :Init, "init", Project.project_filepath("commands/init")
10
+ subcommand :Serve, "serve", Project.project_filepath("commands/serve")
11
+ subcommand :Pull, "pull", Project.project_filepath("commands/pull")
12
+ subcommand :Push, "push", Project.project_filepath("commands/push")
13
+ subcommand :Delete, "delete", Project.project_filepath("commands/delete")
14
+ subcommand :Check, "check", Project.project_filepath("commands/check")
15
+ subcommand :Publish, "publish", Project.project_filepath("commands/publish")
16
+ subcommand :Package, "package", Project.project_filepath("commands/package")
17
+ subcommand :LanguageServer, "language-server", Project.project_filepath("commands/language_server")
32
18
  end
19
+ ShopifyCli::Commands.register("Theme::Command", "theme")
33
20
 
34
21
  module Forms
35
- autoload :Create, Project.project_filepath("forms/create")
36
- autoload :Connect, Project.project_filepath("forms/connect")
22
+ autoload :ConfirmStore, Project.project_filepath("forms/confirm_store")
23
+ autoload :Select, Project.project_filepath("forms/select")
37
24
  end
38
25
 
39
- autoload :Themekit, Project.project_filepath("themekit")
26
+ module UI
27
+ autoload :SyncProgressBar, Project.project_filepath("ui/sync_progress_bar")
28
+ end
40
29
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+ require "theme_check"
3
+
4
+ module Theme
5
+ class Command
6
+ class Check < ShopifyCli::SubCommand
7
+ class Options < ShopifyCli::Options
8
+ def initialize(theme_check)
9
+ super()
10
+ @theme_check = theme_check
11
+ end
12
+
13
+ def parse(_options_block, args)
14
+ @theme_check.parse(args)
15
+ end
16
+ end
17
+
18
+ def initialize(*)
19
+ super
20
+ @theme_check = ThemeCheck::Cli.new
21
+ self.options = Options.new(@theme_check)
22
+ end
23
+
24
+ def call(*)
25
+ @theme_check.run
26
+ end
27
+
28
+ def self.help
29
+ ShopifyCli::Context.message("theme.check.help", ShopifyCli::TOOL_NAME)
30
+ end
31
+ end
32
+ end
33
+ end