Skip to content

updater: use qubes-vm-update to update dom0 non-interactively #264

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

piotrbartman
Copy link
Member

GUI updater shows dom0 update progress

requires: QubesOS/qubes-core-admin-linux/pull/191

Copy link

codecov bot commented May 30, 2025

Codecov Report

Attention: Patch coverage is 92.85714% with 4 lines in your changes missing coverage. Please review.

Project coverage is 93.04%. Comparing base (3a85bee) to head (6c2c9dd).

Files with missing lines Patch % Lines
qui/updater/progress_page.py 60.00% 4 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #264      +/-   ##
==========================================
+ Coverage   92.99%   93.04%   +0.04%     
==========================================
  Files          64       64              
  Lines       13034    12894     -140     
==========================================
- Hits        12121    11997     -124     
+ Misses        913      897      -16     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

for vm in qapp.domains:
if vm.klass == "AdminVM":
try:
if settings.hide_skipped and bool(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I might be confused here, but I think the check for skip-update is needed?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's in lines 123–126 (dom0 is now treated like the other VMs).

@marmarek
Copy link
Member

This has conflicts now...

@qubesos-bot
Copy link

qubesos-bot commented Jun 23, 2025

OpenQA test summary

Complete test suite and dependencies: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2025070723-4.3&flavor=pull-requests

Test run included the following:

New failures, excluding unstable

Compared to: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2025061004-4.3&flavor=update

  • system_tests_suspend

    • suspend: unnamed test (unknown)

    • suspend: Failed (test died)
      # Test died: no candidate needle with tag(s) 'xscreensaver-prompt-w...

    • suspend: wait_serial (wait serial expected)
      # wait_serial expected: qr/2E8vz-\d+-/...

  • system_tests_network

    • VmNetworking_fedora-42-xfce: test_010_simple_proxyvm (failure)
      AssertionError: 2 != 0 : Ping by IP from AppVM failed

    • VmNetworking_fedora-42-xfce: test_030_firewallvm_firewall (failure)
      AssertionError: 2 != 0 : Ping by name failed (should be allowed now)

    • VmNetworking_fedora-42-xfce: test_202_fake_ip_firewall (failure)
      AssertionError: 2 != 0 : Ping by name should be allowed

    • VmNetworking_fedora-42-xfce: test_204_fake_ip_proxy (failure)
      ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 2 != 0

    • VmNetworking_fedora-42-xfce: test_211_custom_ip_proxy (failure)
      ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 2 != 0

    • VmNetworking_fedora-42-xfce: test_212_custom_ip_firewall (failure)
      AssertionError: 2 != 0 : Ping by name should be allowed

  • system_tests_pvgrub_salt_storage

    • TC_40_PVGrub_debian-12-xfce: test_000_standalone_vm (failure)
      AssertionError: Failed command: apt-get update && apt-get install -...

    • TC_40_PVGrub_debian-12-xfce: test_001_standalone_vm_dracut (failure)
      AssertionError: Failed command: apt-get update && apt-get install -...

    • TC_41_HVMGrub_debian-12-xfce: test_000_standalone_vm (failure)
      AssertionError: Failed command: apt-get update && apt-get install -...

    • TC_41_HVMGrub_debian-12-xfce: test_001_standalone_vm_dracut (failure)
      AssertionError: Failed command: apt-get update && apt-get install -...

    • TC_41_HVMGrub_fedora-42-xfce: test_000_standalone_vm (failure + timed out)
      AssertionError: Failed command: dnf clean expire-cache && dnf insta...

    • TC_42_PVHGrub_debian-12-xfce: test_000_standalone_vm (failure)
      AssertionError: Failed command: apt-get update && apt-get install -...

    • TC_42_PVHGrub_debian-12-xfce: test_001_standalone_vm_dracut (failure)
      AssertionError: Failed command: apt-get update && apt-get install -...

    • TC_42_PVHGrub_fedora-42-xfce: test_000_standalone_vm (failure + timed out)
      AssertionError: Failed command: dnf clean expire-cache && dnf insta...

  • system_tests_gui_interactive

    • clipboard_and_web: unnamed test (unknown)
    • clipboard_and_web: Failed (test died)
      # Test died: no candidate needle with tag(s) 'qubes-website' matche...
  • system_tests_guivm_gui_interactive

    • clipboard_and_web: unnamed test (unknown)
    • clipboard_and_web: Failed (test died)
      # Test died: no candidate needle with tag(s) 'qubes-website' matche...
  • system_tests_network_ipv6

    • VmIPv6Networking_debian-12-xfce: test_530_ipv6_firewallvm_firewall (failure)
      AssertionError: 1 != 0 : TCP (IPv4) connection failed (should be al...

    • VmIPv6Networking_debian-12-xfce: test_560_ipv6_dns_only (failure)
      ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 2 != 0

  • system_tests_dispvm

  • system_tests_kde_gui_interactive

    • clipboard_and_web: unnamed test (unknown)
    • clipboard_and_web: Failed (test died)
      # Test died: no candidate needle with tag(s) 'qubes-website' matche...
  • system_tests_guivm_vnc_gui_interactive

    • guivm_manager: unnamed test (unknown)
    • guivm_manager: Failed (test died)
      # Test died: no candidate needle with tag(s) 'menu-qubes-tools-subm...
  • system_tests_qwt_win10@hw13

    • windows_install: Failed (test died)
      # Test died: command './install.sh' failed at /usr/lib/os-autoinst/...
  • system_tests_qwt_win10_seamless@hw13

    • windows_install: Failed (test died)
      # Test died: command './install.sh' failed at /usr/lib/os-autoinst/...
  • system_tests_qwt_win11@hw13

    • windows_install: Failed (test died)
      # Test died: command './install.sh' failed at /usr/lib/os-autoinst/...
  • system_tests_gui_interactive_preloaded

    • clipboard_and_web: unnamed test (unknown)
    • clipboard_and_web: Failed (test died)
      # Test died: no candidate needle with tag(s) 'qubes-website' matche...
  • system_tests_basic_vm_qrexec_gui_xfs

    • startup: wait_serial (wait serial expected + timed out)
      # wait_serial expected: "# "...

    • startup: wait_serial (wait serial expected)
      # wait_serial expected: qr/xE1Ra-\d+-/...

    • startup: Failed (test died + timed out)
      # Test died: command 'export TERM=dumb; stty cols 2048 rows 25' tim...

    • startup: wait_serial (wait serial expected)
      # wait_serial expected: "# "...

    • startup: wait_serial (wait serial expected)
      # wait_serial expected: qr/2E8vz-\d+-/...

  • system_tests_suspend@hw1

    • suspend: wait_serial (wait serial expected)
      # wait_serial expected: qr/pP8pL-\d+-/...

    • suspend: Failed (test died + timed out)
      # Test died: command '. curl-wrapper.sh' timed out at qubesos/tests...

  • system_tests_guivm_gpu_gui_interactive@hw13

    • update_guivm: Failed (test died)
      # Test died: command '(set -o pipefail; qubesctl --all --show-outpu...
  • install_default_upload@hw7

    • install_startup: unnamed test (unknown)
    • install_startup: Failed (test died)
      # Test died: no candidate needle with tag(s) 'installer' matched...

Failed tests

50 failures
  • system_tests_suspend

    • suspend: unnamed test (unknown)

    • suspend: Failed (test died)
      # Test died: no candidate needle with tag(s) 'xscreensaver-prompt-w...

    • suspend: wait_serial (wait serial expected)
      # wait_serial expected: qr/2E8vz-\d+-/...

  • system_tests_network

    • VmNetworking_fedora-42-xfce: test_010_simple_proxyvm (failure)
      AssertionError: 2 != 0 : Ping by IP from AppVM failed

    • VmNetworking_fedora-42-xfce: test_030_firewallvm_firewall (failure)
      AssertionError: 2 != 0 : Ping by name failed (should be allowed now)

    • VmNetworking_fedora-42-xfce: test_202_fake_ip_firewall (failure)
      AssertionError: 2 != 0 : Ping by name should be allowed

    • VmNetworking_fedora-42-xfce: test_204_fake_ip_proxy (failure)
      ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 2 != 0

    • VmNetworking_fedora-42-xfce: test_211_custom_ip_proxy (failure)
      ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 2 != 0

    • VmNetworking_fedora-42-xfce: test_212_custom_ip_firewall (failure)
      AssertionError: 2 != 0 : Ping by name should be allowed

  • system_tests_pvgrub_salt_storage

    • TC_40_PVGrub_debian-12-xfce: test_000_standalone_vm (failure)
      AssertionError: Failed command: apt-get update && apt-get install -...

    • TC_40_PVGrub_debian-12-xfce: test_001_standalone_vm_dracut (failure)
      AssertionError: Failed command: apt-get update && apt-get install -...

    • TC_41_HVMGrub_debian-12-xfce: test_000_standalone_vm (failure)
      AssertionError: Failed command: apt-get update && apt-get install -...

    • TC_41_HVMGrub_debian-12-xfce: test_001_standalone_vm_dracut (failure)
      AssertionError: Failed command: apt-get update && apt-get install -...

    • TC_41_HVMGrub_fedora-42-xfce: test_000_standalone_vm (failure + timed out)
      AssertionError: Failed command: dnf clean expire-cache && dnf insta...

    • TC_42_PVHGrub_debian-12-xfce: test_000_standalone_vm (failure)
      AssertionError: Failed command: apt-get update && apt-get install -...

    • TC_42_PVHGrub_debian-12-xfce: test_001_standalone_vm_dracut (failure)
      AssertionError: Failed command: apt-get update && apt-get install -...

    • TC_42_PVHGrub_fedora-42-xfce: test_000_standalone_vm (failure + timed out)
      AssertionError: Failed command: dnf clean expire-cache && dnf insta...

  • system_tests_extra

    • TC_00_QVCTest_whonix-workstation-17: test_010_screenshare (failure)
      AssertionError: 1 != 0 : Timeout waiting for /dev/video0 in test-in...
  • system_tests_gui_interactive

    • clipboard_and_web: unnamed test (unknown)
    • clipboard_and_web: Failed (test died)
      # Test died: no candidate needle with tag(s) 'qubes-website' matche...
  • system_tests_guivm_gui_interactive

    • clipboard_and_web: unnamed test (unknown)
    • clipboard_and_web: Failed (test died)
      # Test died: no candidate needle with tag(s) 'qubes-website' matche...
  • system_tests_network_ipv6

    • VmIPv6Networking_debian-12-xfce: test_530_ipv6_firewallvm_firewall (failure)
      AssertionError: 1 != 0 : TCP (IPv4) connection failed (should be al...

    • VmIPv6Networking_debian-12-xfce: test_560_ipv6_dns_only (failure)
      ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 2 != 0

  • system_tests_dispvm

  • system_tests_kde_gui_interactive

    • clipboard_and_web: unnamed test (unknown)
    • clipboard_and_web: Failed (test died)
      # Test died: no candidate needle with tag(s) 'qubes-website' matche...
  • system_tests_guivm_vnc_gui_interactive

    • guivm_manager: unnamed test (unknown)
    • guivm_manager: Failed (test died)
      # Test died: no candidate needle with tag(s) 'menu-qubes-tools-subm...
  • system_tests_qwt_win10@hw13

    • windows_install: Failed (test died)
      # Test died: command './install.sh' failed at /usr/lib/os-autoinst/...
  • system_tests_qwt_win10_seamless@hw13

    • windows_install: Failed (test died)
      # Test died: command './install.sh' failed at /usr/lib/os-autoinst/...
  • system_tests_qwt_win11@hw13

    • windows_install: Failed (test died)
      # Test died: command './install.sh' failed at /usr/lib/os-autoinst/...
  • system_tests_gui_interactive_preloaded

    • clipboard_and_web: unnamed test (unknown)
    • clipboard_and_web: Failed (test died)
      # Test died: no candidate needle with tag(s) 'qubes-website' matche...
  • system_tests_basic_vm_qrexec_gui_xfs

    • startup: wait_serial (wait serial expected + timed out)
      # wait_serial expected: "# "...

    • startup: wait_serial (wait serial expected)
      # wait_serial expected: qr/xE1Ra-\d+-/...

    • startup: Failed (test died + timed out)
      # Test died: command 'export TERM=dumb; stty cols 2048 rows 25' tim...

    • startup: wait_serial (wait serial expected)
      # wait_serial expected: "# "...

    • startup: wait_serial (wait serial expected)
      # wait_serial expected: qr/2E8vz-\d+-/...

  • system_tests_suspend@hw1

    • suspend: wait_serial (wait serial expected)
      # wait_serial expected: qr/pP8pL-\d+-/...

    • suspend: Failed (test died + timed out)
      # Test died: command '. curl-wrapper.sh' timed out at qubesos/tests...

  • system_tests_guivm_gpu_gui_interactive@hw13

    • update_guivm: Failed (test died)
      # Test died: command '(set -o pipefail; qubesctl --all --show-outpu...
  • install_default_upload@hw7

    • install_startup: unnamed test (unknown)
    • install_startup: Failed (test died)
      # Test died: no candidate needle with tag(s) 'installer' matched...

Fixed failures

Compared to: https://openqa.qubes-os.org/tests/142375#dependencies

12 fixed
  • system_tests_splitgpg

  • system_tests_extra

  • system_tests_kde_gui_interactive

    • gui_keyboard_layout: wait_serial (wait serial expected)
      # wait_serial expected: "echo -e '[Layout]\nLayoutList=us,de' | sud...

    • gui_keyboard_layout: Failed (test died)
      # Test died: command 'test "$(cd ~user;ls e1*)" = "$(qvm-run -p wor...

  • system_tests_guivm_vnc_gui_interactive

    • simple_gui_apps: unnamed test (unknown)
    • simple_gui_apps: Failed (test died)
      # Test died: no candidate needle with tag(s) 'vm-settings-applicati...
  • system_tests_audio

Unstable tests

Performance Tests

Performance degradation:

7 performance degradations
  • debian-12-xfce_exec-data-simplex: 72.55 🔺 ( previous job: 65.51, degradation: 110.74%)
  • debian-12-xfce_exec-data-duplex-root: 83.11 🔺 ( previous job: 70.01, degradation: 118.72%)
  • dom0_root_seq1m_q1t1_write 3:write_bandwidth_kb: 8400.00 :small_red_triangle: ( previous job: 32696.00, degradation: 25.69%)
  • dom0_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 12515.00 :small_red_triangle: ( previous job: 17102.00, degradation: 73.18%)
  • dom0_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 570.00 :small_red_triangle: ( previous job: 1840.00, degradation: 30.98%)
  • dom0_varlibqubes_rnd4k_q32t1_read 3:read_bandwidth_kb: 97707.00 :small_red_triangle: ( previous job: 108760.00, degradation: 89.84%)
  • dom0_varlibqubes_rnd4k_q1t1_write 3:write_bandwidth_kb: 3319.00 :small_red_triangle: ( previous job: 4420.00, degradation: 75.09%)

Remaining performance tests:

65 tests
  • debian-12-xfce_exec: 5.56 🟢 ( previous job: 8.63, improvement: 64.43%)
  • debian-12-xfce_exec-root: 28.75 🟢 ( previous job: 29.44, improvement: 97.66%)
  • debian-12-xfce_socket: 8.35 🟢 ( previous job: 8.50, improvement: 98.19%)
  • debian-12-xfce_socket-root: 8.61 🔺 ( previous job: 8.31, degradation: 103.52%)
  • debian-12-xfce_exec-data-duplex: 70.29 🟢 ( previous job: 73.55, improvement: 95.58%)
  • debian-12-xfce_socket-data-duplex: 154.96 🟢 ( previous job: 161.35, improvement: 96.04%)
  • fedora-42-xfce_exec: 9.01
  • fedora-42-xfce_exec-root: 59.20
  • fedora-42-xfce_socket: 7.70
  • fedora-42-xfce_socket-root: 8.10
  • fedora-42-xfce_exec-data-simplex: 67.99
  • fedora-42-xfce_exec-data-duplex: 66.52
  • fedora-42-xfce_exec-data-duplex-root: 93.32
  • fedora-42-xfce_socket-data-duplex: 155.82
  • whonix-gateway-17_exec: 6.85 🟢 ( previous job: 7.34, improvement: 93.33%)
  • whonix-gateway-17_exec-root: 38.45 🟢 ( previous job: 39.57, improvement: 97.16%)
  • whonix-gateway-17_socket: 7.72 🟢 ( previous job: 7.85, improvement: 98.34%)
  • whonix-gateway-17_socket-root: 7.83 🟢 ( previous job: 7.89, improvement: 99.22%)
  • whonix-gateway-17_exec-data-simplex: 81.18 🔺 ( previous job: 77.76, degradation: 104.39%)
  • whonix-gateway-17_exec-data-duplex: 79.43 🔺 ( previous job: 78.39, degradation: 101.34%)
  • whonix-gateway-17_exec-data-duplex-root: 89.60 🟢 ( previous job: 90.74, improvement: 98.75%)
  • whonix-gateway-17_socket-data-duplex: 171.61 🔺 ( previous job: 161.95, degradation: 105.96%)
  • whonix-workstation-17_exec: 7.97 🟢 ( previous job: 8.27, improvement: 96.37%)
  • whonix-workstation-17_exec-root: 59.53 🔺 ( previous job: 57.61, degradation: 103.34%)
  • whonix-workstation-17_socket: 8.51 🟢 ( previous job: 8.97, improvement: 94.84%)
  • whonix-workstation-17_socket-root: 9.06 🟢 ( previous job: 9.46, improvement: 95.77%)
  • whonix-workstation-17_exec-data-simplex: 78.04 🔺 ( previous job: 74.54, degradation: 104.69%)
  • whonix-workstation-17_exec-data-duplex: 77.25 🔺 ( previous job: 74.84, degradation: 103.23%)
  • whonix-workstation-17_exec-data-duplex-root: 92.19 🔺 ( previous job: 86.00, degradation: 107.19%)
  • whonix-workstation-17_socket-data-duplex: 167.19 🔺 ( previous job: 160.20, degradation: 104.36%)
  • dom0_root_seq1m_q8t1_read 3:read_bandwidth_kb: 422983.00 :green_circle: ( previous job: 289982.00, improvement: 145.87%)
  • dom0_root_seq1m_q8t1_write 3:write_bandwidth_kb: 97195.00 :small_red_triangle: ( previous job: 101988.00, degradation: 95.30%)
  • dom0_root_seq1m_q1t1_read 3:read_bandwidth_kb: 26737.00 :green_circle: ( previous job: 14284.00, improvement: 187.18%)
  • dom0_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 1080.00 :small_red_triangle: ( previous job: 1091.00, degradation: 98.99%)
  • dom0_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 11953.00 :green_circle: ( previous job: 11086.00, improvement: 107.82%)
  • dom0_varlibqubes_seq1m_q8t1_read 3:read_bandwidth_kb: 408960.00 :green_circle: ( previous job: 289182.00, improvement: 141.42%)
  • dom0_varlibqubes_seq1m_q8t1_write 3:write_bandwidth_kb: 138385.00 :green_circle: ( previous job: 122848.00, improvement: 112.65%)
  • dom0_varlibqubes_seq1m_q1t1_read 3:read_bandwidth_kb: 393757.00 :small_red_triangle: ( previous job: 433654.00, degradation: 90.80%)
  • dom0_varlibqubes_seq1m_q1t1_write 3:write_bandwidth_kb: 177615.00 :green_circle: ( previous job: 167872.00, improvement: 105.80%)
  • dom0_varlibqubes_rnd4k_q32t1_write 3:write_bandwidth_kb: 8790.00 :small_red_triangle: ( previous job: 8874.00, degradation: 99.05%)
  • dom0_varlibqubes_rnd4k_q1t1_read 3:read_bandwidth_kb: 7460.00 :green_circle: ( previous job: 6356.00, improvement: 117.37%)
  • fedora-42-xfce_root_seq1m_q8t1_read 3:read_bandwidth_kb: 387930.00
  • fedora-42-xfce_root_seq1m_q8t1_write 3:write_bandwidth_kb: 223815.00
  • fedora-42-xfce_root_seq1m_q1t1_read 3:read_bandwidth_kb: 294875.00
  • fedora-42-xfce_root_seq1m_q1t1_write 3:write_bandwidth_kb: 77259.00
  • fedora-42-xfce_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 85019.00
  • fedora-42-xfce_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 2233.00
  • fedora-42-xfce_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 8040.00
  • fedora-42-xfce_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 1458.00
  • fedora-42-xfce_private_seq1m_q8t1_read 3:read_bandwidth_kb: 386073.00
  • fedora-42-xfce_private_seq1m_q8t1_write 3:write_bandwidth_kb: 160638.00
  • fedora-42-xfce_private_seq1m_q1t1_read 3:read_bandwidth_kb: 311334.00
  • fedora-42-xfce_private_seq1m_q1t1_write 3:write_bandwidth_kb: 53947.00
  • fedora-42-xfce_private_rnd4k_q32t1_read 3:read_bandwidth_kb: 89747.00
  • fedora-42-xfce_private_rnd4k_q32t1_write 3:write_bandwidth_kb: 2573.00
  • fedora-42-xfce_private_rnd4k_q1t1_read 3:read_bandwidth_kb: 5333.00
  • fedora-42-xfce_private_rnd4k_q1t1_write 3:write_bandwidth_kb: 979.00
  • fedora-42-xfce_volatile_seq1m_q8t1_read 3:read_bandwidth_kb: 333728.00
  • fedora-42-xfce_volatile_seq1m_q8t1_write 3:write_bandwidth_kb: 52384.00
  • fedora-42-xfce_volatile_seq1m_q1t1_read 3:read_bandwidth_kb: 319395.00
  • fedora-42-xfce_volatile_seq1m_q1t1_write 3:write_bandwidth_kb: 121865.00
  • fedora-42-xfce_volatile_rnd4k_q32t1_read 3:read_bandwidth_kb: 74516.00
  • fedora-42-xfce_volatile_rnd4k_q32t1_write 3:write_bandwidth_kb: 2761.00
  • fedora-42-xfce_volatile_rnd4k_q1t1_read 3:read_bandwidth_kb: 8455.00
  • fedora-42-xfce_volatile_rnd4k_q1t1_write 3:write_bandwidth_kb: 2138.00

@marmarek
Copy link
Member

opening updater from the widget failed with:

Jun 23 10:25:51.247349 dom0 qui-updates[3269]: gdk_window_thaw_toplevel_updates: assertion 'window->update_and_descendants_freeze_count > 0' failed

I'm not sure if it's related to this PR, I'll restart the test..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants