shopify-cli 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8a3d1792a9f0fef3212722391bc41ac2cba899f60b65c61d75c624fb61aef1dc
4
- data.tar.gz: 4927100649c20fbedd270715ff5e34fe89138548c2355f8fdff68ed19bdc6ce4
3
+ metadata.gz: e891dd1947743de4abbd7ef4e2c7e40a60e313eed78e33e5813c1fbb72369b22
4
+ data.tar.gz: 2af5852d53518d1089fabd4420cc6a432bccf99585d935812f8c347d9ad42d45
5
5
  SHA512:
6
- metadata.gz: 9cdddb7dc42cb7df1baa92baea6da019b180092aa54d40185a72a8f0552d1f894bf896fedc007ded724023bdce163a13fb16d7e8eb4f11554aafc19fbdedf318
7
- data.tar.gz: 61e74dc5788edc4653902bf2a42ddc8ca9da3535bc4b1779a0ed73b475940c423a61374e6f5eb18c5e635115ea86634b29c0ebf3f081bce28cb7fec2fd4071cd
6
+ metadata.gz: 02fa4e4ed76dc0576474246772e332d7a21d0242807ceb407244a0af8dfe3c21c9e1eced54283a11ed304c0ae74ae81becc040c7f9c0242c9b35e8171f3182a4
7
+ data.tar.gz: 5c587408bffbb49a09c087f2810b5b65b754de6fb2c3c8c158996446198817c7e2c0a21143544d7e7bc8ef74e4407fd4389d805ed298432c64656d202745fe86
data/CHANGELOG.md CHANGED
@@ -1,6 +1,15 @@
1
1
  Unreleased
2
2
  ------
3
3
 
