refactor: decompose GCP ensure_gcloud and create_server into focused helpers (#964)

ensure_gcloud (36 lines -> 5 lines + 3 helpers):
- _gcp_check_cli_installed: verify gcloud CLI presence
- _gcp_check_auth: verify active authenticated account
- _gcp_resolve_project: resolve and export GCP_PROJECT

create_server (65 lines -> 37 lines + 4 helpers):
- _gcp_write_startup_script: write cloud-init to tracked temp file
- _gcp_invoke_create: run gcloud compute instances create
- _gcp_handle_create_error: actionable error guidance
- _gcp_get_instance_ip: fetch and export instance external IP

Agent: complexity-hunter

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
A 2026-02-13 10:19:19 -08:00 committed by GitHub
parent 118be14a23
commit 8852bcfc36
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -28,7 +28,8 @@ GCP_USERNAME=$(whoami)
# SSH_OPTS is now defined in shared/common.sh
ensure_gcloud() {
# Verify gcloud CLI is installed
_gcp_check_cli_installed() {
if ! command -v gcloud &>/dev/null; then
_log_diagnostic \
"Google Cloud SDK (gcloud) is required but not installed" \
@ -38,7 +39,10 @@ ensure_gcloud() {
"Or on macOS: brew install google-cloud-sdk"
return 1
fi
# Verify auth
}
# Verify gcloud has an active authenticated account
_gcp_check_auth() {
if ! gcloud auth list --filter=status:ACTIVE --format="value(account)" 2>/dev/null | head -1 | grep -q '@'; then
_log_diagnostic \
"gcloud is not authenticated" \
@ -49,7 +53,10 @@ ensure_gcloud() {
"Or set credentials via: export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json"
return 1
fi
# Set project
}
# Resolve and export GCP_PROJECT from env var or gcloud config
_gcp_resolve_project() {
local project="${GCP_PROJECT:-$(gcloud config get-value project 2>/dev/null)}"
if [[ -z "${project}" || "${project}" == "(unset)" ]]; then
_log_diagnostic \
@ -65,6 +72,12 @@ ensure_gcloud() {
log_info "Using GCP project: ${project}"
}
ensure_gcloud() {
_gcp_check_cli_installed || return 1
_gcp_check_auth || return 1
_gcp_resolve_project
}
ensure_ssh_key() {
local key_path="${HOME}/.ssh/id_ed25519"