29
29
30
30
set -eu
31
31
32
- # repodir
33
- function all_modules() {
34
- local repodir=" $1 "
35
- (
36
- set -eu
37
- cd " $repodir "
38
- swift package dump-package | jq ' .products |
39
- map(select(.type | has("library") )) |
40
- map(.name) | .[]' | tr -d ' "'
41
- )
42
- }
43
-
44
- # repodir tag output
45
- function build_and_do() {
46
- local repodir=$1
47
- local tag=$2
48
- local output=$3
49
-
50
- (
51
- cd " $repodir "
52
- git checkout -q " $tag "
53
- swift build
54
- while read -r module; do
55
- swift api-digester -sdk " $sdk " -dump-sdk -module " $module " \
56
- -o " $output /$module .json" -I " $repodir /.build/debug"
57
- done < <( all_modules " $repodir " )
58
- )
59
- }
60
-
61
32
function usage() {
62
33
echo >&2 " Usage: $0 REPO-GITHUB-URL NEW-VERSION OLD-VERSIONS..."
63
34
echo >&2
64
- echo >&2 " This script requires a Swift 5.1 + toolchain."
35
+ echo >&2 " This script requires a Swift 5.2 + toolchain."
65
36
echo >&2
66
37
echo >&2 " Examples:"
67
38
echo >&2
68
- echo >&2 " Check between master and tag 2.1.1 of swift-nio:"
69
- echo >&2 " $0 https://github.com/apple/swift-nio master 2.1.1"
39
+ echo >&2 " Check between main and tag 2.1.1 of swift-nio:"
40
+ echo >&2 " $0 https://github.com/apple/swift-nio main 2.1.1"
70
41
echo >&2
71
42
echo >&2 " Check between HEAD and commit 64cf63d7 using the provided toolchain:"
72
43
echo >&2 " xcrun --toolchain org.swift.5120190702a $0 ../some-local-repo HEAD 64cf63d7"
@@ -77,12 +48,6 @@ if [[ $# -lt 3 ]]; then
77
48
exit 1
78
49
fi
79
50
80
- sdk=/
81
- if [[ " $( uname -s) " == Darwin ]]; then
82
- sdk=$( xcrun --show-sdk-path)
83
- fi
84
-
85
- hash jq 2> /dev/null || { echo >&2 " ERROR: jq must be installed" ; exit 1; }
86
51
tmpdir=$( mktemp -d /tmp/.check-api_XXXXXX)
87
52
repo_url=$1
88
53
new_tag=$2
@@ -91,46 +56,13 @@ shift 2
91
56
repodir=" $tmpdir /repo"
92
57
git clone " $repo_url " " $repodir "
93
58
git -C " $repodir " fetch -q origin ' +refs/pull/*:refs/remotes/origin/pr/*'
94
- errors=0
59
+ cd " $repodir "
60
+ git checkout -q " $new_tag "
95
61
96
62
for old_tag in " $@ " ; do
97
- mkdir " $tmpdir /api-old"
98
- mkdir " $tmpdir /api-new"
99
-
100
63
echo " Checking public API breakages from $old_tag to $new_tag "
101
64
102
- build_and_do " $repodir " " $new_tag " " $tmpdir /api-new/"
103
- build_and_do " $repodir " " $old_tag " " $tmpdir /api-old/"
104
-
105
- for f in " $tmpdir /api-new" /* ; do
106
- f=$( basename " $f " )
107
- report=" $tmpdir /$f .report"
108
- if [[ ! -f " $tmpdir /api-old/$f " ]]; then
109
- echo " NOTICE: NEW MODULE $f "
110
- continue
111
- fi
112
-
113
- echo -n " Checking $f ... "
114
- swift api-digester -sdk " $sdk " -diagnose-sdk \
115
- --input-paths " $tmpdir /api-old/$f " -input-paths " $tmpdir /api-new/$f " 2>&1 \
116
- > " $report " 2>&1
117
-
118
- if ! shasum " $report " | grep -q afd2a1b542b33273920d65821deddc653063c700; then
119
- echo ERROR
120
- echo >&2 " =============================="
121
- echo >&2 " ERROR: public API change in $f "
122
- echo >&2 " =============================="
123
- cat >&2 " $report "
124
- errors=$(( errors + 1 ))
125
- else
126
- echo OK
127
- fi
128
- done
129
- rm -rf " $tmpdir /api-new" " $tmpdir /api-old"
65
+ swift package diagnose-api-breaking-changes " $old_tag "
130
66
done
131
67
132
- if [[ " $errors " == 0 ]]; then
133
- echo " OK, all seems good"
134
- fi
135
68
echo done
136
- exit " $errors "
0 commit comments