115 lines
4.2 KiB
Bash
Executable File
115 lines
4.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Deep clean script — supports platform filtering
|
|
#
|
|
# Usage:
|
|
# bash scripts/clean.sh # clean all platforms (default)
|
|
# bash scripts/clean.sh android # clean Android only
|
|
# bash scripts/clean.sh ios # clean iOS only
|
|
# bash scripts/clean.sh macos # clean macOS only
|
|
# bash scripts/clean.sh windows # clean Windows only
|
|
# bash scripts/clean.sh android ios # clean multiple platforms
|
|
#
|
|
# Via melos:
|
|
# melos run clean:deep # all platforms
|
|
# melos run clean:deep -- android # Android only
|
|
# melos run clean:deep -- ios macos # iOS + macOS
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
APP_DIR="$ROOT_DIR/apps/im_app"
|
|
|
|
# ── Parse platforms ────────────────────────────────────────────────────────
|
|
ALL_PLATFORMS=(android ios macos windows)
|
|
|
|
if [ $# -eq 0 ]; then
|
|
TARGETS=("${ALL_PLATFORMS[@]}")
|
|
else
|
|
TARGETS=("$@")
|
|
fi
|
|
|
|
should_clean() {
|
|
local platform="$1"
|
|
for t in "${TARGETS[@]}"; do
|
|
[[ "$t" == "$platform" ]] && return 0
|
|
done
|
|
return 1
|
|
}
|
|
|
|
echo "==> Platforms: ${TARGETS[*]}"
|
|
|
|
# ── Flutter & Dart (always runs) ───────────────────────────────────────────
|
|
echo "==> flutter clean..."
|
|
cd "$APP_DIR"
|
|
flutter clean
|
|
|
|
echo "==> Removing .dart_tool directories..."
|
|
while IFS= read -r -d '' dir; do
|
|
echo " rm -rf $dir"
|
|
rm -rf "$dir"
|
|
done < <(find "$ROOT_DIR" -type d -name ".dart_tool" -not -path "*/.git/*" -print0)
|
|
|
|
echo "==> Removing generated Dart files (*.g.dart / *.freezed.dart / *.mocks.dart)..."
|
|
while IFS= read -r -d '' file; do
|
|
echo " rm $file"
|
|
rm "$file"
|
|
done < <(find "$ROOT_DIR" -type f \
|
|
\( -name "*.g.dart" -o -name "*.freezed.dart" -o -name "*.mocks.dart" \) \
|
|
-not -path "*/.git/*" -not -path "*/build/*" -print0)
|
|
|
|
# ── Android ────────────────────────────────────────────────────────────────
|
|
if should_clean android; then
|
|
echo "==> Cleaning Android Gradle..."
|
|
cd "$APP_DIR/android"
|
|
chmod +x gradlew
|
|
./gradlew clean
|
|
fi
|
|
|
|
# ── iOS ────────────────────────────────────────────────────────────────────
|
|
if should_clean ios; then
|
|
IOS_DIR="$APP_DIR/ios"
|
|
if [ -d "$IOS_DIR" ]; then
|
|
echo "==> Cleaning iOS Pods..."
|
|
rm -rf "$IOS_DIR/Pods"
|
|
rm -f "$IOS_DIR/Podfile.lock"
|
|
rm -rf "$IOS_DIR/.symlinks"
|
|
if command -v pod &>/dev/null; then
|
|
cd "$IOS_DIR" && pod cache clean --all
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# ── macOS ──────────────────────────────────────────────────────────────────
|
|
if should_clean macos; then
|
|
MACOS_DIR="$APP_DIR/macos"
|
|
if [ -d "$MACOS_DIR" ]; then
|
|
echo "==> Cleaning macOS Pods..."
|
|
rm -rf "$MACOS_DIR/Pods"
|
|
rm -f "$MACOS_DIR/Podfile.lock"
|
|
if command -v pod &>/dev/null; then
|
|
cd "$MACOS_DIR" && pod cache clean --all
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# ── Windows ────────────────────────────────────────────────────────────────
|
|
if should_clean windows; then
|
|
WIN_DIR="$APP_DIR/windows"
|
|
if [ -d "$WIN_DIR" ]; then
|
|
echo "==> Cleaning Windows build artifacts..."
|
|
rm -rf "$WIN_DIR/flutter/ephemeral"
|
|
find "$WIN_DIR" -name "CMakeCache.txt" -delete
|
|
find "$WIN_DIR" -name "CMakeFiles" -type d -exec rm -rf {} + 2>/dev/null || true
|
|
fi
|
|
fi
|
|
|
|
# ── Re-fetch dependencies ──────────────────────────────────────────────────
|
|
echo "==> Running dart pub get at workspace root..."
|
|
cd "$ROOT_DIR"
|
|
dart pub get
|
|
|
|
echo ""
|
|
echo "Deep clean complete. Platforms cleaned: ${TARGETS[*]}"
|
|
echo "Next: melos run gen"
|