Release ForgeFlow 0.8.1

Add advanced Git and deployment workflows, secure backups and auditing, live Gitea integration, desktop notifications, connection validation, and the premium responsive UX refresh.
This commit is contained in:
NuklearRabbit
2026-07-26 00:42:17 +02:00
parent 971896a1d5
commit 4ad698c4eb
47 changed files with 9114 additions and 1648 deletions
+36
View File
@@ -265,3 +265,39 @@ test('stuck deployment is cleared as superseded when a different healthy commit
assert.match(result.error, /Superseded/);
assert.equal(saved.at(-1).status, 'cancelled');
});
test('existing Unraid deployment discovery derives profile values from Docker, Compose and DockerMan truth', () => {
const { deriveDetectedProfile } = require('../src/main/unraid-deployment-service.cjs');
const result = deriveDetectedProfile({
repository: { name: 'blockpilot-autonomous', defaultBranch: 'main', sshUrl: 'ssh://git@gitea/Jens/blockpilot-autonomous.git' },
server: { id: 'unraid', host: '192.168.10.150' },
remoteFolder: 'blockpilot-autonomous',
remotePath: '/mnt/user/appdata/blockpilot-autonomous',
payload: {
head: 'a'.repeat(40),
branch: 'main',
remote: 'ssh://git@gitea/Jens/blockpilot-autonomous.git',
composeFiles: ['compose.yml'],
compose: { services: { app: { image: 'blockpilot:test' } } },
containers: [{
Name: '/blockpilot',
State: { Running: true },
Config: { Image: 'blockpilot:test', Env: ['TOKEN=secret', 'MODE=prod'], Labels: { 'com.docker.compose.service': 'app', 'com.docker.compose.project': 'blockpilot' } },
HostConfig: { RestartPolicy: { Name: 'unless-stopped' } },
NetworkSettings: { Ports: { '8080/tcp': [{ HostIp: '0.0.0.0', HostPort: '1223' }] }, Networks: { bridge: {} } },
Mounts: [{ Type: 'bind', Source: '/mnt/user/appdata/blockpilot-autonomous/data', Destination: '/data', RW: true }]
}],
dockerManXml: '<Container><Name>blockpilot</Name><WebUI>http://[IP]:[PORT:1223]/</WebUI><Icon>https://example.test/icon.png</Icon><Shell>/bin/bash</Shell></Container>'
}
});
assert.equal(result.profile.hostPort, 1223);
assert.equal(result.profile.containerPort, 8080);
assert.equal(result.profile.containerName, 'blockpilot');
assert.equal(result.profile.composeService, 'app');
assert.equal(result.profile.webUiUrl, 'http://[IP]:[PORT:1223]/');
assert.equal(result.profile.iconUrl, 'https://example.test/icon.png');
assert.equal(result.profile.dockerShell, '/bin/bash');
assert.deepEqual(result.profile.detectedMetadata.envNames, ['TOKEN', 'MODE']);
assert.ok(result.profile.preservePaths.includes('data'));
assert.equal(result.provenance.hostPort.origin, 'docker-inspect');
});