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
@@ -94,6 +100,72 @@ upload_tarball() {
94100 " https://uploads.github.com/repos/$repository /releases/$release_id /assets?name=$filename "
95101}
96102
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+
97169tmp_dir=$( mktemp -d)
98170pushd $tmp_dir
99171download_artifact ubuntu18.04-installable
@@ -103,22 +175,23 @@ unzip ubuntu18.04-installable.zip
103175unzip ubuntu20.04-installable.zip
104176unzip macos-installable.zip
105177
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) )
107179
108180if is_released $toolchain_name ; then
109181 echo " Latest toolchain $toolchain_name has been already released"
110182 exit 0
111183fi
112184
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"
116189
117190create_tag $toolchain_name $head_sha
118191release_id=$( create_release $toolchain_name $toolchain_name $head_sha )
119192
120193upload_tarball $release_id " $toolchain_name -ubuntu18.04-x86_64.tar.gz"
121194upload_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 "
123196
124197popd
0 commit comments