Compare commits

...

65 Commits

Author SHA1 Message Date
zvecr 8d6a53d792 Add userspace-setup subcommand 2024-11-14 21:04:48 +00:00
Nick Brassel 1e98a2e459 Broken CI. 2024-11-15 06:42:33 +11:00
Nick Brassel c53fb88479 Merge pull request #186 from qmk/found-repo-prompt 2024-11-15 06:14:09 +11:00
Nick Brassel fed1e39611 Merge pull request #168 from qmk/userspace1 2024-11-15 06:13:00 +11:00
QMK Bot ed0d5699ff New release: 1.1.5 → 1.1.6 2024-10-30 04:09:20 +00:00
Joel Challis b1542e4a62 Update build status badge 2024-10-28 02:43:10 +00:00
dependabot[bot] 9c7c371419 Bump github/codeql-action from 2 to 3 (#164)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-27 05:01:35 +00:00
zvecr ae45bdeb02 Update 'qmk env' 2024-10-27 05:00:54 +00:00
zvecr d20af71118 Automatically configure userspace at runtime 2024-10-27 05:00:54 +00:00
Joel Challis 8f85a8856f Update for milc 1.9.0 changes (#184) 2024-10-27 04:59:42 +00:00
dependabot[bot] 87c356773f Bump docker/build-push-action from 5.1.0 to 6.9.0 (#185)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.1.0 to 6.9.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v5.1.0...v6.9.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-27 04:58:53 +00:00
fauxpark 27a97e4ebf qmk setup: ask user what to do if repo already exists 2024-10-27 15:52:52 +11:00
Wilhelm Schuster 53d8dab86f console: Adjust format string for could-not-connect message (#181) 2024-10-27 04:43:21 +00:00
Joel Challis 86a3decd0a Bump minimum Python version to 3.9 (#178) 2024-10-27 04:36:55 +00:00
QMK Bot d3917b10e7 New release: 1.1.4 → 1.1.5 2024-02-23 11:03:39 +00:00
Nick Brassel 86b3b74b21 Fixup package rebuild trigger for qmk_fpm. 2024-02-23 22:02:32 +11:00
QMK Bot bb385f7786 New release: 1.1.3 → 1.1.4 2024-02-23 10:57:48 +00:00
Nick Brassel e07ad4c9ee Swap to API token publishing. 2024-02-23 21:55:17 +11:00
QMK Bot 1e03b45986 New release: 1.1.2 → 1.1.3 2024-02-23 10:36:17 +00:00
Nick Brassel 7a1b556b25 Merge pull request #162 from qmk/pyvers 2024-02-23 21:34:58 +11:00
Nick Brassel d7911ffaf7 Disable qmk config -a test due to deficient milc. 2024-02-23 21:10:12 +11:00
Nick Brassel daa7f54dd0 milc bump to 1.6.8, add python 3.10-3.12. 2024-02-23 21:10:12 +11:00
dependabot[bot] 753136ade4 Bump actions/setup-python from 4 to 5 (#163) 2023-12-13 13:09:11 +11:00
Nick Brassel 579763620d Merge pull request #161 from qmk/dependabot/github_actions/docker/build-push-action-5.1.0 2023-11-30 19:52:19 +11:00
dependabot[bot] cbc22adb76 Bump docker/build-push-action from 5.0.0 to 5.1.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v5.0.0...v5.1.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-17 17:07:56 +00:00
Less/Rikki 82bb65bd52 feat: wb32 bootloader (#148) 2023-09-29 12:04:47 +01:00
Nick Brassel 671e553239 Merge pull request #156 from qmk/dependabot/github_actions/docker/setup-buildx-action-3 2023-09-22 07:07:40 +10:00
Nick Brassel fa4bcc034d Merge pull request #157 from qmk/dependabot/github_actions/docker/setup-qemu-action-3 2023-09-22 07:07:26 +10:00
Nick Brassel 0a048da8a4 Merge pull request #155 from qmk/dependabot/github_actions/docker/login-action-3 2023-09-22 07:07:17 +10:00
Nick Brassel 7808a1166c Merge pull request #158 from qmk/dependabot/github_actions/docker/build-push-action-5.0.0 2023-09-22 07:07:06 +10:00
Nick Brassel b9b2ebbe13 Merge pull request #153 from qmk/dependabot/github_actions/actions/checkout-4 2023-09-22 07:06:55 +10:00
dependabot[bot] b4b53e80eb Bump docker/build-push-action from 4.1.1 to 5.0.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4.1.1 to 5.0.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v4.1.1...v5.0.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-12 17:40:58 +00:00
dependabot[bot] 2212fdabf7 Bump docker/setup-qemu-action from 2 to 3
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-12 17:40:53 +00:00
dependabot[bot] 1e8a174e0c Bump docker/setup-buildx-action from 2 to 3
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-12 17:40:48 +00:00
dependabot[bot] 6868d5ba6f Bump docker/login-action from 2 to 3
Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-12 17:40:41 +00:00
dependabot[bot] e203006537 Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-04 17:05:56 +00:00
dependabot[bot] 1c72e1e564 Bump docker/build-push-action from 4.0.0 to 4.1.1 (#149)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4.0.0 to 4.1.1.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v4.0.0...v4.1.1)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-14 04:16:53 +10:00
QMK Bot aecd02e850 New release: 1.1.1 → 1.1.2 2023-04-05 10:05:42 +00:00
Nick Brassel 5019970d01 Merge pull request #145 from qmk/attempted-formatting-fix 2023-04-05 20:04:23 +10:00
Nick Brassel 446547df04 Update qmk_cli/subcommands/console.py
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
2023-04-05 18:07:39 +10:00
Nick Brassel dea98e71b8 Revert, no work. 2023-04-03 07:46:20 +10:00
Nick Brassel ea62fa1cec Let's try that again. 2023-04-03 07:45:24 +10:00
Nick Brassel 32129ee5a2 Update qmk_cli/subcommands/console.py
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
2023-04-03 07:43:04 +10:00
Nick Brassel 6638c13c36 Take 2 2023-04-02 10:32:27 +10:00
Nick Brassel 98ab6a52f6 Attempted formatting fix. 2023-04-02 10:27:46 +10:00
Joel Challis f9d3020616 Fix docker build? (#144) 2023-03-16 23:06:24 +00:00
zvecr 1c98cf7053 Fix republish 2023-03-16 22:57:57 +00:00
Joel Challis 6b98cb311f Update to reflect latest base container (#143)
* pull base container from ghcr
* also push to ghcr
* also publish arm container
2023-03-16 22:51:14 +00:00
dependabot[bot] 8a4bf2d437 Bump docker/build-push-action from 3.3.0 to 4.0.0 (#142)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.3.0 to 4.0.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v3.3.0...v4.0.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-28 22:35:32 +00:00
Nick Brassel db645b7db8 Merge pull request #137 from qmk/zvecr-patch-2 2023-01-19 10:39:39 +11:00
Nick Brassel 3f4c491202 Merge pull request #138 from qmk/zvecr-patch-1 2023-01-19 10:39:23 +11:00
Nick Brassel 39d3adddff Merge pull request #141 from qmk/dependabot/github_actions/docker/build-push-action-3.3.0 2023-01-17 04:43:12 +11:00
dependabot[bot] d557058db7 Bump docker/build-push-action from 3.2.0 to 3.3.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.2.0 to 3.3.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v3.2.0...v3.3.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-16 17:02:47 +00:00
Joel Challis 3126bdb90a Also handle clone too 2023-01-02 03:31:01 +00:00
Joel Challis d2f73683f8 Allow setup to handle empty home directories 2023-01-02 03:09:52 +00:00
Joel Challis 83978d4c68 Run qmk doctor in the correct directory 2023-01-02 02:59:51 +00:00
dependabot[bot] bb00940631 Bump docker/build-push-action from 3.1.1 to 3.2.0 (#135)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.1.1 to 3.2.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v3.1.1...v3.2.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-27 22:00:55 +00:00
dependabot[bot] 29bcd3aa01 Bump docker/login-action from 2.0.0 to 2.1.0 (#134)
Bumps [docker/login-action](https://github.com/docker/login-action) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2.0.0...v2.1.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-27 22:00:35 +00:00
QMK Bot 42481f2db3 New release: 1.1.0 → 1.1.1 2022-08-20 13:32:16 +00:00
Nick Brassel 928d22d370 Merge pull request #133 from qmk/zvecr-patch-2 2022-08-20 23:02:28 +10:00
Nick Brassel 169e12a4c6 tabs/spaces etc. 2022-08-20 22:53:15 +10:00
Joel Challis 26ad0cd2b9 Align dependencies to develop 2022-08-20 11:52:15 +01:00
dependabot[bot] 63fc8ff722 Bump docker/build-push-action from 3.0.0 to 3.1.1 (#132) 2022-08-20 11:49:39 +01:00
Ryan bb912d3473 Revert dependency on qmk-dotty-dict (#129) 2022-07-12 11:45:34 +10:00
dependabot[bot] 7cb41c2daa Bump actions/setup-python from 3 to 4 (#130)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-03 10:51:43 +10:00
19 changed files with 300 additions and 70 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
[bumpversion] [bumpversion]
current_version = 1.1.0 current_version = 1.1.6
commit = True commit = True
tag = True tag = True
tag_name = {new_version} tag_name = {new_version}
+32 -8
View File
@@ -7,20 +7,41 @@ on:
pull_request: pull_request:
jobs: jobs:
test_cli_base_container:
runs-on: ubuntu-latest
container: ghcr.io/qmk/qmk_base_container
env:
QMK_HOME: ~/qmk_firmware
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: apt-get update && apt-get install -y python3-venv
- name: Run ci_tests
run: ./ci_tests -a
test_cli_linux_macos: test_cli_linux_macos:
needs: test_cli_base_container
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
env: env:
QMK_HOME: ~/qmk_firmware QMK_HOME: ~/qmk_firmware
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']
include:
- os: macos-13
python-version: '3.9'
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }} - name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3 uses: actions/setup-python@v5
with: with:
python-version: ${{ matrix.python-version }} python-version: ${{ matrix.python-version }}
@@ -28,29 +49,32 @@ jobs:
run: ./ci_tests -a run: ./ci_tests -a
test_cli_win: test_cli_win:
needs: test_cli_base_container
runs-on: windows-latest runs-on: windows-latest
env: env:
QMK_HOME: $HOME/qmk_firmware QMK_HOME: $HOME/qmk_firmware
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- 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 --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
+4 -4
View File
@@ -39,11 +39,11 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v3 uses: actions/checkout@v4
# 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@v3
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@v3
# ️ 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@v3
+27 -6
View File
@@ -10,26 +10,47 @@ jobs:
steps: steps:
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v3 uses: actions/setup-python@v5
with: with:
python-version: '3.7' python-version: '3.9'
- uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- uses: actions/checkout@v4
with: with:
fetch-depth: 0 fetch-depth: 0
- name: 'Get Previous tag' - name: 'Get Previous tag'
id: previoustag id: previoustag
uses: "WyriHaximus/github-action-get-previous-tag@v1" uses: "WyriHaximus/github-action-get-previous-tag@v1"
- name: Download previous artifact - name: Download previous artifact
run: | run: |
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
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Log in to Docker Hub - name: Log in to Docker Hub
uses: docker/login-action@v2.0.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@v3.0.0 uses: docker/build-push-action@v6.9.0
with: with:
context: . context: .
push: true push: true
tags: qmkfm/qmk_cli:latest platforms: linux/amd64,linux/arm64
tags: |
ghcr.io/qmk/qmk_cli:latest
qmkfm/qmk_cli:latest
+33 -8
View File
@@ -17,47 +17,72 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v3 uses: actions/setup-python@v5
with: with:
python-version: '3.7' 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@v4
- name: Run ci_tests - name: Run ci_tests
run: ./ci_tests run: ./ci_tests
- 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 ${{ github.event.inputs.version_part }} bumpversion ${{ github.event.inputs.version_part }}
- name: Push changes - name: Push changes
uses: ad-m/github-push-action@master uses: ad-m/github-push-action@master
with: with:
github_token: ${{ secrets.GITHUB_TOKEN }} github_token: ${{ secrets.GITHUB_TOKEN }}
branch: master branch: master
tags: true tags: true
- 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
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Log in to Docker Hub - name: Log in to Docker Hub
uses: docker/login-action@v2.0.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@v3.0.0 uses: docker/build-push-action@v6.9.0
with: with:
context: . context: .
push: true push: true
tags: qmkfm/qmk_cli:latest platforms: linux/amd64,linux/arm64
tags: |
ghcr.io/qmk/qmk_cli:latest
qmkfm/qmk_cli:latest
- name: Trigger OS package builds - name: Trigger OS package builds
run: ./trigger_packages run: ./trigger_packages
env: env:
+1 -1
View File
@@ -1,4 +1,4 @@
FROM qmkfm/base_container FROM ghcr.io/qmk/qmk_base_container:latest
# Copy package in # Copy package in
ADD dist /tmp/dist ADD dist /tmp/dist
+1 -1
View File
@@ -1,5 +1,5 @@
# QMK CLI # QMK CLI
[![CLI Setup](https://github.com/qmk/qmk_cli/workflows/CLI%20Setup/badge.svg)](https://github.com/qmk/qmk_cli/actions?query=workflow%3A%22CLI+Setup%22) [![CLI Setup](https://github.com/qmk/qmk_cli/actions/workflows/cli_setup.yml/badge.svg)](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/).
+2 -2
View File
@@ -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
View File
@@ -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.0' __version__ = '1.1.6'
+51 -1
View File
@@ -1,8 +1,9 @@
"""Useful helper functions. """Useful helper functions.
""" """
import os import os
import json
from platformdirs import user_data_dir
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
@@ -44,6 +45,10 @@ def find_qmk_firmware():
return path.resolve() return path.resolve()
return path return path
hidden_home = Path(user_data_dir('qmk_cli', 'QMK')) / 'qmk_firmware'
if hidden_home.exists():
return hidden_home
return Path.home() / 'qmk_firmware' return Path.home() / 'qmk_firmware'
@@ -58,3 +63,48 @@ 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=2)
def find_qmk_userspace():
"""Look for qmk_userspace in the usual places.
"""
if in_qmk_userspace():
return in_qmk_userspace()
if cli.config.user.overlay_dir:
return Path(cli.config.user.overlay_dir).expanduser().resolve()
if 'QMK_USERSPACE' in os.environ:
path = Path(os.environ['QMK_USERSPACE']).expanduser()
if path.exists():
return path.resolve()
return path
return Path.home() / 'qmk_userspace'
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()
+8 -7
View File
@@ -13,14 +13,13 @@ from traceback import print_exc
import milc import milc
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__) 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,9 +45,9 @@ 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', '')
@@ -60,7 +59,9 @@ def main():
exit(1) exit(1)
# Environment setup # Environment setup
qmk_userspace = find_qmk_userspace()
qmk_firmware = find_qmk_firmware() qmk_firmware = find_qmk_firmware()
os.environ['QMK_USERSPACE'] = str(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()
+1
View File
@@ -6,3 +6,4 @@ from . import clone # noqa
from . import console # noqa from . import console # noqa
from . import env # noqa from . import env # noqa
from . import setup # noqa from . import setup # noqa
from . import userspace # noqa
+2 -1
View File
@@ -23,7 +23,8 @@ def clone(cli):
qmk_firmware = Path(cli.args.destination) qmk_firmware = Path(cli.args.destination)
git_url = '/'.join((cli.args.baseurl, cli.args.fork)) git_url = '/'.join((cli.args.baseurl, cli.args.fork))
if qmk_firmware.exists(): # Exists (but not an empty dir)
if qmk_firmware.exists() and any(qmk_firmware.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)
+4 -3
View File
@@ -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'
} }
@@ -142,7 +143,7 @@ class MonitorDevice(object):
message['identifier'] = ':'.join(identifier) message['identifier'] = ':'.join(identifier)
message['ts'] = '{style_dim}{fg_green}%s{style_reset_all} ' % (strftime(cli.config.general.datetime_fmt),) if cli.args.timestamp else '' message['ts'] = '{style_dim}{fg_green}%s{style_reset_all} ' % (strftime(cli.config.general.datetime_fmt),) if cli.args.timestamp else ''
cli.echo('%(ts)s%(color)s%(identifier)s:%(index)d{style_reset_all}: %(text)s' % message) cli.echo('%s', '%(ts)s%(color)s%(identifier)s:%(index)d{style_reset_all}: %(text)s' % message)
except self.hid.HIDException: except self.hid.HIDException:
break break
@@ -183,7 +184,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 -2
View File
@@ -4,16 +4,18 @@ 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 ""
} }
# Now munge the current cli config # Now munge the current cli config
+43 -10
View File
@@ -5,9 +5,10 @@ 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 is_qmk_firmware
@@ -43,6 +44,17 @@ 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)
@@ -61,11 +73,37 @@ 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?"
elif cli.args.home.exists(): 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)
elif cli.args.home.exists() and any(cli.args.home.iterdir()):
path_str = str(cli.args.home) path_str = str(cli.args.home)
if cli.args.home.name != 'qmk_firmware': if cli.args.home.name != 'qmk_firmware':
@@ -77,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.')
@@ -104,4 +137,4 @@ def setup(cli):
if cli.args.yes: if cli.args.yes:
doctor_command.append('-y') doctor_command.append('-y')
cli.run(doctor_command, stdin=None, capture_output=False) cli.run(doctor_command, stdin=None, capture_output=False, cwd=cli.args.home)
+70
View File
@@ -0,0 +1,70 @@
"""Setup qmk_userspace on your computer.
"""
import os
import sys
from pathlib import Path
from platformdirs import user_data_dir
from milc import cli
from milc.questions import yesno
from qmk_cli.git import git_clone
from qmk_cli.helpers import find_qmk_firmware, is_qmk_firmware, is_qmk_userspace
default_base = 'https://github.com'
default_fork = 'qmk/qmk_userspace'
default_branch = 'main'
@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('--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('-H', '--home', arg_only=True, default=Path(os.environ['QMK_USERSPACE']), type=Path, help='The location for qmk_userspace. Default: %s' % os.environ['QMK_HOME'])
@cli.argument('fork', arg_only=True, default=default_fork, nargs='?', help='The qmk_userspace fork to clone. Default: %s' % default_fork)
@cli.subcommand('Setup your computer for qmk_userspace.')
def userspace_setup(cli):
"""Guide the user through setting up their QMK environment.
"""
# Sanity checks
if cli.args.yes and cli.args.no:
cli.log.error("Can't use both --yes and --no at the same time.")
exit(1)
if is_qmk_userspace(cli.args.home):
cli.log.info(f'Found qmk_userspace at {cli.args.home}.')
else:
cli.log.error('Could not find qmk_userspace!')
if yesno('Would you like to clone qmk_userspace?'):
git_url = f'{cli.args.baseurl}/{cli.args.fork}'
if not git_clone(git_url, cli.args.home, cli.args.branch):
exit(1)
else:
cli.log.warning('Not cloning qmk_userspace due to user input or --no flag.')
qmk_firmware = find_qmk_firmware()
if is_qmk_firmware(qmk_firmware):
cli.log.info(f'Found qmk_firmware at {qmk_firmware}.')
else:
cli.log.error('Could not find qmk_firmware!')
if yesno('Would you like to clone qmk_firmware?'):
git_url = f'{cli.args.baseurl}/qmk/qmk_firmware'
hidden_home = Path(user_data_dir('qmk_cli', 'QMK')) / 'qmk_firmware'
if not git_clone(git_url, hidden_home, 'master'):
exit(1)
else:
cli.log.warning('Not cloning qmk_firmware due to user input or --no flag.')
# Run `qmk doctor` to check the rest of the environment out
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:
doctor_command.append('-n')
if cli.args.yes:
doctor_command.append('-y')
cli.run(doctor_command, stdin=None, capture_output=False, cwd=cli.args.home)
+6 -5
View File
@@ -9,7 +9,7 @@ ignore = E501,E226
[metadata] [metadata]
name = qmk name = qmk
version = 1.1.0 version = 1.1.6
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.
@@ -37,17 +37,18 @@ classifiers =
[options] [options]
install_requires = install_requires =
hid hid
milc>=1.4.2 milc>=1.9.0
pyusb pyusb
setuptools>=45 setuptools>=45
# qmk_firmware packages # qmk_firmware packages
dotty-dict
hjson hjson
jsonschema>=4 jsonschema>=4
pygments
qmk-dotty-dict
pillow pillow
pygments
pyserial
packages = find: packages = find:
python_requires = >=3.7 python_requires = >=3.9
[options.entry_points] [options.entry_points]
console_scripts = console_scripts =
+1 -1
View File
@@ -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'}