Skip to content

Commit 75ee011

Browse files
authored
Merge pull request #2041 from swiftwasm/maxd/5.3-cherry-pick
Cherry-pick packaging changes for the 5.3 branch
2 parents 740f8dc + 9f57507 commit 75ee011

File tree

4 files changed

+153
-15
lines changed

4 files changed

+153
-15
lines changed

.github/workflows/main.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ jobs:
5151
uses: actions/upload-artifact@v1
5252
with:
5353
name: ubuntu18.04-installable
54-
path: ../swift-wasm-5.3-SNAPSHOT-ubuntu18.04-x86_64.tar.gz
54+
path: ../swift-wasm-5.3-SNAPSHOT-ubuntu18.04_x86_64.tar.gz
5555
# - name: Pack test results
5656
# run: tar cJf swift-test-results.tar.gz ../build/*/swift-linux-x86_64/swift-test-results
5757
# - name: Upload test results
@@ -98,7 +98,7 @@ jobs:
9898
uses: actions/upload-artifact@v1
9999
with:
100100
name: ubuntu20.04-installable
101-
path: ../swift-wasm-5.3-SNAPSHOT-ubuntu20.04-x86_64.tar.gz
101+
path: ../swift-wasm-5.3-SNAPSHOT-ubuntu20.04_x86_64.tar.gz
102102
# - name: Pack test results
103103
# run: tar cJf swift-test-results.tar.gz ../build/*/swift-linux-x86_64/swift-test-results
104104
# - name: Upload test results
@@ -135,7 +135,7 @@ jobs:
135135
uses: actions/upload-artifact@v1
136136
with:
137137
name: macos-installable
138-
path: ../swift-wasm-5.3-SNAPSHOT-macos-x86_64.tar.gz
138+
path: ../swift-wasm-5.3-SNAPSHOT-macos_x86_64.tar.gz
139139
- name: Pack test results
140140
run: tar cJf swift-test-results.tar.gz ../target-build/*/swift-macosx-x86_64/swift-test-results
141141
- name: Upload test results

.github/workflows/nightly-distribution.yml

+21
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,32 @@ jobs:
77
runs-on: macos-latest
88
steps:
99
- uses: actions/checkout@v1
10+
- name: Setup keychain
11+
run: |
12+
echo "$DARWIN_TOOLCHAIN_APPLICATION_CERT_BASE64" | base64 --decode -o developerID_application.p12
13+
security import developerID_application.p12 -P "$DARWIN_TOOLCHAIN_APPLICATION_CERT_PASSWORD"
14+
echo "$DARWIN_TOOLCHAIN_INSTALLER_CERT_BASE64" | base64 --decode -o developerID_installer.p12
15+
security import developerID_installer.p12 -P "$DARWIN_TOOLCHAIN_INSTALLER_CERT_PASSWORD"
16+
env:
17+
DARWIN_TOOLCHAIN_APPLICATION_CERT: ${{ secrets.DARWIN_TOOLCHAIN_APPLICATION_CERT }}
18+
DARWIN_TOOLCHAIN_APPLICATION_CERT_BASE64: ${{ secrets.DARWIN_TOOLCHAIN_APPLICATION_CERT_BASE64 }}
19+
DARWIN_TOOLCHAIN_APPLICATION_CERT_PASSWORD: ${{ secrets.DARWIN_TOOLCHAIN_APPLICATION_CERT_PASSWORD }}
20+
DARWIN_TOOLCHAIN_INSTALLER_CERT: ${{ secrets.DARWIN_TOOLCHAIN_INSTALLER_CERT }}
21+
DARWIN_TOOLCHAIN_INSTALLER_CERT_BASE64: ${{ secrets.DARWIN_TOOLCHAIN_INSTALLER_CERT_BASE64 }}
22+
DARWIN_TOOLCHAIN_INSTALLER_CERT_PASSWORD: ${{ secrets.DARWIN_TOOLCHAIN_INSTALLER_CERT_PASSWORD }}
1023
- run: ./utils/webassembly/distribute-latest-toolchain.sh swiftwasm DEVELOPMENT
1124
env:
1225
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
26+
DARWIN_TOOLCHAIN_APPLICATION_CERT: ${{ secrets.DARWIN_TOOLCHAIN_APPLICATION_CERT }}
27+
DARWIN_TOOLCHAIN_INSTALLER_CERT: ${{ secrets.DARWIN_TOOLCHAIN_INSTALLER_CERT }}
28+
DARWIN_TOOLCHAIN_NOTARIZE_EMAIL: ${{ secrets.DARWIN_TOOLCHAIN_NOTARIZE_EMAIL }}
29+
DARWIN_TOOLCHAIN_NOTARIZE_PASSWORD: ${{ secrets.DARWIN_TOOLCHAIN_NOTARIZE_PASSWORD }}
1330
if: github.ref == 'refs/heads/swiftwasm'
1431
- run: ./utils/webassembly/distribute-latest-toolchain.sh swiftwasm-release/5.3 5.3
1532
env:
1633
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
34+
DARWIN_TOOLCHAIN_APPLICATION_CERT: ${{ secrets.DARWIN_TOOLCHAIN_APPLICATION_CERT }}
35+
DARWIN_TOOLCHAIN_INSTALLER_CERT: ${{ secrets.DARWIN_TOOLCHAIN_INSTALLER_CERT }}
36+
DARWIN_TOOLCHAIN_NOTARIZE_EMAIL: ${{ secrets.DARWIN_TOOLCHAIN_NOTARIZE_EMAIL }}
37+
DARWIN_TOOLCHAIN_NOTARIZE_PASSWORD: ${{ secrets.DARWIN_TOOLCHAIN_NOTARIZE_PASSWORD }}
1738
if: github.ref == 'refs/heads/swiftwasm-release/5.3'

utils/webassembly/build-toolchain.sh

+49-5
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ WASI_SDK_PATH=$SOURCE_PATH/wasi-sdk
88

99
case $(uname -s) in
1010
Darwin)
11-
OS_SUFFIX=macos-x86_64
11+
OS_SUFFIX=macos_x86_64
1212
HOST_PRESET=webassembly-host
1313
TARGET_PRESET=webassembly-macos-target
1414
HOST_SUFFIX=macosx-x86_64
1515
;;
1616
Linux)
1717
if [ $(grep RELEASE /etc/lsb-release) == "DISTRIB_RELEASE=18.04" ]; then
18-
OS_SUFFIX=ubuntu18.04-x86_64
18+
OS_SUFFIX=ubuntu18.04_x86_64
1919
elif [ $(grep RELEASE /etc/lsb-release) == "DISTRIB_RELEASE=20.04" ]; then
20-
OS_SUFFIX=ubuntu20.04-x86_64
20+
OS_SUFFIX=ubuntu20.04_x86_64
2121
else
2222
echo "Unknown Ubuntu version"
2323
exit 1
@@ -124,11 +124,55 @@ merge_toolchains() {
124124
sed -i -e "s@\".*/include@\"../../../../share/wasi-sysroot/include@g" $DIST_TOOLCHAIN_SDK/usr/lib/swift/wasi/wasm32/wasi.modulemap
125125
}
126126

