mirror of
https://github.com/Quad4-Software/Reticulum-Go
synced 2026-08-29 23:48:44 -04:00
109 lines
2.5 KiB
Bash
Executable file
109 lines
2.5 KiB
Bash
Executable file
#!/bin/sh
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
# Copyright (c) 2024-2026 Quad4.io
|
|
#
|
|
# Install a pinned Swift toolchain for CI. Usage:
|
|
# sh scripts/ci/setup-swift.sh [version] [install_dir]
|
|
# Example version: 6.0.3
|
|
|
|
set -eu
|
|
|
|
SWIFT_VERSION="${1:-${CI_SWIFT_VERSION:-6.0.3}}"
|
|
INSTALL_DIR="${2:-${SWIFT_INSTALL_DIR:-$HOME/.local/swift}}"
|
|
ARCH="$(uname -m)"
|
|
|
|
case "$ARCH" in
|
|
x86_64|amd64)
|
|
ASSET_ARCH=x86_64
|
|
;;
|
|
aarch64|arm64)
|
|
ASSET_ARCH=aarch64
|
|
;;
|
|
*)
|
|
echo "unsupported arch: $ARCH" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
OS="$(uname -s)"
|
|
case "$OS" in
|
|
Linux)
|
|
;;
|
|
*)
|
|
echo "unsupported OS for CI Swift setup: $OS" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# os-release defines VERSION and would overwrite SWIFT_VERSION if named VERSION.
|
|
. /etc/os-release 2>/dev/null || true
|
|
case "${VERSION_ID:-}" in
|
|
24.04*)
|
|
PLATFORM=ubuntu2404
|
|
ASSET_OS=ubuntu24.04
|
|
;;
|
|
22.04*)
|
|
PLATFORM=ubuntu2204
|
|
ASSET_OS=ubuntu22.04
|
|
;;
|
|
20.04*)
|
|
PLATFORM=ubuntu2004
|
|
ASSET_OS=ubuntu20.04
|
|
;;
|
|
*)
|
|
# GitHub ubuntu-latest is currently 24.04-class. Fall back.
|
|
PLATFORM=ubuntu2404
|
|
ASSET_OS=ubuntu24.04
|
|
echo "warning: unknown VERSION_ID=${VERSION_ID:-}, using ${PLATFORM}" >&2
|
|
;;
|
|
esac
|
|
|
|
# Allow override for non-Ubuntu hosts testing against a glibc-compatible toolchain.
|
|
PLATFORM="${SWIFT_PLATFORM:-$PLATFORM}"
|
|
ASSET_OS="${SWIFT_ASSET_OS:-$ASSET_OS}"
|
|
|
|
if [ "$ASSET_ARCH" = aarch64 ]; then
|
|
case "$PLATFORM" in
|
|
*-aarch64) ;;
|
|
*) PLATFORM="${PLATFORM}-aarch64" ;;
|
|
esac
|
|
case "$ASSET_OS" in
|
|
*-aarch64) ;;
|
|
*) ASSET_OS="${ASSET_OS}-aarch64" ;;
|
|
esac
|
|
fi
|
|
|
|
ASSET="swift-${SWIFT_VERSION}-RELEASE-${ASSET_OS}.tar.gz"
|
|
URL="https://download.swift.org/swift-${SWIFT_VERSION}-release/${PLATFORM}/swift-${SWIFT_VERSION}-RELEASE/${ASSET}"
|
|
TMP="$(mktemp -d)"
|
|
trap 'rm -rf "$TMP"' EXIT
|
|
|
|
echo "Downloading $URL"
|
|
curl -fsSL "$URL" -o "$TMP/swift.tar.gz"
|
|
mkdir -p "$INSTALL_DIR"
|
|
tar -xzf "$TMP/swift.tar.gz" -C "$TMP"
|
|
|
|
FOUND="$(find "$TMP" \( -type f -o -type l \) -name swift | head -n 1)"
|
|
if [ -z "$FOUND" ]; then
|
|
echo "swift binary not found in archive" >&2
|
|
exit 1
|
|
fi
|
|
|
|
SRC_DIR="$(CDPATH='' cd -- "$(dirname "$FOUND")/.." && pwd)"
|
|
rm -rf "$INSTALL_DIR"
|
|
mkdir -p "$(dirname "$INSTALL_DIR")"
|
|
cp -a "$SRC_DIR" "$INSTALL_DIR"
|
|
|
|
BIN_DIR="${GITHUB_PATH_DIR:-$HOME/.local/bin}"
|
|
mkdir -p "$BIN_DIR"
|
|
ln -sfn "$INSTALL_DIR/usr/bin/swift" "$BIN_DIR/swift"
|
|
ln -sfn "$INSTALL_DIR/usr/bin/swiftc" "$BIN_DIR/swiftc"
|
|
|
|
if [ -n "${GITHUB_PATH:-}" ]; then
|
|
echo "$BIN_DIR" >>"$GITHUB_PATH"
|
|
echo "$INSTALL_DIR/usr/bin" >>"$GITHUB_PATH"
|
|
fi
|
|
|
|
export PATH="$INSTALL_DIR/usr/bin:$BIN_DIR:$PATH"
|
|
echo "Swift installed: $(command -v swift)"
|
|
swift --version | head -n 2
|