Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions src/zsh/plugin-init/android-sdk.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -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/<version>\" \"$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
36 changes: 22 additions & 14 deletions tests/test_helpers.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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)
Expand All @@ -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
Expand Down
34 changes: 34 additions & 0 deletions tests/test_plugin_android_sdk.bats
Original file line number Diff line number Diff line change
@@ -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" ]]
}