summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/lint.yml30
1 files changed, 30 insertions, 0 deletions
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 2c0f07410e..1c0667abba 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -36,6 +36,7 @@ jobs:
         echo '${{ steps.file_changes.outputs.all_changed_files}}'
 
     - name: Run qmk lint
+      if: always()
       shell: 'bash {0}'
       run: |
         QMK_CHANGES=$(echo -e '${{ steps.file_changes.outputs.all_changed_files}}' | sed 's/ /\n/g')
@@ -72,3 +73,32 @@ jobs:
             exit 255
         fi
         exit $exit_code
+
+    - name: Verify at most one added keyboard
+      if: always()
+      shell: 'bash {0}'
+      run: |
+        git reset --hard
+        git clean -xfd
+
+        # Get the keyboard list and count for the target branch
+        git checkout -f ${{ github.base_ref }}
+        git pull --ff-only
+        QMK_KEYBOARDS_BASE=$(qmk list-keyboards)
+        QMK_KEYBOARDS_BASE_COUNT=$(qmk list-keyboards | wc -l)
+
+        # Get the keyboard list and count for the PR
+        git checkout -f ${{ github.head_ref }}
+        git merge --no-commit --squash ${{ github.base_ref }}
+        QMK_KEYBOARDS_PR=$(qmk list-keyboards)
+        QMK_KEYBOARDS_PR_COUNT=$(qmk list-keyboards | wc -l)
+
+        echo "::group::Keyboards changes in this PR"
+        diff -d -U 0 <(echo "$QMK_KEYBOARDS_BASE") <(echo "$QMK_KEYBOARDS_PR") | grep -vE '^(---|\+\+\+|@@)' | sed -e 's@^-@Removed: @g' -e 's@^+@  Added: @g'
+        echo "::endgroup::"
+
+        if [[ $QMK_KEYBOARDS_PR_COUNT -gt $(($QMK_KEYBOARDS_BASE_COUNT + 1)) ]]; then
+            echo "More than one keyboard added in this PR -- see the PR Checklist."
+            echo "::error::More than one keyboard added in this PR -- see the PR Checklist."
+            exit 1
+        fi