127+
create_darwin_info_plist() {
128+
echo "-- Create Info.plist --"
129+
PLISTBUDDY_BIN="/usr/libexec/PlistBuddy"
130+
131+
DARWIN_TOOLCHAIN_VERSION="5.3.${YEAR}${MONTH}${DAY}"
132+
BUNDLE_PREFIX="org.swiftwasm"
133+
DARWIN_TOOLCHAIN_BUNDLE_IDENTIFIER="${BUNDLE_PREFIX}.${YEAR}${MONTH}${DAY}"
134+
DARWIN_TOOLCHAIN_DISPLAY_NAME_SHORT="Swift for WebAssembly Snapshot"
135+
DARWIN_TOOLCHAIN_DISPLAY_NAME="${DARWIN_TOOLCHAIN_DISPLAY_NAME_SHORT} ${YEAR}-${MONTH}-${DAY}"
136+
DARWIN_TOOLCHAIN_ALIAS="swiftwasm"
137+
138+
DARWIN_TOOLCHAIN_INFO_PLIST="${DIST_TOOLCHAIN_SDK}/usr/Info.plist"
139+
DARWIN_TOOLCHAIN_REPORT_URL="https://bugs.swift.org/"
140+
COMPATIBILITY_VERSION=2
141+
COMPATIBILITY_VERSION_DISPLAY_STRING="Xcode 8.0"
142+
DARWIN_TOOLCHAIN_CREATED_DATE="$(date -u +'%a %b %d %T GMT %Y')"
143+
SWIFT_USE_DEVELOPMENT_TOOLCHAIN_RUNTIME="YES"
144+
145+
rm -f "${DARWIN_TOOLCHAIN_INFO_PLIST}"
146+
147+
${PLISTBUDDY_BIN} -c "Add DisplayName string '${DARWIN_TOOLCHAIN_DISPLAY_NAME}'" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
148+
${PLISTBUDDY_BIN} -c "Add ShortDisplayName string '${DARWIN_TOOLCHAIN_DISPLAY_NAME_SHORT}'" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
149+
${PLISTBUDDY_BIN} -c "Add CreatedDate date '${DARWIN_TOOLCHAIN_CREATED_DATE}'" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
150+
${PLISTBUDDY_BIN} -c "Add CompatibilityVersion integer ${COMPATIBILITY_VERSION}" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
151+
${PLISTBUDDY_BIN} -c "Add CompatibilityVersionDisplayString string ${COMPATIBILITY_VERSION_DISPLAY_STRING}" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
152+
${PLISTBUDDY_BIN} -c "Add Version string '${DARWIN_TOOLCHAIN_VERSION}'" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
153+
${PLISTBUDDY_BIN} -c "Add CFBundleIdentifier string '${DARWIN_TOOLCHAIN_BUNDLE_IDENTIFIER}'" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
154+
${PLISTBUDDY_BIN} -c "Add ReportProblemURL string '${DARWIN_TOOLCHAIN_REPORT_URL}'" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
155+
${PLISTBUDDY_BIN} -c "Add Aliases array" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
156+
${PLISTBUDDY_BIN} -c "Add Aliases:0 string '${DARWIN_TOOLCHAIN_ALIAS}'" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
157+
${PLISTBUDDY_BIN} -c "Add OverrideBuildSettings dict" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
158+
${PLISTBUDDY_BIN} -c "Add OverrideBuildSettings:ENABLE_BITCODE string 'NO'" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
159+
${PLISTBUDDY_BIN} -c "Add OverrideBuildSettings:SWIFT_DISABLE_REQUIRED_ARCLITE string 'YES'" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
160+
${PLISTBUDDY_BIN} -c "Add OverrideBuildSettings:SWIFT_LINK_OBJC_RUNTIME string 'YES'" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
161+
${PLISTBUDDY_BIN} -c "Add OverrideBuildSettings:SWIFT_DEVELOPMENT_TOOLCHAIN string 'YES'" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
162+
${PLISTBUDDY_BIN} -c "Add OverrideBuildSettings:SWIFT_USE_DEVELOPMENT_TOOLCHAIN_RUNTIME string '${SWIFT_USE_DEVELOPMENT_TOOLCHAIN_RUNTIME}'" "${DARWIN_TOOLCHAIN_INFO_PLIST}"
163+
164+
chmod a+r "${DARWIN_TOOLCHAIN_INFO_PLIST}"
165+
}
166+
127167
build_host_toolchain
128168
build_target_toolchain
129169

