Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DAOS-15677 cq: add copyright GHA #15552

Merged
merged 7 commits into from
Dec 11, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .github/workflows/linting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,20 @@ jobs:
- name: Run check
run: yamllint --format github .

copyright:
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Plan to make the GHA required after we're sure it's stable

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: 0
- name: Run check
run: |
./utils/cq/check_update_copyright.sh \
$(git merge-base HEAD ${{ github.event.pull_request.base.sha }}) gha

linting-summary:
name: Linting Summary
runs-on: ubuntu-22.04
Expand Down
2 changes: 2 additions & 0 deletions src/client/dfuse/pil4dfs/hook_int.h
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
/**
* (C) Copyright 2018-2021 Lei Huang.
* (C) Copyright 2023 Intel Corporation.

Check failure on line 3 in src/client/dfuse/pil4dfs/hook_int.h

View workflow job for this annotation

GitHub Actions / Copyright check

Copyright out of date
*
* SPDX-License-Identifier: BSD-2-Clause-Patent
*/


/* dummy change */
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Notice if you view this file in the Files changed tab, the annotation for the copyright is inline

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good.

#ifndef __HOOK_INT
#define __HOOK_INT

Expand Down
113 changes: 113 additions & 0 deletions utils/cq/check_update_copyright.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#!/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"
if [[ "$file" == *vendor* ]] || [[ "$file" == *pb.go ]] ||
[[ "$file" == *_string.go ]] || [[ "$file" == *pb-c* ]] ||
{ [ "$mode" == "githook" ] &&
[ "$git_vercode" -ge 2030000 ] &&
[ "$(git diff --cached -I Copyright "$file")" = '' ]; }; then
echo "DEBUG: Skipping $file"
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"
Comment on lines +79 to +81
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's possible to propagate warnings to GHA but I'm not sure how many files would be flagged here

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
lineno="$(grep -nE "$regex" "$file" | cut -f1 -d:)"
echo "::error file=$file,line=$lineno::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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SC2086 is usually pretty easy to resolve:

Suggested change
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
CURL_OPTS=($CURL_PROXY $CURL_VERBOSE -s)
URL="https://$HOST/pipeline-model-converter/validate"
if ! output=$(curl "${CURL_OPTS[@]}" -s -X POST -F "jenkinsfile=<${1:-Jenkinsfile}" "$URL"); then

Clearly I should have done that in the first place.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pushed with more quotes

echo " Failed to access $URL. Skipping"
exit 0
Expand Down
Loading