Skip to content

Commit

Permalink
DAOS-15677 cq: add copyright GHA
Browse files Browse the repository at this point in the history
Add GHA to check for copyright update.
Move core logic from update-copyright githook into
check_update_copyright.sh so the logic is shared between the githook and
GHA.

Skip-build: true

Required-githooks: true

Signed-off-by: Dalton Bohning <[email protected]>
  • Loading branch information
daltonbohning committed Dec 3, 2024
1 parent 9a4bec3 commit 757a388
Show file tree
Hide file tree
Showing 6 changed files with 140 additions and 81 deletions.
12 changes: 12 additions & 0 deletions .github/workflows/linting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,18 @@ jobs:
- name: Run check
run: yamllint --format github .

copyright:
name: Copyright check
runs-on: ubuntu-24.04
steps:
- name: Check out source repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 2
- name: Run check
run: ./utils/cq/check_update_copyright.sh HEAD^1 gha

linting-summary:
name: Linting Summary
runs-on: ubuntu-22.04
Expand Down
110 changes: 110 additions & 0 deletions utils/cq/check_update_copyright.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#!/bin/bash
#
# Copyright 2024 Intel Corporation.
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
# Check or update copyright date in modified files.
# Usage: check_update_copyright.sh <git_target> <githook|gha>
# mode "githook" will update copyright dates in place.
# mode "gha" will just print a warning in a GHA-compatible format.

set -e

git_target="$1"
mode="$2"
case "$mode" in
"githook" | "gha")
;;
*)
echo "Usage: check_update_copyright.sh <githook|gha>"
exit 1
esac

# Navigate to repo root
PARENT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
cd "$PARENT_DIR"/../../


regex='(^[[:blank:]]*[\*/]*.*)((Copyright[[:blank:]]*)([0-9]{4})(-([0-9]{4}))?)([[:blank:]]*(Intel.*$))'
year=$(date +%Y)
errors=0
targets=(
# Entries with wildcard. These must be first and start with '*' or
# older versions of git will return files that were not changed.
'*.c'
'*.h'
'*.go'
'*.py'
'*.proto'
'*.java'
'*.yml'
'*.yaml'
'*.sh'
'*.bash'
'*Dockerfile*'
'*README*'
'*LICENSE*'
'*NOTICE*'
'*.txt'
'*.md'
# Entries without a wildcard
'Makefile'
'Jenkinsfile'
'SConscript'
'SConstruct'
'copyright'
'.env'
)

if [ -z "$files" ]; then
files=$(git diff "$git_target" --cached --diff-filter=AM --name-only -- "${targets[@]}")
else
echo " Checking against custom files"
fi

os=$(uname -s)

. utils/githooks/git-version.sh

for file in $files; do
echo "DEBUG: Checking file $file"
if [[ "$file" == *vendor* ]] || [[ "$file" == *pb.go ]] ||
[[ "$file" == *_string.go ]] || [[ "$file" == *pb-c* ]] ||
{ [ "$git_vercode" -ge 2030000 ] &&
[ "$(git diff --cached -I Copyright "$file")" = '' ]; }; then
continue
fi
read -r y1 y2 <<< "$(sed -nre "s/^.*$regex.*$/\4 \6/p" "$file")"
if [[ -z $y1 ]] ; then
# Print warning but don't error on non-existent copyright
echo " Copyright Information not found in: $file"
elif [[ $y1 -ne $year && $year -ne $y2 ]] ; then
if [[ "$mode" == "githook" ]]; then
# Update copyright in place
if ! git reset "$file"; then
echo " Unable to un-stage $file"
errors=$((errors + 1))
fi
if [[ "$os" == 'Linux' ]]; then
sed -i -re "s/$regex/\1Copyright $y1-$year \8/" "$file"
else
sed -i '' -re "s/$regex/\1Copyright $y1-$year \8/" "$file"
fi

if ! git add "$file"; then
echo " Unable to re-stage $file"
errors=$((errors + 1))
fi
elif [[ "$mode" == "gha" ]]; then
# Print error but do not update
echo "::error file=$file::Copyright out of date"
errors=$((errors + 1))
fi
fi
done

if [[ $errors -ne 0 ]]; then
echo " $errors errors while checking/fixing copyrights."
exit 1
fi
81 changes: 0 additions & 81 deletions utils/githooks/pre-commit.d/10-update-copyright

This file was deleted.

17 changes: 17 additions & 0 deletions utils/githooks/pre-commit.d/10-update-copyright.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash
#
# Copyright 2022-2024 Intel Corporation.
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
# A git hook to validate and correct the copyright date in source files.

_print_githook_header "Copyright"
if [ -e .git/MERGE_HEAD ]; then
echo "Merge commit. Skipping"
exit 0
fi

echo "Updating copyright headers"

utils/cq/check_update_copyright.sh "$TARGET" githook
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ CURL_VERBOSE=${CURL_VERBOSE:-""}
CURL_PROXY="${CURL_PROXY:+-x }${CURL_PROXY:-}"
CURL_OPTS="$CURL_PROXY $CURL_VERBOSE -s"
URL="https://$HOST/pipeline-model-converter/validate"
# shellcheck disable=SC2086
if ! output=$(curl $CURL_OPTS -s -X POST -F "jenkinsfile=<${1:-Jenkinsfile}" "$URL"); then
echo " Failed to access $URL. Skipping"
exit 0
Expand Down
File renamed without changes.

0 comments on commit 757a388

Please sign in to comment.