185 lines
7.5 KiB
Bash
Executable File
185 lines
7.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# =============================================================================
|
|
# osvauco-opax-boot.sh — OSVauco OPAX session-starter
|
|
# Bruk: source ~/OSVauco/scripts/osvauco-opax-boot.sh
|
|
# NB: Må sources (ikke bash) for PROMPT_COMMAND + opax_logg_slutt.
|
|
# Standalone avslutt: bash ~/OSVauco/scripts/opax-logg-slutt.sh
|
|
# =============================================================================
|
|
|
|
OSVAUCO_DIR="$HOME/OSVauco"
|
|
ROADMAP="$OSVAUCO_DIR/docs/VAUCO_OS_ROADMAP.md"
|
|
TODO="$OSVAUCO_DIR/docs/TODO.md"
|
|
SESSION_LOG="$OSVAUCO_DIR/docs/OSVAUCO_OPAX_SESSION_LOG.md"
|
|
STATE_FILE="$OSVAUCO_DIR/.gdrive-mirror-state"
|
|
BASHRC="$HOME/.bashrc"
|
|
|
|
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)"
|
|
|
|
OK="${GREEN}[OK]${NC}"
|
|
WARN="${YELLOW}[!!]${NC}"
|
|
FAIL="${RED}[XX]${NC}"
|
|
|
|
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
|
|
|
|
# ADC sjekk med 8t cache
|
|
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
|
|
# Sjekk om filen er eldre enn 8 timer (28800 sekunder)
|
|
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 eller gammel — fornyer...${NC}\n"
|
|
gcloud auth application-default login --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
|
|
|
|
# =============================================================================
|
|
# COMPACT BOOT UI
|
|
# =============================================================================
|
|
printf "${CYAN}OSVauco · OPAX ❱ %s · %s${NC}\n" "$SESSION_ID" "${PROJECT_ID:-propane-will-491900-m5}"
|
|
printf "${DIM}────────────────────────────────────────────────────────────${NC}\n"
|
|
|
|
# 1. SERVICES
|
|
printf "${BOLD}SERVICES${NC}\n"
|
|
# Helper: check_service <name> <cmd>
|
|
check_service() {
|
|
printf " %-12s " "$1"
|
|
if eval "$2" >/dev/null 2>&1; then printf "${GREEN}✦ OK${NC}\n"; else printf "${RED}✗ FAIL${NC}\n"; fi
|
|
}
|
|
# Vertex, Cloud Run, GH, Git
|
|
check_service "Vertex AI" "curl -s -f -H \"Authorization: Bearer $(gcloud auth application-default print-access-token)\" \"https://us-central1-aiplatform.googleapis.com/v1/projects/propane-will-491900-m5/locations/us-central1/models\""
|
|
check_service "Cloud Run" "curl -s -f -H \"Authorization: Bearer $(gcloud auth print-identity-token)\" https://opax.vauco.no/health"
|
|
check_service "GitHub" "gh auth status"
|
|
check_service "Git Remote" "git -C $OSVAUCO_DIR ls-remote origin refs/heads/main"
|
|
|
|
printf "${DIM}────────────────────────────────────────────────────────────${NC}\n"
|
|
|
|
# 2. SYSTEM
|
|
printf "${BOLD}SYSTEM${NC}\n"
|
|
LOAD=$(cat /proc/loadavg | awk '{print $1}')
|
|
MEM=$(free -h | grep Mem | awk '{printf "%s/%s", $3, $2}')
|
|
DISK=$(df -h / | tail -1 | awk '{print $5}')
|
|
printf " %-12s %s · %s · %s\n" "Resources" "Load: $LOAD" "RAM: $MEM" "/: $DISK"
|
|
printf " %-12s %s\n" "Uptime" "$(uptime -p | sed 's/up //')"
|
|
|
|
printf "${DIM}────────────────────────────────────────────────────────────${NC}\n"
|
|
|
|
# 3. NESTE
|
|
printf "${BOLD}NEXT${NC}\n"
|
|
NEXT_ROADMAP=$(awk '/^## NEXT/{f=1;next} f && /^## /{f=0} f && /^- \[ \]/{print;exit}' "$ROADMAP")
|
|
printf " ${GREEN}▶ %s${NC}\n" "${NEXT_ROADMAP:-Ingen oppgave}"
|
|
|
|
printf "${DIM}────────────────────────────────────────────────────────────${NC}\n"
|
|
printf "── ready ── SESSION %s ──────────────────\n\n" "$SESSION_ID"
|
|
|
|
# =============================================================================
|
|
# Load nvm
|
|
# =============================================================================
|
|
export NVM_DIR="$HOME/.nvm"
|
|
[[ -s "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh"
|
|
if ! command -v gemini &>/dev/null && [[ -d "$NVM_DIR" ]]; then
|
|
NVM_DEFAULT=$(nvm version default 2>/dev/null || true)
|
|
[[ -n "$NVM_DEFAULT" ]] && nvm use "$NVM_DEFAULT" &>/dev/null || true
|
|
fi
|
|
|
|
# =============================================================================
|
|
# AVSLUTT-FUNKSJON
|
|
# =============================================================================
|
|
sol() {
|
|
PROMPT_COMMAND="${PROMPT_COMMAND//_opax_log_cmd; /}"
|
|
PROMPT_COMMAND="${PROMPT_COMMAND//_opax_log_cmd/}"
|
|
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 → docs/OSVAUCO_OPAX_SESSION_LOG.md\n\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} Sesjonslogg pushet → GitHub\n\n"
|
|
else
|
|
printf " ${DIM}[--]${NC} Ingen ny logg å pushe\n\n"
|
|
fi
|
|
}
|
|
export -f sol 2>/dev/null || true
|
|
alias sol='sol'
|
|
alias opax-logg-slutt='sol'
|
|
|
|
|
|
# =============================================================================
|
|
# VALGFRI GEMINI-START
|
|
# =============================================================================
|
|
read -r -p " Starte Gemini-CLI nå? [y/N]: " ANSWER
|
|
case "$ANSWER" in
|
|
y|Y)
|
|
echo
|
|
if ! command -v gemini &>/dev/null; then
|
|
printf " ${RED}[XX]${NC} gemini ikke funnet.\n"
|
|
else
|
|
echo " [OSVauco] Starter Gemini-CLI fra ~/OSVauco..."
|
|
cd "$OSVAUCO_DIR"
|
|
gemini
|
|
fi
|
|
;;
|
|
*)
|
|
echo
|
|
echo " [OSVauco] OK — kjør 'gemini' når du vil. God session! 🚀"
|
|
;;
|
|
esac
|
|
|
|
# =============================================================================
|
|
# QUICK COMMANDS
|
|
# =============================================================================
|
|
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" "l" "ls -la" "ll" "ls -lh"
|
|
printf " %-4s %-12s %-4s %-12s\n" "sol" "avslutt" "" ""
|
|
printf "\n"
|