Compare commits
61 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0dd2280781 | |||
| c049da0c6f | |||
| 7b69bd6f11 | |||
| c594e5df09 | |||
| 915bb40473 | |||
| af1403fc41 | |||
| 13e5f5c855 | |||
| f393ad0053 | |||
| 947e49a15d | |||
| cd3ed07cd0 | |||
| 558e248e20 | |||
| cd1e98e9d0 | |||
| 8c2ae297ed | |||
| 7be310f364 | |||
| 2316a34ce9 | |||
| 36c23e3de6 | |||
| b6bc144e9e | |||
| 93e629608e | |||
| cacd0fabbc | |||
| d9f9b5a27d | |||
| 4d4892f58a | |||
| ffe20fb63e | |||
| b384f871e8 | |||
| f2b8522c89 | |||
| 75dcb0e475 | |||
| 1e98a2e459 | |||
| c53fb88479 | |||
| fed1e39611 | |||
| ed0d5699ff | |||
| b1542e4a62 | |||
| 9c7c371419 | |||
| ae45bdeb02 | |||
| d20af71118 | |||
| 8f85a8856f | |||
| 87c356773f | |||
| 27a97e4ebf | |||
| 53d8dab86f | |||
| 86a3decd0a | |||
| d3917b10e7 | |||
| 86b3b74b21 | |||
| bb385f7786 | |||
| e07ad4c9ee | |||
| 1e03b45986 | |||
| 7a1b556b25 | |||
| d7911ffaf7 | |||
| daa7f54dd0 | |||
| 753136ade4 | |||
| 579763620d | |||
| cbc22adb76 | |||
| 82bb65bd52 | |||
| 671e553239 | |||
| fa4bcc034d | |||
| 0a048da8a4 | |||
| 7808a1166c | |||
| b9b2ebbe13 | |||
| b4b53e80eb | |||
| 2212fdabf7 | |||
| 1e8a174e0c | |||
| 6868d5ba6f | |||
| e203006537 | |||
| 1c72e1e564 |
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
[bumpversion]
|
[bumpversion]
|
||||||
current_version = 1.1.2
|
current_version = 1.2.0
|
||||||
commit = True
|
commit = True
|
||||||
tag = True
|
tag = True
|
||||||
tag_name = {new_version}
|
tag_name = {new_version}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ jobs:
|
|||||||
QMK_HOME: ~/qmk_firmware
|
QMK_HOME: ~/qmk_firmware
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: apt-get update && apt-get install -y python3-venv
|
run: apt-get update && apt-get install -y python3-venv
|
||||||
@@ -32,13 +32,13 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, ubuntu-latest]
|
os: [macos-latest, ubuntu-latest]
|
||||||
python-version: [3.7, 3.8, 3.9]
|
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14']
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
@@ -53,24 +53,25 @@ jobs:
|
|||||||
QMK_HOME: $HOME/qmk_firmware
|
QMK_HOME: $HOME/qmk_firmware
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: (MSYS2) Setup and install dependencies
|
- name: (MSYS2) Setup and install dependencies
|
||||||
uses: msys2/setup-msys2@v2
|
uses: msys2/setup-msys2@v2
|
||||||
with:
|
with:
|
||||||
update: true
|
update: true
|
||||||
install: git mingw-w64-x86_64-toolchain mingw-w64-x86_64-python-pip mingw-w64-x86_64-python-pillow
|
install: git mingw-w64-x86_64-toolchain mingw-w64-x86_64-python-pip mingw-w64-x86_64-python-build mingw-w64-x86_64-python-pillow mingw-w64-x86_64-rust
|
||||||
|
|
||||||
|
# Upgrade pip due to msys packaging + pypa/build/pull/736 issues
|
||||||
- name: (MSYS2) Install Python dependencies
|
- name: (MSYS2) Install Python dependencies
|
||||||
shell: msys2 {0}
|
shell: msys2 {0}
|
||||||
run: |
|
run: |
|
||||||
python3 -m pip install -U setuptools wheel
|
python3 -m pip install --break-system-packages --force-reinstall --upgrade pip
|
||||||
|
|
||||||
- name: (MSYS2) Install QMK CLI from source
|
- name: (MSYS2) Install QMK CLI from source
|
||||||
shell: msys2 {0}
|
shell: msys2 {0}
|
||||||
run: |
|
run: |
|
||||||
python3 -m pip install -U build
|
|
||||||
python3 -m build
|
python3 -m build
|
||||||
python3 -m pip install dist/qmk-*.tar.gz
|
python3 -m pip install --break-system-packages dist/qmk-*.tar.gz
|
||||||
- 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
|
||||||
|
|||||||
@@ -39,11 +39,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v2
|
uses: github/codeql-action/init@v4
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
@@ -54,7 +54,7 @@ jobs:
|
|||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# 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)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v2
|
uses: github/codeql-action/autobuild@v4
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 https://git.io/JvXDl
|
# 📚 https://git.io/JvXDl
|
||||||
@@ -68,4 +68,4 @@ jobs:
|
|||||||
# make release
|
# make release
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v2
|
uses: github/codeql-action/analyze@v4
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
name: Test Docker Image
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v6
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Run ci_tests
|
||||||
|
run: ./ci_tests
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python3 -m pip install --upgrade pip
|
||||||
|
pip install setuptools wheel
|
||||||
|
pip install -r requirements-dev.txt
|
||||||
|
|
||||||
|
- name: Build Python
|
||||||
|
run: |
|
||||||
|
python3 -m build
|
||||||
|
|
||||||
|
- name: Build Container
|
||||||
|
uses: docker/build-push-action@v6.18.0
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
@@ -10,17 +10,17 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.7'
|
python-version: '3.9'
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v2
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@@ -33,20 +33,20 @@ jobs:
|
|||||||
pip download -d "${GITHUB_WORKSPACE}/dist" qmk=="${{ steps.previoustag.outputs.tag }}"
|
pip download -d "${GITHUB_WORKSPACE}/dist" qmk=="${{ steps.previoustag.outputs.tag }}"
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Log in to Docker Hub
|
- name: Log in to Docker Hub
|
||||||
uses: docker/login-action@v2.1.0
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
||||||
|
|
||||||
- name: Build and Push to Docker Hub
|
- name: Build and Push to Docker Hub
|
||||||
uses: docker/build-push-action@v4.0.0
|
uses: docker/build-push-action@v6.18.0
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
@@ -54,3 +54,7 @@ jobs:
|
|||||||
tags: |
|
tags: |
|
||||||
ghcr.io/qmk/qmk_cli:latest
|
ghcr.io/qmk/qmk_cli:latest
|
||||||
qmkfm/qmk_cli:latest
|
qmkfm/qmk_cli:latest
|
||||||
|
ghcr.io/qmk/qmk_cli:${{ github.sha }}
|
||||||
|
qmkfm/qmk_cli:${{ github.sha }}
|
||||||
|
ghcr.io/qmk/qmk_cli:${{ steps.previoustag.outputs.tag }}
|
||||||
|
qmkfm/qmk_cli:${{ steps.previoustag.outputs.tag }}
|
||||||
|
|||||||
@@ -18,17 +18,17 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.7'
|
python-version: '3.9'
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v2
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Run ci_tests
|
- name: Run ci_tests
|
||||||
run: ./ci_tests
|
run: ./ci_tests
|
||||||
@@ -36,13 +36,14 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
python3 -m pip install --upgrade pip
|
python3 -m pip install --upgrade pip
|
||||||
pip install setuptools wheel
|
pip install setuptools wheel
|
||||||
pip install -r requirements-dev.txt
|
pip install -r requirements-dev.txt
|
||||||
|
|
||||||
- name: Bump version
|
- name: Bump version
|
||||||
run: |
|
run: |
|
||||||
git config --local user.email "hello@qmk.fm"
|
git config --local user.email "hello@qmk.fm"
|
||||||
git config --local user.name "QMK Bot"
|
git config --local user.name "QMK Bot"
|
||||||
|
bumpversion --dry-run --list ${{ github.event.inputs.version_part }} | grep new_version= | sed "s/new_version/NEW_CLI_VERSION/" >> "$GITHUB_ENV"
|
||||||
bumpversion ${{ github.event.inputs.version_part }}
|
bumpversion ${{ github.event.inputs.version_part }}
|
||||||
|
|
||||||
- name: Push changes
|
- name: Push changes
|
||||||
@@ -54,27 +55,27 @@ jobs:
|
|||||||
|
|
||||||
- name: Build and publish
|
- name: Build and publish
|
||||||
env:
|
env:
|
||||||
TWINE_USERNAME: qmk
|
TWINE_USERNAME: __token__
|
||||||
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
|
TWINE_PASSWORD: ${{ secrets.PYPI_APITOKEN }}
|
||||||
run: |
|
run: |
|
||||||
python3 -m build
|
python3 -m build
|
||||||
twine upload dist/*
|
twine upload dist/*
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Log in to Docker Hub
|
- name: Log in to Docker Hub
|
||||||
uses: docker/login-action@v2.1.0
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
|
||||||
|
|
||||||
- name: Build and Push to Docker Hub
|
- name: Build and Push to Docker Hub
|
||||||
uses: docker/build-push-action@v4.0.0
|
uses: docker/build-push-action@v6.18.0
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
@@ -82,6 +83,10 @@ jobs:
|
|||||||
tags: |
|
tags: |
|
||||||
ghcr.io/qmk/qmk_cli:latest
|
ghcr.io/qmk/qmk_cli:latest
|
||||||
qmkfm/qmk_cli:latest
|
qmkfm/qmk_cli:latest
|
||||||
|
ghcr.io/qmk/qmk_cli:${{ github.sha }}
|
||||||
|
qmkfm/qmk_cli:${{ github.sha }}
|
||||||
|
ghcr.io/qmk/qmk_cli:${{ env.NEW_CLI_VERSION }}
|
||||||
|
qmkfm/qmk_cli:${{ env.NEW_CLI_VERSION }}
|
||||||
|
|
||||||
- name: Trigger OS package builds
|
- name: Trigger OS package builds
|
||||||
run: ./trigger_packages
|
run: ./trigger_packages
|
||||||
|
|||||||
+27
-5
@@ -1,13 +1,35 @@
|
|||||||
FROM ghcr.io/qmk/qmk_base_container:latest
|
FROM ghcr.io/qmk/qmk_base_container:latest as builder
|
||||||
|
|
||||||
# Copy package in
|
# Copy package in
|
||||||
ADD dist /tmp/dist
|
ADD dist /tmp/dist
|
||||||
|
|
||||||
|
# Install QMK CLI via bootstrap script
|
||||||
|
RUN mkdir -p /opt/uv/bin \
|
||||||
|
&& export UV_PYTHON_INSTALL_DIR=/opt/uv/bin \
|
||||||
|
&& /bin/bash -c "curl -fsSL https://install.qmk.fm | sh -s -- --confirm --uv-install-dir=/usr/local/bin --uv-tool-dir=/opt/uv/tools --qmk-distrib-dir=/opt/qmk"
|
||||||
|
|
||||||
|
# Do the equivalent of entering the virtual environment
|
||||||
|
ENV PATH=/opt/qmk/bin:/opt/uv/tools/qmk/bin:/usr/local/bin:$PATH \
|
||||||
|
VIRTUAL_ENV=/opt/uv/tools/qmk
|
||||||
|
|
||||||
# Install python packages
|
# Install python packages
|
||||||
RUN python3 -m pip uninstall -y qmk || true
|
RUN python3 -m pip uninstall -y qmk || true
|
||||||
RUN python3 -m pip install --upgrade pip setuptools wheel nose2 && \
|
RUN python3 -m pip install --upgrade pip setuptools wheel nose2 && \
|
||||||
python3 -m pip install /tmp/dist/qmk-*.whl && \
|
python3 -m pip install /tmp/dist/qmk-*.whl
|
||||||
rm -rf /tmp/dist
|
|
||||||
|
# Allow the uv-installed python to be usable by others
|
||||||
|
RUN chmod -R go=u,go-w /opt/uv /opt/qmk
|
||||||
|
|
||||||
|
# 2nd stage so we don't have /tmp/dist in the final image
|
||||||
|
FROM ghcr.io/qmk/qmk_base_container:latest
|
||||||
|
|
||||||
|
COPY --from=builder /opt/uv /opt/uv
|
||||||
|
COPY --from=builder /opt/qmk /opt/qmk
|
||||||
|
|
||||||
|
# Do the equivalent of entering the virtual environment
|
||||||
|
ENV PATH=/opt/qmk/bin:/opt/uv/tools/qmk/bin:$PATH \
|
||||||
|
VIRTUAL_ENV=/opt/uv/tools/qmk \
|
||||||
|
QMK_DISTRIB_DIR=/opt/qmk \
|
||||||
|
QMK_HOME=/qmk_firmware \
|
||||||
|
QMK_USERSPACE=/qmk_userspace
|
||||||
|
|
||||||
# Set the default location for qmk_firmware
|
|
||||||
ENV QMK_HOME /qmk_firmware
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# QMK CLI
|
# QMK CLI
|
||||||
[](https://github.com/qmk/qmk_cli/actions?query=workflow%3A%22CLI+Setup%22)
|
[](https://github.com/qmk/qmk_cli/actions/workflows/cli_setup.yml)
|
||||||
|
|
||||||
A program to help users work with [QMK Firmware](https://qmk.fm/).
|
A program to help users work with [QMK Firmware](https://qmk.fm/).
|
||||||
|
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ python3 -m pip install -r requirements-dev.txt
|
|||||||
# Ensure that qmk works
|
# Ensure that qmk works
|
||||||
echo "*** Testing 'qmk clone -h'"
|
echo "*** Testing 'qmk clone -h'"
|
||||||
qmk clone -h
|
qmk clone -h
|
||||||
echo "*** Testing 'qmk config -a'"
|
#echo "*** Testing 'qmk config -a'" # Test disabled as `milc` at least 1.6.8+ returns False and thus non-zero exit code
|
||||||
qmk config -a
|
#qmk config -a
|
||||||
echo "*** Testing 'qmk setup -n'"
|
echo "*** Testing 'qmk setup -n'"
|
||||||
qmk setup -n
|
qmk setup -n
|
||||||
|
|
||||||
|
|||||||
+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__ = '1.1.2'
|
__version__ = '1.2.0'
|
||||||
|
|||||||
+59
-2
@@ -1,13 +1,23 @@
|
|||||||
"""Useful helper functions.
|
"""Useful helper functions.
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
|
import json
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
from importlib.util import find_spec
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from milc import cli
|
from milc import cli
|
||||||
|
|
||||||
|
|
||||||
|
def AbsPath(arg):
|
||||||
|
"""Resolve relative paths to the original working directory.
|
||||||
|
"""
|
||||||
|
arg = Path(arg)
|
||||||
|
if not arg.is_absolute():
|
||||||
|
return (Path(os.environ['ORIG_CWD']) / arg).absolute()
|
||||||
|
|
||||||
|
return arg
|
||||||
|
|
||||||
|
|
||||||
def is_qmk_firmware(qmk_firmware):
|
def is_qmk_firmware(qmk_firmware):
|
||||||
"""Returns True if the given Path() is a qmk_firmware clone.
|
"""Returns True if the given Path() is a qmk_firmware clone.
|
||||||
"""
|
"""
|
||||||
@@ -26,7 +36,7 @@ def is_qmk_firmware(qmk_firmware):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
@lru_cache(maxsize=2)
|
@lru_cache(maxsize=1)
|
||||||
def find_qmk_firmware():
|
def find_qmk_firmware():
|
||||||
"""Look for qmk_firmware in the usual places.
|
"""Look for qmk_firmware in the usual places.
|
||||||
|
|
||||||
@@ -47,6 +57,7 @@ def find_qmk_firmware():
|
|||||||
return Path.home() / 'qmk_firmware'
|
return Path.home() / 'qmk_firmware'
|
||||||
|
|
||||||
|
|
||||||
|
@lru_cache(maxsize=1)
|
||||||
def in_qmk_firmware():
|
def in_qmk_firmware():
|
||||||
"""Returns the path to the qmk_firmware we are currently in, or None if we are not inside qmk_firmware.
|
"""Returns the path to the qmk_firmware we are currently in, or None if we are not inside qmk_firmware.
|
||||||
"""
|
"""
|
||||||
@@ -58,3 +69,49 @@ def in_qmk_firmware():
|
|||||||
# Move up a directory before the next iteration
|
# Move up a directory before the next iteration
|
||||||
cur_dir = cur_dir / '..'
|
cur_dir = cur_dir / '..'
|
||||||
cur_dir = cur_dir.resolve()
|
cur_dir = cur_dir.resolve()
|
||||||
|
|
||||||
|
|
||||||
|
def is_qmk_userspace(qmk_userspace):
|
||||||
|
"""Returns True if the given Path() is a qmk_userspace clone.
|
||||||
|
"""
|
||||||
|
path = qmk_userspace / 'qmk.json'
|
||||||
|
if not path.exists():
|
||||||
|
return False
|
||||||
|
|
||||||
|
try:
|
||||||
|
return 'userspace_version' in json.loads(path.read_text(encoding="UTF-8"))
|
||||||
|
except json.decoder.JSONDecodeError as e:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
@lru_cache(maxsize=1)
|
||||||
|
def find_qmk_userspace():
|
||||||
|
"""Look for qmk_userspace in the usual places.
|
||||||
|
"""
|
||||||
|
if in_qmk_userspace():
|
||||||
|
return in_qmk_userspace()
|
||||||
|
|
||||||
|
if 'QMK_USERSPACE' in os.environ:
|
||||||
|
path = Path(os.environ['QMK_USERSPACE']).expanduser()
|
||||||
|
if path.exists():
|
||||||
|
return path.resolve()
|
||||||
|
return path
|
||||||
|
|
||||||
|
if cli.config.user.overlay_dir:
|
||||||
|
return Path(cli.config.user.overlay_dir).expanduser().resolve()
|
||||||
|
|
||||||
|
return Path.home() / 'qmk_userspace'
|
||||||
|
|
||||||
|
|
||||||
|
@lru_cache(maxsize=1)
|
||||||
|
def in_qmk_userspace():
|
||||||
|
"""Returns the path to the qmk_userspace we are currently in, or None if we are not inside qmk_userspace.
|
||||||
|
"""
|
||||||
|
cur_dir = Path.cwd()
|
||||||
|
while len(cur_dir.parents) > 0:
|
||||||
|
if is_qmk_userspace(cur_dir):
|
||||||
|
return cur_dir
|
||||||
|
|
||||||
|
# Move up a directory before the next iteration
|
||||||
|
cur_dir = cur_dir / '..'
|
||||||
|
cur_dir = cur_dir.resolve()
|
||||||
|
|||||||
+48
-8
@@ -4,6 +4,7 @@
|
|||||||
This program can be run from anywhere, with or without a qmk_firmware repository. If a qmk_firmware repository can be located we will use that to augment our available subcommands.
|
This program can be run from anywhere, with or without a qmk_firmware repository. If a qmk_firmware repository can be located we will use that to augment our available subcommands.
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
|
from pathlib import Path
|
||||||
import shlex
|
import shlex
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
@@ -11,16 +12,38 @@ from platform import platform
|
|||||||
from traceback import print_exc
|
from traceback import print_exc
|
||||||
|
|
||||||
import milc
|
import milc
|
||||||
|
import platformdirs
|
||||||
|
|
||||||
from . import __version__
|
from . import __version__
|
||||||
from .helpers import find_qmk_firmware, is_qmk_firmware
|
from .helpers import find_qmk_firmware, is_qmk_firmware, find_qmk_userspace, is_qmk_userspace
|
||||||
|
|
||||||
milc.set_metadata(version=__version__)
|
|
||||||
|
def _get_default_distrib_path():
|
||||||
|
if 'windows' in platform().lower():
|
||||||
|
try:
|
||||||
|
result = milc.cli.run(['cygpath', '-w', '/opt/qmk'])
|
||||||
|
if result.returncode == 0:
|
||||||
|
return result.stdout.strip()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return platformdirs.user_data_dir('qmk')
|
||||||
|
|
||||||
|
|
||||||
|
# Ensure the QMK distribution is on the `$PATH` if present. This must be kept in sync with qmk/qmk_firmware.
|
||||||
|
QMK_DISTRIB_DIR = Path(os.environ.get('QMK_DISTRIB_DIR', _get_default_distrib_path()))
|
||||||
|
if QMK_DISTRIB_DIR.exists():
|
||||||
|
os.environ['PATH'] = str(QMK_DISTRIB_DIR / 'bin') + os.pathsep + os.environ['PATH']
|
||||||
|
|
||||||
|
# Prepend any user-defined path prefix
|
||||||
|
if 'QMK_PATH_PREFIX' in os.environ:
|
||||||
|
os.environ['PATH'] = os.environ['QMK_PATH_PREFIX'] + os.pathsep + os.environ['PATH']
|
||||||
|
|
||||||
|
milc.cli.milc_options(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
|
# These must happen after the milc.milc_options() call
|
||||||
import milc.subcommand.config # noqa, must come after milc.set_metadata()
|
import milc.subcommand.config # noqa, must come after milc.milc_options()
|
||||||
from milc.questions import yesno
|
|
||||||
|
|
||||||
|
|
||||||
@milc.cli.entrypoint('CLI wrapper for running QMK commands.')
|
@milc.cli.entrypoint('CLI wrapper for running QMK commands.')
|
||||||
@@ -46,21 +69,38 @@ def main():
|
|||||||
"""Setup the environment before dispatching to the entrypoint.
|
"""Setup the environment before dispatching to the entrypoint.
|
||||||
"""
|
"""
|
||||||
# Warn if they use an outdated python version
|
# Warn if they use an outdated python version
|
||||||
if sys.version_info < (3, 7):
|
if sys.version_info < (3, 9):
|
||||||
print('Warning: Your Python version is out of date! Some subcommands may not work!')
|
print('Warning: Your Python version is out of date! Some subcommands may not work!')
|
||||||
print('Please upgrade to Python 3.7 or later.')
|
print('Please upgrade to Python 3.9 or later.')
|
||||||
|
|
||||||
if 'windows' in platform().lower():
|
if 'windows' in platform().lower():
|
||||||
msystem = os.environ.get('MSYSTEM', '')
|
msystem = os.environ.get('MSYSTEM', '')
|
||||||
|
|
||||||
if 'mingw64' not in sys.executable or 'MINGW64' not in msystem:
|
# Assume the environment isn't workable by default
|
||||||
|
env_ok = False
|
||||||
|
|
||||||
|
# Check if we're using the mingw64/msys2 environment
|
||||||
|
if 'mingw64' in sys.executable and 'MINGW64' in msystem:
|
||||||
|
env_ok = True
|
||||||
|
|
||||||
|
# Check if we're using a `uv`-based environment
|
||||||
|
if '\\uv\\' in sys.executable or '/uv/' in sys.executable:
|
||||||
|
env_ok = True
|
||||||
|
|
||||||
|
# If none of the options above were true, then we're in an unsupported environment. Bomb out.
|
||||||
|
if not env_ok:
|
||||||
print('ERROR: It seems you are not using the MINGW64 terminal.')
|
print('ERROR: It seems you are not using the MINGW64 terminal.')
|
||||||
print('Please close this terminal and open a new MSYS2 MinGW 64-bit terminal.')
|
print('Please close this terminal and open a new MSYS2 MinGW 64-bit terminal.')
|
||||||
print('Python: %s, MSYSTEM: %s' % (sys.executable, msystem))
|
print('Python: %s, MSYSTEM: %s' % (sys.executable, msystem))
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
# Environment setup
|
# Environment setup
|
||||||
|
qmk_userspace = find_qmk_userspace()
|
||||||
qmk_firmware = find_qmk_firmware()
|
qmk_firmware = find_qmk_firmware()
|
||||||
|
if is_qmk_userspace(qmk_userspace):
|
||||||
|
os.environ['QMK_USERSPACE'] = str(qmk_userspace)
|
||||||
|
elif 'QMK_USERSPACE' in os.environ: # Failed to find valid userspace, including what was in the environment if specified -- wipe any environment variable if present as it's clearly invalid.
|
||||||
|
os.environ.pop('QMK_USERSPACE')
|
||||||
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()
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ from pathlib import Path
|
|||||||
|
|
||||||
from milc import cli
|
from milc import cli
|
||||||
from qmk_cli.git import git_clone
|
from qmk_cli.git import git_clone
|
||||||
|
from qmk_cli.helpers import AbsPath
|
||||||
|
|
||||||
default_repo = 'qmk_firmware'
|
default_repo = 'qmk_firmware'
|
||||||
default_fork = 'qmk/' + default_repo
|
default_fork = 'qmk/' + default_repo
|
||||||
@@ -13,18 +14,14 @@ default_branch = 'master'
|
|||||||
|
|
||||||
@cli.argument('--baseurl', arg_only=True, default='https://github.com', help='The URL all git operations start from (Default: https://github.com)')
|
@cli.argument('--baseurl', arg_only=True, default='https://github.com', help='The URL all git operations start from (Default: https://github.com)')
|
||||||
@cli.argument('-b', '--branch', arg_only=True, default=default_branch, help='The branch to clone. Default: %s' % default_branch)
|
@cli.argument('-b', '--branch', arg_only=True, default=default_branch, help='The branch to clone. Default: %s' % default_branch)
|
||||||
@cli.argument('destination', arg_only=True, default=None, nargs='?', help='The directory to clone to. Default: (current directory)')
|
@cli.argument('destination', arg_only=True, default=Path(os.environ['ORIG_CWD']) / default_repo, type=AbsPath, nargs='?', help='The directory to clone to. Default: (current directory)')
|
||||||
@cli.argument('fork', arg_only=True, default=default_fork, nargs='?', help='The qmk_firmware fork to clone. Default: %s' % default_fork)
|
@cli.argument('fork', arg_only=True, default=default_fork, nargs='?', help='The qmk_firmware fork to clone. Default: %s' % default_fork)
|
||||||
@cli.subcommand('Clone a qmk_firmware fork.')
|
@cli.subcommand('Clone a qmk_firmware fork.')
|
||||||
def clone(cli):
|
def clone(cli):
|
||||||
if not cli.args.destination:
|
|
||||||
cli.args.destination = os.path.join(os.environ['ORIG_CWD'], default_fork.split('/')[-1])
|
|
||||||
|
|
||||||
qmk_firmware = Path(cli.args.destination)
|
|
||||||
git_url = '/'.join((cli.args.baseurl, cli.args.fork))
|
git_url = '/'.join((cli.args.baseurl, cli.args.fork))
|
||||||
|
|
||||||
# Exists (but not an empty dir)
|
# Exists (but not an empty dir)
|
||||||
if qmk_firmware.exists() and any(qmk_firmware.iterdir()):
|
if cli.args.destination.exists() and any(cli.args.destination.iterdir()):
|
||||||
cli.log.error('Destination already exists: %s', cli.args.destination)
|
cli.log.error('Destination already exists: %s', cli.args.destination)
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,8 @@ KNOWN_BOOTLOADERS = {
|
|||||||
('239A', '000E'): 'caterina: Adafruit ItsyBitsy 32U4 5v',
|
('239A', '000E'): 'caterina: Adafruit ItsyBitsy 32U4 5v',
|
||||||
('2A03', '0036'): 'caterina: Arduino Leonardo',
|
('2A03', '0036'): 'caterina: Arduino Leonardo',
|
||||||
('2A03', '0037'): 'caterina: Arduino Micro',
|
('2A03', '0037'): 'caterina: Arduino Micro',
|
||||||
('314B', '0106'): 'apm32-dfu: APM32 DFU ISP Mode'
|
('314B', '0106'): 'apm32-dfu: APM32 DFU ISP Mode',
|
||||||
|
('342D', 'DFA0'): 'wb32-dfu: WB32 Device in DFU Mode'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -95,7 +96,19 @@ def import_usb_core():
|
|||||||
def import_hid():
|
def import_hid():
|
||||||
"""Attempts to import the hid module.
|
"""Attempts to import the hid module.
|
||||||
"""
|
"""
|
||||||
|
import os
|
||||||
|
old_cwd = os.getcwd()
|
||||||
try:
|
try:
|
||||||
|
# macOS library search paths don't include homebrew by default when launched via a `uv`-based deployment.
|
||||||
|
# The `hid` python module does a search and attempts to load a set of known library names, but doesn't qualify the path, nor gives the option to do so.
|
||||||
|
# To work around this, we chdir to the homebrew lib directory before importing hid, then chdir back to where we were.
|
||||||
|
if 'darwin' in platform().lower() or 'macos' in platform().lower():
|
||||||
|
for path in ('/opt/homebrew/lib', '/usr/local/lib'):
|
||||||
|
lib_search = Path(path) / 'libhidapi.dylib'
|
||||||
|
if lib_search.exists():
|
||||||
|
os.chdir(path)
|
||||||
|
break
|
||||||
|
|
||||||
import hid
|
import hid
|
||||||
return hid
|
return hid
|
||||||
|
|
||||||
@@ -106,6 +119,8 @@ def import_hid():
|
|||||||
return import_hid()
|
return import_hid()
|
||||||
|
|
||||||
raise
|
raise
|
||||||
|
finally:
|
||||||
|
os.chdir(old_cwd)
|
||||||
|
|
||||||
|
|
||||||
class MonitorDevice(object):
|
class MonitorDevice(object):
|
||||||
@@ -183,7 +198,7 @@ class FindDevices(object):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
device['e'] = e
|
device['e'] = e
|
||||||
device['e_name'] = e.__class__.__name__
|
device['e_name'] = e.__class__.__name__
|
||||||
cli.log.error("Could not connect to %(color)s%(manufacturer_string)s %(product_string)s{style_reset_all} (%(color)s:%(vendor_id)04X:%(product_id)04X:%(index)d): %(e_name)s: %(e)s", device)
|
cli.log.error("Could not connect to %(color)s%(manufacturer_string)s %(product_string)s{style_reset_all} (%(color)s%(vendor_id)04X:%(product_id)04X:%(index)d{style_reset_all}): %(e_name)s: %(e)s", device)
|
||||||
if cli.config.general.verbose:
|
if cli.config.general.verbose:
|
||||||
cli.log.exception(e)
|
cli.log.exception(e)
|
||||||
del live_devices[device['path']]
|
del live_devices[device['path']]
|
||||||
|
|||||||
@@ -4,16 +4,20 @@ import os
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from milc import cli
|
from milc import cli
|
||||||
from qmk_cli.helpers import is_qmk_firmware
|
from qmk_cli.helpers import is_qmk_firmware, is_qmk_userspace
|
||||||
|
|
||||||
|
|
||||||
@cli.argument('var', arg_only=True, default=None, nargs='?', help='Optional variable to query')
|
@cli.argument('var', arg_only=True, default=None, nargs='?', help='Optional variable to query')
|
||||||
@cli.subcommand('Prints environment information.')
|
@cli.subcommand('Prints environment information.')
|
||||||
def env(cli):
|
def env(cli):
|
||||||
home = os.environ.get('QMK_HOME', "")
|
home = os.environ.get('QMK_HOME', "")
|
||||||
|
userspace = os.environ.get('QMK_USERSPACE', "")
|
||||||
data = {
|
data = {
|
||||||
'QMK_HOME': home,
|
'QMK_HOME': home,
|
||||||
'QMK_FIRMWARE': home if is_qmk_firmware(Path(home)) else ""
|
'QMK_FIRMWARE': home if is_qmk_firmware(Path(home)) else "",
|
||||||
|
'QMK_USERSPACE': userspace if is_qmk_userspace(Path(userspace)) else "",
|
||||||
|
'QMK_DISTRIB_DIR': os.environ.get('QMK_DISTRIB_DIR', ""),
|
||||||
|
'QMK_PATH_PREFIX': os.environ.get('QMK_PATH_PREFIX', "")
|
||||||
}
|
}
|
||||||
|
|
||||||
# Now munge the current cli config
|
# Now munge the current cli config
|
||||||
|
|||||||
@@ -5,11 +5,12 @@ import shlex
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from shutil import rmtree
|
||||||
|
|
||||||
from milc import cli
|
from milc import cli
|
||||||
from milc.questions import yesno
|
from milc.questions import choice, question, yesno
|
||||||
from qmk_cli.git import git_clone
|
from qmk_cli.git import git_clone
|
||||||
from qmk_cli.helpers import is_qmk_firmware
|
from qmk_cli.helpers import AbsPath, is_qmk_firmware
|
||||||
|
|
||||||
default_base = 'https://github.com'
|
default_base = 'https://github.com'
|
||||||
default_repo = 'qmk_firmware'
|
default_repo = 'qmk_firmware'
|
||||||
@@ -43,11 +44,22 @@ def git_upstream(destination):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def git_clone_fork(fork, branch, force=False):
|
||||||
|
if force:
|
||||||
|
rmtree(cli.args.home)
|
||||||
|
|
||||||
|
git_url = '/'.join((cli.args.baseurl, fork))
|
||||||
|
if git_clone(git_url, cli.args.home, branch):
|
||||||
|
git_upstream(cli.args.home)
|
||||||
|
else:
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
|
||||||
@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', arg_only=True, default=default_base, help='The URL all git operations start from. Default: %s' % default_base)
|
@cli.argument('--baseurl', arg_only=True, default=default_base, help='The URL all git operations start from. Default: %s' % default_base)
|
||||||
@cli.argument('-b', '--branch', arg_only=True, default=default_branch, help='The branch to clone. Default: %s' % default_branch)
|
@cli.argument('-b', '--branch', arg_only=True, default=default_branch, help='The branch to clone. Default: %s' % default_branch)
|
||||||
@cli.argument('-H', '--home', arg_only=True, default=Path(os.environ['QMK_HOME']), type=Path, help='The location for QMK Firmware. Default: %s' % os.environ['QMK_HOME'])
|
@cli.argument('-H', '--home', arg_only=True, default=Path(os.environ['QMK_HOME']), type=AbsPath, help='The location for QMK Firmware. Default: %s' % os.environ['QMK_HOME'])
|
||||||
@cli.argument('fork', arg_only=True, default=default_fork, nargs='?', help='The qmk_firmware fork to clone. Default: %s' % default_fork)
|
@cli.argument('fork', arg_only=True, default=default_fork, nargs='?', help='The qmk_firmware fork to clone. Default: %s' % default_fork)
|
||||||
@cli.subcommand('Setup your computer for qmk_firmware.')
|
@cli.subcommand('Setup your computer for qmk_firmware.')
|
||||||
def setup(cli):
|
def setup(cli):
|
||||||
@@ -61,9 +73,34 @@ def setup(cli):
|
|||||||
cli.log.error("Can't use both --yes and --no at the same time.")
|
cli.log.error("Can't use both --yes and --no at the same time.")
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
# Check on qmk_firmware, and if it doesn't exist offer to check it out.
|
# Check on qmk_firmware
|
||||||
|
# If it exists, ask the user what to do with it
|
||||||
|
# If it doesn't exist, offer to check it out
|
||||||
if is_qmk_firmware(cli.args.home):
|
if is_qmk_firmware(cli.args.home):
|
||||||
cli.log.info('Found qmk_firmware at %s.', str(cli.args.home))
|
cli.log.info('Found qmk_firmware at %s.', str(cli.args.home))
|
||||||
|
found_prompt = "What do you want to do?"
|
||||||
|
found_options = [
|
||||||
|
f"Delete and reclone {cli.args.fork}",
|
||||||
|
"Delete and clone a different fork",
|
||||||
|
"Keep it and continue"
|
||||||
|
]
|
||||||
|
delete_confirm = "WARNING: This will delete your current qmk_firmware directory. Proceed?"
|
||||||
|
|
||||||
|
found_action = choice(found_prompt, options=found_options, default=2)
|
||||||
|
if found_action == f"Delete and reclone {cli.args.fork}":
|
||||||
|
if not yesno(delete_confirm, default=False):
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
git_clone_fork(cli.args.fork, cli.args.branch, force=True)
|
||||||
|
|
||||||
|
elif found_action == "Delete and clone a different fork":
|
||||||
|
fork_name = question("Enter the name of the fork:", default=cli.args.fork)
|
||||||
|
branch_name = question("Enter the branch name to clone:", default=cli.args.branch)
|
||||||
|
|
||||||
|
if not yesno(delete_confirm, default=False):
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
git_clone_fork(fork_name, branch_name, force=True)
|
||||||
|
|
||||||
# Exists (but not an empty dir)
|
# Exists (but not an empty dir)
|
||||||
elif cli.args.home.exists() and any(cli.args.home.iterdir()):
|
elif cli.args.home.exists() and any(cli.args.home.iterdir()):
|
||||||
@@ -78,12 +115,7 @@ def setup(cli):
|
|||||||
else:
|
else:
|
||||||
cli.log.error('Could not find qmk_firmware!')
|
cli.log.error('Could not find qmk_firmware!')
|
||||||
if yesno(clone_prompt):
|
if yesno(clone_prompt):
|
||||||
git_url = '/'.join((cli.args.baseurl, cli.args.fork))
|
git_clone_fork(cli.args.fork, cli.args.branch)
|
||||||
|
|
||||||
if git_clone(git_url, cli.args.home, cli.args.branch):
|
|
||||||
git_upstream(cli.args.home)
|
|
||||||
else:
|
|
||||||
exit(1)
|
|
||||||
else:
|
else:
|
||||||
cli.log.warning('Not cloning qmk_firmware due to user input or --no flag.')
|
cli.log.warning('Not cloning qmk_firmware due to user input or --no flag.')
|
||||||
|
|
||||||
|
|||||||
@@ -9,19 +9,19 @@ ignore = E501,E226
|
|||||||
|
|
||||||
[metadata]
|
[metadata]
|
||||||
name = qmk
|
name = qmk
|
||||||
version = 1.1.2
|
version = 1.2.0
|
||||||
author = skullydazed
|
author = skullydazed
|
||||||
author_email = skullydazed@gmail.com
|
author_email = skullydazed@gmail.com
|
||||||
description = A program to help users work with QMK Firmware.
|
description = A program to help users work with QMK Firmware.
|
||||||
long_description = file: README.md
|
long_description = file: README.md
|
||||||
long_description_content_type = text/markdown
|
long_description_content_type = text/markdown
|
||||||
license = MIT License
|
license = MIT License
|
||||||
project_urls =
|
project_urls =
|
||||||
Bug Tracker = https://github.com/qmk/qmk_cli/issues
|
Bug Tracker = https://github.com/qmk/qmk_cli/issues
|
||||||
Documentation = https://docs.qmk.fm/#/cli
|
Documentation = https://docs.qmk.fm/#/cli
|
||||||
Homepage = https://qmk.fm/
|
Homepage = https://qmk.fm/
|
||||||
Source = https://github.com/qmk/qmk_cli/
|
Source = https://github.com/qmk/qmk_cli/
|
||||||
classifiers =
|
classifiers =
|
||||||
Development Status :: 3 - Alpha
|
Development Status :: 3 - Alpha
|
||||||
Environment :: Console
|
Environment :: Console
|
||||||
Intended Audience :: Developers
|
Intended Audience :: Developers
|
||||||
@@ -35,11 +35,11 @@ classifiers =
|
|||||||
Topic :: Utilities
|
Topic :: Utilities
|
||||||
|
|
||||||
[options]
|
[options]
|
||||||
install_requires =
|
install_requires =
|
||||||
hid
|
hid
|
||||||
milc>=1.4.2
|
milc>=1.9.0
|
||||||
|
platformdirs
|
||||||
pyusb
|
pyusb
|
||||||
setuptools>=45
|
|
||||||
# qmk_firmware packages
|
# qmk_firmware packages
|
||||||
dotty-dict
|
dotty-dict
|
||||||
hjson
|
hjson
|
||||||
@@ -48,10 +48,10 @@ install_requires =
|
|||||||
pygments
|
pygments
|
||||||
pyserial
|
pyserial
|
||||||
packages = find:
|
packages = find:
|
||||||
python_requires = >=3.7
|
python_requires = >=3.9
|
||||||
|
|
||||||
[options.entry_points]
|
[options.entry_points]
|
||||||
console_scripts =
|
console_scripts =
|
||||||
qmk = qmk_cli.script_qmk:main
|
qmk = qmk_cli.script_qmk:main
|
||||||
|
|
||||||
[yapf]
|
[yapf]
|
||||||
@@ -72,13 +72,13 @@ continuation_indent_width = 4
|
|||||||
dedent_closing_brackets = True
|
dedent_closing_brackets = True
|
||||||
disable_ending_comma_heuristic = False
|
disable_ending_comma_heuristic = False
|
||||||
each_dict_entry_on_separate_line = True
|
each_dict_entry_on_separate_line = True
|
||||||
i18n_comment =
|
i18n_comment =
|
||||||
i18n_function_call =
|
i18n_function_call =
|
||||||
indent_blank_lines = False
|
indent_blank_lines = False
|
||||||
indent_dictionary_value = True
|
indent_dictionary_value = True
|
||||||
indent_width = 4
|
indent_width = 4
|
||||||
join_multiple_lines = False
|
join_multiple_lines = False
|
||||||
no_spaces_around_selected_binary_operators =
|
no_spaces_around_selected_binary_operators =
|
||||||
spaces_around_default_or_named_assign = False
|
spaces_around_default_or_named_assign = False
|
||||||
spaces_around_power_operator = False
|
spaces_around_power_operator = False
|
||||||
spaces_before_comment = 2
|
spaces_before_comment = 2
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ gh_pat = environ.get('QMK_BOT_TOKEN', '')
|
|||||||
gh_repo_owner = environ.get('REPO_OWNER', 'qmk')
|
gh_repo_owner = environ.get('REPO_OWNER', 'qmk')
|
||||||
gh_repo_name = environ.get('REPO_NAME', 'qmk_fpm')
|
gh_repo_name = environ.get('REPO_NAME', 'qmk_fpm')
|
||||||
gh_ref = environ.get('BRANCH_NAME', 'main')
|
gh_ref = environ.get('BRANCH_NAME', 'main')
|
||||||
gh_workflow_ids = environ.get('WORKFLOW_IDS', 'debian-buster-publish.yml,fedora-32-publish.yml,ubuntu-focal-publish.yml').split(',')
|
gh_workflow_ids = environ.get('WORKFLOW_IDS', 'all-trigger.yml').split(',')
|
||||||
gh_api_url = environ.get('GITHUB_API_URL', 'https://api.github.com')
|
gh_api_url = environ.get('GITHUB_API_URL', 'https://api.github.com')
|
||||||
gh_workflow_args = {'ref': gh_ref}
|
gh_workflow_args = {'ref': gh_ref}
|
||||||
gh_workflow_headers = {'Accept': 'application/vnd.github.v3+json'}
|
gh_workflow_headers = {'Accept': 'application/vnd.github.v3+json'}
|
||||||
|
|||||||
Reference in New Issue
Block a user