4
4
repository=' swiftwasm/swift'
5
5
workflow_name=' main.yml'
6
6
branch=$1
7
+ channel=$2
8
+ swift_source_dir=" $( cd " $( dirname $0 ) /../.." && pwd) "
9
+
10
+ DARWIN_TOOLCHAIN_APPLICATION_CERT=${DARWIN_TOOLCHAIN_APPLICATION_CERT:? " Please set DARWIN_TOOLCHAIN_APPLICATION_CERT" }
11
+ DARWIN_TOOLCHAIN_INSTALLER_CERT=${DARWIN_TOOLCHAIN_INSTALLER_CERT:? " Please set DARWIN_TOOLCHAIN_APPLICATION_CERT" }
12
+ DARWIN_TOOLCHAIN_NOTARIZE_EMAIL=${DARWIN_TOOLCHAIN_NOTARIZE_EMAIL:? " Please set DARWIN_TOOLCHAIN_NOTARIZE_EMAIL" }
7
13
8
14
gh_api=https://api.github.com
9
15
@@ -94,6 +100,72 @@ upload_tarball() {
94
100
" https://uploads.github.com/repos/$repository /releases/$release_id /assets?name=$filename "
95
101
}
96
102
103
+ sign_toolchain () {
104
+ local darwin_toolchain=$1
105
+ local codesign_bin=" /usr/bin/codesign"
106
+
107
+ codesign_args=(--force --verify --verbose --deep --options runtime --timestamp --sign " ${DARWIN_TOOLCHAIN_APPLICATION_CERT} " )
108
+ for binary in $( find " ${darwin_toolchain} " -type f) ; do
109
+ if file " $binary " | grep -q " Mach-O" ; then
110
+ ${codesign_bin} " ${codesign_args[@]} " " ${binary} "
111
+ fi
112
+ done
113
+
114
+ ${codesign_bin} " ${codesign_args[@]} " " ${darwin_toolchain} /usr/"
115
+ }
116
+
117
+ create_installer () {
118
+ local darwin_toolchain=$1
119
+ local darwin_toolchain_name=$( basename " $darwin_toolchain " )
120
+ local darwin_toolchain_installer_package=" $darwin_toolchain .pkg"
121
+ local darwin_toolchain_install_location=" /Library/Developer/Toolchains/${darwin_toolchain_name} .xctoolchain"
122
+ local darwin_toolchain_version=$( /usr/libexec/PlistBuddy -c " Print Version string" " $darwin_toolchain " /usr/Info.plist)
123
+ local darwin_toolchain_bundle_identifier=$( /usr/libexec/PlistBuddy -c " Print CFBundleIdentifier string" " $darwin_toolchain " /usr/Info.plist)
124
+
125
+ " ${swift_source_dir} /utils/toolchain-installer" " ${darwin_toolchain} /" " ${darwin_toolchain_bundle_identifier} " \
126
+ " ${DARWIN_TOOLCHAIN_INSTALLER_CERT} " " ${darwin_toolchain_installer_package} " " ${darwin_toolchain_install_location} " \
127
+ " ${darwin_toolchain_version} " " ${swift_source_dir} /utils/darwin-installer-scripts"
128
+
129
+ # Notarize the toolchain installer
130
+ local request_output=$( xcrun altool --notarize-app --type osx \
131
+ --file " ${darwin_toolchain_installer_package} " \
132
+ --primary-bundle-id " ${darwin_toolchain_bundle_identifier} " \
133
+ -u " ${DARWIN_TOOLCHAIN_NOTARIZE_EMAIL} " \
134
+ -p " @env:DARWIN_TOOLCHAIN_NOTARIZE_PASSWORD" )
135
+ local request_uuid=$( echo " $request_output " | grep " RequestUUID = " | awk ' {print $3}' )
136
+
137
+ local request_status=$( xcrun altool --notarization-info " $request_uuid " \
138
+ -u " ${DARWIN_TOOLCHAIN_NOTARIZE_EMAIL} " \
139
+ -p " @env:DARWIN_TOOLCHAIN_NOTARIZE_PASSWORD" )
140
+ # Wait until finished
141
+ while echo " $request_status " | grep -q " Status: in progress" ; do
142
+ sleep 60
143
+ request_status=$( xcrun altool --notarization-info " $request_uuid " \
144
+ -u " ${DARWIN_TOOLCHAIN_NOTARIZE_EMAIL} " \
145
+ -p " @env:DARWIN_TOOLCHAIN_NOTARIZE_PASSWORD" )
146
+ done
147
+
148
+ if echo " $request_status " | grep -q " Status: success" ; then
149
+ xcrun stapler staple " ${darwin_toolchain_installer_package} "
150
+ else
151
+ echo " Failed to notarize the toolchain $darwin_toolchain_installer_package : $request_status "
152
+ fi
153
+ }
154
+
155
+ package_darwin_toolchain () {
156
+ local toolchain_tar=$1
157
+ local destination=$2
158
+ local toolchain_name=$( basename $( tar tfz " $toolchain_tar " | head -n1) )
159
+ local workdir=$( mktemp -d)
160
+
161
+ tar xfz " $toolchain_tar " -C " $workdir "
162
+ sign_toolchain " $workdir /$toolchain_name "
163
+ create_installer " $workdir /$toolchain_name "
164
+
165
+ mv " $workdir /$toolchain_name .pkg" " $destination "
166
+ rm -rf " $workdir "
167
+ }
168
+
97
169
tmp_dir=$( mktemp -d)
98
170
pushd $tmp_dir
99
171
download_artifact ubuntu18.04-installable
@@ -103,22 +175,23 @@ unzip ubuntu18.04-installable.zip
103
175
unzip ubuntu20.04-installable.zip
104
176
unzip macos-installable.zip
105
177
106
- toolchain_name=$( basename $( tar tfz swift-wasm-$2 -SNAPSHOT-ubuntu18.04-x86_64.tar.gz | head -n1) )
178
+ toolchain_name=$( basename $( tar tfz swift-wasm-$channel -SNAPSHOT-ubuntu18.04-x86_64.tar.gz | head -n1) )
107
179
108
180
if is_released $toolchain_name ; then
109
181
echo " Latest toolchain $toolchain_name has been already released"
110
182
exit 0
111
183
fi
112
184
113
- mv swift-wasm-$2 -SNAPSHOT-ubuntu18.04-x86_64.tar.gz " $toolchain_name -ubuntu18.04-x86_64.tar.gz"
114
- mv swift-wasm-$2 -SNAPSHOT-ubuntu20.04-x86_64.tar.gz " $toolchain_name -ubuntu20.04-x86_64.tar.gz"
115
- mv swift-wasm-$2 -SNAPSHOT-macos-x86_64.tar.gz " $toolchain_name -macos-x86_64.tar.gz"
185
+
186
+ mv swift-wasm-$channel -SNAPSHOT-ubuntu18.04-x86_64.tar.gz " $toolchain_name -ubuntu18.04-x86_64.tar.gz"
187
+ mv swift-wasm-$channel -SNAPSHOT-ubuntu20.04-x86_64.tar.gz " $toolchain_name -ubuntu20.04-x86_64.tar.gz"
188
+ package_darwin_toolchain " swift-wasm-$channel -SNAPSHOT-macos-x86_64.tar.gz" " $toolchain_name -macos-x86_64.pkg"
116
189
117
190
create_tag $toolchain_name $head_sha
118
191
release_id=$( create_release $toolchain_name $toolchain_name $head_sha )
119
192
120
193
upload_tarball $release_id " $toolchain_name -ubuntu18.04-x86_64.tar.gz"
121
194
upload_tarball $release_id " $toolchain_name -ubuntu20.04-x86_64.tar.gz"
122
- upload_tarball $release_id " $toolchain_name -macos-x86_64.tar.gz "
195
+ upload_tarball $release_id " $toolchain_name -macos-x86_64.pkg "
123
196
124
197
popd
0 commit comments