From 38661de653e6e8d851f0196fe81042fc5a7d6ade Mon Sep 17 00:00:00 2001 From: hygienic-books Date: Fri, 28 Aug 2026 09:31:51 +0200 Subject: [PATCH] feat(workspace): select sandbox names and mounts --- build-sbx.sh | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/build-sbx.sh b/build-sbx.sh index fffcc5d..677b736 100755 --- a/build-sbx.sh +++ b/build-sbx.sh @@ -87,6 +87,73 @@ main() { local -a sandbox_names 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 "$@"