diff --git a/.ideai/skills/scripts/build-watch-apk.sh b/.ideai/skills/scripts/build-watch-apk.sh new file mode 100755 index 0000000..63d6392 --- /dev/null +++ b/.ideai/skills/scripts/build-watch-apk.sh @@ -0,0 +1,90 @@ +#!/usr/bin/env bash +set -euo pipefail + +MODE="${1:-debug}" + +if [[ "$MODE" != "debug" && "$MODE" != "release" ]]; then + echo "Usage: $0 [debug|release]" >&2 + exit 2 +fi + +PROJECT_ROOT="/home/anthony/Documents/Projects/GameTime" +WATCH_ROOT="$PROJECT_ROOT/watch_app" +BUILD_ENV_ROOT="$PROJECT_ROOT/.ideai/build-env" +SDK_COPY="$BUILD_ENV_ROOT/flutter-sdk" +HOME_DIR="$BUILD_ENV_ROOT/home" +GRADLE_DIR="$BUILD_ENV_ROOT/gradle" +PUB_CACHE_DIR="$BUILD_ENV_ROOT/pub-cache" +TMP_DIR="$BUILD_ENV_ROOT/tmp" +ANDROID_HOME="/opt/android-sdk" +JAVA_HOME="/usr/lib/jvm/java-21-openjdk" +FLUTTER_BIN="$SDK_COPY/bin/flutter" + +mkdir -p "$BUILD_ENV_ROOT" "$HOME_DIR/.config" "$HOME_DIR/.local/share" "$HOME_DIR/.cache" "$GRADLE_DIR" "$PUB_CACHE_DIR" "$TMP_DIR" + +if [[ ! -x "$FLUTTER_BIN" ]]; then + cp -a /opt/flutter "$SDK_COPY" +fi + +export HOME="$HOME_DIR" +export XDG_CONFIG_HOME="$HOME_DIR/.config" +export XDG_DATA_HOME="$HOME_DIR/.local/share" +export XDG_CACHE_HOME="$HOME_DIR/.cache" +export GRADLE_USER_HOME="$GRADLE_DIR" +export PUB_CACHE="$PUB_CACHE_DIR" +export TMPDIR="$TMP_DIR" +export TMP="$TMP_DIR" +export TEMP="$TMP_DIR" +export JAVA_TOOL_OPTIONS="-Djava.io.tmpdir=$TMP_DIR" +export GRADLE_OPTS="-Djava.io.tmpdir=$TMP_DIR" +export ANDROID_HOME +export JAVA_HOME +export PATH="$JAVA_HOME/bin:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH" + +cd "$WATCH_ROOT" + +"$FLUTTER_BIN" --disable-analytics pub get +set +e +"$FLUTTER_BIN" build apk "--$MODE" +BUILD_STATUS=$? +set -e + +APK_PATH="$WATCH_ROOT/build/app/outputs/flutter-apk/app-$MODE.apk" +ALT_APK_PATH="$WATCH_ROOT/build/watch_app/app/outputs/flutter-apk/app-$MODE.apk" +LEGACY_ALT_APK_PATH="$WATCH_ROOT/build/watch_app/app/outputs/apk/$MODE/app-$MODE.apk" +CANONICAL_APK_PATH="$WATCH_ROOT/build/app/outputs/flutter-apk/app-$MODE.apk" + +copy_to_canonical_path() { + local source_apk="$1" + mkdir -p "$(dirname "$CANONICAL_APK_PATH")" + if [[ "$source_apk" == "$CANONICAL_APK_PATH" ]]; then + echo "APK already at canonical path: $CANONICAL_APK_PATH" + return 0 + fi + cp "$source_apk" "$CANONICAL_APK_PATH" + echo "APK copied to canonical path: $CANONICAL_APK_PATH" +} + +if [[ -f "$APK_PATH" ]]; then + copy_to_canonical_path "$APK_PATH" + echo "APK built at: $APK_PATH" + exit 0 +fi + +if [[ -f "$ALT_APK_PATH" ]]; then + copy_to_canonical_path "$ALT_APK_PATH" + echo "APK built at: $ALT_APK_PATH" + exit 0 +fi + +if [[ -f "$LEGACY_ALT_APK_PATH" ]]; then + copy_to_canonical_path "$LEGACY_ALT_APK_PATH" + echo "APK built at: $LEGACY_ALT_APK_PATH" + exit 0 +fi + +if [[ $BUILD_STATUS -ne 0 ]]; then + exit "$BUILD_STATUS" +fi + +echo "APK built at: $APK_PATH"