Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 43 additions & 3 deletions .github/workflows/scripts/install-and-build-with-sdk.sh
Original file line number Diff line number Diff line change
Expand Up @@ -627,6 +627,46 @@ ANDROID_SDK_DOWNLOAD_ROOT="${SWIFT_DOWNLOAD_ROOT}/${SWIFT_VERSION_BRANCH}/androi
STATIC_LINUX_SDK_DOWNLOAD_ROOT="${SWIFT_DOWNLOAD_ROOT}/${SWIFT_VERSION_BRANCH}/static-sdk"
WASM_SDK_DOWNLOAD_ROOT="${SWIFT_DOWNLOAD_ROOT}/${SWIFT_VERSION_BRANCH}/wasm-sdk"

# Determine the Static Linux SDK version suffix based on the Swift version.
# Swift >= 6.2.4 uses 0.1.0, older versions use 0.0.1.
# For nightly snapshots (e.g. swift-6.2-DEVELOPMENT-SNAPSHOT-...), the minor
# branch version is compared: 6.2 nightly is treated as pre-6.2.4 (0.0.1),
# while "main" nightly is treated as >= 6.2.4 (0.1.0).
get_static_linux_sdk_version() {
local tag="$1"

# Extract the version portion from the tag, e.g.:
# swift-6.1.2-RELEASE -> 6.1.2
# swift-6.2-DEVELOPMENT-... -> 6.2
# swift-DEVELOPMENT-SNAPSHOT-... (main) -> ""
local version
version=$(echo "$tag" | sed -n 's/^swift-\([0-9][0-9.]*\).*/\1/p')

if [[ -z "$version" ]]; then
# main branch snapshot — use the newer version
echo "0.1.0"
return
fi

# Pad to major.minor.patch for comparison (e.g. "6.2" -> "6.2.0")
local major minor patch
IFS='.' read -r major minor patch <<< "$version"
patch="${patch:-0}"

# Compare against 6.2.4
if [[ "$major" -gt 6 ]] ||
[[ "$major" -eq 6 && "$minor" -gt 2 ]] ||
[[ "$major" -eq 6 && "$minor" -eq 2 && "$patch" -ge 4 ]]; then
echo "0.1.0"
else
echo "0.0.1"
fi
}

STATIC_LINUX_SDK_VERSION=$(get_static_linux_sdk_version "$STATIC_LINUX_SDK_TAG")
STATIC_LINUX_SDK_NAME="${STATIC_LINUX_SDK_TAG}_static-linux-${STATIC_LINUX_SDK_VERSION}"
log "Static Linux SDK name: $STATIC_LINUX_SDK_NAME"

install_android_ndk() {
local ndk_version="$1"
log "Installing Android NDK: $ndk_version"
Expand Down Expand Up @@ -693,14 +733,14 @@ install_android_sdk() {

install_static_linux_sdk() {
# Check if the Static Linux Swift SDK is already installed
if "$SWIFT_EXECUTABLE_FOR_STATIC_LINUX_SDK" sdk list 2>/dev/null | grep -q "^${STATIC_LINUX_SDK_TAG}_static-linux-0.0.1"; then
if "$SWIFT_EXECUTABLE_FOR_STATIC_LINUX_SDK" sdk list 2>/dev/null | grep -q "^${STATIC_LINUX_SDK_NAME}"; then
log "✅ Static Linux Swift SDK ${STATIC_LINUX_SDK_TAG} is already installed, skipping installation"
return 0
fi

log "Installing Static Linux Swift SDK: $STATIC_LINUX_SDK_TAG"

local static_linux_sdk_filename="${STATIC_LINUX_SDK_TAG}_static-linux-0.0.1.artifactbundle.tar.gz"
local static_linux_sdk_filename="${STATIC_LINUX_SDK_NAME}.artifactbundle.tar.gz"
local sdk_url="${STATIC_LINUX_SDK_DOWNLOAD_ROOT}/${STATIC_LINUX_SDK_TAG}/${static_linux_sdk_filename}"

if ! swift_sdk_install_with_retry "$SWIFT_EXECUTABLE_FOR_STATIC_LINUX_SDK" "$sdk_url" "$STATIC_LINUX_SDK_CHECKSUM" "Static Linux Swift"; then
Expand Down Expand Up @@ -782,7 +822,7 @@ build() {
if [[ "$INSTALL_STATIC_LINUX" == true ]]; then
log "Running Swift build with Static Linux Swift SDK"

local sdk_name="${STATIC_LINUX_SDK_TAG}_static-linux-0.0.1"
local sdk_name="${STATIC_LINUX_SDK_NAME}"
alias swift='$SWIFT_EXECUTABLE_FOR_STATIC_LINUX_SDK'
local build_command="$SWIFT_BUILD_COMMAND --swift-sdk $sdk_name"
if [[ -n "$SWIFT_BUILD_FLAGS" ]]; then
Expand Down
Loading