OSVauco/scripts/osvauco-opax-boot.sh

173 lines
6.9 KiB
Bash

#!/usr/bin/env bash
# =============================================================================
# osvauco-opax-boot.sh — OSVauco OPAX session-starter
# Bruk: source ~/OSVauco/scripts/osvauco-opax-boot.sh
# =============================================================================
OSVAUCO_DIR="$HOME/OSVauco"
ROADMAP="$OSVAUCO_DIR/docs/VAUCO_OS_ROADMAP.md"
SESSION_LOG="$OSVAUCO_DIR/docs/OSVAUCO_OPAX_SESSION_LOG.md"
DIRECT_URL="https://osvauco-agent-357036551735.us-central1.run.app"
DOMAIN_URL="https://opax.vauco.no"
GREEN="$(tput setaf 2 || true)"
RED="$(tput setaf 1 || true)"
YELLOW="$(tput setaf 3 || true)"
CYAN="$(tput setaf 6 || true)"
BOLD="$(tput bold || true)"
DIM="\033[2m"
NC="$(tput sgr0 || true)"
SESSION_ID="$(date '+%Y%m%d-%H%M%S')"
# =============================================================================
# AUTO-AUTH RENEWAL
# =============================================================================
ADC_SCOPE_FILE="$HOME/.config/gcloud/.osvauco-adc-renewed"
printf "${BOLD}${CYAN} [ AUTH ]${NC}\n"
if ! gcloud auth print-access-token >/dev/null 2>&1; then
printf " ${YELLOW}⚠ gcloud auth utløpt — logger inn...${NC}\n"
gcloud auth login --no-launch-browser
else
printf " ${DIM}✦ gcloud auth OK${NC}\n"
fi
NEED_ADC_LOGIN=0
if ! gcloud auth application-default print-access-token >/dev/null 2>&1; then
NEED_ADC_LOGIN=1
elif [[ -f "$ADC_SCOPE_FILE" ]]; then
if [[ $(($(date +%s) - $(stat -c %Y "$ADC_SCOPE_FILE"))) -gt 28800 ]]; then
NEED_ADC_LOGIN=1
fi
else
NEED_ADC_LOGIN=1
fi
if [[ $NEED_ADC_LOGIN -eq 1 ]]; then
printf " ${YELLOW}⚠ ADC utløpt — fornyer...${NC}\n"
gcloud auth application-default login --no-launch-browser \
--scopes="https://www.googleapis.com/auth/cloud-platform"
touch "$ADC_SCOPE_FILE"
else
printf " ${DIM}✦ ADC OK${NC}\n"
fi
printf " ${GREEN}✦ Auth klar${NC}\n\n"
clear
# =============================================================================
# BOOT UI
# =============================================================================
printf "${CYAN}OSVauco · OPAX ❱ %s · propane-will-491900-m5${NC}\n" "$SESSION_ID"
printf "${DIM}────────────────────────────────────────────────────────────${NC}\n"
printf "${BOLD}SERVICES${NC}\n"
# Cloud Run — sjekk direkte URL (den faktiske tjenesten)
TOKEN=$(gcloud auth print-identity-token 2>/dev/null || true)
CR_HTTP=$(curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
"$DIRECT_URL/health" 2>/dev/null || echo "000")
if [[ "$CR_HTTP" == "200" ]]; then
printf " %-20s ${GREEN}✦ OK${NC} (HTTP $CR_HTTP)\n" "Cloud Run (direkte)"
else
printf " %-20s ${RED}✗ FAIL${NC} (HTTP $CR_HTTP)\n" "Cloud Run (direkte)"
fi
# opax.vauco.no — domenesjekken — Phase 5
DOMAIN_HTTP=$(curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
"$DOMAIN_URL/health" 2>/dev/null || echo "000")
if [[ "$DOMAIN_HTTP" == "200" ]]; then
printf " %-20s ${GREEN}✦ OK${NC} (HTTP $DOMAIN_HTTP)\n" "opax.vauco.no"
else
printf " %-20s ${YELLOW}⚠ VENTER${NC} (HTTP $DOMAIN_HTTP) — Phase 5: IAP + domene ikke konfigurert ennå\n" "opax.vauco.no"
fi
# GitHub + Git
printf " %-20s " "GitHub"
if gh auth status >/dev/null 2>&1; then printf "${GREEN}✦ OK${NC}\n"; else printf "${RED}✗ FAIL${NC}\n"; fi
printf " %-20s " "Git Remote"
if git -C "$OSVAUCO_DIR" ls-remote origin refs/heads/main >/dev/null 2>&1; then printf "${GREEN}✦ OK${NC}\n"; else printf "${RED}✗ FAIL${NC}\n"; fi
printf "${DIM}────────────────────────────────────────────────────────────${NC}\n"
printf "${BOLD}SYSTEM${NC}\n"
LOAD=$(awk '{print $1}' /proc/loadavg)
MEM=$(free -h | awk '/Mem:/{printf "%s/%s", $3, $2}')
DISK=$(df -h / | awk 'NR==2{print $5}')
printf " %-20s Load: %s · RAM: %s · /: %s\n" "Resources" "$LOAD" "$MEM" "$DISK"
printf " %-20s %s\n" "Uptime" "$(uptime -p | sed 's/up //')"
printf "${DIM}────────────────────────────────────────────────────────────${NC}\n"
printf "${BOLD}NEXT${NC}\n"
NEXT_ROADMAP=$(awk '/^## NEXT/{f=1;next} f && /^## /{f=0} f && /^- \[ \]/{print;exit}' "$ROADMAP" 2>/dev/null || true)
printf " ${GREEN}▶ %s${NC}\n" "${NEXT_ROADMAP:-Ingen oppgave i roadmap}"
printf "${DIM}────────────────────────────────────────────────────────────${NC}\n"
printf "${BOLD}QUICK COMMANDS${NC}\n"
printf " %-4s %-12s %-4s %-12s\n" "ca" "cost-audit" "cl" "cost-lens"
printf " %-4s %-12s %-4s %-12s\n" "cg" "cost-guard" "hc" "health-check"
printf " %-4s %-12s %-4s %-12s\n" "pf" "preflight" "st" "smoke-test"
printf " %-4s %-12s %-4s %-12s\n" "rl" "roadmap" "sl" "session-log"
printf " %-4s %-12s %-4s %-12s\n" "ms" "mirror-sync" "g" "gemini"
printf " %-4s %-12s %-4s %-12s\n" "sol" "session-exit" "" ""
printf "\n── ready ── SESSION %s ──\n\n" "$SESSION_ID"
# =============================================================================
# NVM
# =============================================================================
export NVM_DIR="$HOME/.nvm"
[[ -s "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh"
# =============================================================================
# AVSLUTT-FUNKSJON
# =============================================================================
sol() {
printf "\n ${BOLD}${CYAN}Sesjonslogg — avslutt${NC}\n"
printf " Hva ble gjort? (LØST / ULØST)\n > "
read -r DONE_DESC
[[ -z "$DONE_DESC" ]] && DONE_DESC="(ingen notat)"
printf " Uløste problemer? (Enter for ingen)\n > "
read -r UNSOLVED
[[ -z "$UNSOLVED" ]] && UNSOLVED="ingen"
cat >> "$SESSION_LOG" << EOF
### Sesjonsavslutning
- Gjort : $DONE_DESC
- Uløst : $UNSOLVED
- Slutt : $(date '+%Y-%m-%d %H:%M %Z')
EOF
printf " ${GREEN}[OK]${NC} Logg oppdatert\n"
cd "$OSVAUCO_DIR"
git add docs/OSVAUCO_OPAX_SESSION_LOG.md 2>/dev/null || true
if ! git diff --cached --quiet; then
git commit -m "chore(session): logg sesjon $SESSION_ID$DONE_DESC"
git push origin main
printf " ${GREEN}[OK]${NC} Pushet → GitHub\n\n"
fi
}
export -f sol 2>/dev/null || true
alias sol='sol'
# =============================================================================
# GEMINI-START
# =============================================================================
read -r -p " Starte Gemini-CLI nå? [y/N]: " ANSWER
case "$ANSWER" in
y|Y)
if ! command -v gemini &>/dev/null; then
printf " ${RED}[XX]${NC} gemini ikke funnet.\n"
else
cd "$OSVAUCO_DIR"
gemini
fi
;;
*)
echo " OK — kjør 'gemini' når du er klar. 🚀"
;;
esac