9063e907a7
The checkout might be too shallow so the before commit isn't available. The logic was already written to take this into account (it then generates an empty 'changed.txt' which falls back to testing everything), but the error code would still force terminate the job. Hopefully we can find a way to make the logic work for merge events too in the future, but for now this is a quick fix.
106 lines
4.2 KiB
YAML
106 lines
4.2 KiB
YAML
name: 📊 Static Checks
|
|
on:
|
|
workflow_call:
|
|
|
|
concurrency:
|
|
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-static
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
static-checks:
|
|
name: Code style, file formatting, and docs
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 2
|
|
|
|
- name: Install APT dependencies
|
|
uses: awalsh128/cache-apt-pkgs-action@latest
|
|
with:
|
|
packages: dos2unix libxml2-utils moreutils
|
|
|
|
- name: Install Python dependencies and general setup
|
|
run: |
|
|
pip3 install black==22.3.0 pytest==7.1.2 mypy==0.971
|
|
git config diff.wsErrorHighlight all
|
|
|
|
- name: Get changed files
|
|
id: changed-files
|
|
run: |
|
|
if [ "${{ github.event_name }}" == "pull_request" ]; then
|
|
files=$(git diff-tree --no-commit-id --name-only -r ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }} 2> /dev/null || true)
|
|
elif [ "${{ github.event_name }}" == "push" -a "${{ github.event.forced }}" == "false" -a "${{ github.event.created }}" == "false" ]; then
|
|
files=$(git diff-tree --no-commit-id --name-only -r ${{ github.event.before }}..${{ github.event.after }} 2> /dev/null || true)
|
|
fi
|
|
echo "$files" >> changed.txt
|
|
cat changed.txt
|
|
|
|
- name: File formatting checks (file_format.sh)
|
|
run: |
|
|
bash ./misc/scripts/file_format.sh changed.txt
|
|
|
|
- name: Header guards formatting checks (header_guards.sh)
|
|
run: |
|
|
bash ./misc/scripts/header_guards.sh changed.txt
|
|
|
|
- name: Python style checks via black (black_format.sh)
|
|
run: |
|
|
if grep -qE '*\.py|SConstruct|SCsub' changed.txt || [ ! -s changed.txt ]; then
|
|
bash ./misc/scripts/black_format.sh
|
|
else
|
|
echo "Skipping Python formatting as no Python files were changed."
|
|
fi
|
|
|
|
- name: Python scripts static analysis (mypy_check.sh)
|
|
run: |
|
|
if grep -qE '*\.py|SConstruct|SCsub' changed.txt || [ ! -s changed.txt ]; then
|
|
bash ./misc/scripts/mypy_check.sh
|
|
else
|
|
echo "Skipping Python static analysis as no Python files were changed."
|
|
fi
|
|
|
|
- name: Python builders checks via pytest (pytest_builders.sh)
|
|
run: |
|
|
bash ./misc/scripts/pytest_builders.sh
|
|
|
|
- name: JavaScript style and documentation checks via ESLint and JSDoc
|
|
run: |
|
|
if grep -q "platform/web" changed.txt || [ ! -s changed.txt ]; then
|
|
cd platform/web
|
|
npm ci
|
|
npm run lint
|
|
npm run docs -- -d dry-run
|
|
else
|
|
echo "Skipping JavaScript formatting as no Web/JS files were changed."
|
|
fi
|
|
|
|
- name: Class reference schema checks
|
|
run: |
|
|
xmllint --noout --schema doc/class.xsd doc/classes/*.xml modules/*/doc_classes/*.xml platform/*/doc_classes/*.xml
|
|
|
|
- name: Documentation checks
|
|
run: |
|
|
doc/tools/make_rst.py --dry-run --color doc/classes modules platforms
|
|
|
|
- name: Style checks via clang-format (clang_format.sh)
|
|
run: |
|
|
clang-format --version
|
|
bash ./misc/scripts/clang_format.sh changed.txt
|
|
|
|
- name: Style checks via dotnet format (dotnet_format.sh)
|
|
run: |
|
|
if grep -q "modules/mono" changed.txt || [ ! -s changed.txt ]; then
|
|
bash ./misc/scripts/dotnet_format.sh
|
|
else
|
|
echo "Skipping dotnet format as no C# files were changed."
|
|
fi
|
|
|
|
- name: Spell checks via codespell
|
|
uses: codespell-project/actions-codespell@v1
|
|
with:
|
|
skip: ./.*,./**/.*,./bin,./thirdparty,*.desktop,*.gen.*,*.po,*.pot,*.rc,./AUTHORS.md,./COPYRIGHT.txt,./DONORS.md,./core/input/gamecontrollerdb.txt,./core/string/locales.h,./editor/project_converter_3_to_4.cpp,./misc/scripts/codespell.sh,./platform/android/java/lib/src/com,./platform/web/node_modules,./platform/web/package-lock.json
|
|
check_hidden: false
|
|
ignore_words_list: curvelinear,doubleclick,expct,findn,gird,hel,inout,lod,nd,numer,ot,te
|
|
only_warn: true
|