Compare commits
57 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 61ca025afd | |||
| 2bd1630621 | |||
| 34517d01b7 | |||
| 0a4d66e13a | |||
| fe0a3af05f | |||
| 4508b8548f | |||
| 2ea90a0893 | |||
| 9fccc990be | |||
| 6d99eacdf8 | |||
| dbd731585a | |||
| 9d480bd287 | |||
| 709f416e52 | |||
| bcdac9a80e | |||
| 4772e68828 | |||
| 24741c7d2b | |||
| b756421528 | |||
| 3d96bcdc14 | |||
| 6e6b6bcde6 | |||
| 1df06eed72 | |||
| 60a56b6976 | |||
| 1e3605feb3 | |||
| 48ddcefea1 | |||
| 2f6f38cc33 | |||
| c73ae7e97c | |||
| 0475193870 | |||
| 8d9b3b2880 | |||
| 0dbe3dc448 | |||
| c41fd5e940 | |||
| b70736a876 | |||
| 69b3b890d2 | |||
| 8b30a9766d | |||
| 982349a450 | |||
| 4d161c9ec4 | |||
| 047eb00594 | |||
| 558251860a | |||
| b685fe5d3f | |||
| e447fb4252 | |||
| 066a865084 | |||
| a1276f8d58 | |||
| 3555e34ae9 | |||
| b36cf144e3 | |||
| fb05b69adc | |||
| 4283c258d9 | |||
| b5e8aa4cac | |||
| 1c6d81fc3b | |||
| 0ffae74377 | |||
| cbe3ad0248 | |||
| 97689b53d7 | |||
| 054e071787 | |||
| 78e0fda2f0 | |||
| 9c6123483b | |||
| e851c8fcb5 | |||
| 92168e1ef0 | |||
| fd744ac24c | |||
| 840c791cc8 | |||
| 8f5b8e83c0 | |||
| 1da98510d3 |
@@ -0,0 +1,15 @@
|
|||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions" # See documentation for possible values
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "daily"
|
||||||
|
- package-ecosystem: "pip" # See documentation for possible values
|
||||||
|
directory: "/" # Location of package manifests
|
||||||
|
schedule:
|
||||||
|
interval: "daily"
|
||||||
|
reviewers:
|
||||||
|
- "qmk/collaborators"
|
||||||
@@ -17,27 +17,15 @@ jobs:
|
|||||||
python-version: [3.7, 3.8, 3.9]
|
python-version: [3.7, 3.8, 3.9]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v2.3.4
|
||||||
|
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
uses: actions/setup-python@v1
|
uses: actions/setup-python@v2.2.2
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
- name: Install Python dependencies
|
- name: Run ci_tests
|
||||||
run: |
|
run: ./ci_tests -a
|
||||||
python3 -m pip install wheel
|
|
||||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
|
||||||
|
|
||||||
- name: Install QMK CLI from source
|
|
||||||
run: |
|
|
||||||
python3 -m pip install -r requirements.txt
|
|
||||||
python3 setup.py sdist bdist_wheel
|
|
||||||
cd ..
|
|
||||||
python3 -m pip install --force-reinstall --no-index --no-deps --prefix=~/.local --find-links qmk_cli/dist qmk
|
|
||||||
|
|
||||||
- name: Run qmk setup -y
|
|
||||||
run: qmk setup -y
|
|
||||||
|
|
||||||
test_cli_win:
|
test_cli_win:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
@@ -45,7 +33,7 @@ jobs:
|
|||||||
QMK_HOME: $HOME/qmk_firmware
|
QMK_HOME: $HOME/qmk_firmware
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v2.3.4
|
||||||
|
|
||||||
- name: (MSYS2) Setup and install dependencies
|
- name: (MSYS2) Setup and install dependencies
|
||||||
uses: msys2/setup-msys2@v2
|
uses: msys2/setup-msys2@v2
|
||||||
@@ -57,7 +45,6 @@ jobs:
|
|||||||
shell: msys2 {0}
|
shell: msys2 {0}
|
||||||
run: |
|
run: |
|
||||||
python3 -m pip install wheel
|
python3 -m pip install wheel
|
||||||
|
|
||||||
- name: (MSYS2) Install QMK CLI from source
|
- name: (MSYS2) Install QMK CLI from source
|
||||||
shell: msys2 {0}
|
shell: msys2 {0}
|
||||||
run: |
|
run: |
|
||||||
@@ -65,7 +52,6 @@ jobs:
|
|||||||
python3 setup.py sdist bdist_wheel
|
python3 setup.py sdist bdist_wheel
|
||||||
cd ..
|
cd ..
|
||||||
python3 -m pip install --force-reinstall --no-index --no-deps --find-links qmk_cli/dist qmk
|
python3 -m pip install --force-reinstall --no-index --no-deps --find-links qmk_cli/dist qmk
|
||||||
|
|
||||||
- name: (MSYS2) Run qmk setup -y
|
- name: (MSYS2) Run qmk setup -y
|
||||||
shell: msys2 {0}
|
shell: msys2 {0}
|
||||||
run: qmk setup -y
|
run: qmk setup -y
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
#
|
||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [ master ]
|
||||||
|
schedule:
|
||||||
|
- cron: '22 18 * * 0'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'python' ]
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||||
|
# Learn more:
|
||||||
|
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2.3.4
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v1
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v1
|
||||||
|
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 https://git.io/JvXDl
|
||||||
|
|
||||||
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||||
|
# and modify them (or add more) to build your code if your project
|
||||||
|
# uses a compiled language
|
||||||
|
|
||||||
|
#- run: |
|
||||||
|
# make bootstrap
|
||||||
|
# make release
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v1
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# This workflow will upload a Python Package using Twine when a release is created
|
||||||
|
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
|
||||||
|
|
||||||
|
name: Upload Python Package
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
version_part:
|
||||||
|
description: 'Which part of the version to increment (patch, minor, major)'
|
||||||
|
required: true
|
||||||
|
default: 'patch'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2.3.4
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v2.2.2
|
||||||
|
with:
|
||||||
|
python-version: '3.7'
|
||||||
|
- name: Run ci_tests
|
||||||
|
run: ./ci_tests
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install setuptools wheel
|
||||||
|
pip install -r requirements-dev.txt
|
||||||
|
- name: Bump version
|
||||||
|
run: |
|
||||||
|
git config --local user.email "hello@qmk.fm"
|
||||||
|
git config --local user.name "QMK Bot"
|
||||||
|
bumpversion ${{ github.event.inputs.version_part }}
|
||||||
|
- name: Push changes
|
||||||
|
uses: ad-m/github-push-action@master
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
branch: master
|
||||||
|
tags: true
|
||||||
|
- name: Build and publish
|
||||||
|
env:
|
||||||
|
TWINE_USERNAME: qmk
|
||||||
|
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
|
||||||
|
run: |
|
||||||
|
python setup.py sdist bdist_wheel
|
||||||
|
twine upload dist/*
|
||||||
|
- name: Log in to Docker Hub
|
||||||
|
uses: docker/login-action@v1.10.0
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
||||||
|
- name: Build and Push to Docker Hub
|
||||||
|
uses: docker/build-push-action@v2.6.1
|
||||||
|
with:
|
||||||
|
push: true
|
||||||
|
tags: qmkfm/qmk_cli:latest
|
||||||
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"python.formatting.provider": "yapf"
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
FROM qmkfm/base_container
|
||||||
|
|
||||||
|
# Install python packages
|
||||||
|
RUN python3 -m pip install --upgrade pip setuptools wheel
|
||||||
|
RUN python3 -m pip install --upgrade nose2 qmk
|
||||||
|
|
||||||
|
# Set the default location for qmk_firmware
|
||||||
|
ENV QMK_HOME /qmk_firmware
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
# QMK CLI
|
# QMK CLI
|
||||||
[](https://github.com/qmk/qmk_cli/actions?query=workflow%3A%22CLI+Setup%22)
|
[](https://github.com/qmk/qmk_cli/actions?query=workflow%3A%22CLI+Setup%22)
|
||||||
|
|
||||||
A program to help users work with [QMK Firmware](https://qmk.fm/).
|
A program to help users work with [QMK Firmware](https://qmk.fm/).
|
||||||
|
|
||||||
# Features
|
# Features
|
||||||
@@ -8,15 +9,16 @@ A program to help users work with [QMK Firmware](https://qmk.fm/).
|
|||||||
* Use `qmk clone` to pull down anyone's `qmk_firmware` fork
|
* Use `qmk clone` to pull down anyone's `qmk_firmware` fork
|
||||||
* Setup your build environment with `qmk setup`
|
* Setup your build environment with `qmk setup`
|
||||||
* Check that your environment is correctly setup with `qmk doctor`
|
* Check that your environment is correctly setup with `qmk doctor`
|
||||||
* Dispatches to `qmk_firmware/bin/qmk` for additional functionality:
|
* Integrates with qmk_firmware for additional functionality:
|
||||||
* `qmk compile-json`
|
* `qmk compile`
|
||||||
* More to come
|
* `qmk console`
|
||||||
|
* `qmk flash`
|
||||||
|
* `qmk lint`
|
||||||
|
* ...and many more!
|
||||||
|
|
||||||
# Quickstart
|
# Quickstart
|
||||||
|
|
||||||
Full documentation: <https://docs.qmk.fm/#/tutorial>
|
|
||||||
|
|
||||||
Basic steps:
|
|
||||||
|
|
||||||
* `python3 -m pip install qmk`
|
* `python3 -m pip install qmk`
|
||||||
* `qmk setup`
|
* `qmk setup`
|
||||||
|
|
||||||
|
Full documentation: <https://docs.qmk.fm/#/tutorial>
|
||||||
|
|||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
Use this section to tell people about which versions of your project are
|
||||||
|
currently being supported with security updates.
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| 0.0.x | :white_check_mark: |
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
* [Open an Issue](https://github.com/qmk/qmk_cli/issues/new?assignees=&labels=bug&template=bug_report.md&title=%5BBug%5D+)
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
#set -x
|
||||||
|
|
||||||
|
ADVANCED=false
|
||||||
|
TMPDIR=$(mktemp -d)
|
||||||
|
QMK_HOME="$TMPDIR/qmk_firmware"
|
||||||
|
export QMK_HOME
|
||||||
|
|
||||||
|
for arg in $@; do
|
||||||
|
if [ "$arg" = "-a" ]; then
|
||||||
|
ADVANCED=true
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $ADVANCED = true ]; then
|
||||||
|
echo "*** Running in advanced mode with tmp files in $TMPDIR"
|
||||||
|
else
|
||||||
|
echo "*** Running in basic mode with tmp files in $TMPDIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Setup our virtualenv
|
||||||
|
if [ -e .ci_venv ]; then
|
||||||
|
rm -rf .ci_venv
|
||||||
|
fi
|
||||||
|
|
||||||
|
python3 -m venv .ci_venv
|
||||||
|
source .ci_venv/bin/activate
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
python3 -m pip install -U pip wheel
|
||||||
|
python3 -m pip install .
|
||||||
|
python3 -m pip install -r requirements-dev.txt
|
||||||
|
|
||||||
|
# Ensure that qmk works
|
||||||
|
echo "*** Testing 'qmk clone -h'"
|
||||||
|
qmk clone -h
|
||||||
|
echo "*** Testing 'qmk config -a'"
|
||||||
|
qmk config -a
|
||||||
|
echo "*** Testing 'qmk setup -n'"
|
||||||
|
qmk setup -n
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "*** Basic tests completed successfully!"
|
||||||
|
|
||||||
|
# Run advanced test if requested
|
||||||
|
if [ $ADVANCED = true ]; then
|
||||||
|
echo
|
||||||
|
echo "*** Testing 'qmk setup -y'"
|
||||||
|
qmk setup -y
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "*** Advanced tests completed successfully!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
deactivate
|
||||||
|
rm -rf .ci_venv $TMPDIR
|
||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
"""A program to help you work with qmk_firmware."""
|
"""A program to help you work with qmk_firmware."""
|
||||||
|
|
||||||
__version__ = '0.0.41'
|
__version__ = '0.2.0'
|
||||||
|
|||||||
+14
-52
@@ -8,58 +8,22 @@ from pathlib import Path
|
|||||||
from milc import cli
|
from milc import cli
|
||||||
|
|
||||||
|
|
||||||
def broken_module_imports():
|
def is_qmk_firmware(qmk_firmware):
|
||||||
"""Make sure we can import all the python modules.
|
"""Returns True if the given Path() is a qmk_firmware clone.
|
||||||
"""
|
"""
|
||||||
broken_modules = find_broken_requirements('requirements.txt')
|
paths = [
|
||||||
broken_dev_modules = find_broken_requirements('requirements-dev.txt') if cli.config.user.developer else []
|
qmk_firmware,
|
||||||
to_return = [False, False]
|
qmk_firmware / 'quantum',
|
||||||
|
qmk_firmware / 'requirements.txt',
|
||||||
|
qmk_firmware / 'requirements-dev.txt',
|
||||||
|
qmk_firmware / 'lib/python/qmk/cli/__init__.py'
|
||||||
|
]
|
||||||
|
|
||||||
if broken_modules:
|
for path in paths:
|
||||||
to_return[0] = True
|
if not path.exists():
|
||||||
|
return False
|
||||||
|
|
||||||
if broken_dev_modules:
|
return True
|
||||||
to_return[1] = True
|
|
||||||
|
|
||||||
for module in broken_modules + broken_dev_modules:
|
|
||||||
print('Could not find module %s!' % module)
|
|
||||||
|
|
||||||
return to_return
|
|
||||||
|
|
||||||
|
|
||||||
def find_broken_requirements(requirements):
|
|
||||||
""" Check if the modules in the given requirements.txt are available.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
|
|
||||||
requirements
|
|
||||||
The path to a requirements.txt file
|
|
||||||
|
|
||||||
Returns a list of modules that couldn't be imported
|
|
||||||
"""
|
|
||||||
with Path(requirements).open() as fd:
|
|
||||||
broken_modules = []
|
|
||||||
|
|
||||||
for line in fd.readlines():
|
|
||||||
line = line.strip().replace('<', '=').replace('>', '=')
|
|
||||||
|
|
||||||
if len(line) == 0 or line[0] == '#' or line.startswith('-r'):
|
|
||||||
continue
|
|
||||||
|
|
||||||
if '#' in line:
|
|
||||||
line = line.split('#')[0]
|
|
||||||
|
|
||||||
module_name = line.split('=')[0] if '=' in line else line
|
|
||||||
module_import_name = module_name.replace('-', '_')
|
|
||||||
|
|
||||||
# Not every module is importable by its own name.
|
|
||||||
if module_name == "pep8-naming":
|
|
||||||
module_import_name = "pep8ext_naming"
|
|
||||||
|
|
||||||
if not find_spec(module_import_name):
|
|
||||||
broken_modules.append(module_name)
|
|
||||||
|
|
||||||
return broken_modules
|
|
||||||
|
|
||||||
|
|
||||||
@lru_cache(maxsize=2)
|
@lru_cache(maxsize=2)
|
||||||
@@ -88,9 +52,7 @@ def in_qmk_firmware():
|
|||||||
"""
|
"""
|
||||||
cur_dir = Path.cwd()
|
cur_dir = Path.cwd()
|
||||||
while len(cur_dir.parents) > 0:
|
while len(cur_dir.parents) > 0:
|
||||||
found_lib = cur_dir / 'lib/python/qmk/cli/__init__.py'
|
if is_qmk_firmware(cur_dir):
|
||||||
found_quantum = cur_dir / 'quantum'
|
|
||||||
if found_lib.is_file() and found_quantum.is_dir():
|
|
||||||
return cur_dir
|
return cur_dir
|
||||||
|
|
||||||
# Move up a directory before the next iteration
|
# Move up a directory before the next iteration
|
||||||
|
|||||||
+8
-31
@@ -11,13 +11,17 @@ from platform import platform
|
|||||||
from traceback import print_exc
|
from traceback import print_exc
|
||||||
|
|
||||||
import milc
|
import milc
|
||||||
import milc.subcommand.config # noqa
|
|
||||||
from milc.questions import yesno
|
|
||||||
|
|
||||||
from .helpers import broken_module_imports, find_qmk_firmware
|
from . import __version__
|
||||||
|
from .helpers import find_qmk_firmware, is_qmk_firmware
|
||||||
|
|
||||||
|
milc.set_metadata(version=__version__)
|
||||||
milc.EMOJI_LOGLEVELS['INFO'] = '{fg_blue}Ψ{style_reset_all}'
|
milc.EMOJI_LOGLEVELS['INFO'] = '{fg_blue}Ψ{style_reset_all}'
|
||||||
|
|
||||||
|
# These must happen after the milc.set_metadata() call
|
||||||
|
import milc.subcommand.config # noqa, must come after milc.set_metadata()
|
||||||
|
from milc.questions import yesno
|
||||||
|
|
||||||
|
|
||||||
@milc.cli.entrypoint('CLI wrapper for running QMK commands.')
|
@milc.cli.entrypoint('CLI wrapper for running QMK commands.')
|
||||||
def qmk_main(cli):
|
def qmk_main(cli):
|
||||||
@@ -56,8 +60,6 @@ def main():
|
|||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
# Environment setup
|
# Environment setup
|
||||||
import qmk_cli
|
|
||||||
milc.cli.version = qmk_cli.__version__
|
|
||||||
qmk_firmware = find_qmk_firmware()
|
qmk_firmware = find_qmk_firmware()
|
||||||
os.environ['QMK_HOME'] = str(qmk_firmware)
|
os.environ['QMK_HOME'] = str(qmk_firmware)
|
||||||
os.environ['ORIG_CWD'] = os.getcwd()
|
os.environ['ORIG_CWD'] = os.getcwd()
|
||||||
@@ -65,34 +67,9 @@ def main():
|
|||||||
import qmk_cli.subcommands
|
import qmk_cli.subcommands
|
||||||
|
|
||||||
# Check out and initialize the qmk_firmware environment
|
# Check out and initialize the qmk_firmware environment
|
||||||
if qmk_firmware.exists():
|
if is_qmk_firmware(qmk_firmware):
|
||||||
# All subcommands are run relative to the qmk_firmware root to make it easier to use the right copy of qmk_firmware.
|
# All subcommands are run relative to the qmk_firmware root to make it easier to use the right copy of qmk_firmware.
|
||||||
os.chdir(str(qmk_firmware))
|
os.chdir(str(qmk_firmware))
|
||||||
|
|
||||||
# Check to make sure we have all the requirements
|
|
||||||
broken_modules, broken_dev_modules = broken_module_imports()
|
|
||||||
msg_install = 'Please run `python3 -m pip install -r %s` to install required python dependencies.'
|
|
||||||
|
|
||||||
if broken_modules:
|
|
||||||
if yesno('Would you like to install the required Python modules?'):
|
|
||||||
run_cmd(sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt')
|
|
||||||
else:
|
|
||||||
print()
|
|
||||||
print(msg_install % (os.environ['QMK_HOME'] + '/requirements.txt',))
|
|
||||||
print()
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
if broken_dev_modules:
|
|
||||||
if yesno('Would you like to install the required developer Python modules?'):
|
|
||||||
run_cmd(sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt')
|
|
||||||
else:
|
|
||||||
print()
|
|
||||||
print(msg_install % (os.environ['QMK_HOME'] + '/requirements-dev.txt',))
|
|
||||||
print('You can also turn off developer mode: qmk config user.developer=None')
|
|
||||||
print()
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
# Environment looks good, include the qmk_firmware subcommands
|
|
||||||
sys.path.append(str(qmk_firmware / 'lib/python'))
|
sys.path.append(str(qmk_firmware / 'lib/python'))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -3,4 +3,5 @@
|
|||||||
We list each subcommand here explicitly because all the reliable ways of searching for modules are slow and delay startup.
|
We list each subcommand here explicitly because all the reliable ways of searching for modules are slow and delay startup.
|
||||||
"""
|
"""
|
||||||
from . import clone # noqa
|
from . import clone # noqa
|
||||||
|
from . import env # noqa
|
||||||
from . import setup # noqa
|
from . import setup # noqa
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
"""Prints environment information.
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from milc import cli
|
||||||
|
from qmk_cli.helpers import is_qmk_firmware
|
||||||
|
|
||||||
|
|
||||||
|
@cli.argument('var', default=None, nargs='?', help='Optional variable to query')
|
||||||
|
@cli.subcommand('Prints environment information.')
|
||||||
|
def env(cli):
|
||||||
|
home = os.environ.get('QMK_HOME', "")
|
||||||
|
data = {
|
||||||
|
'QMK_HOME': home,
|
||||||
|
'QMK_FIRMWARE': home if is_qmk_firmware(Path(home)) else ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Now munge the current cli config
|
||||||
|
for key, val in cli.config.general.items():
|
||||||
|
converted_key = 'QMK_' + key.upper()
|
||||||
|
data[converted_key] = val
|
||||||
|
|
||||||
|
if cli.args.var:
|
||||||
|
# dump out requested arg
|
||||||
|
print(data[cli.args.var])
|
||||||
|
else:
|
||||||
|
# dump out everything
|
||||||
|
for key, val in data.items():
|
||||||
|
print(f'{key}="{val}"')
|
||||||
@@ -9,6 +9,7 @@ from pathlib import Path
|
|||||||
from milc import cli
|
from milc import cli
|
||||||
from milc.questions import yesno
|
from milc.questions import yesno
|
||||||
from qmk_cli.git import git_clone
|
from qmk_cli.git import git_clone
|
||||||
|
from qmk_cli.helpers import is_qmk_firmware
|
||||||
|
|
||||||
default_base = 'https://github.com'
|
default_base = 'https://github.com'
|
||||||
default_repo = 'qmk_firmware'
|
default_repo = 'qmk_firmware'
|
||||||
@@ -42,24 +43,6 @@ def git_upstream(destination):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def is_qmk_firmware(qmk_firmware):
|
|
||||||
"""Returns True if the given Path() is a qmk_firmware clone.
|
|
||||||
"""
|
|
||||||
paths = [
|
|
||||||
qmk_firmware,
|
|
||||||
qmk_firmware / 'Makefile',
|
|
||||||
qmk_firmware / 'requirements.txt',
|
|
||||||
qmk_firmware / 'requirements-dev.txt',
|
|
||||||
qmk_firmware / 'lib/python/qmk/cli/doctor.py'
|
|
||||||
]
|
|
||||||
|
|
||||||
for path in paths:
|
|
||||||
if not path.exists():
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
@cli.argument('-n', '--no', arg_only=True, action='store_true', help='Answer no to all questions')
|
@cli.argument('-n', '--no', arg_only=True, action='store_true', help='Answer no to all questions')
|
||||||
@cli.argument('-y', '--yes', arg_only=True, action='store_true', help='Answer yes to all questions')
|
@cli.argument('-y', '--yes', arg_only=True, action='store_true', help='Answer yes to all questions')
|
||||||
@cli.argument('--baseurl', default=default_base, help='The URL all git operations start from. Default: %s' % default_base)
|
@cli.argument('--baseurl', default=default_base, help='The URL all git operations start from. Default: %s' % default_base)
|
||||||
@@ -100,19 +83,25 @@ def setup(cli):
|
|||||||
git_upstream(cli.args.home)
|
git_upstream(cli.args.home)
|
||||||
else:
|
else:
|
||||||
exit(1)
|
exit(1)
|
||||||
|
else:
|
||||||
|
cli.log.warning('Not cloning qmk_firmware due to user input or --no flag.')
|
||||||
|
|
||||||
# Offer to set `user.qmk_home` for them.
|
# Offer to set `user.qmk_home` for them.
|
||||||
if str(cli.args.home) != os.environ['QMK_HOME'] and yesno(home_prompt):
|
if str(cli.args.home) != os.environ['QMK_HOME'] and yesno(home_prompt):
|
||||||
cli.config['user']['qmk_home'] = str(cli.args.home.absolute())
|
cli.config['user']['qmk_home'] = str(cli.args.home.absolute())
|
||||||
|
cli.config_source['user']['qmk_home'] = 'config_file'
|
||||||
cli.write_config_option('user', 'qmk_home')
|
cli.write_config_option('user', 'qmk_home')
|
||||||
|
|
||||||
# Run `qmk doctor` to check the rest of the environment out
|
# Run `qmk doctor` to check the rest of the environment out
|
||||||
doctor_command = [sys.executable, sys.argv[0], 'doctor']
|
if cli.args.home.exists():
|
||||||
|
color = '--color' if cli.config.general.color else '--no-color'
|
||||||
|
unicode = '--unicode' if cli.config.general.unicode else '--no-unicode'
|
||||||
|
doctor_command = [Path(sys.argv[0]).as_posix(), color, unicode, 'doctor']
|
||||||
|
|
||||||
if cli.args.no:
|
if cli.args.no:
|
||||||
doctor_command.append('--no')
|
doctor_command.append('-n')
|
||||||
|
|
||||||
if cli.args.yes:
|
if cli.args.yes:
|
||||||
doctor_command.append('--yes')
|
doctor_command.append('-y')
|
||||||
|
|
||||||
cli.run(doctor_command, capture_output=False)
|
cli.run(doctor_command, stdin=None, capture_output=False)
|
||||||
|
|||||||
@@ -3,30 +3,5 @@
|
|||||||
#
|
#
|
||||||
# Required packages: pip3 install bumpversion twine
|
# Required packages: pip3 install bumpversion twine
|
||||||
|
|
||||||
set -e
|
echo "Use the github action instead!"
|
||||||
set -x
|
exit 1
|
||||||
|
|
||||||
PYPI_USERNAME=${PYPI_USERNAME:=skully}
|
|
||||||
FLIT_USERNAME=$PYPI_USERNAME
|
|
||||||
TWINE_USERNAME=$PYPI_USERNAME
|
|
||||||
|
|
||||||
export FLIT_USERNAME TWINE_USERNAME
|
|
||||||
|
|
||||||
if ! bumpversion -h &> /dev/null; then
|
|
||||||
echo "Missing bumpversion! Please run: pip3 install -U -r requirements-dev.txt"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! twine -h &> /dev/null; then
|
|
||||||
echo "Missing twine! Please run: pip3 install -U -r requirements-dev.txt"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Bump the version, tag, and push
|
|
||||||
rm -f dist/*
|
|
||||||
bumpversion patch
|
|
||||||
git push origin master --tags
|
|
||||||
|
|
||||||
# Build and upload
|
|
||||||
python3 setup.py sdist bdist_wheel
|
|
||||||
twine upload dist/qmk-*
|
|
||||||
|
|||||||
+29
-2
@@ -1,2 +1,29 @@
|
|||||||
bumpversion
|
bleach==3.3.0
|
||||||
twine
|
bump2version==1.0.1
|
||||||
|
bumpversion==0.6.0
|
||||||
|
certifi==2021.5.30
|
||||||
|
cffi==1.14.6
|
||||||
|
chardet==4.0.0
|
||||||
|
colorama==0.4.4
|
||||||
|
cryptography==3.4.7
|
||||||
|
docutils==0.17.1
|
||||||
|
idna==2.10
|
||||||
|
importlib-metadata==4.6.1
|
||||||
|
jeepney==0.6.0
|
||||||
|
keyring==23.0.1
|
||||||
|
packaging==21.0
|
||||||
|
pkginfo==1.7.1
|
||||||
|
pycparser==2.20
|
||||||
|
Pygments==2.9.0
|
||||||
|
pyparsing==2.4.7
|
||||||
|
readme-renderer==29.0
|
||||||
|
requests==2.25.1
|
||||||
|
requests-toolbelt==0.9.1
|
||||||
|
rfc3986==1.5.0
|
||||||
|
SecretStorage==3.3.1
|
||||||
|
six==1.16.0
|
||||||
|
tqdm==4.61.2
|
||||||
|
twine==3.4.1
|
||||||
|
urllib3==1.26.6
|
||||||
|
webencodings==0.5.1
|
||||||
|
zipp==3.5.0
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[bumpversion]
|
[bumpversion]
|
||||||
current_version = 0.0.41
|
current_version = 0.2.0
|
||||||
commit = True
|
commit = True
|
||||||
tag = True
|
tag = True
|
||||||
tag_name = {new_version}
|
tag_name = {new_version}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ if __name__ == "__main__":
|
|||||||
long_description=long_description,
|
long_description=long_description,
|
||||||
long_description_content_type="text/markdown",
|
long_description_content_type="text/markdown",
|
||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
py_modules=['milc'],
|
py_modules=['qmk_cli'],
|
||||||
classifiers=[
|
classifiers=[
|
||||||
'Development Status :: 3 - Alpha',
|
'Development Status :: 3 - Alpha',
|
||||||
'Environment :: Console',
|
'Environment :: Console',
|
||||||
@@ -40,16 +40,30 @@ if __name__ == "__main__":
|
|||||||
],
|
],
|
||||||
python_requires=metadata['requires-python'],
|
python_requires=metadata['requires-python'],
|
||||||
install_requires=[
|
install_requires=[
|
||||||
"appdirs",
|
"appdirs==1.4.4",
|
||||||
"argcomplete",
|
"argcomplete==1.12.3",
|
||||||
"colorama",
|
"attrs==21.2.0",
|
||||||
"dotty-dict",
|
"colorama==0.4.4",
|
||||||
"flake8",
|
"coverage==5.5",
|
||||||
"hjson",
|
"qmk-dotty-dict==1.3.0.post1",
|
||||||
"jsonschema>=3",
|
"flake8==3.9.2",
|
||||||
"milc>=1.0.8",
|
"halo==0.0.31",
|
||||||
"nose2",
|
"hid==1.0.4",
|
||||||
"pygments",
|
"hjson==3.0.2",
|
||||||
"yapf"
|
"jsonschema==3.2.0",
|
||||||
],
|
"log-symbols==0.0.14",
|
||||||
|
"mccabe==0.6.1",
|
||||||
|
"milc==1.4.2",
|
||||||
|
"nose2==0.10.0",
|
||||||
|
"pycodestyle==2.7.0",
|
||||||
|
"pyflakes==2.3.1",
|
||||||
|
"Pygments==2.9.0",
|
||||||
|
"pyrsistent==0.18.0",
|
||||||
|
"pyusb==1.2.1",
|
||||||
|
"setuptools>=45",
|
||||||
|
"six==1.16.0",
|
||||||
|
"spinners==0.0.24",
|
||||||
|
"termcolor==1.1.0",
|
||||||
|
"yapf==0.31.0"
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user