Skip to content

Kernel_checker

Kernel_checker #4

Workflow file for this run

name: Kernel Checkpatch
on:
pull_request:
types: [opened, synchronize, reopened]
workflow_dispatch:
jobs:
checkpatch:
runs-on: ubuntu-latest
steps:
- name: Checkout (full history for format-patch)
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Perl
run: sudo apt-get update && sudo apt-get install -y perl
# If your repo has scripts/checkpatch.pl, we use it; else download a stable version from upstream.
- name: Resolve checkpatch.pl
id: resolve
shell: bash
run: |
set -e
if [[ -x scripts/checkpatch.pl ]]; then
echo "checkpatch=scripts/checkpatch.pl" >> "$GITHUB_OUTPUT"
else
curl -L --fail -o checkpatch.pl https://raw.githubusercontent.com/torvalds/linux/v6.6/scripts/checkpatch.pl
chmod +x checkpatch.pl
echo "checkpatch=./checkpatch.pl" >> "$GITHUB_OUTPUT"
fi
- name: Generate patches for PR commits
id: gen
shell: bash
run: |
# set -e
BASE_SHA="${{ github.event.pull_request.base.sha }}"
HEAD_SHA="${{ github.event.pull_request.head.sha }}"
mkdir -p patches
# Create one patch per commit in the PR range
git format-patch --no-signature --output-directory patches "${BASE_SHA}..${HEAD_SHA}"
COUNT=$(ls -1 patches/*.patch 2>/dev/null | wc -l | tr -d ' ')
echo "count=$COUNT" >> "$GITHUB_OUTPUT"
if [[ "$COUNT" -eq 0 ]]; then
echo "No new commits/patches to check."
fi
- name: Run checkpatch (fail on ERROR, allow WARN)
if: steps.gen.outputs.count != '0'
shell: bash
run: |
# set -e
CHECKPATCH="${{ steps.resolve.outputs.checkpatch }}"
ERROR_COUNT=0
WARN_COUNT=0
IGNORE_TYPES="${{ vars.CHECKPATCH_IGNORE_TYPES }}" # optional: define repo-level variable, e.g.: 'LONG_LINE,LEADING_SPACE'
for p in patches/*.patch; do
echo "=== Checking $p ==="
perl "$CHECKPATCH" --no-tree --strict --show-types ${IGNORE_TYPES:+--ignore "$IGNORE_TYPES"} "$p" | tee "checkpatch_${p##*/}.log" || true
done
# Aggregate
ERROR_COUNT=$(grep -h '^ERROR:' checkpatch_*.log | wc -l | tr -d ' ')
WARN_COUNT=$(grep -h '^WARNING:' checkpatch_*.log | wc -l | tr -d ' ') || true
echo "Total ERRORs: $ERROR_COUNT"
echo "Total WARNINGs: $WARN_COUNT"
# Save a combined report
cat checkpatch_*.log > checkpatch_report.txt || true
# Upload as artifact for convenience
echo "ERROR_COUNT=$ERROR_COUNT" >> "$GITHUB_ENV"
echo "WARN_COUNT=$WARN_COUNT" >> "$GITHUB_ENV"
# Fail only if ERRORs present (change condition to fail on warnings too)
if [[ "$ERROR_COUNT" -gt 0 ]]; then
echo "::error title=Checkpatch failed::Found $ERROR_COUNT errors"
exit 1
fi
- name: Upload checkpatch report
if: always()
uses: actions/upload-artifact@v4
with:
name: checkpatch-report
path: |
patches/*.patch
checkpatch_*.log
checkpatch_report.txt