Stable per-branch report URLs and a reachable live view (v0.9.8)

A report directory holding a single page is now linked and served as a
directory, so Gradle's --profile report has a stable permanent URL although
its file name carries the build timestamp.

The permanent link moves to the build it resolves to — the branch's latest
green build — and appears on every build table instead of only the branches
view. The Current tab gave way to a link in the artifacts column, shown
while a build runs; /current itself stays routable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-10 21:27:53 +02:00
co-authored by Claude Fable 5
parent c1869ea427
commit 962836beaf
15 changed files with 207 additions and 56 deletions
+8 -2
View File
@@ -250,8 +250,8 @@ function renderBuildRow(build, allowRestart) {
const artifactsCell = elem("td");
artifactsCell.dataset.label = "Artifacts";
const inProgress = build.status === "running" || build.status === "pending";
if (build.artifactKey) {
const inProgress = build.status === "running" || build.status === "pending";
const artifactLink = elem("a", "artifact-link", inProgress ? "⏳" : "📄");
artifactLink.href = "/builds/" + encodeURIComponent(build.artifactKey);
artifactLink.title = inProgress ? "Open build log — no artifacts yet" : "Open artifacts";
@@ -263,7 +263,13 @@ function renderBuildRow(build, allowRestart) {
permanentLink.title = "Permanent link: artifacts of the latest green build";
artifactsCell.appendChild(permanentLink);
}
if (!build.artifactKey && !build.latestGreenUrl) {
if (inProgress) {
const liveLink = elem("a", "artifact-link", "📡");
liveLink.href = "/current";
liveLink.title = "Watch this build live";
artifactsCell.appendChild(liveLink);
}
if (!build.artifactKey && !build.latestGreenUrl && !inProgress) {
artifactsCell.textContent = "n/a";
}
row.appendChild(artifactsCell);
+2
View File
@@ -58,6 +58,8 @@
<a th:if="${row.latestGreenUrl != null}" class="artifact-link"
th:href="${row.latestGreenUrl}"
title="Permanent link: artifacts of the latest green build">🔗</a>
<a th:if="${row.inProgress}" class="artifact-link" href="/current"
title="Watch this build live">📡</a>
<span th:if="${row.artifactKey == ''}">n/a</span>
</td>
<td class="actions-cell">
@@ -26,7 +26,6 @@
<span th:if="${view == 'history'}">History</span>
<a th:unless="${view == 'history'}" href="/history">History</a>
<span th:if="${view == 'current'}">Current</span>
<a th:unless="${view == 'current'}" href="/current">Current</a>
<span th:if="${view == 'system'}">System</span>
<a th:unless="${view == 'system'}" href="/system">System</a>
</nav>
+7 -2
View File
@@ -9,8 +9,13 @@
<h2>v0.9.8 <span class="muted">— 2026-08-10</span></h2>
<ul>
<li>The artifact index also links report pages of directories without an <code>index.html</code>,
such as Gradle's <code>--profile</code> report with its timestamped file name.</li>
<li>The artifact index also links report pages of directories without an <code>index.html</code>.
A directory holding a single page is linked as a directory, so Gradle's <code>--profile</code>
report keeps a stable URL although its file name carries the build timestamp.</li>
<li>The permanent <code>🔗</code> link now appears on the build it resolves to — the branch's
latest green build — instead of on every build of that branch, and on all build tables.</li>
<li>The <em>Current</em> tab gave way to a <code>📡</code> link in the artifacts column,
shown while a build runs.</li>
</ul>
<h2>v0.9.7 <span class="muted">— 2026-08-10</span></h2>