OSVauco/scripts/osv-startup.ps1

200 lines
7.8 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# OSVauco · OPAX — VS Code Windows Startup
# settings.json: "args": ["-NoExit","-File","G:\\Shared drives\\OS-VAUCO-DRIVE\\OSVauco\\scripts\\osv-startup.ps1"]
$REPO = "G:\Shared drives\OS-VAUCO-DRIVE\OSVauco"
$PING = "https://opax.vauco.no/ping"
$LOG = "$REPO\docs\OSVAUCO_OPAX_SESSION_LOG.md"
$W = 54
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
Set-Location $REPO
Clear-Host
# ---- GCLOUD PATH DETECTION -----------------------------------
# Finn gcloud uavhengig av om den er i PATH
$gcloudCmd = $null
$gcloudPaths = @(
"gcloud",
"$env:LOCALAPPDATA\Google\Cloud SDK\google-cloud-sdk\bin\gcloud.cmd",
"$env:PROGRAMFILES\Google\Cloud SDK\google-cloud-sdk\bin\gcloud.cmd",
"$env:USERPROFILE\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\gcloud.cmd"
)
foreach ($p in $gcloudPaths) {
try {
$null = & $p version 2>$null
if ($LASTEXITCODE -eq 0 -or $?) { $gcloudCmd = $p; break }
} catch {}
}
# ---- SJEKKER (stille) ----------------------------------------
$gcOK = $false; $adcOK = $false; $opaxOK = $false; $gitOK = $false
$gcAcc = ""; $gcNotInstalled = ($null -eq $gcloudCmd)
$gitOut = git pull 2>&1
$gitOK = ($LASTEXITCODE -eq 0)
if (-not $gcNotInstalled) {
try {
$gcAcc = & $gcloudCmd auth list --filter=status:ACTIVE --format="value(account)" 2>$null
if ($gcAcc) {
$gcOK = $true
& $gcloudCmd config set project propane-will-491900-m5 2>$null | Out-Null
& $gcloudCmd config set compute/region us-central1 2>$null | Out-Null
}
} catch {}
try {
$t = & $gcloudCmd auth application-default print-access-token 2>$null
if ($t) { $adcOK = $true }
} catch {}
}
try {
if ((Invoke-RestMethod -Uri $PING -TimeoutSec 5).status -eq 'ok') { $opaxOK = $true }
} catch {}
$allOK = $gitOK -and $opaxOK -and $gcOK
# ---- STATUS STRENGER -----------------------------------------
$gitTxt = if ($gitOK) { if ($gitOut -match 'Already') { "✅ Git : up to date" } else { "✅ Git : oppdatert" } }
else { "❌ Git : FEIL" }
$gcTxt = if ($gcNotInstalled) { " GCP : gcloud ikke funnet — bruk Cloud Shell" }
elseif ($gcOK) { "✅ GCP : " + ($gcAcc -replace '@vauco.no','') }
else { "⚠ GCP : ikke logget inn — gcloud auth login" }
$adcTxt = if ($gcNotInstalled) { " ADC : ikke tilgjengelig i dette miljøet" }
elseif ($adcOK) { "✅ ADC : OK" }
else { "⚠ ADC : gcloud auth application-default login" }
$opaxTxt = if ($opaxOK) { "✅ OPAX : opax.vauco.no" }
else { "❌ OPAX : nede — sjekk Cloud Run" }
# ---- HJELPEFUNKSJONER ----------------------------------------
function Pad($text, $width) {
if ($text.Length -gt $width) { return $text.Substring(0, $width - 1) + "" }
return $text + (" " * ($width - $text.Length))
}
function GlowBox($lines) {
$seg = [math]::Floor($W / 3); $r = $W - $seg * 2
Write-Host " " -NoNewline
Write-Host ("" * $seg) -NoNewline -ForegroundColor Magenta
Write-Host ("" * $seg) -NoNewline -ForegroundColor DarkGreen
Write-Host ("" * $r) -ForegroundColor Green
foreach ($line in $lines) {
$inner = Pad $line ($W - 4)
Write-Host " " -NoNewline
Write-Host "" -NoNewline -ForegroundColor Magenta
Write-Host (" $inner ") -NoNewline -ForegroundColor Green
Write-Host "" -ForegroundColor Green
}
Write-Host " " -NoNewline
Write-Host ("" * $r) -NoNewline -ForegroundColor Green
Write-Host ("" * $seg) -NoNewline -ForegroundColor DarkGreen
Write-Host ("" * $seg) -ForegroundColor Magenta
}
function DocBox($line) {
$hash = ""; $date = ""; $msg = $line
if ($line -match '^([0-9a-f]{7}) (\d{4}-\d{2}-\d{2}) (.+)$') {
$hash = $matches[1]; $date = $matches[2]; $msg = $matches[3]
}
Write-Host " " -NoNewline
Write-Host "┌─ " -NoNewline -ForegroundColor DarkGreen
Write-Host $hash -NoNewline -ForegroundColor Green
Write-Host " $date" -ForegroundColor DarkGreen
$msgPad = Pad $msg ($W - 4)
Write-Host " " -NoNewline
Write-Host "" -NoNewline -ForegroundColor DarkGreen
Write-Host $msgPad -ForegroundColor Green
Write-Host " " -NoNewline
Write-Host "" -NoNewline -ForegroundColor DarkGreen
Write-Host ("" * ($W - 2)) -ForegroundColor DarkGreen
}
function StatusLine($text) {
$col = if ($text -match "^✅") { 'Green' } elseif ($text -match "^❌") { 'Red' } elseif ($text -match "^⚠") { 'Yellow' } else { 'Cyan' }
$glyph = if ($text -match "^✅") { "" } elseif ($text -match "^❌") { "" } else { "" }
Write-Host " $glyph " -NoNewline -ForegroundColor $col
Write-Host $text -ForegroundColor $col
}
# ==============================================================
# TOPP BOKS
# ==============================================================
Write-Host ""
GlowBox @(
"",
" O S V A U C O · O P A X",
" us-central1 · gemini-2.5-pro",
" $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')",
""
)
Write-Host ""
# ==============================================================
# NESTE OPPGAVE
# ==============================================================
Write-Host " ■ NESTE OPPGAVE" -ForegroundColor Magenta
$nesteLines = @("Sjekk docs/VAUCO_OS_ROADMAP.md")
if (Test-Path $LOG) {
$m = [regex]::Match((Get-Content $LOG -Raw -Encoding UTF8), '(?s)## NESTE OPPGAVE\r?\n(.*?)(?=\r?\n## |$)')
if ($m.Success) {
$nesteLines = $m.Groups[1].Value.Trim() -split "`n" |
Where-Object { $_.Trim() -and $_.Trim() -ne '---' } |
Select-Object -First 3 | ForEach-Object { $_.Trim() }
}
}
foreach ($nl in $nesteLines) {
Write-Host " " -NoNewline
Write-Host "" -NoNewline -ForegroundColor Magenta
Write-Host ("" * ($W - 2)) -ForegroundColor Magenta
Write-Host " " -NoNewline
Write-Host "" -NoNewline -ForegroundColor Magenta
Write-Host (Pad $nl ($W - 4)) -ForegroundColor Green
Write-Host " " -NoNewline
Write-Host "" -NoNewline -ForegroundColor Magenta
Write-Host ("" * ($W - 2)) -ForegroundColor Magenta
}
Write-Host ""
# ==============================================================
# SISTE DOCS
# ==============================================================
Write-Host " ■ SISTE DOCS" -ForegroundColor Magenta
$docLines = git -C $REPO log -3 --pretty=format:"%h %cd %s" --date=short -- docs 2>&1 |
ForEach-Object { ($_ -replace '[^\x00-\x7F\u00e6\u00f8\u00e5\u00c6\u00d8\u00c5\u2014\u2013]+', '').Trim() } |
Where-Object { $_ }
foreach ($dl in $docLines) { DocBox $dl }
Write-Host ""
# ==============================================================
# STATUS
# ==============================================================
Write-Host " ■ STATUS" -ForegroundColor Magenta
StatusLine $gitTxt
StatusLine $gcTxt
StatusLine $adcTxt
StatusLine $opaxTxt
Write-Host ""
# ==============================================================
# BUNN BOKS
# ==============================================================
if ($allOK) {
GlowBox @("", " ▶▶ ALL SYSTEMS GREEN ◀◀", "")
} else {
Write-Host " " -NoNewline; Write-Host ("" * $W) -ForegroundColor Yellow
Write-Host " █ ⚠ PARTIAL — sjekk status over" -ForegroundColor Yellow
Write-Host " " -NoNewline; Write-Host ("" * $W) -ForegroundColor Yellow
}
Write-Host ""
# ==============================================================
# CUSTOM PROMPT
# ==============================================================
function prompt {
Write-Host " G:\Shared-drives\" -NoNewline -ForegroundColor Magenta
Write-Host "OS" -NoNewline -ForegroundColor White
Write-Host "Vauco" -NoNewline -ForegroundColor Green
Write-Host " " -NoNewline -ForegroundColor Green
return " "
}