#!/usr/bin/env bash # preflight.sh — alias 'pf' # Sjekker auth, project, .env og git status set -euo pipefail GREEN="$(tput setaf 2)"; RED="$(tput setaf 1)"; YELLOW="$(tput setaf 3)"; NC="$(tput sgr0)"; BOLD="$(tput bold)" ok() { printf " ${GREEN}✦ OK${NC} %s\n" "$1"; } fail() { printf " ${RED}✗ FAIL${NC} %s\n" "$1"; } warn() { printf " ${YELLOW}⚠ WARN${NC} %s\n" "$1"; } printf "${BOLD}OSVauco Preflight${NC}\n" printf "────────────────────────────────\n" # 1. gcloud auth if gcloud auth print-access-token >/dev/null 2>&1; then ACCOUNT=$(gcloud auth list --filter=status:ACTIVE --format='value(account)' 2>/dev/null | head -1) ok "gcloud auth ($ACCOUNT)" else fail "gcloud auth — ikke innlogget" echo "" echo " Kjør: gcloud auth login --no-launch-browser" exit 1 fi # 2. ADC (Application Default Credentials) # På en GCE-VM leveres ADC automatisk av metadata-serveren — ALDRI tving # interaktiv 'gcloud auth application-default login' (browser-kode henger på VM). if gcloud auth application-default print-access-token >/dev/null 2>&1; then ok "ADC (application-default)" elif curl -s -H "Metadata-Flavor: Google" \ "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \ >/dev/null 2>&1; then ok "ADC (VM metadata service-account)" else warn "ADC ikke tilgjengelig. På VM: sjekk at instansen har en service-account." warn "Manuelt (kun hvis nødvendig): gcloud auth application-default login" fi # 3. Prosjekt PROJECT=$(gcloud config get-value project 2>/dev/null) if [[ "$PROJECT" == "propane-will-491900-m5" ]]; then ok "GCP project ($PROJECT)" else warn "Feil prosjekt: '$PROJECT' — setter til propane-will-491900-m5" gcloud config set project propane-will-491900-m5 fi # 4. .env if [[ -f "$HOME/OSVauco/.env" ]]; then ok ".env eksisterer" else fail ".env mangler — IKKE opprett fra .env.example" echo " Hent fra Secret Manager:" echo " gcloud secrets versions access latest --secret=osvauco-env --project=propane-will-491900-m5 > .env" fi # 5. Git status cd "$HOME/OSVauco" GIT_BRANCH=$(git branch --show-current 2>/dev/null) GIT_DIRTY=$(git status --porcelain 2>/dev/null | wc -l | tr -d ' ') if [[ "$GIT_BRANCH" == "main" ]]; then ok "git branch (main)" else warn "git branch er '$GIT_BRANCH' — forventet main" fi [[ "$GIT_DIRTY" -gt 0 ]] && warn "$GIT_DIRTY ustaged endringer" || ok "git working tree (rent)" printf "────────────────────────────────\n" echo ""