scripts/11-dell-update.ps1: - Detects Dell via Win32_ComputerSystem.Manufacturer (skips silently on non-Dell) - Installs Dell.CommandUpdate.Universal via winget (silent) - Runs dcu-cli.exe /applyUpdates -silent -reboot=disable (all categories) - BIOS/firmware staged, completes on restart after deployment - Exit codes 0/1/5 all treated as success Deploy-Windows.ps1: - Added Step 11 - Dell Command | Update (dellUpdate=true default) internal/runner/runner.go, internal/config/config.go: - dellUpdate step registered in AllSteps() and DefaultConfig web/spec/index.html: - Step 11 card with flag-done rows, sidebar link, comment-widget issue #16 - STEP_SCRIPT map updated for step-dell web/index.html: - Dynamic download strip: fetches latest Forgejo release via API, shows Download xetup.exe with version + file size - Updated Go TUI card text (no longer "zatim ve vyvoji") web/data/descriptions.json: regenerated (13 scripts, 80 items) Forgejo: issue #16 created, release v0.1.0 published with xetup.exe (5.2 MB) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
233 lines
7.4 KiB
HTML
233 lines
7.4 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="cs">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Xetup - Windows deployment pro X9.cz</title>
|
||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||
<style>
|
||
:root {
|
||
--bg: #0f1117;
|
||
--card: #1a1d27;
|
||
--border: #2a2d3a;
|
||
--text: #e0e0e0;
|
||
--muted: #888;
|
||
--accent: #223B47;
|
||
--accent-bright: #2d5266;
|
||
--green: #2ea043;
|
||
--blue: #58a6ff;
|
||
}
|
||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||
body {
|
||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||
background: var(--bg);
|
||
color: var(--text);
|
||
min-height: 100vh;
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
|
||
header {
|
||
border-bottom: 1px solid var(--border);
|
||
padding: 1rem 2rem;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: .75rem;
|
||
}
|
||
.logo-text { font-size: 1.2rem; font-weight: 700; color: #fff; letter-spacing: -.02em; }
|
||
.logo-sub { font-size: .8rem; color: var(--muted); margin-left: .2rem; }
|
||
header nav { margin-left: auto; display: flex; gap: 1.5rem; }
|
||
header nav a { color: var(--muted); text-decoration: none; font-size: .88rem; transition: color .15s; }
|
||
header nav a:hover { color: var(--text); }
|
||
|
||
main {
|
||
flex: 1;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
padding: 4rem 2rem;
|
||
text-align: center;
|
||
}
|
||
|
||
.badge {
|
||
display: inline-block;
|
||
background: var(--card);
|
||
border: 1px solid var(--border);
|
||
border-radius: 20px;
|
||
padding: .25rem .75rem;
|
||
font-size: .75rem;
|
||
color: var(--muted);
|
||
margin-bottom: 1.5rem;
|
||
letter-spacing: .03em;
|
||
}
|
||
|
||
h1 {
|
||
font-size: 2.8rem; font-weight: 800; color: #fff;
|
||
letter-spacing: -.04em; line-height: 1.1;
|
||
margin-bottom: 1rem; max-width: 600px;
|
||
}
|
||
h1 span { color: var(--blue); }
|
||
|
||
.tagline {
|
||
font-size: 1.1rem; color: var(--muted); max-width: 480px;
|
||
line-height: 1.6; margin-bottom: 2.5rem;
|
||
}
|
||
|
||
/* ---- ACTIONS ---- */
|
||
.actions {
|
||
display: flex; gap: .75rem; flex-wrap: wrap;
|
||
justify-content: center; margin-bottom: 1.5rem;
|
||
}
|
||
.btn-primary {
|
||
padding: .6rem 1.4rem; background: var(--accent-bright); color: #fff;
|
||
border: 1px solid transparent; border-radius: 8px;
|
||
font-size: .95rem; font-weight: 600; text-decoration: none; transition: opacity .15s;
|
||
}
|
||
.btn-primary:hover { opacity: .85; }
|
||
.btn-secondary {
|
||
padding: .6rem 1.4rem; background: transparent; color: var(--text);
|
||
border: 1px solid var(--border); border-radius: 8px;
|
||
font-size: .95rem; text-decoration: none; transition: background .15s;
|
||
}
|
||
.btn-secondary:hover { background: var(--card); }
|
||
|
||
/* ---- DOWNLOAD STRIP ---- */
|
||
.download-strip {
|
||
margin-bottom: 3.5rem;
|
||
display: flex; align-items: center; gap: .6rem;
|
||
background: var(--card); border: 1px solid var(--border);
|
||
border-radius: 10px; padding: .6rem 1.1rem;
|
||
font-size: .85rem;
|
||
}
|
||
.download-strip a {
|
||
color: var(--blue); text-decoration: none; font-weight: 600;
|
||
display: flex; align-items: center; gap: .35rem;
|
||
}
|
||
.download-strip a:hover { text-decoration: underline; }
|
||
.download-strip .dl-meta { color: var(--muted); font-size: .78rem; }
|
||
.download-strip .dl-sep { color: var(--border); }
|
||
|
||
/* ---- CARDS ---- */
|
||
.cards {
|
||
display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||
gap: 1rem; max-width: 720px; width: 100%;
|
||
}
|
||
.card { background: var(--card); border: 1px solid var(--border); border-radius: 10px; padding: 1.2rem; text-align: left; }
|
||
.card-icon { font-size: 1.3rem; margin-bottom: .6rem; display: block; }
|
||
.card h3 { font-size: .9rem; font-weight: 600; color: #fff; margin-bottom: .3rem; }
|
||
.card p { font-size: .82rem; color: var(--muted); line-height: 1.4; }
|
||
|
||
footer {
|
||
border-top: 1px solid var(--border); padding: 1.2rem 2rem;
|
||
text-align: center; font-size: .8rem; color: var(--muted);
|
||
}
|
||
footer a { color: var(--muted); text-decoration: none; }
|
||
footer a:hover { color: var(--text); }
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<header>
|
||
<div style="display:flex;align-items:center;gap:.6rem">
|
||
<img src="/x9-logo.jpeg" alt="X9.cz" style="height:28px;width:28px;border-radius:5px;object-fit:cover;">
|
||
<span class="logo-text">xetup</span><span class="logo-sub">by X9.cz</span>
|
||
</div>
|
||
<nav>
|
||
<a href="/spec/">Specifikace</a>
|
||
<a href="https://git.xetup.x9.cz/x9/xetup">Git</a>
|
||
<a href="https://git.xetup.x9.cz/x9/xetup/issues">Issues</a>
|
||
</nav>
|
||
</header>
|
||
|
||
<main>
|
||
<div class="badge">MSP deployment tool — X9.cz</div>
|
||
|
||
<h1>Automaticky nastavene <span>Windows</span> za 20 minut</h1>
|
||
|
||
<p class="tagline">
|
||
Nahrazuje 3 hodiny rucniho nastavovani jednim skriptem.
|
||
Win10 + Win11, OEM i cisty install, funguje offline.
|
||
</p>
|
||
|
||
<div class="actions">
|
||
<a href="/spec/" class="btn-primary">Zobrazit specifikaci</a>
|
||
<a href="https://git.xetup.x9.cz/x9/xetup" class="btn-secondary">Git repozitar</a>
|
||
</div>
|
||
|
||
<!-- Dynamic download strip – filled by JS from Forgejo releases API -->
|
||
<div class="download-strip" id="dl-strip" style="display:none">
|
||
<a id="dl-link" href="#" download>
|
||
⬇ xetup.exe
|
||
</a>
|
||
<span class="dl-sep">·</span>
|
||
<span class="dl-meta" id="dl-meta">nacitam...</span>
|
||
<span class="dl-sep">·</span>
|
||
<a href="https://git.xetup.x9.cz/x9/xetup/releases" style="color:var(--muted);font-size:.78rem;text-decoration:none">
|
||
vsechny verze
|
||
</a>
|
||
</div>
|
||
|
||
<div class="cards">
|
||
<div class="card">
|
||
<span class="card-icon">⚙</span>
|
||
<h3>~20 stroju / mesic</h3>
|
||
<p>Ruzni klienti, Win10 i Win11, vcetne nepodporovaneho HW.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="card-icon">🔒</span>
|
||
<h3>Offline provoz</h3>
|
||
<p>Scripty + assets jsou soucasti balicku. Site jen pro winget a Atera.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="card-icon">📄</span>
|
||
<h3>Per-client config</h3>
|
||
<p>config.json vedle .exe pro opakovatelne nasazeni u stejneho klienta.</p>
|
||
</div>
|
||
<div class="card">
|
||
<span class="card-icon">🚀</span>
|
||
<h3>Go TUI launcher</h3>
|
||
<p>xetup.exe — jednotny binarni spoustec s TUI formularom a live logem.</p>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
|
||
<footer>
|
||
© 2026 <a href="https://x9.cz">X9.cz s.r.o.</a>
|
||
·
|
||
<a href="https://git.xetup.x9.cz/x9/xetup">Forgejo</a>
|
||
·
|
||
<a href="/spec/">Specifikace</a>
|
||
</footer>
|
||
|
||
<script>
|
||
(function() {
|
||
const API = '/forgejo-api';
|
||
const REPO = 'x9/xetup';
|
||
const TOKEN = 'e67f674af71847c4349b79b51d2b66a1ea41d031';
|
||
const HEADS = { 'Authorization': 'token ' + TOKEN };
|
||
|
||
fetch(API + '/repos/' + REPO + '/releases?limit=1', { headers: HEADS })
|
||
.then(r => r.json())
|
||
.then(releases => {
|
||
if (!Array.isArray(releases) || !releases.length) return;
|
||
const rel = releases[0];
|
||
const asset = (rel.assets || []).find(a => a.name === 'xetup.exe');
|
||
if (!asset) return;
|
||
|
||
const strip = document.getElementById('dl-strip');
|
||
const link = document.getElementById('dl-link');
|
||
const meta = document.getElementById('dl-meta');
|
||
const sizeMB = (asset.size / 1048576).toFixed(1);
|
||
|
||
link.href = asset.browser_download_url;
|
||
link.textContent = '\u2b15 xetup.exe';
|
||
meta.textContent = rel.tag_name + ' \u00b7 ' + sizeMB + ' MB \u00b7 Windows x64';
|
||
strip.style.display = '';
|
||
})
|
||
.catch(() => {});
|
||
})();
|
||
</script>
|
||
|
||
</body>
|
||
</html>
|