shopify-cli 2.32.0 → 2.33.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/Gemfile.lock +6 -6
- data/README.md +2 -8
- data/lib/shopify_cli/core/entry_point.rb +42 -22
- data/lib/shopify_cli/messages/messages.rb +16 -0
- data/lib/shopify_cli/theme/dev_server/proxy.rb +18 -4
- data/lib/shopify_cli/theme/syncer/uploader.rb +10 -6
- data/lib/shopify_cli/theme/syncer.rb +35 -32
- data/lib/shopify_cli/theme/theme_admin_api.rb +1 -0
- data/lib/shopify_cli/version.rb +1 -1
- data/shopify-cli.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac3c8680848c4b1caae004aba8327a321aded59a73e9454130534726a16a5a4d
|
4
|
+
data.tar.gz: 46bc06119d1fce33ebef93562bcbe904c5938502d9394b8748000b0ff260671a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51da54fda07bd8d66d0aa4e8aedd54df04c23fc50fff79e520179f5e956f4eb940c961e933794f59187b92171fb9998393666dd58986219887a003f848341e78
|
7
|
+
data.tar.gz: 35a4a6bda609ff6775880f80e9b31171e9edbeef0bbc9745bd5b17b47c6e9d428e4b0a146f075642e229e0cc224e3202b9f5bfed170650b91b1fe7ebb5c30725
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,17 @@ From version 2.6.0, the sections in this file adhere to the [keep a changelog](h
|
|
2
2
|
|
3
3
|
## [Unreleased]
|
4
4
|
|
5
|
+
## Version 2.33.0 - 2022-12-19
|
6
|
+
|
7
|
+
### Added
|
8
|
+
* [#2681](https://github.com/Shopify/shopify-cli/pull/2681): Enable Theme Access passwords for theme serve
|
9
|
+
* [#2701](https://github.com/Shopify/shopify-cli/pull/2701): Update theme-check to 1.12.1 (introduce intelligent code completion)
|
10
|
+
|
11
|
+
## Version 2.32.1 - 2022-12-05
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
* [#2694](https://github.com/Shopify/shopify-cli/pull/2694): Add sunset warnings
|
15
|
+
|
5
16
|
## Version 2.32.0 - 2022-11-14
|
6
17
|
|
7
18
|
### Added
|
@@ -9,6 +20,7 @@ From version 2.6.0, the sections in this file adhere to the [keep a changelog](h
|
|
9
20
|
|
10
21
|
### Fixed
|
11
22
|
* [#2683](https://github.com/Shopify/shopify-cli/pull/2683): Fix timeout issue with the `shopify theme push` command and the `--json` flag
|
23
|
+
* [#2688](https://github.com/Shopify/shopify-cli/pull/2688): Fix `shopify theme push` to report pushes with errors
|
12
24
|
|
13
25
|
## Version 2.31.0 - 2022-11-07
|
14
26
|
|
data/Gemfile.lock
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
shopify-cli (2.
|
4
|
+
shopify-cli (2.33.0)
|
5
5
|
bugsnag (~> 6.22)
|
6
6
|
listen (~> 3.7.0)
|
7
|
-
theme-check (~> 1.
|
7
|
+
theme-check (~> 1.12.1)
|
8
8
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
@@ -101,14 +101,14 @@ GEM
|
|
101
101
|
mocha (1.13.0)
|
102
102
|
multi_test (0.1.2)
|
103
103
|
multipart-post (2.1.1)
|
104
|
-
nokogiri (1.13.
|
104
|
+
nokogiri (1.13.10)
|
105
105
|
mini_portile2 (~> 2.8.0)
|
106
106
|
racc (~> 1.4)
|
107
107
|
octokit (4.22.0)
|
108
108
|
faraday (>= 0.9)
|
109
109
|
sawyer (~> 0.8.0, >= 0.5.3)
|
110
110
|
parallel (1.21.0)
|
111
|
-
parser (3.1.
|
111
|
+
parser (3.1.3.0)
|
112
112
|
ast (~> 2.4.1)
|
113
113
|
pry (0.13.1)
|
114
114
|
coderay (~> 1.1)
|
@@ -117,7 +117,7 @@ GEM
|
|
117
117
|
byebug (~> 11.0)
|
118
118
|
pry (~> 0.13.0)
|
119
119
|
public_suffix (4.0.6)
|
120
|
-
racc (1.6.
|
120
|
+
racc (1.6.1)
|
121
121
|
rack (2.2.3.1)
|
122
122
|
rainbow (3.1.1)
|
123
123
|
rake (13.0.6)
|
@@ -150,7 +150,7 @@ GEM
|
|
150
150
|
faraday (> 0.8, < 2.0)
|
151
151
|
sys-uname (1.2.2)
|
152
152
|
ffi (~> 1.1)
|
153
|
-
theme-check (1.
|
153
|
+
theme-check (1.12.1)
|
154
154
|
liquid (>= 5.4.0)
|
155
155
|
nokogiri (>= 1.12)
|
156
156
|
parser (~> 3)
|
data/README.md
CHANGED
@@ -11,17 +11,11 @@
|
|
11
11
|
<img src="https://img.shields.io/badge/License-MIT-green.svg" alt="License">
|
12
12
|
<img src="https://img.shields.io/badge/Powered%20by-Ruby-red" alt="Powered by Ruby">
|
13
13
|
|
14
|
-
|
15
14
|
Shopify CLI 2.0 is a command line to help you build on Shopify. It's available as a Ruby gem and can be run and installed on Mac, Linux, and Windows systems.
|
16
15
|
|
17
|
-
##
|
18
|
-
|
19
|
-
Use 2.0 for developing themes. For developing apps and custom storefronts, we recommend using [Shopify CLI 3.0](https://github.com/Shopify/cli).
|
20
|
-
|
21
|
-
|
22
|
-
## Installation
|
16
|
+
## CLI Deprecation & Sunset
|
23
17
|
|
24
|
-
|
18
|
+
Note that Shopify 2.0 is deprecated and will be [sunset on May 31, 2023](https://shopify.dev/changelog/cli-2-0-to-be-sunset-on-may-31-2023). We encourage using [Shopify CLI 3.0](https://github.com/Shopify/cli) to develop apps, custom storefronts, and themes.
|
25
19
|
|
26
20
|
## Contributing 👩💻
|
27
21
|
|
@@ -5,28 +5,7 @@ module ShopifyCLI
|
|
5
5
|
module EntryPoint
|
6
6
|
class << self
|
7
7
|
def call(args, ctx = Context.new)
|
8
|
-
|
9
|
-
# using CLI2 not CLI3, if they're running CLI2 directly. Otherwise the
|
10
|
-
# warnings will be confusing and/or incorrect.
|
11
|
-
unless Environment.run_as_subprocess?
|
12
|
-
if ctx.development? && !ctx.testing?
|
13
|
-
ctx.warn(
|
14
|
-
ctx.message(
|
15
|
-
"core.warning.development_version",
|
16
|
-
File.join(ShopifyCLI::ROOT, "bin", ShopifyCLI::TOOL_NAME)
|
17
|
-
)
|
18
|
-
)
|
19
|
-
# because `!ctx.new_version.nil?` will change the config by calling ::Config.set
|
20
|
-
# it's important to keep the checks in this order so that we don't trigger it while testing
|
21
|
-
# since changing the config will throw errors
|
22
|
-
elsif !ctx.testing? && !ctx.new_version.nil?
|
23
|
-
ctx.warn(ctx.message("core.warning.new_version", ShopifyCLI::VERSION, ctx.new_version))
|
24
|
-
end
|
25
|
-
|
26
|
-
if ShopifyCLI::Core::CliVersion.using_3_0?
|
27
|
-
ctx.warn(ctx.message("core.warning.in_3_0_directory"))
|
28
|
-
end
|
29
|
-
end
|
8
|
+
show_warnings(ctx, args.join(" "))
|
30
9
|
|
31
10
|
ProjectType.load_all
|
32
11
|
|
@@ -38,6 +17,47 @@ module ShopifyCLI
|
|
38
17
|
executor.call(command, command_name, args)
|
39
18
|
end
|
40
19
|
end
|
20
|
+
|
21
|
+
def show_warnings(ctx, args)
|
22
|
+
# Only instruct the user to update the CLI, or warn them that they're
|
23
|
+
# using CLI2 not CLI3, if they're running CLI2 directly. Otherwise the
|
24
|
+
# warnings will be confusing and/or incorrect.
|
25
|
+
return if Environment.run_as_subprocess?
|
26
|
+
|
27
|
+
show_sunset_warning(ctx, args)
|
28
|
+
|
29
|
+
if ctx.development? && !ctx.testing?
|
30
|
+
ctx.warn(
|
31
|
+
ctx.message(
|
32
|
+
"core.warning.development_version",
|
33
|
+
File.join(ShopifyCLI::ROOT, "bin", ShopifyCLI::TOOL_NAME)
|
34
|
+
)
|
35
|
+
)
|
36
|
+
# because `!ctx.new_version.nil?` will change the config by calling ::Config.set
|
37
|
+
# it's important to keep the checks in this order so that we don't trigger it while testing
|
38
|
+
# since changing the config will throw errors
|
39
|
+
elsif !ctx.testing? && !ctx.new_version.nil?
|
40
|
+
ctx.warn(ctx.message("core.warning.new_version", ShopifyCLI::VERSION, ctx.new_version))
|
41
|
+
end
|
42
|
+
|
43
|
+
if ShopifyCLI::Core::CliVersion.using_3_0?
|
44
|
+
ctx.warn(ctx.message("core.warning.in_3_0_directory"))
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def show_sunset_warning(ctx, args)
|
49
|
+
return if ctx.testing?
|
50
|
+
|
51
|
+
if args.start_with?("app create") || args.start_with?("app extension create")
|
52
|
+
ctx.warn(ctx.message("core.warning.sunset_create_app"))
|
53
|
+
elsif args.start_with?("app")
|
54
|
+
ctx.warn(ctx.message("core.warning.sunset_app"))
|
55
|
+
elsif args.start_with?("theme")
|
56
|
+
ctx.warn(ctx.message("core.warning.sunset_theme"))
|
57
|
+
else
|
58
|
+
ctx.warn(ctx.message("core.warning.sunset"))
|
59
|
+
end
|
60
|
+
end
|
41
61
|
end
|
42
62
|
end
|
43
63
|
end
|
@@ -804,6 +804,22 @@ module ShopifyCLI
|
|
804
804
|
Already have CLI 3.0 installed? Run it using your node package manager, as explained here:
|
805
805
|
{{underline:https://shopify.dev/apps/tools/cli/cli-2#running-shopify-cli-2-x-and-3-x-in-the-same-environment}}
|
806
806
|
MESSAGE
|
807
|
+
|
808
|
+
sunset: <<~MESSAGE,
|
809
|
+
{{*}} {{yellow:Note that CLI 2.x will be sunset on May 31, 2023.}}
|
810
|
+
MESSAGE
|
811
|
+
|
812
|
+
sunset_create_app: <<~MESSAGE,
|
813
|
+
{{*}} {{yellow:Note that this CLI 2.x command will be sunset on April 28, 2023. Check here for instructions on how to migrate over to CLI 3.x: {{underline:https://shopify.dev/apps/tools/cli/migrate}}.}}
|
814
|
+
MESSAGE
|
815
|
+
|
816
|
+
sunset_app: <<~MESSAGE,
|
817
|
+
{{*}} {{yellow:Note that CLI 2.x will be sunset on May 31, 2023. Check here for instructions on how to migrate over to CLI 3.x: {{underline:https://shopify.dev/apps/tools/cli/migrate}}.}}
|
818
|
+
MESSAGE
|
819
|
+
|
820
|
+
sunset_theme: <<~MESSAGE,
|
821
|
+
{{*}} {{yellow:Note that CLI 2.x will be sunset on May 31, 2023. Check here for instructions on how to migrate over to CLI 3.x: {{underline:https://shopify.dev/themes/tools/cli/migrate}}.}}
|
822
|
+
MESSAGE
|
807
823
|
},
|
808
824
|
reporting: {
|
809
825
|
help: <<~HELP,
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "stringio"
|
3
4
|
require "time"
|
4
5
|
require "cgi"
|
@@ -20,6 +21,7 @@ module ShopifyCLI
|
|
20
21
|
"transfer-encoding",
|
21
22
|
"upgrade",
|
22
23
|
"content-security-policy",
|
24
|
+
"content-length",
|
23
25
|
]
|
24
26
|
|
25
27
|
class Proxy
|
@@ -54,14 +56,14 @@ module ShopifyCLI
|
|
54
56
|
"POST", env["PATH_INFO"],
|
55
57
|
headers: headers,
|
56
58
|
query: query,
|
57
|
-
form_data: form_data.merge(replace_templates).merge(_method: env["REQUEST_METHOD"])
|
59
|
+
form_data: form_data.merge(replace_templates).merge(_method: env["REQUEST_METHOD"])
|
58
60
|
)
|
59
61
|
else
|
60
62
|
request(
|
61
63
|
env["REQUEST_METHOD"], env["PATH_INFO"],
|
62
64
|
headers: headers,
|
63
65
|
query: query,
|
64
|
-
body_stream: (env["rack.input"] if has_body?(headers))
|
66
|
+
body_stream: (env["rack.input"] if has_body?(headers))
|
65
67
|
)
|
66
68
|
end
|
67
69
|
|
@@ -97,7 +99,7 @@ module ShopifyCLI
|
|
97
99
|
|
98
100
|
def bearer_token
|
99
101
|
Environment.storefront_renderer_auth_token ||
|
100
|
-
|
102
|
+
ShopifyCLI::DB.get(:storefront_renderer_production_exchange_token) ||
|
101
103
|
raise(KeyError, "storefront_renderer_production_exchange_token missing")
|
102
104
|
end
|
103
105
|
|
@@ -152,11 +154,13 @@ module ShopifyCLI
|
|
152
154
|
|
153
155
|
def secure_session_id_expired?
|
154
156
|
return true unless @secure_session_id && @last_session_cookie_refresh
|
157
|
+
|
155
158
|
Time.now - @last_session_cookie_refresh >= SESSION_COOKIE_MAX_AGE
|
156
159
|
end
|
157
160
|
|
158
161
|
def extract_secure_session_id_from_response_headers(headers)
|
159
162
|
return unless headers["set-cookie"]
|
163
|
+
|
160
164
|
headers["set-cookie"][SESSION_COOKIE_REGEXP, 1]
|
161
165
|
end
|
162
166
|
|
@@ -173,7 +177,7 @@ module ShopifyCLI
|
|
173
177
|
|
174
178
|
def get_response_headers(response, env)
|
175
179
|
response_headers = normalize_headers(
|
176
|
-
response.respond_to?(:headers) ? response.headers : response.to_hash
|
180
|
+
response.respond_to?(:headers) ? response.headers : response.to_hash,
|
177
181
|
)
|
178
182
|
# According to https://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-14#section-7.1.3.1Acc
|
179
183
|
# should remove hop-by-hop header fields
|
@@ -196,6 +200,16 @@ module ShopifyCLI
|
|
196
200
|
|
197
201
|
def request(method, path, headers: nil, query: [], form_data: nil, body_stream: nil)
|
198
202
|
uri = URI.join("https://#{shop}", path)
|
203
|
+
|
204
|
+
if Environment.theme_access_password?
|
205
|
+
headers = headers ? headers.slice("ACCEPT", "CONTENT-TYPE", "CONTENT-LENGTH", "Cookie") : {}
|
206
|
+
headers.merge!({
|
207
|
+
"X-Shopify-Access-Token" => Environment.admin_auth_token,
|
208
|
+
"X-Shopify-Shop" => shop,
|
209
|
+
})
|
210
|
+
uri = URI.join("https://#{ThemeAccessAPI::BASE_URL}", "cli/sfr#{path}")
|
211
|
+
end
|
212
|
+
|
199
213
|
uri.query = URI.encode_www_form(query + [[:_fd, 0], [:pb, 0]])
|
200
214
|
|
201
215
|
@ctx.debug("Proxying #{method} #{uri}")
|
@@ -26,13 +26,11 @@ module ShopifyCLI
|
|
26
26
|
:ignore_file?,
|
27
27
|
:overwrite_json?,
|
28
28
|
:bulk_updates_activated?,
|
29
|
-
|
30
29
|
# enqueue
|
31
30
|
:enqueue_deletes,
|
32
31
|
:enqueue_get,
|
33
32
|
:enqueue_union_merges,
|
34
33
|
:enqueue_updates,
|
35
|
-
|
36
34
|
# checksums
|
37
35
|
:checksums,
|
38
36
|
:update_checksums,
|
@@ -112,7 +110,7 @@ module ShopifyCLI
|
|
112
110
|
retries = 0
|
113
111
|
pending_items = files.map { |file| bulk_item(file) }
|
114
112
|
|
115
|
-
while pending_items.any? && retries <
|
113
|
+
while pending_items.any? && retries < 2
|
116
114
|
bulk = Bulk.new(ctx, theme, api_client)
|
117
115
|
|
118
116
|
files
|
@@ -183,7 +181,7 @@ module ShopifyCLI
|
|
183
181
|
[
|
184
182
|
theme["config/settings_schema.json"],
|
185
183
|
theme["config/settings_data.json"],
|
186
|
-
]
|
184
|
+
],
|
187
185
|
)
|
188
186
|
end
|
189
187
|
|
@@ -217,8 +215,14 @@ module ShopifyCLI
|
|
217
215
|
|
218
216
|
# Handler errors
|
219
217
|
|
220
|
-
def report(file,
|
221
|
-
|
218
|
+
def report(file, error)
|
219
|
+
file_path = file.relative_path
|
220
|
+
|
221
|
+
error_message = syncer
|
222
|
+
.parse_api_errors(file, error)
|
223
|
+
.map { |msg| "#{file_path}: #{msg}" }
|
224
|
+
.join("\n")
|
225
|
+
|
222
226
|
syncer.report_file_error(file, error_message)
|
223
227
|
end
|
224
228
|
end
|
@@ -121,6 +121,7 @@ module ShopifyCLI
|
|
121
121
|
|
122
122
|
def wait!
|
123
123
|
raise ThreadError, "No syncer threads" if @threads.empty?
|
124
|
+
|
124
125
|
total = size
|
125
126
|
last_size = size
|
126
127
|
until empty? || @queue.closed?
|
@@ -134,7 +135,7 @@ module ShopifyCLI
|
|
134
135
|
|
135
136
|
def fetch_checksums!
|
136
137
|
_status, response = api_client.get(
|
137
|
-
path: "themes/#{@theme.id}/assets.json"
|
138
|
+
path: "themes/#{@theme.id}/assets.json",
|
138
139
|
)
|
139
140
|
update_checksums(response)
|
140
141
|
end
|
@@ -151,6 +152,7 @@ module ShopifyCLI
|
|
151
152
|
loop do
|
152
153
|
operation = @queue.pop
|
153
154
|
break if operation.nil? # shutdown was called
|
155
|
+
|
154
156
|
perform(operation)
|
155
157
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
156
158
|
error_suffix = ": #{e}"
|
@@ -195,7 +197,7 @@ module ShopifyCLI
|
|
195
197
|
end
|
196
198
|
|
197
199
|
def handle_operation_error(operation, error)
|
198
|
-
error_suffix = ":\n " + parse_api_errors(operation, error).join("\n ")
|
200
|
+
error_suffix = ":\n " + parse_api_errors(operation.file, error).join("\n ")
|
199
201
|
report_error(operation, error_suffix)
|
200
202
|
end
|
201
203
|
|
@@ -206,6 +208,7 @@ module ShopifyCLI
|
|
206
208
|
def update_checksums(api_response)
|
207
209
|
api_response.values.flatten.each do |asset|
|
208
210
|
next unless asset["key"]
|
211
|
+
|
209
212
|
checksums[asset["key"]] = asset["checksum"]
|
210
213
|
end
|
211
214
|
|
@@ -219,6 +222,33 @@ module ShopifyCLI
|
|
219
222
|
@error_reporter.report(error_message)
|
220
223
|
end
|
221
224
|
|
225
|
+
def parse_api_errors(file, exception)
|
226
|
+
parsed_body = {}
|
227
|
+
|
228
|
+
if exception.respond_to?(:response)
|
229
|
+
response = exception.response
|
230
|
+
|
231
|
+
parsed_body = if response&.is_a?(Hash)
|
232
|
+
response&.[](:body)
|
233
|
+
else
|
234
|
+
JSON.parse(response&.body)
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
errors = parsed_body.dig("errors") # either nil or another type
|
239
|
+
errors = errors.dig("asset") if errors&.is_a?(Hash)
|
240
|
+
|
241
|
+
message = errors || parsed_body["message"] || exception.message
|
242
|
+
# Truncate to first lines
|
243
|
+
[message].flatten.map { |m| m.split("\n", 2).first }
|
244
|
+
rescue JSON::ParserError
|
245
|
+
[exception.message]
|
246
|
+
rescue StandardError => e
|
247
|
+
cause = "(cause: #{e.message})"
|
248
|
+
backtrace = e.backtrace.join("\n")
|
249
|
+
["The asset #{file} could not be synced #{cause} #{backtrace}"]
|
250
|
+
end
|
251
|
+
|
222
252
|
private
|
223
253
|
|
224
254
|
def report_error(operation, error_suffix = "")
|
@@ -256,6 +286,7 @@ module ShopifyCLI
|
|
256
286
|
|
257
287
|
def perform(operation)
|
258
288
|
return if @queue.closed?
|
289
|
+
|
259
290
|
wait_for_backoff!
|
260
291
|
@ctx.debug(operation.to_s)
|
261
292
|
|
@@ -263,7 +294,6 @@ module ShopifyCLI
|
|
263
294
|
|
264
295
|
report_performed_operation(operation)
|
265
296
|
backoff_if_near_limit!(response)
|
266
|
-
|
267
297
|
rescue StandardError => error
|
268
298
|
handle_operation_error(operation, error)
|
269
299
|
ensure
|
@@ -283,7 +313,7 @@ module ShopifyCLI
|
|
283
313
|
|
284
314
|
_status, body, response = api_client.put(
|
285
315
|
path: path,
|
286
|
-
body: JSON.generate(asset: asset)
|
316
|
+
body: JSON.generate(asset: asset),
|
287
317
|
)
|
288
318
|
file.warnings = body.dig("asset", "warnings")
|
289
319
|
|
@@ -315,7 +345,7 @@ module ShopifyCLI
|
|
315
345
|
path: "themes/#{@theme.id}/assets.json",
|
316
346
|
body: JSON.generate(asset: {
|
317
347
|
key: file.relative_path,
|
318
|
-
})
|
348
|
+
}),
|
319
349
|
)
|
320
350
|
|
321
351
|
response
|
@@ -342,33 +372,6 @@ module ShopifyCLI
|
|
342
372
|
response
|
343
373
|
end
|
344
374
|
|
345
|
-
def parse_api_errors(operation, exception)
|
346
|
-
parsed_body = {}
|
347
|
-
|
348
|
-
if exception.respond_to?(:response)
|
349
|
-
response = exception.response
|
350
|
-
|
351
|
-
parsed_body = if response&.is_a?(Hash)
|
352
|
-
response&.[](:body)
|
353
|
-
else
|
354
|
-
JSON.parse(response&.body)
|
355
|
-
end
|
356
|
-
end
|
357
|
-
|
358
|
-
errors = parsed_body.dig("errors") # either nil or another type
|
359
|
-
errors = errors.dig("asset") if errors&.is_a?(Hash)
|
360
|
-
|
361
|
-
message = errors || parsed_body["message"] || exception.message
|
362
|
-
# Truncate to first lines
|
363
|
-
[message].flatten.map { |m| m.split("\n", 2).first }
|
364
|
-
rescue JSON::ParserError
|
365
|
-
[exception.message]
|
366
|
-
rescue StandardError => e
|
367
|
-
cause = "(cause: #{e.message})"
|
368
|
-
backtrace = e.backtrace.join("\n")
|
369
|
-
["The asset #{operation.file} could not be synced #{cause} #{backtrace}"]
|
370
|
-
end
|
371
|
-
|
372
375
|
def theme_created_at_runtime?
|
373
376
|
@theme.created_at_runtime?
|
374
377
|
end
|
@@ -61,6 +61,7 @@ module ShopifyCLI
|
|
61
61
|
if empty_response?(error)
|
62
62
|
return permission_error
|
63
63
|
elsif unauthorized_response?(error)
|
64
|
+
@ctx.debug("[#{self.class}] (#{error.class}) cause: #{response_body(error)}")
|
64
65
|
raise ShopifyCLI::Abort, @ctx.message("theme.unauthorized_error", @shop)
|
65
66
|
end
|
66
67
|
|
data/lib/shopify_cli/version.rb
CHANGED
data/shopify-cli.gemspec
CHANGED
@@ -48,7 +48,7 @@ Gem::Specification.new do |spec|
|
|
48
48
|
# Whereas if we were to have "~> 1.9", that version would still be satisfied and thus not upgraded.
|
49
49
|
# Both shopify-cli and theme-check gems are owned and developed by Shopify.
|
50
50
|
# These gems are currently being actively developed and it's easiest to update them together.
|
51
|
-
spec.add_dependency("theme-check", "~> 1.
|
51
|
+
spec.add_dependency("theme-check", "~> 1.12.1")
|
52
52
|
|
53
53
|
spec.extensions = ["ext/shopify-extensions/extconf.rb"]
|
54
54
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shopify-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.33.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -92,14 +92,14 @@ dependencies:
|
|
92
92
|
requirements:
|
93
93
|
- - "~>"
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version: 1.
|
95
|
+
version: 1.12.1
|
96
96
|
type: :runtime
|
97
97
|
prerelease: false
|
98
98
|
version_requirements: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
100
|
- - "~>"
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: 1.
|
102
|
+
version: 1.12.1
|
103
103
|
description: |
|
104
104
|
Shopify CLI helps you build Shopify apps faster. It quickly scaffolds Node.js
|
105
105
|
and Ruby on Rails embedded apps. It also automates many common tasks in the
|