summaryrefslogtreecommitdiff
path: root/lib/python/qmk/cli/doctor.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python/qmk/cli/doctor.py')
-rwxr-xr-xlib/python/qmk/cli/doctor.py137
1 files changed, 0 insertions, 137 deletions
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
deleted file mode 100755
index 327bc9cb30..0000000000
--- a/lib/python/qmk/cli/doctor.py
+++ /dev/null
@@ -1,137 +0,0 @@
-"""QMK Doctor
-
-Check out the user's QMK environment and make sure it's ready to compile.
-"""
-import platform
-from subprocess import DEVNULL
-
-from milc import cli
-from milc.questions import yesno
-from qmk import submodules
-from qmk.constants import QMK_FIRMWARE
-from qmk.os_helpers import CheckStatus, check_binaries, check_binary_versions, check_submodules, check_git_repo
-
-
-def os_tests():
- """Determine our OS and run platform specific tests
- """
- platform_id = platform.platform().lower()
-
- if 'darwin' in platform_id or 'macos' in platform_id:
- return os_test_macos()
- elif 'linux' in platform_id:
- return os_test_linux()
- elif 'windows' in platform_id:
- return os_test_windows()
- else:
- cli.log.warning('Unsupported OS detected: %s', platform_id)
- return CheckStatus.WARNING
-
-
-def os_test_linux():
- """Run the Linux specific tests.
- """
- # Don't bother with udev on WSL, for now
- if 'microsoft' in platform.uname().release.lower():
- cli.log.info("Detected {fg_cyan}Linux (WSL){fg_reset}.")
-
- # https://github.com/microsoft/WSL/issues/4197
- if QMK_FIRMWARE.as_posix().startswith("/mnt"):
- cli.log.warning("I/O performance on /mnt may be extremely slow.")
- return CheckStatus.WARNING
-
- return CheckStatus.OK
- else:
- cli.log.info("Detected {fg_cyan}Linux{fg_reset}.")
- from qmk.os_helpers.linux import check_udev_rules
-
- return check_udev_rules()
-
-
-def os_test_macos():
- """Run the Mac specific tests.
- """
- cli.log.info("Detected {fg_cyan}macOS %s{fg_reset}.", platform.mac_ver()[0])
-
- return CheckStatus.OK
-
-
-def os_test_windows():
- """Run the Windows specific tests.
- """
- win32_ver = platform.win32_ver()
- cli.log.info("Detected {fg_cyan}Windows %s (%s){fg_reset}.", win32_ver[0], win32_ver[1])
-
- return CheckStatus.OK
-
-
-@cli.argument('-y', '--yes', action='store_true', arg_only=True, help='Answer yes to all questions.')
-@cli.argument('-n', '--no', action='store_true', arg_only=True, help='Answer no to all questions.')
-@cli.subcommand('Basic QMK environment checks')
-def doctor(cli):
- """Basic QMK environment checks.
-
- This is currently very simple, it just checks that all the expected binaries are on your system.
-
- TODO(unclaimed):
- * [ ] Compile a trivial program with each compiler
- """
- cli.log.info('QMK Doctor is checking your environment.')
- cli.log.info('CLI version: %s', cli.version)
- cli.log.info('QMK home: {fg_cyan}%s', QMK_FIRMWARE)
-
- status = os_tests()
-
- # Make sure our QMK home is a Git repo
- git_ok = check_git_repo()
-
- if git_ok == CheckStatus.WARNING:
- cli.log.warning("QMK home does not appear to be a Git repository! (no .git folder)")
- status = CheckStatus.WARNING
-
- # Make sure the basic CLI tools we need are available and can be executed.
- bin_ok = check_binaries()
-
- if not bin_ok:
- if yesno('Would you like to install dependencies?', default=True):
- cli.run(['util/qmk_install.sh', '-y'], stdin=DEVNULL, capture_output=False)
- bin_ok = check_binaries()
-
- if bin_ok:
- cli.log.info('All dependencies are installed.')
- else:
- status = CheckStatus.ERROR
-
- # Make sure the tools are at the correct version
- ver_ok = check_binary_versions()
- if CheckStatus.ERROR in ver_ok:
- status = CheckStatus.ERROR
- elif CheckStatus.WARNING in ver_ok and status == CheckStatus.OK:
- status = CheckStatus.WARNING
-
- # Check out the QMK submodules
- sub_ok = check_submodules()
-
- if sub_ok == CheckStatus.OK:
- cli.log.info('Submodules are up to date.')
- else:
- if yesno('Would you like to clone the submodules?', default=True):
- submodules.update()
- sub_ok = check_submodules()
-
- if sub_ok == CheckStatus.ERROR:
- status = CheckStatus.ERROR
- elif sub_ok == CheckStatus.WARNING and status == CheckStatus.OK:
- status = CheckStatus.WARNING
-
- # Report a summary of our findings to the user
- if status == CheckStatus.OK:
- cli.log.info('{fg_green}QMK is ready to go')
- return 0
- elif status == CheckStatus.WARNING:
- cli.log.info('{fg_yellow}QMK is ready to go, but minor problems were found')
- return 1
- else:
- cli.log.info('{fg_red}Major problems detected, please fix these problems before proceeding.')
- cli.log.info('{fg_blue}Check out the FAQ (https://docs.qmk.fm/#/faq_build) or join the QMK Discord (https://discord.gg/Uq7gcHh) for help.')
- return 2