Add SemVer VERSION, Jenkins CI/CD, and release 0.1.1.

Ship Harbor/Hub push with latest+version tags, deploy to openstack.devops.org.ru, and show the package version badge in Help → About.
This commit is contained in:
2026-07-28 00:57:38 +03:00
parent f1289858fd
commit b2e301dd32
18 changed files with 602 additions and 23 deletions
+2
View File
@@ -122,8 +122,10 @@ def list_majors(
*,
runtime_version: str | None,
settings: Settings | None = None,
app_version: str | None = None,
) -> dict[str, object]:
return {
"app_version": app_version,
"runtime_version": runtime_version,
"majors": [
{
+28 -1
View File
@@ -798,7 +798,12 @@
stroke: none;
}
.help-about-meta {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.45rem 0.65rem;
margin: 0;
padding: 0 14px 12px;
font-size: 11px;
@@ -812,6 +817,22 @@
color: var(--text);
}
.help-about-version {
flex-shrink: 0;
padding: 0.22rem 0.55rem;
border-radius: 999px;
border: 1px solid color-mix(in srgb, var(--accent) 35%, transparent);
background: color-mix(in srgb, var(--accent) 14%, transparent);
color: var(--accent);
font-family: var(--mono);
font-size: 10px;
font-weight: 600;
letter-spacing: 0.03em;
line-height: 1;
white-space: nowrap;
}
.help-panel {
flex: 1;
min-height: 0;
@@ -3888,6 +3909,7 @@
major: 9,
majors: [],
runtimeVersion: null,
appVersion: null,
osPack: null,
pendingMicroversion: {},
catalog: null,
@@ -6051,6 +6073,7 @@
function buildAboutHtml() {
const version = state.runtimeVersion || "—";
const catalogMajor = state.major || "—";
const appVersion = state.appVersion ? `v${state.appVersion}` : "v—";
return `
<div class="help-about-panel">
<div class="help-report-head">
@@ -6060,7 +6083,10 @@
automation, and infrastructure tooling without a real hypervisor cluster.
</p>
<p class="help-about-meta">
Runtime <code>${escapeHtml(version)}</code> · catalog <code>${escapeHtml(seriesLabel(catalogMajor))}</code>
<span class="help-about-version" title="Simulator package version">${escapeHtml(appVersion)}</span>
<span>
Runtime <code>${escapeHtml(version)}</code> · catalog <code>${escapeHtml(String(catalogMajor))}</code>
</span>
</p>
</div>
<div class="help-report-head">
@@ -7344,6 +7370,7 @@
async function loadVersions() {
const p = await fetch("/ui/api/versions").then((r) => r.json());
state.runtimeVersion = p.runtime_version;
state.appVersion = p.app_version || null;
state.majors = p.majors || [];
setText(els.statRuntime, p.runtime_version || "—");
const storedMajor = readStoredMajor();
+6 -2
View File
@@ -19,6 +19,7 @@ from app.openstack.demo_cloud import openstack_demo_summary, seed_openstack_demo
from app.openstack.seed import seed_openstack
from app.web.assets import console_html
from app.web.compatibility_catalog import compatibility_payload
from app.version import get_app_version
from app.web.contract_catalog import catalog_payload, list_majors, load_snapshot, method_payload
router = APIRouter(tags=["Simulator"])
@@ -41,10 +42,13 @@ async def ui_versions(request: Request) -> JSONResponse:
runtime_version = _runtime_version(request)
# Prefer OpenStack contract packs when present.
try:
return JSONResponse(openstack_series_majors(runtime_version))
payload = openstack_series_majors(runtime_version)
except Exception:
settings = _settings(request)
return JSONResponse(list_majors(runtime_version=runtime_version, settings=settings))
payload = list_majors(runtime_version=runtime_version, settings=settings)
if isinstance(payload, dict):
payload = {**payload, "app_version": get_app_version()}
return JSONResponse(payload)
@router.get("/ui/api/catalog", include_in_schema=False)