feat(workspace): select sandbox names and mounts
This commit is contained in:
67
build-sbx.sh
67
build-sbx.sh
@@ -87,6 +87,73 @@ main() {
|
|||||||
|
|
||||||
local -a sandbox_names
|
local -a sandbox_names
|
||||||
mapfile -t sandbox_names < <(jq -r '.sandboxes[].name' <<< "$sandbox_json")
|
mapfile -t sandbox_names < <(jq -r '.sandboxes[].name' <<< "$sandbox_json")
|
||||||
|
|
||||||
|
local base_sandbox_name next_version selected_sandbox
|
||||||
|
local -a current_workspace_paths=()
|
||||||
|
local -a workspace_paths=()
|
||||||
|
|
||||||
|
if [[ "$build_from_scratch" == true ]]; then
|
||||||
|
prompt_component sandbox_prefix 'Sandbox prefix' 'finmas-gmbh' 'private'
|
||||||
|
prompt_component sandbox_purpose 'Sandbox purpose' 'git-work' 'generic-research'
|
||||||
|
prompt_component sandbox_suffix 'Sandbox suffix' 'finmas-api' 'private-api'
|
||||||
|
base_sandbox_name="${sandbox_prefix}-${sandbox_purpose}-${sandbox_suffix}"
|
||||||
|
next_version=1
|
||||||
|
else
|
||||||
|
require_command fzf 'We cannot select an existing Docker sbx image because fzf does not seem to be installed.'
|
||||||
|
if ((${#sandbox_names[@]} == 0)); then
|
||||||
|
printf 'No existing Docker sbx sandboxes were found.\n' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! selected_sandbox=$(printf '%s\n' "${sandbox_names[@]}" | fzf \
|
||||||
|
--prompt='Select Docker sbx image: ' --height=40% --reverse); then
|
||||||
|
printf 'No Docker sbx image was selected.\n'
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
mapfile -t current_workspace_paths < <(
|
||||||
|
jq -r --arg name "$selected_sandbox" \
|
||||||
|
'.sandboxes[] | select(.name == $name) | .workspaces[]?' \
|
||||||
|
<<< "$sandbox_json"
|
||||||
|
)
|
||||||
|
|
||||||
|
if [[ "$selected_sandbox" =~ ^(.*)-v([0-9]+)$ ]]; then
|
||||||
|
base_sandbox_name="${BASH_REMATCH[1]}"
|
||||||
|
next_version=$((10#${BASH_REMATCH[2]} + 1))
|
||||||
|
else
|
||||||
|
base_sandbox_name="$selected_sandbox"
|
||||||
|
next_version=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
local new_sandbox_name="${base_sandbox_name}-v${next_version}"
|
||||||
|
|
||||||
|
if [[ "$build_from_scratch" == true &&
|
||||||
|
( "$sandbox_prefix" != 'finmas-gmbh' || "$sandbox_suffix" == 'private-api' ) ]]; then
|
||||||
|
workspace_paths=("$HOME/docker-sbx/empty")
|
||||||
|
else
|
||||||
|
workspace_paths=("$HOME/Documents/git")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$build_from_scratch" == true ]]; then
|
||||||
|
current_workspace_paths=("${workspace_paths[@]}")
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf 'Workspace directories in the current sandbox:\n'
|
||||||
|
if ((${#current_workspace_paths[@]} == 0)); then
|
||||||
|
printf 'No workspace directories were reported.\n'
|
||||||
|
else
|
||||||
|
printf '%s\n' "${current_workspace_paths[@]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ask_yes_no 'Do you want to add additional workspace directories?'; then
|
||||||
|
local workspace_path
|
||||||
|
while true; do
|
||||||
|
read -r -p 'Additional workspace path (press Enter when finished): ' workspace_path || exit 0
|
||||||
|
[[ -z "$workspace_path" ]] && break
|
||||||
|
workspace_paths+=("$workspace_path")
|
||||||
|
done
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|||||||
Reference in New Issue
Block a user