Shopify / cli

Build apps, themes, and hydrogen storefronts for Shopify
https://shopify.dev
MIT License
401 stars 120 forks source link

[Bug]: theme push is very slow in versions with the new colorful upload UI #4210

Open BearKid opened 1 month ago

BearKid commented 1 month ago

Please confirm that you have:

In which of these areas are you experiencing a problem?

Theme

Expected behavior

I expect shopify theme push -d in @shopify/cli@3.64.0 should complete in no more than 5s, should be same as @shopify/cli@3.47.5.

Actual behavior

I found that v3.56.x ~ v3.64.0 (the latest version at this moment) is very slow when uploading the theme files using shopify theme push -d.

I tested cli 3.47.x ~ 3.53.x, shopify theme push -d is far more faster than the new versions, taking no more than 5s.

Intuitively, the versions with the colorful upload progress bar are slow, and the versions with the old style upload progress bar are faster.

Below is a more detail table image

As you can see by the table above, my new PC doesn't run the old version of the CLI properly and I have to use the new version, so I'm desperate to find a solution to the slow uploads.

Verbose output

...

2024-07-16T04:10:29.212Z: Request to https://xxx-dev.myshopify.com/admin/api/unstable/themes/143758819578/assets/bulk.json completed in 1003 ms
With response headers:
 - content-type: application/json; charset=utf-8
 - x-request-id: 6e88e3c6-713f-48fa-9b81-9b2941e0db9f-1721103028

2024-07-16T04:10:29.214Z: File Upload Results:
-snippets/preorder-now-settings-1.liquid: success
-snippets/preorder-now.liquid: success
-snippets/price.liquid: success
-snippets/signup_event_fire.liquid: success
-templates/page.bss-b2b-wholesaler-18046.liquid: success
-templates/search.bss.b2b.liquid: success
-templates/search.preorder-now-search.liquid: success
-templates/customers/account.liquid: success
-templates/customers/register.liquid: success
2024-07-16T04:10:29.221Z: Uploading the following files:                                                                                                                                                                                                                                                            
-assets/pandectes-settings.json                                                                                                                                                                                                                                                                                     
-templates/product.json
2024-07-16T04:10:30.167Z: Request to https://xxx-dev.myshopify.com/admin/api/unstable/themes/143758819578/assets/bulk.json completed in 943 ms
With response headers:
 - content-type: application/json; charset=utf-8
 - x-request-id: ebed7cfc-672b-470e-8d97-b2623aef3cd1-1721103029

2024-07-16T04:10:30.169Z: File Upload Results:                                                                                                                                                                                                                                                                      
-assets/pandectes-settings.json: success                                                                                                                                                                                                                                                                            
-templates/product.json: success
2024-07-16T04:10:30.173Z: Uploading the following files:                                                                                                                                                                                                                                                            
-config/settings_schema.json                                                                                                                                                                                                                                                                                        
2024-07-16T04:10:30.898Z: Request to https://xxx-dev.myshopify.com/admin/api/unstable/themes/143758819578/assets/bulk.json completed in 723 ms
With response headers:
 - content-type: application/json; charset=utf-8
 - x-request-id: 29bb82c3-9245-47ec-afe3-f1ed7550b4c1-1721103030

2024-07-16T04:10:30.902Z: File Upload Results:                                                                                                                                                                                                                                                                      
-config/settings_schema.json: success                                                                                                                                                                                                                                                                               
2024-07-16T04:10:30.906Z: Uploading the following files:
-assets/appointly-main.js
2024-07-16T04:10:31.902Z: Request to https://xxx-dev.myshopify.com/admin/api/unstable/themes/143758819578/assets/bulk.json completed in 993 ms
With response headers:
 - content-type: application/json; charset=utf-8
 - x-request-id: cbd5f66c-639c-4380-90ba-8951f36c7c67-1721103030

2024-07-16T04:10:31.906Z: File Upload Results:                                                                                                                                                                                                                                                                      
-assets/appointly-main.js: success                                                                                                                                                                                                                                                                                  
2024-07-16T04:10:31.910Z: Uploading the following files:
-assets/bss-b2b-hook.js
-assets/bss-b2b-js.js
2024-07-16T04:10:35.136Z: Request to https://xxx-dev.myshopify.com/admin/api/unstable/themes/143758819578/assets/bulk.json completed in 3218 ms
With response headers:
 - content-type: application/json; charset=utf-8
 - x-request-id: b970d93d-6245-45e8-a4dc-525717de3278-1721103031

