diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index bc15773a6a..4625d668d2 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -76,3 +76,15 @@ jobs: grep -E "error:|warning:|^ parameter" doxygen_errors.txt | sed ':a;N;$!ba;s/\n/%0A/g' | sed 's/^/::error ::DOXYGEN ERRORS: %0A/' exit 1 fi + + copyright_check: + # Check for Google copyright in each file. + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + submodules: false + - name: Run check_copyright.sh + run: | + set -e + bash scripts/gha/check_copyright.sh -g diff --git a/scripts/gha/check_copyright.sh b/scripts/gha/check_copyright.sh new file mode 100755 index 0000000000..ec15faee18 --- /dev/null +++ b/scripts/gha/check_copyright.sh @@ -0,0 +1,65 @@ +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +usage(){ + echo "Usage: $0 [options] + options: + -g enable github log format" +} + +github_log=0 +IFS=',' # split options on ',' characters +while getopts "hg" opt; do + case $opt in + h) + usage + exit 0 + ;; + g) + github_log=1 + ;; + *) + echo "unknown parameter" + exit 2 + ;; + esac +done + + +# Check source files for copyright notices + +options=( + -E # Use extended regexps + -I # Exclude binary files + -L # Show files that don't have a match + 'Copyright.*[0-9]{4}.*Google' +) + +result=$(git grep "${options[@]}" -- \ + '*.'{c,cc,cmake,h,js,m,mm,py,rb,sh,swift} \ + CMakeLists.txt '**/CMakeLists.txt' \ + ':(exclude)**/third_party/**' \ + ':(exclude)**/external/**') + +if [[ $result ]]; then + if [[ $github_log -eq 1 ]]; then + echo -n "::error ::Missing copyright notices in the following files:%0A" + # Print all files with %0A instead of newline. + echo "$result" | sed ':a;N;$!ba;s/\n/%0A/g' + else + echo "$result" + echo "ERROR: Missing copyright notices in the files above. Please fix." + fi + exit 1 +fi