mirror of
https://github.com/got-feedBack/feedBack-desktop.git
synced 2026-08-11 03:09:56 +00:00
Clean release snapshot
This commit is contained in:
Executable
+158
@@ -0,0 +1,158 @@
|
||||
#!/bin/bash
|
||||
# Development environment setup
|
||||
# Installs all dependencies and verifies the build chain
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
echo "=== Slopsmith Desktop Development Setup ==="
|
||||
echo ""
|
||||
|
||||
# Check prerequisites
|
||||
echo "Checking prerequisites..."
|
||||
|
||||
check_command() {
|
||||
if command -v "$1" &>/dev/null; then
|
||||
echo " [OK] $1"
|
||||
else
|
||||
echo " [MISSING] $1 — $2"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Verify the media chain: ffmpeg (WEM/OGG transcode), ffprobe (demucs probes
|
||||
# stream metadata before invoking ffmpeg), and ffmpeg's libvorbis encoder
|
||||
# (Sloppak conversion encodes .ogg with `-c:a libvorbis`).
|
||||
# $1 — install hint shown when ffmpeg/ffprobe are missing.
|
||||
# $2 — platform-specific remediation shown when libvorbis is absent.
|
||||
check_media_chain() {
|
||||
local install_hint="$1"
|
||||
local libvorbis_hint="$2"
|
||||
command -v ffmpeg >/dev/null 2>&1 && echo " [OK] ffmpeg" || echo " [MISSING] ffmpeg ($install_hint)"
|
||||
command -v ffprobe >/dev/null 2>&1 && echo " [OK] ffprobe" || echo " [MISSING] ffprobe (ships with ffmpeg — $install_hint)"
|
||||
if command -v ffmpeg >/dev/null 2>&1; then
|
||||
if ffmpeg -hide_banner -encoders 2>/dev/null | grep -wq libvorbis; then
|
||||
echo " [OK] ffmpeg libvorbis encoder"
|
||||
else
|
||||
echo " [WARN] ffmpeg lacks the libvorbis encoder — Sloppak conversion"
|
||||
echo " falls back to the lower-quality built-in vorbis encoder."
|
||||
echo " $libvorbis_hint"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
check_command node "Install Node.js 20+" || exit 1
|
||||
check_command npm "Comes with Node.js" || exit 1
|
||||
check_command cmake "Install cmake (apt/brew/pacman)" || exit 1
|
||||
check_command python3 "Install Python 3.12+" || exit 1
|
||||
check_command git "Install git" || exit 1
|
||||
|
||||
# Platform-specific checks
|
||||
case "$(uname -s)" in
|
||||
Linux)
|
||||
echo ""
|
||||
echo "Checking Linux build dependencies..."
|
||||
pkg-config --exists alsa 2>/dev/null && echo " [OK] ALSA" || echo " [MISSING] ALSA dev headers (apt: libasound2-dev / pacman: alsa-lib)"
|
||||
pkg-config --exists jack 2>/dev/null && echo " [OK] JACK" || echo " [MISSING] JACK dev headers (apt: libjack-jackd2-dev / pacman: jack2)"
|
||||
pkg-config --exists freetype2 2>/dev/null && echo " [OK] freetype2" || echo " [MISSING] freetype2 (apt: libfreetype-dev / pacman: freetype2)"
|
||||
pkg-config --exists x11 2>/dev/null && echo " [OK] X11" || echo " [MISSING] X11 dev headers"
|
||||
pkg-config --exists xrandr 2>/dev/null && echo " [OK] Xrandr" || echo " [MISSING] Xrandr dev headers"
|
||||
pkg-config --exists xcursor 2>/dev/null && echo " [OK] Xcursor" || echo " [MISSING] Xcursor dev headers"
|
||||
pkg-config --exists xinerama 2>/dev/null && echo " [OK] Xinerama" || echo " [MISSING] Xinerama dev headers"
|
||||
check_media_chain "apt: ffmpeg / pacman: ffmpeg" \
|
||||
"Most distro ffmpeg packages enable libvorbis — reinstall your distro's ffmpeg if this build does not."
|
||||
command -v vgmstream-cli >/dev/null 2>&1 && echo " [OK] vgmstream-cli" || echo " [MISSING] vgmstream-cli (AUR: yay -S vgmstream-cli-bin / or github.com/vgmstream/vgmstream/releases)"
|
||||
;;
|
||||
Darwin)
|
||||
echo ""
|
||||
echo "Checking macOS dependencies..."
|
||||
xcode-select -p &>/dev/null && echo " [OK] Xcode Command Line Tools" || echo " [MISSING] Run: xcode-select --install"
|
||||
check_media_chain "brew install ffmpeg" \
|
||||
"Homebrew's ffmpeg 8.1.1+ omits libvorbis — install a static ffmpeg build instead (packaged builds bundle one)."
|
||||
command -v vgmstream-cli >/dev/null 2>&1 && echo " [OK] vgmstream-cli" || echo " [MISSING] vgmstream-cli (brew install vgmstream)"
|
||||
;;
|
||||
MINGW*|MSYS*|CYGWIN*)
|
||||
echo ""
|
||||
echo "Checking Windows (Git Bash) dependencies..."
|
||||
check_media_chain "install ffmpeg and add it to PATH (e.g. winget install Gyan.FFmpeg)" \
|
||||
"Most prebuilt Windows ffmpeg builds (e.g. Gyan) include libvorbis — pick one that does."
|
||||
command -v vgmstream-cli >/dev/null 2>&1 && echo " [OK] vgmstream-cli" || echo " [MISSING] vgmstream-cli (github.com/vgmstream/vgmstream/releases — add to PATH)"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
|
||||
# Initialize submodules
|
||||
echo "Initializing git submodules..."
|
||||
git submodule update --init --recursive 2>/dev/null || echo " Note: Run 'git submodule update --init --recursive' manually if this is a fresh clone"
|
||||
|
||||
# Install npm dependencies
|
||||
echo ""
|
||||
echo "Installing npm dependencies..."
|
||||
npm install
|
||||
|
||||
# Locate Slopsmith. Matches the build scripts (bundle-slopsmith.sh,
|
||||
# bundle-python.sh, build-macos.sh): an explicit $SLOPSMITH_DIR is honoured
|
||||
# verbatim — a typo or partial checkout there is surfaced, never silently
|
||||
# masked by a sibling or legacy checkout. Only when $SLOPSMITH_DIR is unset
|
||||
# do we fall back to ../slopsmith then ~/Repositories/slopsmith, and a
|
||||
# fallback candidate only counts if it actually contains server.py.
|
||||
SLOPSMITH_DIR_ENV="${SLOPSMITH_DIR:-}"
|
||||
if [ -z "${SLOPSMITH_DIR:-}" ]; then
|
||||
if [ -f "$PROJECT_DIR/../slopsmith/server.py" ]; then
|
||||
SLOPSMITH_DIR="$PROJECT_DIR/../slopsmith"
|
||||
elif [ -f "$HOME/Repositories/slopsmith/server.py" ]; then
|
||||
SLOPSMITH_DIR="$HOME/Repositories/slopsmith"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${SLOPSMITH_DIR:-}" ] && [ -f "$SLOPSMITH_DIR/server.py" ]; then
|
||||
SLOPSMITH_DIR="$(cd "$SLOPSMITH_DIR" && pwd)"
|
||||
echo ""
|
||||
echo "Slopsmith found at: $SLOPSMITH_DIR"
|
||||
|
||||
# On Windows/Git Bash a bash check passes for an MSYS path like
|
||||
# /c/src/slopsmith, but `npm run dev` (Electron) resolves $SLOPSMITH_DIR
|
||||
# with Node, which needs a native Windows path. Warn before setup
|
||||
# reports a config that dev mode would still fail to start.
|
||||
case "$(uname -s)" in
|
||||
MINGW*|MSYS*|CYGWIN*)
|
||||
if [ -n "$SLOPSMITH_DIR_ENV" ] && [ "${SLOPSMITH_DIR_ENV#/}" != "$SLOPSMITH_DIR_ENV" ]; then
|
||||
echo ""
|
||||
echo " NOTE: \$SLOPSMITH_DIR is an MSYS/Git-Bash path. 'npm run dev' needs a"
|
||||
echo " native Windows path. Re-export it as:"
|
||||
if command -v cygpath >/dev/null 2>&1; then
|
||||
echo " export SLOPSMITH_DIR='$(cygpath -w "$SLOPSMITH_DIR_ENV")'"
|
||||
else
|
||||
echo " a native path such as C:\\src\\slopsmith"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
PYTHON="${PROJECT_DIR}/.venv/bin/python3"
|
||||
[ -x "$PYTHON" ] || PYTHON="python3"
|
||||
echo "Checking Python dependencies (\"$PYTHON\")..."
|
||||
"$PYTHON" -c "import fastapi" 2>/dev/null && echo " [OK] fastapi" || echo " [MISSING] \"$PYTHON\" -m pip install -r \"$SLOPSMITH_DIR/requirements.txt\""
|
||||
"$PYTHON" -c "import uvicorn" 2>/dev/null && echo " [OK] uvicorn" || echo " [MISSING] \"$PYTHON\" -m pip install -r \"$SLOPSMITH_DIR/requirements.txt\""
|
||||
elif [ -n "${SLOPSMITH_DIR:-}" ]; then
|
||||
echo ""
|
||||
echo "WARNING: \$SLOPSMITH_DIR is set to '$SLOPSMITH_DIR' but no server.py was found there."
|
||||
echo " Fix the path or unset \$SLOPSMITH_DIR to fall back to ../slopsmith or ~/Repositories/slopsmith."
|
||||
else
|
||||
echo ""
|
||||
echo "WARNING: Slopsmith not found. Set \$SLOPSMITH_DIR, clone to $PROJECT_DIR/../slopsmith, or use ~/Repositories/slopsmith"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== Setup Complete ==="
|
||||
echo ""
|
||||
echo "Build commands:"
|
||||
echo " npm run build:audio # Build JUCE native addon"
|
||||
echo " npm run build:ts # Compile TypeScript"
|
||||
echo " npm run dev # Run in development mode"
|
||||
echo " npm run dist:linux # Build Linux package"
|
||||
Reference in New Issue
Block a user