2024-07-16T04:10:35.148Z: File Upload Results:                                                                                                                                                                                                                                                                      
-assets/bss-b2b-hook.js: success                                                                                                                                                                                                                                                                                    
-assets/bss-b2b-js.js: success
2024-07-16T04:10:35.150Z: Uploading the following files:
-assets/bss-b2b-state.js
2024-07-16T04:10:36.371Z: Request to https://xxx-dev.myshopify.com/admin/api/unstable/themes/143758819578/assets/bulk.json completed in 1215 ms
With response headers:
 - content-type: application/json; charset=utf-8
 - x-request-id: 8ecbbb1f-dde9-43b1-8cab-fc2b1971b6b3-1721103035

2024-07-16T04:10:36.372Z: File Upload Results:                                                                                                                                                                                                                                                                      
-assets/bss-b2b-state.js: success

...

 Analytics event sent: {
  "command": "theme push",
  "time_start": 1721109452872,
  "time_end": 1721109601617,
  "total_time": 148745,
  "success": true,
  "cli_version": "3.64.0",
  "ruby_version": "3.3.4",
  "node_version": "22.4.1",
  "is_employee": false,
  "uname": "windows amd64",
  "env_ci": false,
  "env_plugin_installed_any_custom": false,
  "env_plugin_installed_shopify": "[\"@shopify/cli\"]",
  "env_shell": "cmd.exe",
  "env_device_id": "59e44e9b47f02007da55a01933fdbb74b0d207e4",
  "env_cloud": "localhost",
  "env_package_manager": "pnpm",
  "env_is_global": true,
  "cmd_app_warning_api_key_deprecation_displayed": false,
  "cmd_all_timing_network_ms": 144150,
  "cmd_all_timing_prompts_ms": 0,
  "cmd_all_launcher": "unknown",
  "cmd_all_topic": "theme",
  "cmd_all_plugin": "@shopify/cli",
  "cmd_all_force": false,
  "cmd_all_verbose": true,
  "cmd_all_path_override": true,
  "cmd_all_path_override_hash": "e23c73e2fe642a39a0a3686096356ed8af4ac0a5",
  "cmd_all_timing_active_ms": 4594,
  "cmd_all_exit": "ok",
  "args": "-d --store {mystore_name}.myshopify.com --verbose",
  "env_plugin_installed_all": "[\"@shopify/cli\"]",
  "metadata": "{\"extraPublic\":{},\"extraSensitive\":{}}"
}

Reproduction steps

  1. follow doc to Install Ruby+Devkit 3.x using https://rubyinstaller.org/downloads/
  2. pnpm i -g @shopify/cli@3.64.0 or npm i -g @shopify/cli@3.64.0
  3. shopify theme push -d --store xxx.myshopify.com

Operating System

Windows 10

Shopify CLI version (check your project's package.json if you're not sure)

3.64.0

Shell

Powersell

