feat: harden server pull deployments and git hygiene

This commit is contained in:
NuklearRabbit
2026-07-28 08:27:09 +02:00
parent d4d77c827a
commit 56efd1a00c
33 changed files with 2390 additions and 633 deletions
+34 -3
View File
@@ -112,6 +112,24 @@
},
});
const sshProfile = (id, name, environment, options = {}) => ({
id, name, environment, provider: "ssh-unraid", branch: options.branch || "main",
serverId: "demo-unraid", remoteFolder: options.remoteFolder || name,
deploymentMode: "server-git", composeFiles: ["compose.yml"],
composeProject: options.composeProject || String(options.remoteFolder || name).toLowerCase(),
composeServices: options.composeServices || [String(options.remoteFolder || name).toLowerCase()],
containerName: options.containerName || options.remoteFolder || name,
generatedCompose: false, adoptedFromServer: true, serverSourceOfTruth: true,
confirmationRequired: true,
serverGitAccess: { configured: options.accessConfigured !== false, keyFingerprint: "SHA256:demo", hostFingerprint: "SHA256:gitea", configuredAt: iso(-3600000) },
state: {
liveSha: options.liveSha || null, giteaSha: options.giteaSha || options.liveSha || null,
previousSha: options.previousSha || null, healthy: options.healthy ?? true,
containerRunning: true, runtimeVerification: "verified", matchesGitea: options.matchesGitea ?? true,
checkedAt: iso(-120000), dockerMan: { templateExists: true, webUi: true, icon: true },
},
});
const now = iso();
const defaultPreferences = {
autoRefresh: true,
@@ -360,10 +378,14 @@
}),
linkState: "linked",
deploymentProfiles: [
profile("profile-portfolio", "Production", "production", {
sshProfile("profile-portfolio", "Production", "production", {
remoteFolder: "Portfolio",
containerName: "Portfolio",
liveSha: "4c20dd11bb6147fc8b6633d2b08500c93402a719",
giteaSha: "a7f2e1c1bb6147fc8b6633d2b08500c93402a719",
previousSha: "31adfe11bb6147fc8b6633d2b08500c93402a719",
healthy: false,
matchesGitea: false,
}),
],
},
@@ -564,7 +586,7 @@
await wait(80);
snapshot();
return {
appVersion: "0.9.0-demo",
appVersion: "0.10.0-demo",
platform: "win32",
state: clone(state),
git: { available: true, version: "git version 2.47.3" },
@@ -1489,7 +1511,7 @@
},
];
},
async linkServerWorkload(repository, serverId, workloadId, deploymentMode = "push-bundle", remoteFolder = "") {
async linkServerWorkload(repository, serverId, workloadId, deploymentMode = "server-git", remoteFolder = "") {
await wait(120);
const repo = repositories.find((item) => item.fullName === repository.fullName);
if (!repo) throw new Error("Repository not found.");
@@ -1533,6 +1555,15 @@
syncState();
return { profile: clone(saved), state: clone(state) };
},
async configureServerGitAccess(repository, profileId) {
const repo = repositories.find((item) => item.fullName === repository.fullName);
const target = repo?.deploymentProfiles.find((item) => item.id === profileId);
if (!target) throw new Error("Deployment profile not found.");
target.deploymentMode = "server-git";
target.serverGitAccess = { configured: true, keyFingerprint: "SHA256:demo", hostFingerprint: "SHA256:gitea", configuredAt: iso() };
syncState();
return { profile: clone(target), created: true, remoteSha: target.state?.giteaSha || repo.localStatus?.head };
},
async refreshOperations(operationId = null) {
await wait(300);
if (operationId) {