diff --git a/.github/check_license.sh b/.github/check_license.sh new file mode 100755 index 00000000..27e7bea8 --- /dev/null +++ b/.github/check_license.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +echo +echo "===========================" +echo "Check SPDX identifier" +echo "===========================" +echo + +ERROR_FILES="" +FILES_TO_CHECK=`find . \ + -size +0 -type f \( -name '*.sh' -o -name '*.py' -o -name 'Makefile' -o -name '*.tcl' \) \ + \( -not -path "*/.*/*" -not -path "*/third_party/*" -not -path "*/database/*" -not -path "*/env/*" \)` + +for file in $FILES_TO_CHECK; do + echo "Checking $file" + grep -q "SPDX-License-Identifier" $file || ERROR_FILES="$ERROR_FILES $file" +done + +if [ ! -z "$ERROR_FILES" ]; then + for file in $ERROR_FILES; do + echo "ERROR: $file does not have license information." + done + return 1 +fi + +echo +echo "===========================" +echo "Check third party LICENSE" +echo "===========================" +echo + +function check_if_submodule { + for submodule in `git submodule --quiet foreach 'echo $sm_path'`; do + if [ "$1" == "$submodule" ]; then + return 1 + fi + done +} + +THIRD_PARTY_DIRS="" +if [[ -e third_party ]]; then + THIRD_PARTY_DIRS=`ls third_party --ignore=reformat.tcl --ignore cctz --ignore gflags --ignore yosys ` +fi +ERROR_NO_LICENSE="" + +for dir in $THIRD_PARTY_DIRS; do + # Checks if we are not in a submodule + if check_if_submodule $dir; then + echo "Checking third_party/$dir" + [ -f third_party/$dir/LICENSE ] || ERROR_NO_LICENSE="$ERROR_NO_LICENSE $dir" + fi +done + +if [ ! -z "$ERROR_NO_LICENSE" ]; then + for dir in $ERROR_NO_LICENSE; do + echo "ERROR: $dir does not have the LICENSE file." + done + return 1 +fi diff --git a/.github/check_python_scripts.sh b/.github/check_python_scripts.sh new file mode 100755 index 00000000..24a66231 --- /dev/null +++ b/.github/check_python_scripts.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +echo +echo "===================================" +echo "Check python utf coding and shebang" +echo "===================================" +echo + +ERROR_FILES_SHEBANG="" +ERROR_FILES_UTF_CODING="" +FILES_TO_CHECK=`find . \ + -size +0 -type f \( -name '*.py' \) \ + \( -not -path "*/.*/*" -not -path "*/third_party/*" -not -path "*/env/*" \)` + +for file in $FILES_TO_CHECK; do + echo "Checking $file" + if [[ -x $file ]]; then + grep -q "\#\!/usr/bin/env python3" $file || ERROR_FILES_SHEBANG="$ERROR_FILES_SHEBANG $file" + fi + grep -q "\#.*coding: utf-8" $file || ERROR_FILES_UTF_CODING="$ERROR_FILES_UTF_CODING $file" +done + +if [ ! -z "$ERROR_FILES_SHEBANG" ]; then + for file in $ERROR_FILES_SHEBANG; do + echo "ERROR: $file does not have the python3 shebang." + done + return 1 +fi + +if [ ! -z "$ERROR_FILES_UTF_CODING" ]; then + for file in $ERROR_FILES_UTF_CODING; do + echo "ERROR: $file does not have the utf encoding set." + done + return 1 +fi + +echo diff --git a/.travis.yml b/.travis.yml index 75ba367a..9a5d5654 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,3 +32,8 @@ jobs: script: - make format - test $(git status --porcelain | wc -l) -eq 0 || { git diff; false; } + + - name: "License Checks" + script: + - source .github/check_license.sh + - source .github/check_python_scripts.sh