forked from thesofproject/sof
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
.github: add shallow checkpatch to Github Actions
Let's try to run checkpatch in an open-source and fast way while leveraging Github's very good user interface. Run checkpatch both with and without --strict; this has been a source of confusion in the past, see thesofproject/linux#1988 Note this attempt does not rely on git merge-bases which has been found to be not compatible with shallow cloning: thesofproject/linux#2556 Signed-off-by: Marc Herbert <marc.herbert@intel.com>
- Loading branch information
Showing
2 changed files
with
124 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
--- | ||
# SPDX-License-Identifier: BSD-3-Clause | ||
# Tools that can save round-trips to github and a lot of time: | ||
# | ||
# yamllint -f parsable this.yml | ||
# pip3 install ruamel.yaml.cmd | ||
# yaml merge-expand this.yml exp.yml && diff -w -u this.yml exp.yml | ||
# | ||
# github.com also has a powerful web editor that can be used without | ||
# committing. | ||
|
||
name: checkpatch | ||
|
||
# yamllint disable-line rule:truthy | ||
on: [pull_request] | ||
|
||
jobs: | ||
checkpatch: | ||
runs-on: ubuntu-20.04 | ||
env: | ||
PR_NUM: ${{github.event.number}} | ||
CHK_CMD: ./scripts/checkpatch.pl --codespell --codespellfile | ||
/usr/lib/python3/dist-packages/codespell_lib/data/dictionary.txt | ||
steps: | ||
# depth 2 so: | ||
# ^1. we can show the Subject of the current target branch tip | ||
# ^2. we reconnect/graft to the later fetch pull/1234/head, | ||
- uses: actions/checkout@v2 | ||
with: {fetch-depth: 2} | ||
|
||
- name: yamllint ourselves | ||
run: yamllint .github/workflows/shallow_checkpatch.yml | ||
|
||
- name: install codespell | ||
run: sudo apt-get -y install codespell && dpkg -L codespell | grep dict | ||
|
||
# See shallowness issue https://github.com/thesofproject/linux/issues/2556 | ||
- name: fetch PR commits | ||
run: | | ||
.github/workflows/shallowfetchPRcommits.sh \ | ||
${GITHUB_REPOSITORY} "$PR_NUM" | ||
# show what we got | ||
git --no-pager log --oneline --graph --decorate --max-count=50 | ||
- name: checkpatch | ||
run: while read -r sha ; do | ||
printf '\n -------------- \n\n'; | ||
${CHK_CMD} -g $sha; | ||
done < PR_SHAs.txt | ||
|
||
- name: checkpatch --strict | ||
run: while read -r sha ; do | ||
printf '\n -------------- \n\n'; | ||
${CHK_CMD} --strict -g $sha; | ||
done < PR_SHAs.txt |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
#!/bin/sh | ||
# SPDX-License-Identifier: BSD-3-Clause | ||
|
||
set -e | ||
|
||
# This script fetches Pull Request commits missing from a shallow clone | ||
# and creates a PR_SHAs.txt file. This script has a limit of 500 commits but the | ||
# github API used has a lower limit of 250 commits. | ||
|
||
# It does not rely on git merge-bases which basically don't work with | ||
# shallow clones: | ||
# https://github.com/thesofproject/linux/issues/2556 | ||
|
||
# Design goals: | ||
# | ||
# - Keep the code short and as simple as possible. No one is interested | ||
# in maintaining this sort of script. | ||
# | ||
# - Fast and accurate for small Pull Requests | ||
# | ||
# - For large Pull Requests _with merges_ the only objective is to | ||
# complete in a reasonable time; say less than 10 minutes. It's very | ||
# unlikely will look at 250 checkpatch results and time optimizations | ||
# should not make this script more complex. | ||
|
||
|
||
# Sample usage: | ||
# $0 thesoftproject/linux 2772 | ||
main() | ||
{ | ||
local gh_project="$1" | ||
local pr_number="$2" | ||
|
||
printf '%s: fetching PR %d for project %s\n' "$0" "$pr_number" "$gh_project" | ||
|
||
# As of March 2021, Github's documented limit is 250 commits | ||
# Let's have another cap a 500. | ||
# https://docs.github.com/en/rest/reference/pulls#list-commits-on-a-pull-request | ||
local pagelen PRlen=0 | ||
for i in 1 2 3 4 5; do | ||
curl -H 'Accept: application/vnd.github.v3+json' \ | ||
"https://api.github.com/repos/$gh_project/pulls/$pr_number/commits?per_page=100&page=$i" \ | ||
> commits_"$i".json | ||
pagelen=$(jq length < commits_$i.json) | ||
if [ "$pagelen" -eq 0 ]; then | ||
break | ||
fi | ||
PRlen=$((PRlen + pagelen)) | ||
done | ||
|
||
printf 'Found %d commits, SHA1 list is in PR_SHAs.txt\n' "$PRlen" | ||
|
||
# 'cut' removes double quotes | ||
cat commits_?.json | | ||
jq '.[] | .sha' | | ||
cut -b2-41 > PR_SHAs.txt | ||
|
||
# PRlen+1 gets us the merge base for simple, linear histories. For | ||
# pull requests with merges, depth=PRLEN goes already much further | ||
# than needed and +1 makes little difference. It's not clear when | ||
# and for what sort of PRs git fetching individual commits would be | ||
# faster so keep a single and simple fetch for now. | ||
|
||
set -x # this command may take a while so show it | ||
git fetch --depth "$((PRlen+1))" "http://github.com/$gh_project" "pull/$pr_number/head" | ||
|
||
} | ||
|
||
main "$@" |