130170
merge_toolchains
131171

132-
cd $DIST_TOOLCHAIN_DESTDIR
133-
tar cfz $PACKAGE_ARTIFACT $TOOLCHAIN_NAME
172+
if [[ "$(uname)" == "Darwin" ]]; then
173+
create_darwin_info_plist
174+
fi
175+
176+
cd "$DIST_TOOLCHAIN_DESTDIR"
177+
tar cfz "$PACKAGE_ARTIFACT" "$TOOLCHAIN_NAME"
134178
echo "Toolchain archive created successfully!"

utils/webassembly/distribute-latest-toolchain.sh

+80-7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ set -xe
44
repository='swiftwasm/swift'
55
workflow_name='main.yml'
66
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"}
713

814
gh_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+
98170
tmp_dir=$(mktemp -d)
99171
pushd $tmp_dir
100172
download_artifact ubuntu18.04-installable
@@ -104,22 +176,23 @@ unzip ubuntu18.04-installable.zip
104176
unzip ubuntu20.04-installable.zip
105177
unzip 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

109181
if is_released $toolchain_name; then
110182
echo "Latest toolchain $toolchain_name has been already released"
111183
exit 0
112184
fi
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

118191
create_tag $toolchain_name $head_sha
119192
release_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

125198
popd

0 commit comments

Comments
 (0)