Files
Brett Williams 7a36ae083c Fix worker removal and improve web UI defaults
- Parse optional http:// scheme prefix on worker specs so a scheme-typed
  IP is stored cleanly and its remove button works.
- Delete workers by their stored DB host/port instead of re-parsing the
  rendered URL, and surface add/remove errors in the UI.
- Default new builds to git URL instead of zip upload.
- Show worker hostname/IP from agent status in the address column.
- Always include DB host/port in worker API output.
2026-08-31 15:40:01 -05:00

79 lines
2.3 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cross-Py-Builder</title>
<link rel="stylesheet" href="/style.css">
</head>
<body>
<header>
<h1>Cross-Py-Builder</h1>
<p id="worker-summary"></p>
</header>
<main>
<section class="card">
<h2>Workers</h2>
<form id="worker-form" class="inline-form">
<input type="text" id="worker-spec" placeholder="host:port (e.g. 192.168.1.40:9001)">
<button type="submit">Add worker</button>
</form>
<p id="worker-msg" class="msg"></p>
<div id="workers"></div>
</section>
<section class="card" id="submit-card">
<h2>New build</h2>
<form id="job-form">
<div class="field">
<label for="mode">Source</label>
<select id="mode">
<option value="git">Git repo</option>
<option value="upload">Upload zip</option>
</select>
</div>
<div class="field" id="url-field">
<label for="url">Git URL</label>
<input type="text" id="url" placeholder="https://…">
</div>
<div class="field" id="upload-field" hidden>
<label for="file">Project zip</label>
<input type="file" id="file" accept=".zip">
</div>
<div class="fields-row">
<div class="field">
<label for="os">OS</label>
<select id="os"><option value="">Any</option></select>
</div>
<div class="field">
<label for="cpu">CPU</label>
<select id="cpu"><option value="">Any</option></select>
</div>
</div>
<button type="submit">Submit build</button>
<p id="submit-msg" class="msg"></p>
</form>
</section>
<section class="card">
<h2>Jobs</h2>
<div id="jobs"><p class="muted">Loading…</p></div>
</section>
</main>
<div id="modal" class="modal" hidden>
<div class="modal-body">
<button id="modal-close" class="close" aria-label="Close">&times;</button>
<h3 id="modal-title"></h3>
<div class="job-meta"><code id="modal-meta"></code></div>
<div id="status-badge" class="badge"></div>
<div id="artifacts"></div>
<pre id="log"></pre>
</div>
</div>
<script src="/app.js"></script>
</body>
</html>