4
+ Version 2.0.2
5
+ -------------
6
+ * [#1305](https://github.com/Shopify/shopify-cli/pull/1305): Fix `Uninitialized constant Net::WriteTimeout` error
7
+ * [#1319](https://github.com/Shopify/shopify-cli/pull/1319): Fix `theme pull` not pulling some files
8
+ * [#1321](https://github.com/Shopify/shopify-cli/pull/1321): Fix error when pulling images with `theme pull`
9
+ * [#1322](https://github.com/Shopify/shopify-cli/pull/1322): Fix error when running `shopify theme language-server --help`
10
+ * [#1324](https://github.com/Shopify/shopify-cli/pull/1324): Fix issue [#1308](https://github.com/Shopify/shopify-cli/issues/1308) where a non-English language on Partner Account breaks how CLI determines latest API version.
11
+ * [#1343](https://github.com/Shopify/shopify-cli/pull/1343): Fix inconsistent use of periods vs ellipsis in messages. This replaces periods with ellipsis.
12
+
4
13
  Version 2.0.1
5
14
  -------------
6
15
  * [#1295](https://github.com/Shopify/shopify-cli/pull/1295): Ignore files at the root of a theme app extension project
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- shopify-cli (2.0.1)
4
+ shopify-cli (2.0.2)
5
5
  listen (~> 3.5)
6
6
  theme-check (~> 1.0)
7
7
 
data/README.md CHANGED
@@ -101,9 +101,11 @@ Run:
101
101
 
102
102
  To start the server. The server includes hot reload for CSS & Sections.
103
103
 
104
+ **Note:** Shopify CLI is the recommended and officially supported tool for developing themes and creating CI/CD workflows. Please refer to the [Theme Kit Migration Guide](https://github.com/Shopify/shopify-cli/blob/main/THEMEKIT_MIGRATION.md) for details.
105
+
104
106
  ### Contributing
105
107
 
106
- Shopify CLI is an [open source tool](https://github.com/Shopify/shopify-cli/blob/main/.github/LICENSE.md) and everyone is welcome to help the community by [contributing](https://github.com/Shopify/shopify-cli/blob/main/.github/CONTRIBUTING.md) to the project.
108
+ Shopify CLI is an [open source tool](https://github.com/Shopify/shopify-cli/blob/main/LICENSE) and everyone is welcome to help the community by [contributing](https://github.com/Shopify/shopify-cli/blob/main/.github/CONTRIBUTING.md) to the project.
107
109
 
108
110
  ### Where to get help
109
111
 
@@ -0,0 +1,18 @@
1
+ # Theme Kit Migration
2
+
3
+ Shopify CLI is the recommended and officially supported tool for developing Themes and creating CI/CD workflows.
4
+
5
+ This guide shows how to achieve equivalent flows with the new version of the CLI.
6
+
7
+ ## Equivalent commands
8
+
9
+ | Theme Kit Command | Shopify CLI Equivalent | Objective |
10
+ |---|---|---|
11
+ |`theme deploy`|`shopify theme push`| Deploy a local (to the CLI) version of the Theme in the current working directory to a remote store.|
12
+ |`theme new`|`shopify theme init`| Scaffold a new theme. In the case of the CLI it clones Dawn to be used as a reference Theme. Alternatively, it's possible to simply clone Dawn `git clone git@github.com:Shopify/dawn.git` and use it with the CLI.
13
+ |`theme download`|`shopify theme pull`| Download your remote theme files.|
14
+ |`theme watch` & `theme open` | `shopify theme serve` | Start a theme server to locally preview changes with CSS & Section hot reload enabled|
15
+ |-| `shopify theme check`| Run the Theme Check linter on your theme codebase.|
16
+ |-|`shopify theme publish`| Set a remote theme as the live theme.|
17
+ |-|`shopify theme package`|Pack your Theme as a zip file ready for distribution and submission to the Theme Store.|
18
+ |`theme remove`| `shopify theme delete`| Theme kit removes files from the Theme whereas Shopify CLI will remotely destroy the specified theme.|
@@ -1,6 +1,6 @@
1
1
  query {
2
2
  publicApiVersions {
3
3
  handle
4
- displayName
4
+ supported
5
5
  }
6
6
  }
@@ -15,7 +15,13 @@ module Extension
15
15
  end
16
16
 
17
17
  def write_env_file(
18
- context:, title:, api_key: "", api_secret: "", registration_id: nil, registration_uuid: nil
18
+ context:,
19
+ title:,
20
+ api_key: "",
21
+ api_secret: "",
22
+ registration_id: nil,
23
+ registration_uuid: nil,
24
+ resource_url: nil
19
25
  )
20
26
  ShopifyCli::Resources::EnvFile.new(
21
27
  api_key: api_key,
@@ -24,6 +30,7 @@ module Extension
24
30
  ExtensionProjectKeys::TITLE_KEY => title,
25
31
  ExtensionProjectKeys::REGISTRATION_ID_KEY => registration_id,
26
32
  ExtensionProjectKeys::REGISTRATION_UUID_KEY => registration_uuid || generate_temporary_uuid,
33
+ ExtensionProjectKeys::RESOURCE_URL_KEY => resource_url,
27
34
  }.compact
28
35
  ).write(context)
29
36
 
@@ -71,6 +78,10 @@ module Extension
71
78
  get_extra_field(ExtensionProjectKeys::REGISTRATION_UUID_KEY)
72
79
  end
73
80
 
81
+ def resource_url
82
+ get_extra_field(ExtensionProjectKeys::RESOURCE_URL_KEY)
83
+ end
84
+
74
85
  def reload
75
86
  @env = nil
76
87
  end
@@ -7,5 +7,6 @@ module Extension
7
7
  REGISTRATION_UUID_KEY = "EXTENSION_UUID"
8
8
  SPECIFICATION_IDENTIFIER_KEY = "EXTENSION_TYPE"
9
9
  TITLE_KEY = "EXTENSION_TITLE"
10
+ RESOURCE_URL_KEY = "EXTENSION_RESOURCE_URL"
10
11
  end
11
12
  end
@@ -43,7 +43,7 @@ module Extension
43
43
  no_apps: "{{x}} You don’t have any apps.",
44
44
  learn_about_apps: "{{*}} Learn more about building apps at <https://shopify.dev/concepts/apps>, " \
45
45
  "or try creating a new app using {{command:shopify [node|rails] create}}.",
46
- loading_apps: "Loading your apps...",
46
+ loading_apps: "Loading your apps",
47
47
  no_available_extensions: "{{x}} There are no available extensions for this app.",
48
48
  },
49
49
  connect: {
@@ -51,7 +51,7 @@ module Extension
51
51
  incomplete_configuration: "Cannot connect extension due to missing configuration information",
52
52
  invalid_api_key: "The API key %s does not match any of your apps.",
53
53
  ask_registration: "Which extension would you like to connect to?",
54
- loading_extensions: "Loading your extensions...",
54
+ loading_extensions: "Loading your extensions",
55
55
  no_extensions: "{{x}} You don't have any extensions of type %s",
56
56
  learn_about_extensions: "{{*}} Learn more about building extensions at <https://shopify.dev/concepts/apps>, " \
57
57
  "or try creating a new extension using {{command:shopify extension create}}.",
@@ -65,7 +65,7 @@ module Extension
65
65
  Build your extension to prepare for deployment.
66
66
  Usage: {{command:%s extension build}}
67
67
  HELP
68
- frame_title: "Building extension with: %s...",
68
+ frame_title: "Building extension with: %s",
69
69
  build_failure_message: "Failed to build extension code.",
70
70
  },
71
71
  register: {
@@ -76,7 +76,7 @@ module Extension
76
76
  {{command:--api-key=API_KEY}} The API key used to register an app with the extension. This can be found on the app page on Partners Dashboard.
77
77
  HELP
78
78
  frame_title: "Registering Extension",
79
- waiting_text: "Registering with Shopify...",
79
+ waiting_text: "Registering with Shopify",
80
80
  already_registered: "Extension is already registered.",
81
81
  confirm_info: "This will create a new extension registration for %s, which can’t be undone.",
82
82
  confirm_question: "Would you like to register this extension? (y/n)",
@@ -90,7 +90,7 @@ module Extension
90
90
  Usage: {{command:%s extension push}}
91
91
  HELP
92
92
  frame_title: "Pushing your extension to Shopify",
93
- waiting_text: "Pushing code to Shopify...",
93
+ waiting_text: "Pushing code to Shopify",
94
94
  pushed_with_errors: "{{x}} Code pushed to Shopify with errors on %s.",
95
95
  push_with_errors_info: "{{*}} Fix these errors and run {{command:shopify extension push}} to " \
96
96
  "revalidate your extension.",
@@ -104,7 +104,7 @@ module Extension
104
104
  Options:
105
105
  {{command:--tunnel=TUNNEL}} Establish an ngrok tunnel (default: false)
106
106
  HELP
107
- frame_title: "Serving extension...",
107
+ frame_title: "Serving extension",
108
108
  no_available_ports_found: "No available ports found to run extension.",
109
109
  serve_failure_message: "Failed to run extension code.",
110
110
  serve_missing_information: "Missing shop or api_key.",
@@ -129,7 +129,7 @@ module Node
129
129
  {{*}} To install and start using your app, open this URL in your browser:
130
130
  {{green:%s}}
131
131
  MESSAGE
132
- running_server: "Running server...",
132
+ running_server: "Running server",
133
133
  },
134
134
 
135
135
  tunnel: {
@@ -17,7 +17,7 @@ module Rails
17
17
  checking_installation_path: "Checking path %s for gem %s",
18
18
  installed: "Installed %s gem",
19
19
  installed_debug: "%s installed: %s",
20
- installing: "Installing %s gem...",
20
+ installing: "Installing %s gem",
21
21
  setting_gem_home: "GEM_HOME being set to %s",
22
22
  setting_gem_path: "GEM_PATH being set to %s",
23
23
  },
@@ -62,15 +62,15 @@ module Rails
62
62
  open_new_shell: "{{*}} {{yellow:After installing %s, please open a new Command Prompt or PowerShell " \
63
63
  "window to continue.}}",
64
64
  },
65
- installing_bundler: "Installing bundler...",
66
- generating_app: "Generating new rails app project in %s...",
67
- adding_shopify_gem: "{{v}} Adding shopify_app gem...",
65
+ installing_bundler: "Installing bundler",
66
+ generating_app: "Generating new rails app project in %s",
67
+ adding_shopify_gem: "{{v}} Adding shopify_app gem",
68
68
  node_version: "node %s",
69
69
  yarn_version: "yarn %s",
70
- running_bundle_install: "Running bundle install...",
71
- running_generator: "Running shopify_app generator...",
72
- running_migrations: "Running migrations...",
73
- running_webpacker_install: "Running webpacker:install...",
70
+ running_bundle_install: "Running bundle install",
71
+ running_generator: "Running shopify_app generator",
72
+ running_migrations: "Running migrations",
73
+ running_webpacker_install: "Running webpacker:install",
74
74
  },
75
75
 
76
76
  deploy: {
@@ -89,18 +89,18 @@ module Rails
89
89
  Deploy the current Rails project to Heroku
90
90
  Usage: {{command:%s rails deploy heroku}}
91
91
  HELP
92
- downloading: "Downloading Heroku CLI...",
92
+ downloading: "Downloading Heroku CLI",
93
93
  downloaded: "Downloaded Heroku CLI",
94
- installing: "Installing Heroku CLI...",
94
+ installing: "Installing Heroku CLI",
95
95
  installed: "Installed Heroku CLI",
96
96
  authenticated_with_account: "{{v}} Authenticated with Heroku as {{green:%s}}",
97
- authenticating: "Authenticating with Heroku...",
97
+ authenticating: "Authenticating with Heroku",
98
98
  authenticated: "{{v}} Authenticated with Heroku",
99
- deploying: "Deploying to Heroku...",
99
+ deploying: "Deploying to Heroku",
100
100
  deployed: "{{v}} Deployed to Heroku",
101
101
  db_check: {
102
- validating: "Validating application...",
103
- checking: "Checking database type...",
102
+ validating: "Validating application",
103
+ checking: "Checking database type",
104
104
  validated: "Database type \"%s\" validated for platform \"Heroku\"",
105
105
  problem: "A problem was encountered while checking your database type.",
106
106
  sqlite: <<~SQLITE,
@@ -110,7 +110,7 @@ module Rails
110
110
  SQLITE
111
111
  },
112
112
  git: {
113
- checking: "Checking git repo...",
113
+ checking: "Checking git repo",
114
114
  initialized: "Git repo initialized",
115
115
  what_branch: "What branch would you like to deploy?",
116
116
  branch_selected: "{{v}} Git branch {{green:%s}} selected for deploy",
@@ -119,10 +119,10 @@ module Rails
119
119
  no_apps_found: "No existing Heroku app found. What would you like to do?",
120
120
  name: "What is your Heroku app’s name?",
121
121
  select: "Specify an existing Heroku app",
122
- selecting: "Selecting Heroku app %s...",
122
+ selecting: "Selecting Heroku app %s",
123
123
  selected: "{{v}} Heroku app {{green:%s}} selected",
124
124
  create: "Create a new Heroku app",
125
- creating: "Creating new Heroku app...",
125
+ creating: "Creating new Heroku app",
126
126
  created: "{{v}} New Heroku app created",
127
127
  },
128
128
  },
@@ -180,7 +180,7 @@ module Rails
180
180
  {{*}} To install and start using your app, open this URL in your browser:
181
181
  {{green:%s}}
182
182
  MESSAGE
183
- running_server: "Running server...",
183
+ running_server: "Running server",
184
184
  },
185
185
 
186
186
  tunnel: {
@@ -9,9 +9,9 @@ mutation AppScriptUpdateOrCreate(
9
9
  $schemaMinorVersion: String,
10
10
  $useMsgpack: Boolean,
11
11
  $uuid: String,
12
- $configurationUi: Boolean,
13
- $scriptJsonVersion: String,
14
- $configurationDefinition: String,
12
+ $configurationUi: Boolean!,
13
+ $scriptJsonVersion: String!,
14
+ $configurationDefinition: String!,
15
15
  ) {
16
16
  appScriptUpdateOrCreate(
17
17
  extensionPointName: $extensionPointName
@@ -90,7 +90,7 @@ module Theme
90
90
  Uploads the current theme as a development theme to the connected store, then prints theme editor and preview URLs to your terminal. While running, changes will push to the store in real time.
91
91
  Usage: {{command:%s theme serve}}
92
92
  HELP
93
- serve: "Viewing theme...",
93
+ serve: "Viewing theme",
94
94
  open_fail: "Couldn't open the theme",
95
95
  },
96
96
  check: {
@@ -134,9 +134,9 @@ module Theme
134
134
  },
135
135
  language_server: {
136
136
  help: <<~HELP,
137
- {{command:%s theme language-server}}: Start a Language Server Protocol server.
137
+ {{command:%1$s theme language-server}}: Start a Language Server Protocol server.
138
138
 
139
- Usage: {{command:%s theme language-server}}
139
+ Usage: {{command:%1$s theme language-server}}
140
140
  HELP
141
141
  },
142
142
  pull: {
@@ -134,8 +134,12 @@ module ShopifyCli
134
134
  )
135
135
  CLI::Kit::Util.begin do
136
136
  versions = client.query("api_versions")["data"]["publicApiVersions"]
137
- latest = versions.find { |version| version["displayName"].include?("Latest") }
138
- latest["handle"]
137
+ # return the most recent supported version
138
+ versions
139
+ .select { |version| version["supported"] }
140
+ .map { |version| version["handle"] }
141
+ .sort
142
+ .reverse[0]
139
143
  end.retry_after(API::APIRequestUnauthorizedError, retries: 1) do
140
144
  ShopifyCli::IdentityAuth.new(ctx: ctx).reauthenticate
141
145
  end
@@ -81,7 +81,7 @@ module ShopifyCli
81
81
  else
82
82
  raise APIRequestUnexpectedError.new("#{response.code}\n#{response.body}", response: response)
83
83
  end
84
- rescue Net::OpenTimeout, Net::ReadTimeout, Net::WriteTimeout, Errno::ETIMEDOUT, Timeout::Error
84
+ rescue Errno::ETIMEDOUT, Timeout::Error
85
85
  raise APIRequestTimeoutError.new("Timeout")
86
86
  end.retry_after(APIRequestRetriableError, retries: 3) do |e|
87
87
  sleep(1) if e.is_a?(APIRequestThrottledError)
@@ -108,7 +108,7 @@ module ShopifyCli
108
108
  {
109
109
  "User-Agent" => "Shopify CLI; v=#{ShopifyCli::VERSION}",
110
110
  "Sec-CH-UA" => "Shopify CLI; v=#{ShopifyCli::VERSION} sha=#{ShopifyCli.sha}",
111
- "Sec-CH-UA-PLATFORM" => ctx.os,
111
+ "Sec-CH-UA-PLATFORM" => ctx.os.to_s,
112
112
  }.tap do |headers|
113
113
  headers["X-Shopify-Cli-Employee"] = "1" if Shopifolk.acting_as_shopify_organization?
114
114
  end.merge(auth_headers(token))
@@ -90,7 +90,7 @@ module ShopifyCli
90
90
  {
91
91
  schema_id: INVOCATIONS_SCHEMA,
92
92
  payload: {
93
- project_type: Project.current_project_type.to_s,
93
+ project_type: project_type_from_dir_or_cmd(commands[0]).to_s,
94
94
  command: commands.join(" "),
95
95
  args: args.join(" "),
96
96
  time_start: start_time,
@@ -104,7 +104,7 @@ module ShopifyCli
104
104
  is_employee: ShopifyCli::Shopifolk.acting_as_shopify_organization?,
105
105
  }.tap do |payload|
106
106
  payload[:api_key] = metadata.delete(:api_key)
107
- payload[:partner_id] = metadata.delete(:organization_id)
107
+ payload[:partner_id] = metadata.delete(:organization_id) || ShopifyCli::DB.get(:organization_id)
108
108
  if Project.has_current?
109
109
  project = Project.current(force_reload: true)
110
110
  payload[:api_key] = project.env&.api_key
@@ -114,6 +114,10 @@ module ShopifyCli
114
114
  end,
115
115
  }
116
116
  end
117
+
118
+ def project_type_from_dir_or_cmd(command)
119
+ Project.current_project_type || (command unless ShopifyCli::Commands.core_command?(command)) || nil
120
+ end
117
121
  end
118
122
  end
119
123
  end
@@ -28,7 +28,7 @@ module ShopifyCli
28
28
  },
29
29
 
30
30
  env_file: {
31
- saving_header: "writing %s file...",
31
+ saving_header: "writing %s file",
32
32
  saving: "writing %s file",
33
33
  saved: "%s saved to project root",
34
34
  },
@@ -69,7 +69,7 @@ module ShopifyCli
69
69
  no_commits_made: "No git commits have been made. Please make at least one commit.",
70
70
  },
71
71
 
72
- cloning: "Cloning %s into %s...",
72
+ cloning: "Cloning %s into %s",
73
73
  cloned: "{{v}} Cloned into %s",
74
74
  },
75
75
 
@@ -103,9 +103,9 @@ module ShopifyCli
103
103
  install_error: "An error occurred while installing dependencies",
104
104
  },
105
105
 
106
- installing: "Installing dependencies with %s...",
106
+ installing: "Installing dependencies with %s",
107
107
  installed: "Dependencies installed",
108
- npm_installing_deps: "Installing %d dependencies...",
108
+ npm_installing_deps: "Installing %d dependencies",
109
109
  npm_installed_deps: "%d npm dependencies installed",
110
110
  },
111
111
 
@@ -257,7 +257,7 @@ module ShopifyCli
257
257
  count_help: "Number of resources to generate",
258
258
  },
259
259
 
260
- populating: "Populating %d %ss...",
260
+ populating: "Populating %d %ss",
261
261
 
262
262
  completion_message: <<~COMPLETION_MESSAGE,
263
263
  Successfully added %d %s to {{green:%s}}
@@ -345,7 +345,7 @@ module ShopifyCli
345
345
  confirm_store: {
346
346
  prompt: "You are currently logged into {{green:%s}}. Do you want to proceed using this store?",
347
347
  confirmation: "Proceeding using {{green:%s}}",
348
- cancelling: "Cancelling ...",
348
+ cancelling: "Cancelling",
349
349
  },
350
350
  ensure_env: {
351
351
  organization_select: "To which partner organization does this project belong?",
@@ -414,7 +414,9 @@ module ShopifyCli
414
414
  "please make sure %s exists within %s before trying again",
415
415
  },
416
416
 
417
+ installing: "Installing ngrok…",
417
418
  not_running: "{{green:x}} ngrok tunnel not running",
419
+ prereq_command_location: "%s @ %s",
418
420
  signup_suggestion: <<~MESSAGE,
419
421
  {{*}} To avoid tunnels that timeout, it is recommended to signup for a free ngrok
420
422
  account at {{underline:https://ngrok.com/signup}}. After you signup, install your
@@ -423,9 +425,8 @@ module ShopifyCli
423
425
  start: "{{v}} ngrok tunnel running at {{underline:%s}}",
424
426
  start_with_account: "{{v}} ngrok tunnel running at {{underline:%s}}, with account %s",
425
427
  stopped: "{{green:x}} ngrok tunnel stopped",
426
- timed_out: "{{x}} ngrok tunnel has timed out, restarting ...",
428
+ timed_out: "{{x}} ngrok tunnel has timed out, restarting",
427
429
  will_timeout: "{{*}} This tunnel will timeout in {{red:%s}}",
428
- prereq_command_location: "%s @ %s",
429
430
  },
430
431
 
431
432
  version: {
@@ -16,7 +16,7 @@ module ShopifyCli
16
16
 
17
17
  puts "\nBuilding Debian package"
18
18
 
19
- puts "Generating metadata files..."
19
+ puts "Generating metadata files"
20
20
  Dir.glob("#{debian_dir}/*").each { |file| File.delete(file) }
21
21
 
22
22
  metadata_files = %w(control preinst prerm)
@@ -28,7 +28,7 @@ module ShopifyCli
28
28
  File.open(file_path, "w", 0775) { |f| f.write(file_contents) }
29
29
  end
30
30
 
31
- puts "Building package..."
31
+ puts "Building package"
32
32
  Dir.chdir(root_dir)
33
33
  raise "Failed to build package" unless system("dpkg-deb", "-b", "shopify-cli")
34
34
 
@@ -49,14 +49,14 @@ module ShopifyCli
49
49
  spec_path = File.join(root_dir, "shopify-cli.spec")
50
50
  puts "\nBuilding RPM package"
51
51
 
52
- puts "Generating spec file..."
52
+ puts "Generating spec file"
53
53
  File.delete(spec_path) if File.exist?(spec_path)
54
54
 
55
55
  spec_contents = File.read(File.join(root_dir, "shopify-cli.spec.base"))
56
56
  spec_contents = spec_contents.gsub("SHOPIFY_CLI_VERSION", ShopifyCli::VERSION)
57
57
  File.write(spec_path, spec_contents)
58
58
 
59
- puts "Building package..."
59
+ puts "Building package"
60
60
  Dir.chdir(root_dir)
61
61
  system("rpmbuild", "-bb", File.basename(spec_path))
62
62
 
@@ -72,7 +72,7 @@ module ShopifyCli
72
72
  build_path = File.join(BUILDS_DIR, "shopify-cli.rb")
73
73
  puts "\nBuilding Homebrew package"
74
74
 
75
- puts "Generating formula..."
75
+ puts "Generating formula"
76
76
  File.delete(build_path) if File.exist?(build_path)
77
77
 
78
78
  spec_contents = File.read(File.join(root_dir, "shopify-cli.base.rb"))
@@ -87,7 +87,7 @@ module ShopifyCli
87
87
  end
88
88
 
89
89
  def stop
90
- @ctx.puts("Stopping ...")
90
+ @ctx.puts("Stopping")
91
91
  @app.close
92
92
  @syncer.shutdown
93
93
  WebServer.shutdown
@@ -72,7 +72,7 @@ module ShopifyCli
72
72
  def replace_asset_urls(body)
73
73
  replaced_body = body.join.gsub(ASSET_REGEX) do |match|
74
74
  path = Pathname.new(Regexp.last_match[1])
75
- if @theme.asset_paths.include?(path)
75
+ if @theme.static_asset_paths.include?(path)
76
76
  "/#{path}"
77
77
  else
78
78
  match
@@ -20,9 +20,9 @@ module ShopifyCli
20
20
  path.read
21
21
  end
22
22
 
23
- def write(content)
23
+ def write(*args)
24
24
  path.parent.mkpath unless path.parent.directory?
25
- path.write(content)
25
+ path.write(*args)
26
26
  end
27
27
 
28
28
  def delete
@@ -149,7 +149,7 @@ module ShopifyCli
149
149
  # Process lower-priority files in the background
150
150
 
151
151
  # Assets are served locally, so can be uploaded in the background
152
- enqueue_updates(@theme.asset_files)
152
+ enqueue_updates(@theme.static_asset_files)
153
153
 
154
154
  unless delay_low_priority_files
155
155
  wait!(&block)
@@ -254,8 +254,12 @@ module ShopifyCli
254
254
 
255
255
  update_checksums(body)
256
256
 
257
- value = body.dig("asset", "value") || Base64.decode64(body.dig("asset", "attachment"))
258
- file.write(value)
257
+ attachment = body.dig("asset", "attachment")
258
+ value = if attachment
259
+ file.write(Base64.decode64(attachment), 0, mode: "wb")
260
+ else
261
+ file.write(body.dig("asset", "value"))
262
+ end
259
263
 
260
264
  response
261
265
  end
@@ -277,7 +281,7 @@ module ShopifyCli
277
281
 
278
282
  def update_checksums(api_response)
279
283
  api_response.values.flatten.each do |asset|
280
- if asset["key"] && asset["checksum"]
284
+ if asset["key"]
281
285
  @checksums[asset["key"]] = asset["checksum"]
282
286
  end
283
287
  end
@@ -310,7 +314,7 @@ module ShopifyCli
310
314
 
311
315
  def backoff_if_near_limit!(used, limit)
312
316
  if used > limit - @threads.size
313
- @ctx.debug("Near API call limit, waiting 2 sec ...")
317
+ @ctx.debug("Near API call limit, waiting 2 sec")
314
318
  @backoff_mutex.synchronize { sleep 2 }
315
319
  end
316
320
  end
@@ -20,11 +20,11 @@ module ShopifyCli
20
20
  end
21
21
 
22
22
  def theme_files
23
- glob(["**/*.liquid", "**/*.json", "assets/*"])
23
+ glob(["**/*.liquid", "**/*.json", "assets/*"]).uniq
24
24
  end
25
25
 
26
- def asset_files
27
- glob("assets/*")
26
+ def static_asset_files
27
+ glob("assets/*").reject(&:liquid?)
28
28
  end
29
29
 
30
30
  def liquid_files
@@ -43,8 +43,8 @@ module ShopifyCli
43
43
  theme_files.include?(self[file])
44
44
  end
45
45
 
46
- def asset_paths
47
- asset_files.map(&:relative_path)
46
+ def static_asset_paths
47
+ static_asset_files.map(&:relative_path)
48
48
  end
49
49
 
50
50
  def [](file)
@@ -149,7 +149,7 @@ module ShopifyCli
149
149
  check_prereq_command(ctx, "curl")
150
150
  check_prereq_command(ctx, ctx.linux? ? "unzip" : "tar")
151
151
  spinner = CLI::UI::SpinGroup.new
152
- spinner.add("Installing ngrok...") do
152
+ spinner.add(ctx.message("core.tunnel.installing")) do
153
153
  zip_dest = File.join(ShopifyCli.cache_dir, "ngrok.zip")
154
154
  unless File.exist?(zip_dest)
155
155
  ctx.system("curl", "-o", zip_dest, DOWNLOAD_URLS[ctx.os], chdir: ShopifyCli.cache_dir)
@@ -1,3 +1,3 @@
1
1
  module ShopifyCli
2
- VERSION = "2.0.1"
2
+ VERSION = "2.0.2"
3
3
  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.0.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-29 00:00:00.000000000 Z
11
+ date: 2021-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -121,6 +121,7 @@ files:
121
121
  - RELEASING.md
122
122
  - Rakefile
123
123
  - SECURITY.md
124
+ - THEMEKIT_MIGRATION.md
124
125
  - bin/load_shopify.rb
125
126
  - bin/shopify
126
127
  - dev.yml