1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
#!/bin/bash
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) 2021-2024 Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See https://swift.org/LICENSE.txt for license information
# See https://swift.org/CONTRIBUTORS.txt for Swift project authors
#
# This script performs code checks such as verifying that source files
# use the correct license header. Its contents are largely copied from
# https://github.com/apple/swift-nio/blob/main/scripts/soundness.sh
set -eu
here="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
function replace_acceptable_years() {
# this needs to replace all acceptable forms with 'YEARS'
sed -e 's/20[12][78901234]-20[12][8901234]/YEARS/' -e 's/20[12][8901234]/YEARS/'
}
printf "=> Checking for unacceptable language⦠"
# This greps for unacceptable terminology. The square bracket[s] are so that
# "git grep" doesn't find the lines that greps :).
unacceptable_terms=(
-e blacklis[t]
-e whitelis[t]
-e slav[e]
)
# Ignore the NonInclusiveLanguageChecker source and tests
if git grep --color=never -i "${unacceptable_terms[@]}" -- :/**/^NonInclusiveLanguageChecker*.swift > /dev/null; then
printf "\033[0;31mUnacceptable language found.\033[0m\n"
git grep -i "${unacceptable_terms[@]}"
exit 1
fi
printf "\033[0;32mokay.\033[0m\n"
printf "=> Checking license headers⦠"
tmp=$(mktemp /tmp/.docc-check-source_XXXXXX)
for language in swift-or-c bash md-or-tutorial html docker; do
declare -a matching_files
declare -a exceptions
declare -a reader
expections=( )
matching_files=( -name '*' )
reader=head
case "$language" in
swift-or-c)
exceptions=( -name Package.swift -o -path "./Tests/SwiftDocCTests/Test Bundles/*" -o -path "./Tests/SwiftDocCUtilitiesTests/Test Bundles/*")
matching_files=( -name '*.swift' -o -name '*.c' -o -name '*.h' )
cat > "$tmp" <<"EOF"
/*
This source file is part of the Swift.org open source project
Copyright (c) YEARS Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See https://swift.org/LICENSE.txt for license information
See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/
EOF
;;
bash)
matching_files=( -name '*.sh' )
cat > "$tmp" <<"EOF"
#!/bin/bash
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) YEARS Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See https://swift.org/LICENSE.txt for license information
# See https://swift.org/CONTRIBUTORS.txt for Swift project authors
#
EOF
;;
md-or-tutorial)
exceptions=( -path "./.github/*.md")
matching_files=( -name '*.md' -o -name '*.tutorial' )
reader=tail
cat > "$tmp" <<"EOF"
<!-- Copyright (c) YEARS Apple Inc and the Swift Project authors. All Rights Reserved. -->
EOF
;;
html)
exceptions=( -path "*/.docc-build/*" )
matching_files=( -name '*.html' )
cat > "$tmp" <<"EOF"
<!--
This source file is part of the Swift.org open source project
Copyright (c) YEARS Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See https://swift.org/LICENSE.txt for license information
See https://swift.org/CONTRIBUTORS.txt for Swift project authors
-->
EOF
;;
docker)
matching_files=( -name 'Dockerfile' )
cat > "$tmp" <<"EOF"
# This source file is part of the Swift.org open source project
#
# Copyright (c) YEARS Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See https://swift.org/LICENSE.txt for license information
# See https://swift.org/CONTRIBUTORS.txt for Swift project authors
EOF
;;
*)
echo >&2 "ERROR: unknown language '$language'"
;;
esac
# Determine which SHA command to use; not all platforms support shasum, but they
# likely either support shasum or sha256sum.
SHA_CMD=""
if [ -x "$(command -v shasum)" ]; then
SHA_CMD="shasum"
elif [ -x "$(command -v sha256sum)" ]; then
SHA_CMD="sha256sum"
else
echo >&2 "No sha command found; install shasum or sha256sum or submit a PR that supports another platform"
fi
expected_lines=$(cat "$tmp" | wc -l)
expected_sha=$(cat "$tmp" | "$SHA_CMD")
(
cd "$here/.."
find . \
\( \! -path './.build/*' -a \
\! -name '.' -a \
\( "${matching_files[@]}" \) -a \
\( \! \( "${exceptions[@]}" \) \) \) | while read line; do
if [[ "$(cat "$line" | replace_acceptable_years | $reader -n $expected_lines | $SHA_CMD)" != "$expected_sha" ]]; then
printf "\033[0;31mmissing headers in file '$line'!\033[0m\n"
diff -u <(cat "$line" | replace_acceptable_years | $reader -n $expected_lines) "$tmp"
exit 1
fi
done
)
done
printf "\033[0;32mokay.\033[0m\n"
rm "$tmp"
|