-
Notifications
You must be signed in to change notification settings - Fork 55
/
Copy pathcheck-source
executable file
·121 lines (110 loc) · 3.86 KB
/
check-source
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
#!/bin/bash
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) 2021 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 license headers… "
tmp=$(mktemp /tmp/.docc-render-check-source_XXXXXX)
for language in js-or-scss dist-js-or-css markup markdown; do
declare -a matching_files
declare -a exceptions
declare -a reader
exceptions=( -name '' )
matching_files=( -name '*' )
reader=head
case "$language" in
js-or-scss)
exceptions=( -path "./dist/*" -o -path "./docs/*" )
matching_files=( -name '*.js' -o -name '*.scss' )
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
;;
dist-js-or-css)
matching_files=( -path './dist/css/*' -o -path './dist/js/*' )
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
;;
markup)
matching_files=( -name '*.vue' -o -name '*.svg' )
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
;;
markdown)
exceptions=( -path "./.github/*.md")
matching_files=( -name '*.md' )
reader=tail
cat > "$tmp" <<"EOF"
<!-- Copyright (c) YEARS Apple Inc and the Swift Project authors. All Rights Reserved. -->
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 './node_modules/*' -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"