Node version (run node -v if you're not sure)

v22.4.1

What language and version are you using in your application?

No response

BearKid commented 1 month ago

both my old PC and new PC are under the same network environment and using the proxy software Clash with TUN mode enabled.

lucyxiang commented 1 month ago

Hey @BearKid, are you deleting your theme between these theme push calls? With each subsequent theme push, we only push the diffs so the initial call is the slowest.

You can test the TypeScript implementation (new colorful UI) vs Ruby implementation (what older CLI versions use) with the --stable flag (theme push -d --stable). --stable will run the old Ruby implementation while without it will run the new TypeScript implementation.

BearKid commented 1 month ago

@lucyxiang thx for your reply. It seems that the key point of the issue is that the cli unexpectedly uploaded some files that hadn't been changed. Is it possible that cli diff has a problem with the handling of line breaks?

Hey @BearKid, are you deleting your theme between these theme push calls? With each subsequent theme push, we only push the diffs so the initial call is the slowest.

  1. No, I repeatly tested theme push -d without delete anything.
  2. I re-tested it in Project 1(23MB) today and unexpectedly found it to be a bit better than the previous tests (30s vs. 2minutes). Prior to this test, there was some changes to the environment: I realized that theme dev was running with an error, and based on this issue, I reinstalled Ruby + Devkit, downgrading its version from 3.3.4 to 3.1.2.
  3. In my case, the cli did not "only push the diffs". with --verbose, I found that the cli neither push all files or only push the diffs, it just picked some files to push.
  4. During the execution of the push command, the bulk api is called many times, some calls upload only one file, some calls upload only 2 files, and some upload several files. Below is part of the log:
2024-07-18T00:44:31.953Z: Uploading the following files:                                                                                                                                                                                                                                                            
-sections/pf-d37933f8.liquid                                                                                                                                                                                                                                                                                        
-sections/pf-d7f4e5c1.liquid
2024-07-18T00:44:33.798Z: Request to https://xxx.myshopify.com/admin/api/unstable/themes/170038395148/assets/bulk.json completed in 1839 ms
With response headers:
 - content-type: application/json; charset=utf-8
 - x-request-id: 04995c0c-c604-4e82-b7c3-a58d5f32e2b7-1721263472

2024-07-18T00:44:33.826Z: Uploading the following files:                                                                                                                                                                                                                                                            
-sections/pf-f330db7b.liquid                                                                                                                                                                                                                                                                                        
2024-07-18T00:44:35.068Z: Request to https://xxx.myshopify.com/admin/api/unstable/themes/170038395148/assets/bulk.json completed in 1222 ms
With response headers:
 - content-type: application/json; charset=utf-8
 - x-request-id: 1d0f47f1-3f19-4506-b36d-d7fa604de9bb-1721263474

2024-07-18T00:44:45.087Z: Analytics event sent: {
  "command": "theme push",
  "time_start": 1721263452745,
  "time_end": 1721263484353,
  "total_time": 31608,
  "success": true,
  "cli_version": "3.64.0",
  "ruby_version": "3.1.2",
  "node_version": "22.4.1",
  "is_employee": false,
  "uname": "windows amd64",
  "env_ci": false,
  "env_plugin_installed_any_custom": false,
  "env_plugin_installed_shopify": "[\"@shopify/cli\"]",
  "env_shell": "cmd.exe",
  "env_device_id": "59e44e9b47f02007da55a01933fdbb74b0d207e4",
  "env_cloud": "localhost",
  "env_package_manager": "pnpm",
  "env_is_global": true,
  "cmd_app_warning_api_key_deprecation_displayed": false,
  "cmd_all_timing_network_ms": 30398,
  "cmd_all_timing_prompts_ms": 0,
  "cmd_all_launcher": "unknown",
  "cmd_all_topic": "theme",
  "cmd_all_plugin": "@shopify/cli",
  "cmd_all_force": false,
  "cmd_all_verbose": true,
  "cmd_all_path_override": true,
  "cmd_all_path_override_hash": "e23c73e2fe642a39a0a3686096356ed8af4ac0a5",
  "cmd_all_timing_active_ms": 1209,
  "cmd_all_exit": "ok",
  "args": "-d --store xxx.myshopify.com --verbose",
  "env_plugin_installed_all": "[\"@shopify/cli\"]",
  "metadata": "{\"extraPublic\":{},\"extraSensitive\":{}}"
}


You can test the TypeScript implementation (new colorful UI) vs Ruby implementation (what older CLI versions use) with the --stable flag (theme push -d --stable). --stable will run the old Ruby implementation while without it will run the new TypeScript implementation.

I tested three times with --stable. I did not change or delete any file. please help to check the results:

2024-07-18T01:35:20.245Z: Analytics event sent: {
  "command": "theme push",
  "time_start": 1721266449275,
  "time_end": 1721266519459,
  "total_time": 70184,
  "success": true,
  "cli_version": "3.64.0",
  "ruby_version": "3.1.2",
  "node_version": "22.4.1",
  "is_employee": false,
  "uname": "windows amd64",
  "env_ci": false,
  "env_plugin_installed_any_custom": false,
  "env_plugin_installed_shopify": "[\"@shopify/cli\"]",
  "env_shell": "cmd.exe",
  "env_device_id": "59e44e9b47f02007da55a01933fdbb74b0d207e4",
  "env_cloud": "localhost",
  "env_package_manager": "pnpm",
  "env_is_global": true,
  "cmd_app_warning_api_key_deprecation_displayed": false,
  "cmd_all_timing_network_ms": 2211,
  "cmd_all_timing_prompts_ms": 0,
  "cmd_all_launcher": "unknown",
  "cmd_all_topic": "theme",
  "cmd_all_plugin": "@shopify/cli",
  "cmd_all_force": false,
  "cmd_all_verbose": true,
  "cmd_all_path_override": true,
  "cmd_all_path_override_hash": "e23c73e2fe642a39a0a3686096356ed8af4ac0a5",
  "cmd_all_timing_active_ms": 67972,
  "cmd_all_exit": "ok",
  "args": "-d --stable --store xxx.myshopify.com --verbose",
  "env_plugin_installed_all": "[\"@shopify/cli\"]",
  "metadata": "{\"extraPublic\":{},\"extraSensitive\":{}}"
}
2024-07-18T01:38:33.814Z: Analytics event sent: {
  "command": "theme push",
  "time_start": 1721266700287,
  "time_end": 1721266713038,
  "total_time": 12751,
  "success": true,
  "cli_version": "3.64.0",
  "ruby_version": "3.1.2",
  "node_version": "22.4.1",
  "is_employee": false,
  "uname": "windows amd64",
  "env_ci": false,
  "env_plugin_installed_any_custom": false,
  "env_plugin_installed_shopify": "[\"@shopify/cli\"]",
  "env_shell": "cmd.exe",
  "env_device_id": "59e44e9b47f02007da55a01933fdbb74b0d207e4",
  "env_cloud": "localhost",
  "env_package_manager": "pnpm",
  "env_is_global": true,
  "cmd_app_warning_api_key_deprecation_displayed": false,
  "cmd_all_timing_network_ms": 1625,
  "cmd_all_timing_prompts_ms": 0,
  "cmd_all_launcher": "unknown",
  "cmd_all_topic": "theme",
  "cmd_all_plugin": "@shopify/cli",
  "cmd_all_force": false,
  "cmd_all_verbose": true,
  "cmd_all_path_override": true,
  "cmd_all_path_override_hash": "e23c73e2fe642a39a0a3686096356ed8af4ac0a5",
  "cmd_all_timing_active_ms": 11125,
  "cmd_all_exit": "ok",
  "args": "-d --stable --store xxx.myshopify.com --verbose",
  "env_plugin_installed_all": "[\"@shopify/cli\"]",
  "metadata": "{\"extraPublic\":{},\"extraSensitive\":{}}"
}
BearKid commented 1 month ago

Continuing from the previous comment. Further, I re-tested the same project 1 on my old PC with shopify/cli@3.47.5, taking about 9s ~ 14s. Same, I didn't change or delete any files when doing tests.

On my new PC, the 16 uploaded files under shopify/cli@3.64.0 theme push -d **--stable** have a large overlap with these 21 files. This explains the similar upload times for both commands.

lucyxiang commented 1 month ago

Thank you for the details @BearKid, I'll bring this back to the team. If you are comfortable sharing the exact theme projects you're working with, that'll help us investigate, you can email them to me at lucy.xiang@shopify.com.

BearKid commented 1 month ago

Thank you for the details @BearKid, I'll bring this back to the team. If you are comfortable sharing the exact theme projects you're working with, that'll help us investigate, you can email them to me at lucy.xiang@shopify.com.

Thx, I re-test in a clean project (created by git clone dawn.git from official git repository), and I just sent a email to you.

No luck, the cli without --stable uploaded a lot of files: image

2024-07-23T09:20:32.091Z: Analytics event sent: 
{
  "command": "theme push",
  "time_start": 1721726390869,
  "time_end": 1721726431007,
  "total_time": 40138,
  "success": true,
  "cli_version": "3.64.0",
  "ruby_version": "3.1.2",
  "node_version": "22.4.1",
  "is_employee": false,
  "uname": "windows amd64",
  "env_ci": false,
  "env_plugin_installed_any_custom": false,
  "env_plugin_installed_shopify": "[\"@shopify/cli\"]",
  "env_shell": "cmd.exe",
  "env_device_id": "965d14299bfe08715bf65c528f0f88481987ba6d",
  "env_cloud": "localhost",
  "env_package_manager": "unknown",
  "env_is_global": true,
  "cmd_app_warning_api_key_deprecation_displayed": false,
  "cmd_all_timing_network_ms": 37321,
  "cmd_all_timing_prompts_ms": 0,
  "cmd_all_launcher": "unknown",
  "cmd_all_topic": "theme",
  "cmd_all_plugin": "@shopify/cli",
  "cmd_all_force": false,
  "cmd_all_verbose": true,
  "cmd_all_path_override": true,
  "cmd_all_path_override_hash": "fc9241ef609882b9d6bfbf1494a2267be28512fe",
  "cmd_all_timing_active_ms": 2816,
  "cmd_all_exit": "ok",
  "args": "-d --verbose --store xxx-dev.myshopify.com",
  "env_plugin_installed_all": "[\"@shopify/cli\"]",
  "metadata": "{\"extraPublic\":{},\"extraSensitive\":{}}"
}

after that, I run twice with --stable, at the first time the cli uploaded a lot of files, and the second time the cli still uploaded some files.

lukeh-shopify commented 3 weeks ago

👋🏻 Hi all, thanks so much for your reports and logs. We are tracking this in some upcoming work, so hope to be able to resolve these issues soon. Thanks for your patience with this one