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