44repository=' swiftwasm/swift'
55workflow_name=' main.yml'
66branch=$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" }
713
814gh_api=https://api.github.com
915
@@ -95,6 +101,72 @@ upload_tarball() {
95101 " https://uploads.github.com/repos/$repository /releases/$release_id /assets?name=$filename "
96102}
97103
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+
98170tmp_dir=$( mktemp -d)
99171pushd $tmp_dir
100172download_artifact ubuntu18.04-installable
@@ -104,22 +176,23 @@ unzip ubuntu18.04-installable.zip
104176unzip ubuntu20.04-installable.zip
105177unzip macos-installable.zip
106178
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) )
108180
109181if is_released $toolchain_name ; then
110182 echo " Latest toolchain $toolchain_name has been already released"
111183 exit 0
112184fi
113185
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"
117190
118191create_tag $toolchain_name $head_sha
119192release_id=$( create_release $toolchain_name $toolchain_name $head_sha )
120193
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 "
124197
125198popd
0 commit comments