[grade=A] Shipdeck fleet module and manual deploy flow

Adds validated fleet install/lifecycle routes, bridge-backed Git and OCI workflows, persistent service cards, and the Local-tab Shipdeck deployment UI while preserving catalog and External flows.

Judge: urn:ump:if6udffdyelsf4qvskkr65ikhuprsjiajzij6h653fhf2zgyynzq
This commit is contained in:
DashCaddy Polish Loop
2026-09-15 11:13:29 -07:00
parent f9cbb13a3d
commit 0dd8493f98
14 changed files with 1624 additions and 230 deletions
+12 -1
View File
@@ -43,6 +43,7 @@ const path = require('path');
const crypto = require('crypto');
const { ok, errorResponse } = require('../src/utils/responses');
const { ErrorCodes } = require('../src/utilities/error-codes');
const shipdeckFleet = require('./shipdeck-fleet');
const {
validateFleetHost,
resolveAndCheckAddress,
@@ -58,7 +59,7 @@ const MAX_PROBE_CONCURRENCY = 5;
// Per-host probe timeout for /fleet/status.
const PROBE_TIMEOUT_MS = 3000;
module.exports = function({ log, asyncHandler }) {
module.exports = function({ log, asyncHandler, auditLogger, fetchT, servicesStateManager }) {
const wrap = asyncHandler || ((fn) => (req, res, next) => Promise.resolve(fn(req, res, next)).catch(next));
const router = express.Router();
@@ -352,5 +353,15 @@ module.exports = function({ log, asyncHandler }) {
});
}));
// Shipdeck v0.2 lifecycle and install endpoints share the existing /fleet
// namespace without changing the DC-108 host-management routes above.
router.use('/fleet', shipdeckFleet({
asyncHandler: wrap,
log,
auditLogger,
fetchT,
servicesStateManager,
}));
return router;
};