1
0
mirror of git://f0xx.org/ac/ac-be-builder synced 2026-07-29 04:18:20 +03:00

feat(builder): shared nav shell, fail notify, sanitizer wiring

Signed-off-by: Anton Afanasyeu <a.afanasieff@gmail.com>
This commit is contained in:
Anton Afanasyeu
2026-07-12 13:53:37 +02:00
parent 608f4fdb2e
commit 4200ae8f12
12 changed files with 439 additions and 32 deletions

View File

@@ -15,6 +15,7 @@ if ($pipelineYaml === '') {
}
$stepLabels = [
'git' => 'Git checkout / shallow clone',
'docker-setup' => 'Builder host (Docker daemon)',
'docker-build' => 'Docker image build',
'docker-run' => 'Gradle pipeline (docker run)',
];

View File

@@ -32,6 +32,14 @@
<label><input type="checkbox" name="auto_ota"> Create OTA artifacts</label>
<label><input type="checkbox" name="auto_deploy"> Publish OTA to mount</label>
</div>
<div class="build-form-grid" style="margin-top:10px">
<label><input type="checkbox" name="notify_on_fail" checked> Alert me if this build fails</label>
<label>Alert channel<select name="notify_channel">
<option value="email" selected>Email</option>
<option value="telegram">Telegram</option>
<option value="both">Email + Telegram</option>
</select></label>
</div>
<button type="submit" class="btn btn-primary">Start build</button>
<span id="build-trigger-status" class="muted"></span>
</form>

View File

@@ -1,6 +1,11 @@
<?php declare(strict_types=1);
$ab = assets_base();
$links = cfg('links', []);
$projectBase = Auth::projectBasePath();
$issuesBase = rtrim((string) cfg('links.crashes', $projectBase . '/issues'), '/');
$navActive = 'builder';
$user = Auth::user();
$navUser = is_array($user) ? trim((string) ($user['username'] ?? '')) : '';
?>
<!DOCTYPE html>
<html lang="en" data-theme="dark">
@@ -17,6 +22,7 @@ $links = cfg('links', []);
})();
</script>
<link rel="stylesheet" href="<?= h($ab) ?>/assets/css/app.css">
<script src="<?= h($ab) ?>/assets/js/nav_shell.js" defer></script>
<script src="<?= h($ab) ?>/assets/js/i18n.js" defer></script>
<script src="<?= h(Auth::basePath()) ?>/assets/js/builder.js" defer></script>
</head>
@@ -25,28 +31,24 @@ $links = cfg('links', []);
<?= (($view ?? '') === 'build' && !empty($build['id'])) ? ' data-build-id="' . (int) $build['id'] . '"' : '' ?>
<?= (($view ?? '') === 'build' && !empty($build['status'])) ? ' data-build-status="' . h((string) $build['status']) . '"' : '' ?>>
<div class="shell">
<nav class="nav-pane" id="nav-pane" aria-label="Builder navigation">
<button type="button" class="nav-handle" id="nav-handle" aria-label="Toggle navigation">
<span class="nav-icon nav-icon--menu" aria-hidden="true"></span>
</button>
<ul class="nav-list">
<li><a href="<?= h(Auth::basePath()) ?>/" class="nav-link <?= ($view ?? '') === 'home' ? 'active' : '' ?>"><span class="nav-icon nav-icon--home"></span><span class="nav-label">Builder</span></a></li>
<li><a href="<?= h($links['crashes'] ?? '') ?>?view=reports" class="nav-link"><span class="nav-icon nav-icon--reports"></span><span class="nav-label">Crashes</span></a></li>
<li><a href="<?= h($links['tickets'] ?? '') ?>" class="nav-link"><span class="nav-icon nav-icon--tickets"></span><span class="nav-label">Tickets</span></a></li>
<li><a href="<?= h($links['git'] ?? '') ?>" class="nav-link"><span class="nav-icon nav-icon--git"></span><span class="nav-label">Git</span></a></li>
<li><a href="<?= h($links['hub'] ?? '') ?>" class="nav-link"><span class="nav-icon nav-icon--home"></span><span class="nav-label">Hub</span></a></li>
</ul>
<div class="nav-locale">
<label class="toolbar-select"><span>Theme</span>
<select id="theme-select" aria-label="UI theme"><option value="dark">Dark</option><option value="light">Light</option></select>
</label>
</div>
<div class="nav-user">
<span class="nav-user-name"><?= h(Auth::user()['username'] ?? '') ?></span>
<a href="<?= h(Auth::basePath()) ?>/logout" class="nav-link nav-link--logout">Logout</a>
</div>
</nav>
<?php platform_render_nav_shell([
'project_base' => $projectBase,
'issues_base' => $issuesBase,
'active' => $navActive,
'username' => $navUser,
]); ?>
<main class="main-pane">
<div class="toolbar reports-toolbar" style="margin-bottom:12px">
<div class="toolbar-actions" style="margin-left:auto">
<label class="toolbar-select">
<span data-i18n="theme.label">Theme</span>
<select id="theme-select" aria-label="UI theme">
<option value="dark">Dark</option>
<option value="light">Light</option>
</select>
</label>
</div>
</div>
<?php if (($view ?? '') === 'build' && !empty($build)): ?>
<?php require __DIR__ . '/build_detail.php'; ?>
<?php else: ?>