From 9bd68dbd8eb8abe7a21ac4ae0e8addb1feab88cb Mon Sep 17 00:00:00 2001 From: fengelhardt Date: Thu, 13 Nov 2025 05:30:07 -0800 Subject: [PATCH 1/2] Update so command line tools are exposed for android sdk --- src/zsh/plugin-init/android-sdk.zsh | 24 +++++++++++++++++++ tests/test_helpers.zsh | 36 ++++++++++++++++++----------- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/src/zsh/plugin-init/android-sdk.zsh b/src/zsh/plugin-init/android-sdk.zsh index 1f66c9e..a55c78d 100755 --- a/src/zsh/plugin-init/android-sdk.zsh +++ b/src/zsh/plugin-init/android-sdk.zsh @@ -4,3 +4,27 @@ export PATH=$PATH:$ANDROID_HOME/emulator export PATH=$PATH:$ANDROID_HOME/tools export PATH=$PATH:$ANDROID_HOME/tools/bin export PATH=$PATH:$ANDROID_HOME/platform-tools + + +# Only add cmdline-tools 'latest' to PATH if it exists (prevents broken PATH entries) +if [[ -d "$ANDROID_HOME/cmdline-tools/latest/bin" ]]; then + export PATH="$PATH:$ANDROID_HOME/cmdline-tools/latest/bin" +else + # If cmdline-tools exists, list available versions and suggest creating a 'latest' symlink + if [[ -d "$ANDROID_HOME/cmdline-tools" ]]; then + echo "Note: Android cmdline-tools 'latest' not found at: $ANDROID_HOME/cmdline-tools/latest" + echo "Available cmdline-tools directories:" + # List entries in the cmdline-tools directory + ls -1 "$ANDROID_HOME/cmdline-tools" 2>/dev/null | sed 's/^/ - /' + echo "" + echo "You can create a 'latest' symlink to one of the above versions, for example:" + echo " ln -s \"$ANDROID_HOME/cmdline-tools/\" \"$ANDROID_HOME/cmdline-tools/latest\"" + echo "After creating the symlink, re-open your shell to pick up the new PATH entry." + else + # cmdline-tools directory is missing entirely + echo "Android cmdline-tools not found under: $ANDROID_HOME/cmdline-tools" + echo "Install the Android SDK Command-line Tools (via Android Studio's SDK Manager), or run:" + echo " sdkmanager --install \"cmdline-tools;latest\"" + echo "Once installed, ensure the cmdline-tools are located at: $ANDROID_HOME/cmdline-tools/latest/bin" + fi +fi diff --git a/tests/test_helpers.zsh b/tests/test_helpers.zsh index f0b248f..f34965b 100644 --- a/tests/test_helpers.zsh +++ b/tests/test_helpers.zsh @@ -53,15 +53,19 @@ flatten_yaml_to_env_vars() { echo -e "${COLOR_RED}✗${COLOR_RESET} Config missing 'profile' field" return 1 fi - - typeset -g "OSA_CONFIG_PROFILE=$profile" + + # Use eval+export for dynamic variable names (bash-friendly) + OSA_CONFIG_PROFILE="$profile" + export OSA_CONFIG_PROFILE # Flatten components section local -a component_keys=(symlinks oh_my_zsh zsh_plugins homebrew mise osa_snippets git android iterm2 vscode cocoapods) for key in "${component_keys[@]}"; do - local value=$(yq eval ".components.${key} // false" "$resolved_path" 2>/dev/null) - local var_name="OSA_CONFIG_COMPONENTS_$(echo $key | tr a-z A-Z | tr '-' '_')" - typeset -g "$var_name=$value" + local value=$(yq eval ".components.${key} // false" "$resolved_path" 2>/dev/null) + local var_name="OSA_CONFIG_COMPONENTS_$(echo $key | tr a-z A-Z | tr '-' '_')" + # Assign and export dynamic variable name in a bash-compatible way + eval "${var_name}='${value}'" + eval "export ${var_name}" done # Flatten runtimes section @@ -70,11 +74,13 @@ flatten_yaml_to_env_vars() { local enabled=$(yq eval ".runtimes.${runtime}.enabled // false" "$resolved_path" 2>/dev/null) local version=$(yq eval ".runtimes.${runtime}.version // \"latest\"" "$resolved_path" 2>/dev/null) - local enabled_var="OSA_CONFIG_RUNTIMES_$(echo $runtime | tr a-z A-Z)_ENABLED" - local version_var="OSA_CONFIG_RUNTIMES_$(echo $runtime | tr a-z A-Z)_VERSION" - - typeset -g "$enabled_var=$enabled" - typeset -g "$version_var=$version" + local enabled_var="OSA_CONFIG_RUNTIMES_$(echo $runtime | tr a-z A-Z)_ENABLED" + local version_var="OSA_CONFIG_RUNTIMES_$(echo $runtime | tr a-z A-Z)_VERSION" + + eval "${enabled_var}='${enabled}'" + eval "export ${enabled_var}" + eval "${version_var}='${version}'" + eval "export ${version_var}" done # Flatten snippets section @@ -87,8 +93,9 @@ flatten_yaml_to_env_vars() { local repo_upper=$(echo "$repo" | tr a-z A-Z | tr '-' '_') local enabled=$(yq eval ".snippets.${repo}.enabled" "$resolved_path" 2>/dev/null) - local enabled_var="OSA_CONFIG_SNIPPETS_${repo_upper}_ENABLED" - typeset -g "$enabled_var=$enabled" + local enabled_var="OSA_CONFIG_SNIPPETS_${repo_upper}_ENABLED" + eval "${enabled_var}='${enabled}'" + eval "export ${enabled_var}" # Get features array local features=$(yq eval ".snippets.${repo}.features" "$resolved_path" 2>/dev/null) @@ -103,8 +110,9 @@ flatten_yaml_to_env_vars() { while IFS= read -r feature; do [[ -z "$feature" ]] && continue local feature_upper=$(echo "$feature" | tr a-z A-Z | tr '-' '_') - local feature_var="OSA_CONFIG_SNIPPETS_${repo_upper}_${feature_upper}" - typeset -g "$feature_var=true" + local feature_var="OSA_CONFIG_SNIPPETS_${repo_upper}_${feature_upper}" + eval "${feature_var}=true" + eval "export ${feature_var}" done <<< "$feature_list" done <<< "$snippet_repos" fi From 02fefcd6ee9aa361c249b3703c07d095eeaa6fac Mon Sep 17 00:00:00 2001 From: fengelhardt Date: Sat, 15 Nov 2025 08:23:47 -0800 Subject: [PATCH 2/2] add tests for android sdk --- src/zsh/plugin-init/android-sdk.zsh | 2 +- tests/test_plugin_android_sdk.bats | 34 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 tests/test_plugin_android_sdk.bats diff --git a/src/zsh/plugin-init/android-sdk.zsh b/src/zsh/plugin-init/android-sdk.zsh index a55c78d..75cbd60 100755 --- a/src/zsh/plugin-init/android-sdk.zsh +++ b/src/zsh/plugin-init/android-sdk.zsh @@ -27,4 +27,4 @@ else echo " sdkmanager --install \"cmdline-tools;latest\"" echo "Once installed, ensure the cmdline-tools are located at: $ANDROID_HOME/cmdline-tools/latest/bin" fi -fi +fi \ No newline at end of file diff --git a/tests/test_plugin_android_sdk.bats b/tests/test_plugin_android_sdk.bats new file mode 100644 index 0000000..82b008e --- /dev/null +++ b/tests/test_plugin_android_sdk.bats @@ -0,0 +1,34 @@ +#!/usr/bin/env bats +# tests/test_plugin_android_sdk.bats - Verify android-sdk plugin init behavior + +load helpers + +setup() { + export TEST_TEMP_DIR=$(mktemp -d) + export HOME="$TEST_TEMP_DIR/home" + mkdir -p "$HOME" + # Ensure OSA_REPO_PATH is available to helpers + export OSA_REPO_PATH="$OSA_TEST_REPO_ROOT" +} + +teardown() { + rm -rf "$TEST_TEMP_DIR" +} + +@test "android-sdk plugin informs user when Android SDK cmdline-tools missing" { + run bash -c ". '$OSA_TEST_REPO_ROOT/src/zsh/plugin-init/android-sdk.zsh'" + # The plugin should not error; it should print an informative message about missing cmdline-tools + [[ "$status" -eq 0 ]] + [[ "$output" =~ "Android cmdline-tools not found" ]] || [[ "$output" =~ "Available cmdline-tools directories" ]] +} + +@test "android-sdk plugin suggests symlink when cmdline-tools present but 'latest' missing" { + # Create a fake cmdline-tools/version directory but not 'latest' + mkdir -p "$HOME/Library/Android/sdk/cmdline-tools/5.0" + + run bash -c ". '$OSA_TEST_REPO_ROOT/src/zsh/plugin-init/android-sdk.zsh'" + [[ "$status" -eq 0 ]] + # Should list available cmdline-tools directories and suggest creating a 'latest' symlink + [[ "$output" =~ "Available cmdline-tools directories" ]] + [[ "$output" =~ "create a 'latest' symlink" ]] || [[ "$output" =~ "ln -s" ]] +}