diff --git a/.github/workflows/check-sourcecode.yml b/.github/workflows/check-sourcecode.yml new file mode 100644 index 00000000..af24346d --- /dev/null +++ b/.github/workflows/check-sourcecode.yml @@ -0,0 +1,24 @@ +name: "Check Sourcecode" + +on: + push: + branches-ignore: + - 'onlinedocs' + pull_request: + branches-ignore: + - 'onlinedocs' + +jobs: + + check-sourcecode: + name: "Check Sourcecode" + runs-on: ubuntu-latest + + steps: + + - uses: actions/checkout@v4 + + # - name: Install prerequisites + + - name: "Check the sourcecode" + run: ./tools/check-sourcecode diff --git a/tools/check-sourcecode b/tools/check-sourcecode new file mode 100755 index 00000000..1ae5a8fc --- /dev/null +++ b/tools/check-sourcecode @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +# check-sourcecode -- check the avrdude source code for zombie mistakes +# Copyright (C) 2024 Hans Ulrich Niedermann +# SPDX-License-Identifier: GPL-2.0-or-later + + +set -e + +prog="$(basename "$0")" +cd "$(dirname "$0")" +cd .. +test -s README.md +test -s COPYING +test -s build.sh +test -d .git/refs/heads + + +declare -a checks=() +fail=0 +succ=0 + + +checks+=(check_ac_cfg) +check_ac_cfg() { + if git grep -E '#include\s+"ac_cfg\.h"' + then + echo "Error: Found #include \"ac_cfg.h\" with double quotes \"\". Should be <>." + echo " See https://github.com/avrdudes/avrdude/issues/1706 for details." + return 1 + fi +} + + +for check in "${checks[@]}" +do + if "$check"; then + succ=$(( "$succ" + 1 )) + status="SUCC" + else + fail=$(( "$fail" + 1 )) + status="FAIL" + fi + echo "$status $check" +done +total=$(( "$succ" + "$fail" )) + + +echo "$prog: Summary: $fail checks failed, $succ checks succeeded. $total checks in total." +if [[ "$fail" -gt 0 ]]; then + exit 1 +else + exit 0 +fi