feat: added versionning & About window
This commit is contained in:
+100
@@ -0,0 +1,100 @@
|
||||
# OpsLog release script — source → Gitea (origin), exe → Gitea + GitHub releases.
|
||||
# Mirrors the DXHunter workflow, adapted for the Wails build and OpsLog's version
|
||||
# files. Run from the repo root in PowerShell.
|
||||
|
||||
# Force UTF-8 throughout — prevents git log em-dashes / accents from corrupting the API body
|
||||
$OutputEncoding = [System.Text.Encoding]::UTF8
|
||||
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
||||
|
||||
# ── Config ────────────────────────────────────────────────────────────────────
|
||||
$GitHubRepo = "GregTroar/OpsLog" # GitHub repo that hosts the public exe (adjust if different)
|
||||
$ExePath = "build/bin/OpsLog.exe" # Wails build output
|
||||
$Wails = Join-Path $HOME "go\bin\wails.exe" # the v2.11 wails (not the global one)
|
||||
if (-not (Test-Path $Wails)) { $Wails = "wails" } # fall back to PATH
|
||||
|
||||
# Parse token, host, and repo path from the Gitea remote URL (origin)
|
||||
$remoteUrl = git remote get-url origin
|
||||
if ($remoteUrl -match 'https://([^@]+)@([^/]+)/(.+?)\.git') {
|
||||
$token = $Matches[1]
|
||||
$gitHost = $Matches[2]
|
||||
$repo = $Matches[3]
|
||||
} else {
|
||||
Write-Host "Cannot parse Gitea remote URL (expected https://<token>@<host>/<repo>.git)." -ForegroundColor Red; exit 1
|
||||
}
|
||||
|
||||
git add .
|
||||
$msg = Read-Host "Commit message"
|
||||
if ($msg) { git commit -m $msg }
|
||||
|
||||
$ver = Read-Host "Version (ex: 0.2)"
|
||||
if (-not $ver) { Write-Host "Aborted." -ForegroundColor Red; exit 1 }
|
||||
|
||||
# ── Bump the version in the single sources of truth ─────────────────────────────
|
||||
$lastMsg = git log -1 --pretty=format:"%s"
|
||||
if ($lastMsg -ne "chore: release v$ver") {
|
||||
# Frontend (UI header + About popup)
|
||||
(Get-Content frontend/src/version.ts) -replace "APP_VERSION = '.*'", "APP_VERSION = '$ver'" | Set-Content frontend/src/version.ts -Encoding utf8
|
||||
# Backend (telemetry heartbeat version)
|
||||
(Get-Content telemetry.go) -replace 'appVersion = ".*"', "appVersion = `"$ver`"" | Set-Content telemetry.go -Encoding utf8
|
||||
git add frontend/src/version.ts telemetry.go
|
||||
git commit -m "chore: release v$ver"
|
||||
} else {
|
||||
Write-Host "Release commit already exists, skipping version bump..." -ForegroundColor Yellow
|
||||
}
|
||||
git tag "v$ver" 2>$null
|
||||
if ($LASTEXITCODE -ne 0) { Write-Host "Tag v$ver already exists locally, continuing..." -ForegroundColor Yellow }
|
||||
|
||||
# Push source to Gitea (origin) — source code stays on Gitea only
|
||||
git push
|
||||
if ($LASTEXITCODE -ne 0) { Write-Host "git push failed!" -ForegroundColor Red; exit 1 }
|
||||
git push --tags
|
||||
if ($LASTEXITCODE -ne 0) { Write-Host "git push --tags failed!" -ForegroundColor Red; exit 1 }
|
||||
|
||||
# ── Release notes from commits since the previous tag ───────────────────────────
|
||||
$prevTag = git describe --tags --abbrev=0 "v$ver^" 2>$null
|
||||
$changelog = if ($prevTag) {
|
||||
git log "$prevTag..v$ver" --pretty=format:"- %s" --no-merges
|
||||
} else {
|
||||
git log "v$ver" --pretty=format:"- %s" --no-merges
|
||||
}
|
||||
$body = "## Changelog`n`n$($changelog -join "`n")"
|
||||
Write-Host "`nRelease notes:`n$body`n" -ForegroundColor DarkGray
|
||||
|
||||
# ── Build the Windows exe (Wails compiles frontend + Go) ─────────────────────────
|
||||
Write-Host "Building OpsLog.exe v$ver ..." -ForegroundColor Cyan
|
||||
& $Wails build
|
||||
if ($LASTEXITCODE -ne 0) { Write-Host "Build failed!" -ForegroundColor Red; exit 1 }
|
||||
if (-not (Test-Path $ExePath)) { Write-Host "Built exe not found at $ExePath" -ForegroundColor Red; exit 1 }
|
||||
|
||||
# ── Gitea release — get existing or create new, then upload the exe ──────────────
|
||||
$api = "https://$gitHost/api/v1/repos/$repo"
|
||||
$headers = @{ Authorization = "token $token"; 'Content-Type' = 'application/json' }
|
||||
try {
|
||||
$release = Invoke-RestMethod "$api/releases/tags/v$ver" -Method GET -Headers $headers
|
||||
Write-Host "Gitea: found existing release for v$ver (id=$($release.id)), uploading exe..." -ForegroundColor Yellow
|
||||
} catch {
|
||||
$payloadBytes = [System.Text.Encoding]::UTF8.GetBytes((@{ tag_name = "v$ver"; target_commitish = "main"; name = "OpsLog v$ver"; body = $body } | ConvertTo-Json))
|
||||
try {
|
||||
$release = Invoke-RestMethod "$api/releases" -Method POST -Headers $headers -Body $payloadBytes
|
||||
} catch {
|
||||
Write-Host "Gitea release creation failed: $_" -ForegroundColor Red; exit 1
|
||||
}
|
||||
}
|
||||
$uploadUri = "https://$gitHost/api/v1/repos/$repo/releases/$($release.id)/assets?name=OpsLog.exe"
|
||||
curl.exe -s -H "Authorization: token $token" -F "attachment=@$ExePath" $uploadUri | Out-Null
|
||||
Write-Host "Gitea: release v$ver published." -ForegroundColor Green
|
||||
|
||||
# ── GitHub release (requires gh CLI: https://cli.github.com) ────────────────────
|
||||
if (Get-Command gh -ErrorAction SilentlyContinue) {
|
||||
Write-Host "Creating GitHub release v$ver ..." -ForegroundColor Cyan
|
||||
$notesFile = [System.IO.Path]::GetTempFileName()
|
||||
$body | Out-File -FilePath $notesFile -Encoding utf8
|
||||
gh release create "v$ver" $ExePath `
|
||||
--repo $GitHubRepo `
|
||||
--title "OpsLog v$ver" `
|
||||
--notes-file $notesFile
|
||||
Remove-Item $notesFile
|
||||
Write-Host "GitHub: release v$ver published." -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "gh CLI not found - skipping GitHub release (install from https://cli.github.com, then: gh auth login)" -ForegroundColor Yellow
|
||||
}
|
||||
Reference in New Issue
Block a user