mirror of
https://github.com/spacedriveapp/spacedrive.git
synced 2026-03-09 01:56:21 -04:00
Improve setup script (#436)
* Improve bash setup script (less silent!) * use proper FFmpeg capitalization in relevant docs * Fix typo in Homebrew error message Co-authored-by: maxichrome <maxichrome@users.noreply.github.com>
This commit is contained in:
199
.github/scripts/setup-system.sh
vendored
199
.github/scripts/setup-system.sh
vendored
@@ -2,110 +2,149 @@
|
||||
|
||||
set -e
|
||||
|
||||
script_failure() {
|
||||
echo "An error occurred while performing the task on line $1" >&2
|
||||
echo "Setup for Spacedrive development failed" >&2
|
||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||
|
||||
function log_err {
|
||||
echo "$@" >&2
|
||||
}
|
||||
|
||||
function script_failure {
|
||||
log_err "An error occurred$([ -z "$1" ] && " on line $1" || " (unknown)")."
|
||||
log_err "Setup failed."
|
||||
}
|
||||
|
||||
trap 'script_failure $LINENO' ERR
|
||||
|
||||
echo "Setting up your system for Spacedrive development!"
|
||||
echo "Setting up this system for Spacedrive development."
|
||||
echo
|
||||
|
||||
if ! which cargo &> /dev/null; then
|
||||
echo "Rust was not detected on your system. Ensure the 'rustc' and 'cargo' binaries are in your \$PATH."
|
||||
exit 1
|
||||
if ! command -v cargo >/dev/null; then
|
||||
log_err "Rust was not found. Ensure the 'rustc' and 'cargo' binaries are in your \$PATH."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "${SPACEDRIVE_SKIP_PNPM_CHECK:-}" != "true" ]; then
|
||||
|
||||
if ! which pnpm &> /dev/null; then
|
||||
echo "PNPM was not detected on your system. Ensure the 'pnpm' command is in your \$PATH. You are not able to use Yarn or NPM."
|
||||
exit 1
|
||||
fi
|
||||
if [ "${SPACEDRIVE_SKIP_PNPM_CHECK:-'false'}" != "true" ]; then
|
||||
echo "Checking for pnpm..."
|
||||
|
||||
if ! command -v pnpm >/dev/null; then
|
||||
log_err "pnpm was not found. Ensure the 'pnpm' command is in your \$PATH."
|
||||
log_err 'You MUST use pnpm for this project; yarn and npm are not allowed.'
|
||||
exit 1
|
||||
else
|
||||
echo "Found pnpm!"
|
||||
fi
|
||||
else
|
||||
echo "Skipped PNPM check!"
|
||||
echo "Skipping pnpm check."
|
||||
fi
|
||||
|
||||
echo
|
||||
|
||||
if [ "$1" == "mobile" ]; then
|
||||
echo "Setting up for mobile development!"
|
||||
echo "Setting up for mobile development."
|
||||
|
||||
# IOS targets
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
echo "Installing IOS Rust targets..."
|
||||
# iOS targets
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
echo "Checking for Xcode..."
|
||||
if ! /usr/bin/xcodebuild -version >/dev/null; then
|
||||
log_err "Xcode was not detected."
|
||||
log_err "Please ensure Xcode is installed and try again."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! /usr/bin/xcodebuild -version; then
|
||||
echo "Xcode is not installed! Ensure you have it installed!"
|
||||
exit 1
|
||||
fi
|
||||
echo "Installing iOS targets for Rust..."
|
||||
|
||||
rustup target add aarch64-apple-ios
|
||||
rustup target add aarch64-apple-ios-sim
|
||||
fi
|
||||
rustup target add aarch64-apple-ios
|
||||
rustup target add aarch64-apple-ios-sim
|
||||
fi
|
||||
|
||||
# Android requires python
|
||||
if ! command -v python3 &> /dev/null
|
||||
then
|
||||
echo "Python3 could not be found. This is required for Android mobile development!"
|
||||
exit 1
|
||||
fi
|
||||
# Android requires python
|
||||
if ! command -v python3 >/dev/null
|
||||
then
|
||||
log_err "python3 command could not be found. This is required for Android mobile development."
|
||||
log_err "Ensure python3 is available in your \$PATH and try again."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Android targets
|
||||
echo "Installing Android Rust targets..."
|
||||
rustup target add armv7-linux-androideabi # for arm
|
||||
rustup target add i686-linux-android # for x86
|
||||
rustup target add aarch64-linux-android # for arm64
|
||||
rustup target add x86_64-linux-android # for x86_64
|
||||
rustup target add x86_64-unknown-linux-gnu # for linux-x86-64
|
||||
rustup target add x86_64-apple-darwin # for darwin x86_64 (if you have an Intel MacOS)
|
||||
rustup target add aarch64-apple-darwin # for darwin arm64 (if you have a M1 MacOS)
|
||||
rustup target add x86_64-pc-windows-gnu # for win32-x86-64-gnu
|
||||
rustup target add x86_64-pc-windows-msvc # for win32-x86-64-msvc
|
||||
# Android targets
|
||||
echo "Setting up Android targets for Rust..."
|
||||
|
||||
rustup target add armv7-linux-androideabi # for arm
|
||||
rustup target add aarch64-linux-android # for arm64
|
||||
rustup target add i686-linux-android # for x86
|
||||
rustup target add x86_64-linux-android # for x86_64
|
||||
rustup target add x86_64-unknown-linux-gnu # for linux-x86-64
|
||||
rustup target add aarch64-apple-darwin # for darwin arm64 (if you have an M1 Mac)
|
||||
rustup target add x86_64-apple-darwin # for darwin x86_64 (if you have an Intel Mac)
|
||||
rustup target add x86_64-pc-windows-gnu # for win32-x86-64-gnu
|
||||
rustup target add x86_64-pc-windows-msvc # for win32-x86-64-msvc
|
||||
|
||||
echo "Done setting up mobile targets."
|
||||
echo
|
||||
fi
|
||||
|
||||
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
if which apt-get &> /dev/null; then
|
||||
echo "Detected 'apt' based distro!"
|
||||
|
||||
DEBIAN_FFMPEG_DEPS="libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev ffmpeg" # FFMPEG dependencies
|
||||
DEBIAN_TAURI_DEPS="libwebkit2gtk-4.0-dev build-essential curl wget libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev" # Tauri dependencies
|
||||
DEBIAN_BINDGEN_DEPS="pkg-config clang" # Bindgen dependencies - it's used by a dependency of Spacedrive
|
||||
|
||||
sudo apt-get -y update
|
||||
sudo apt-get -y install ${SPACEDRIVE_CUSTOM_APT_FLAGS:-} $DEBIAN_TAURI_DEPS $DEBIAN_FFMPEG_DEPS $DEBIAN_BINDGEN_DEPS
|
||||
elif which pacman &> /dev/null; then
|
||||
echo "Detected 'pacman' based distro!"
|
||||
ARCH_TAURI_DEPS="webkit2gtk base-devel curl wget openssl appmenu-gtk-module gtk3 libappindicator-gtk3 librsvg libvips" # Tauri deps https://tauri.studio/guides/getting-started/setup/linux#1-system-dependencies
|
||||
ARCH_FFMPEG_DEPS="ffmpeg" # FFMPEG dependencies
|
||||
ARCH_BINDGEN_DEPS="clang" # Bindgen dependencies - it's used by a dependency of Spacedrive
|
||||
if command -v apt-get >/dev/null; then
|
||||
echo "Detected apt!"
|
||||
echo "Installing dependencies with apt..."
|
||||
|
||||
DEBIAN_TAURI_DEPS="libwebkit2gtk-4.0-dev build-essential curl wget libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev" # Tauri dependencies
|
||||
DEBIAN_FFMPEG_DEPS="libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev ffmpeg" # FFmpeg dependencies
|
||||
DEBIAN_BINDGEN_DEPS="pkg-config clang" # Bindgen dependencies - it's used by a dependency of Spacedrive
|
||||
|
||||
sudo pacman -Syu
|
||||
sudo pacman -S --needed $ARCH_TAURI_DEPS $ARCH_FFMPEG_DEPS $ARCH_BINDGEN_DEPS
|
||||
elif which dnf &> /dev/null; then
|
||||
echo "Detected 'dnf' based distro!"
|
||||
FEDORA_TAURI_DEPS="webkit2gtk3-devel.x86_64 openssl-devel curl wget libappindicator-gtk3 librsvg2-devel" # Tauri dependencies
|
||||
FEDORA_FFMPEG_DEPS="ffmpeg ffmpeg-devel" # FFMPEG dependencies
|
||||
FEDORA_BINDGEN_DEPS="clang" # Bindgen dependencies - it's used by a dependency of Spacedrive
|
||||
sudo apt-get -y update
|
||||
sudo apt-get -y install ${SPACEDRIVE_CUSTOM_APT_FLAGS:-} $DEBIAN_TAURI_DEPS $DEBIAN_FFMPEG_DEPS $DEBIAN_BINDGEN_DEPS
|
||||
elif command -v pacman >/dev/null; then
|
||||
echo "Detected pacman!"
|
||||
echo "Installing dependencies with pacman..."
|
||||
|
||||
sudo dnf check-update
|
||||
sudo dnf install $FEDORA_TAURI_DEPS $FEDORA_FFMPEG_DEPS $FEDORA_BINDGEN_DEPS
|
||||
sudo dnf group install "C Development Tools and Libraries"
|
||||
else
|
||||
echo "Your Linux distro '$(lsb_release -s -d)' is not supported by this script. We would welcome a PR or some help adding your OS to this script. https://github.com/spacedriveapp/spacedrive/issues"
|
||||
exit 1
|
||||
fi
|
||||
ARCH_TAURI_DEPS="webkit2gtk base-devel curl wget openssl appmenu-gtk-module gtk3 libappindicator-gtk3 librsvg libvips" # Tauri deps https://tauri.studio/guides/getting-started/setup/linux#1-system-dependencies
|
||||
ARCH_FFMPEG_DEPS="ffmpeg" # FFmpeg dependencies
|
||||
ARCH_BINDGEN_DEPS="clang" # Bindgen dependencies - it's used by a dependency of Spacedrive
|
||||
|
||||
echo "Your machine has been setup for Spacedrive development!"
|
||||
sudo pacman -Syu
|
||||
sudo pacman -S --needed $ARCH_TAURI_DEPS $ARCH_FFMPEG_DEPS $ARCH_BINDGEN_DEPS
|
||||
elif command -v dnf >/dev/null; then
|
||||
echo "Detected dnf!"
|
||||
echo "Installing dependencies with dnf..."
|
||||
|
||||
FEDORA_TAURI_DEPS="webkit2gtk3-devel.x86_64 openssl-devel curl wget libappindicator-gtk3 librsvg2-devel" # Tauri dependencies
|
||||
FEDORA_FFMPEG_DEPS="ffmpeg ffmpeg-devel" # FFmpeg dependencies
|
||||
FEDORA_BINDGEN_DEPS="clang" # Bindgen dependencies - it's used by a dependency of Spacedrive
|
||||
|
||||
sudo dnf check-update
|
||||
sudo dnf install $FEDORA_TAURI_DEPS $FEDORA_FFMPEG_DEPS $FEDORA_BINDGEN_DEPS
|
||||
sudo dnf group install "C Development Tools and Libraries"
|
||||
else
|
||||
log_err "Your Linux distro '$(lsb_release -s -d)' is not supported by this script. We would welcome a PR or some help adding your OS to this script. https://github.com/spacedriveapp/spacedrive/issues"
|
||||
exit 1
|
||||
fi
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
if ! brew tap | grep spacedriveapp/deps > /dev/null; then
|
||||
brew tap-new spacedriveapp/deps > /dev/null
|
||||
if ! command -v brew >/dev/null; then
|
||||
log_err "Homebrew was not found. Please install it using the instructions at https://brew.sh and try again."
|
||||
exit 1
|
||||
fi
|
||||
brew extract --force --version 5.0.1 ffmpeg spacedriveapp/deps > /dev/null
|
||||
brew unlink ffmpeg &> /dev/null || true
|
||||
brew install spacedriveapp/deps/ffmpeg@5.0.1 &> /dev/null
|
||||
|
||||
echo "ffmpeg v5.0.1 has been installed and is now being used on your system."
|
||||
echo "Installing Homebrew dependencies..."
|
||||
|
||||
if ! brew tap -q | grep -qx "spacedriveapp/deps" >/dev/null; then
|
||||
echo "Creating Homebrew tap \`spacedriveapp/deps\`..."
|
||||
brew tap-new spacedriveapp/deps
|
||||
fi
|
||||
|
||||
FFMPEG_VERSION="5.0.1"
|
||||
|
||||
if ! brew list --full-name -1 | grep -x "spacedriveapp/deps/ffmpeg@$FFMPEG_VERSION" >/dev/null; then
|
||||
echo "Extracting FFmpeg version $FFMPEG_VERSION..."
|
||||
|
||||
brew extract -q --force --version $FFMPEG_VERSION ffmpeg spacedriveapp/deps
|
||||
brew unlink -q ffmpeg || true
|
||||
brew install -q "spacedriveapp/deps/ffmpeg@$FFMPEG_VERSION"
|
||||
|
||||
echo "FFmpeg version $FFMPEG_VERSION has been installed and is now being used on your system."
|
||||
fi
|
||||
else
|
||||
echo "Your OS '$OSTYPE' is not supported by this script. We would welcome a PR or some help adding your OS to this script. https://github.com/spacedriveapp/spacedrive/issues"
|
||||
exit 1
|
||||
log_err "Your OS ($OSTYPE) is not supported by this script. We would welcome a PR or some help adding your OS to this script. https://github.com/spacedriveapp/spacedrive/issues"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Your machine has been successfully set up for Spacedrive development."
|
||||
|
||||
Reference in New Issue
Block a user