OSVauco/scripts/osv-startup.ps1

220 lines
8.7 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
# ---- SJEKKER (stille) ----------------------------------------
$gcOK = $false; $adcOK = $false; $opaxOK = $false; $gitOK = $false; $gcAcc = ""
$gitOut = git pull 2>&1; $gitOK = ($LASTEXITCODE -eq 0)
try { $gcAcc = gcloud auth list --filter=status:ACTIVE --format="value(account)" 2>$null
if ($gcAcc) { $gcOK = $true
gcloud config set project propane-will-491900-m5 2>$null | Out-Null
gcloud config set compute/region us-central1 2>$null | Out-Null } } catch {}
try { if (gcloud auth application-default print-access-token 2>$null) { $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 -----------------------------------------
if ($gitOK) { $gitTxt = "✅ Git : " + $(if ($gitOut -match 'Already') {'up to date'} else {'oppdatert'}) }
else { $gitTxt = "❌ Git : FEIL" }
$gcTxt = $(if ($gcOK) { "✅ GCP : " + ($gcAcc -replace '@vauco.no','') } else { "⚠ GCP : ikke logget inn" })
$adcTxt = $(if ($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 GlowLine($cols) {
# $cols = array of [text, color] pairs filling $W chars
foreach ($c in $cols) { Write-Host $c[0] -NoNewline -ForegroundColor $c[1] }
Write-Host ""
}
function GlowBox($lines) {
$seg = [math]::Floor($W / 3)
$r = $W - $seg * 2
# Top
Write-Host " " -NoNewline
Write-Host ("" * $seg) -NoNewline -ForegroundColor Magenta
Write-Host ("" * $seg) -NoNewline -ForegroundColor DarkGreen
Write-Host ("" * $r) -ForegroundColor Green
# Lines
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
}
# Bottom (reversed)
Write-Host " " -NoNewline
Write-Host ("" * $r) -NoNewline -ForegroundColor Green
Write-Host ("" * $seg) -NoNewline -ForegroundColor DarkGreen
Write-Host ("" * $seg) -ForegroundColor Magenta
}
function PulseBox($lines) {
# Animate border: cycle Magenta->DarkGreen->Green->DarkGreen->Magenta (3 frames)
$frames = @(
@('Magenta','DarkGreen','Green'),
@('DarkGreen','Green','Magenta'),
@('Green','Magenta','DarkGreen')
)
$seg = [math]::Floor($W / 3); $r = $W - $seg * 2
foreach ($f in $frames) {
# Move cursor up to overwrite (skip on first frame)
$top = " " + ($f[0] * 0) # just use colors
[System.Console]::SetCursorPosition(0, [System.Console]::CursorTop)
Write-Host " " -NoNewline
Write-Host ("" * $seg) -NoNewline -ForegroundColor $f[0]
Write-Host ("" * $seg) -NoNewline -ForegroundColor $f[1]
Write-Host ("" * $r) -ForegroundColor $f[2]
foreach ($line in $lines) {
$inner = Pad $line ($W - 4)
Write-Host " " -NoNewline
Write-Host "" -NoNewline -ForegroundColor $f[0]
Write-Host (" $inner ") -NoNewline -ForegroundColor Green
Write-Host "" -ForegroundColor $f[2]
}
Write-Host " " -NoNewline
Write-Host ("" * $r) -NoNewline -ForegroundColor $f[2]
Write-Host ("" * $seg) -NoNewline -ForegroundColor $f[1]
Write-Host ("" * $seg) -ForegroundColor $f[0]
Start-Sleep -Milliseconds 180
# Move cursor back up
$moveUp = $lines.Count + 2
for ($i = 0; $i -lt $moveUp; $i++) {
Write-Host "`e[1A" -NoNewline
}
}
# Final static draw
GlowBox $lines
}
function DocBox($line) {
# Each doc commit gets its own mini glow box
$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]
}
$msgPad = Pad $msg ($W - 6)
Write-Host " " -NoNewline
Write-Host "┌─" -NoNewline -ForegroundColor DarkGreen
Write-Host $hash -NoNewline -ForegroundColor Green
Write-Host " $date" -ForegroundColor DarkGreen
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' } else { 'Yellow' }
$glyph = if ($text -match "^✅") { "" } else { "" }
Write-Host " " -NoNewline
Write-Host $glyph -NoNewline -ForegroundColor $col
Write-Host (" $text") -ForegroundColor $col
}
# ==============================================================
# TOPP PULSE-BOKS
# ==============================================================
Write-Host ""
PulseBox @(
"",
" 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() }
}
}
# Egen boks per linje
foreach ($nl in $nesteLines) {
Write-Host " " -NoNewline
Write-Host "" -NoNewline -ForegroundColor Magenta
Write-Host ("" * ($W - 2)) -ForegroundColor Magenta
$inner = Pad $nl ($W - 4)
Write-Host " " -NoNewline
Write-Host "" -NoNewline -ForegroundColor Magenta
Write-Host $inner -ForegroundColor Green
Write-Host " " -NoNewline
Write-Host "" -NoNewline -ForegroundColor Magenta
Write-Host ("" * ($W - 2)) -ForegroundColor Magenta
}
Write-Host ""
# ==============================================================
# SISTE DOCS — egen boks per commit
# ==============================================================
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 — glow per linje
# ==============================================================
Write-Host " ■ STATUS" -ForegroundColor Magenta
StatusLine $gitTxt
StatusLine $gcTxt
StatusLine $adcTxt
StatusLine $opaxTxt
Write-Host ""
# ==============================================================
# BUNN PULSE-BOKS
# ==============================================================
if ($allOK) {
PulseBox @("", " ▶▶ 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 " "
}