Release ForgeFlow 0.8.7 automatic server discovery

This commit is contained in:
NuklearRabbit
2026-07-26 04:22:02 +02:00
parent 70840839f8
commit 40d41f9a32
13 changed files with 638 additions and 130 deletions
+24 -3
View File
@@ -159,6 +159,7 @@ const ui = {
diagnosticsStatus: null,
troubleshooter: null,
deploymentDiscovery: null,
serverDiscovery: [],
lastDiagnosticBundle: null,
setupDraft: {
baseUrl: "https://",
@@ -415,13 +416,33 @@ async function refreshActiveOperations(showErrors = true) {
}
async function refreshDeploymentTruth(showErrors = false) {
let discovery = [];
try {
discovery = (await window.forgeflow.discoverServerDeployments?.()) || [];
ui.serverDiscovery = discovery;
const adopted = discovery.reduce(
(total, server) => total + Number(server.adopted || 0),
0,
);
if (adopted > 0) {
await refreshRepositories(false, true);
showToast(
"Server workloads discovered",
`${adopted} running deployment${adopted === 1 ? " was" : "s were"} linked to Gitea automatically.`,
"success",
);
}
} catch (error) {
if (showErrors)
showToast("Server discovery unavailable", error.message, "error");
}
const targets = ui.repositories.flatMap((repository) =>
(repository.deploymentProfiles || []).map((profile) => ({
repository,
profile,
})),
);
if (!targets.length) return { checked: 0, failed: 0 };
if (!targets.length) return { checked: 0, failed: 0, discovery };
const failures = [];
const queue = [...targets];
@@ -454,7 +475,7 @@ async function refreshDeploymentTruth(showErrors = false) {
"error",
);
}
return { checked: targets.length, failed: failures.length };
return { checked: targets.length, failed: failures.length, discovery };
}
function selectRepository(id, shouldRender = true) {
@@ -903,7 +924,7 @@ function renderProfileCard(repository, profile, compact = false) {
repository.localStatus?.branch.head === profile.branch;
const isSsh = profile.provider === "ssh-unraid";
const providerDetail = isSsh
? `SSH / Unraid · ${profile.remoteFolder || repository.name} · ${profile.branch}`
? `SSH / Unraid · ${profile.remoteFolder || repository.name} · ${profile.branch}${profile.adoptedFromServer ? " · automatically discovered" : ""}`
: `${profile.workflowFile} · ${profile.branch}`;
const rollbackConfigured = isSsh || Boolean(profile.rollbackWorkflowFile);
const dockerMan = dockerManIntegration(profile);
+13 -1
View File
@@ -564,7 +564,7 @@
await wait(80);
snapshot();
return {
appVersion: "0.8.6-demo",
appVersion: "0.8.7-demo",
platform: "win32",
state: clone(state),
git: { available: true, version: "git version 2.47.3" },
@@ -1421,6 +1421,18 @@
syncState();
return clone(target.state);
},
async discoverServerDeployments() {
await wait(80);
return [
{
serverId: "unraid-primary",
detected: 2,
adopted: 0,
verified: 1,
unmatched: 0,
},
];
},
async refreshOperations(operationId = null) {
await wait(300);
if (operationId) {