feat: automated stable releases, versioned ISOs, and Hub version badge
- Add release-stable.sh script with automatic tagging, CHANGELOG updates, GitHub/Gitea release creation, and VERSION file management - Update iso/common.nix to include version from VERSION file in ISO filename - Add VERSION file (current: 1.0.3) - Polish OS version badge in Sovran Hub header (top-right) - Update README.md download link to versioned ISO - Update CHANGELOG.md with existing tags (v1.0.0 – v1.0.3) Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
This commit is contained in:
co-authored by
arena-agent
parent
ac6a2e26bb
commit
c54823ff68
@@ -2274,13 +2274,30 @@ async def api_logout(request: Request):
|
||||
return response
|
||||
|
||||
|
||||
def _get_sovran_version() -> str:
|
||||
"""Read the OS version from the VERSION file."""
|
||||
try:
|
||||
with open("/etc/nixos/VERSION", "r") as f:
|
||||
return f.read().strip()
|
||||
except FileNotFoundError:
|
||||
try:
|
||||
with open("VERSION", "r") as f: # fallback for development
|
||||
return f.read().strip()
|
||||
except FileNotFoundError:
|
||||
return "dev"
|
||||
except Exception:
|
||||
return "dev"
|
||||
|
||||
|
||||
@app.get("/", response_class=HTMLResponse)
|
||||
async def index(request: Request):
|
||||
sovran_version = _get_sovran_version()
|
||||
return templates.TemplateResponse(
|
||||
request=request,
|
||||
name="index.html",
|
||||
context={
|
||||
"asset_version": ASSET_VERSION,
|
||||
"sovran_version": sovran_version,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@@ -45,6 +45,44 @@
|
||||
letter-spacing: 0.03em;
|
||||
}
|
||||
|
||||
/* ── OS Version Badge (polished) ───────────────────────────────── */
|
||||
.os-version-badge {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
background: linear-gradient(145deg, #1a2a22, #0f1a15);
|
||||
border: 1px solid rgba(74, 222, 128, 0.25);
|
||||
border-radius: 9999px;
|
||||
padding: 2px 14px 2px 10px;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
color: #4ade80;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
||||
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
margin-left: 12px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.os-version-badge:hover {
|
||||
border-color: rgba(74, 222, 128, 0.45);
|
||||
box-shadow: 0 4px 8px rgba(74, 222, 128, 0.15);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.os-version-badge .version-label {
|
||||
font-size: 0.68rem;
|
||||
font-weight: 500;
|
||||
color: #4ade80;
|
||||
opacity: 0.85;
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
.os-version-badge .version-number {
|
||||
font-family: 'JetBrains Mono', 'Fira Code', monospace;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.5px;
|
||||
color: #86efac;
|
||||
}
|
||||
|
||||
/* ── IP bar ─────────────────────────────────────────────────────── */
|
||||
|
||||
.ip-bar {
|
||||
|
||||
@@ -22,6 +22,13 @@
|
||||
<header class="header-bar">
|
||||
<img src="/static/sovran-hub-icon.svg" alt="Sovran Hub" class="header-logo" />
|
||||
<span class="title">Sovran_SystemsOS Hub</span>
|
||||
|
||||
<!-- OS Version Badge -->
|
||||
<span class="os-version-badge" id="os-version-badge" title="Sovran_SystemsOS Version">
|
||||
<span class="version-label">v</span>
|
||||
<span class="version-number" id="version-number">{{ sovran_version }}</span>
|
||||
</span>
|
||||
|
||||
<div class="header-buttons">
|
||||
<span class="role-badge" id="role-badge">Loading…</span>
|
||||
<button class="btn btn-header-reboot" id="btn-header-reboot" title="Restart the entire computer">Reboot</button>
|
||||
|
||||
Reference in New Issue
Block a user