release housekeeping and generated api spec
This commit is contained in:
4 files changed
+64
-15
No files matched your search
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "dockhand",
|
||||
"private": true,
|
||||
"version": "1.0.45",
|
||||
"version": "1.0.46",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "npx vite dev",
|
||||
|
||||
@@ -1,13 +1,26 @@
|
||||
[
|
||||
{
|
||||
"version": "1.0.46",
|
||||
"date": "",
|
||||
"comingSoon": true,
|
||||
"date": "2026-09-02",
|
||||
"changes": [
|
||||
{ "type": "feature", "text": "restart a stack in depends_on order (#1480)" },
|
||||
{ "type": "fix", "text": "cache app icons so the containers and stacks pages load faster" },
|
||||
{ "type": "feature", "text": "restart a stack in depends_on order, keeping the same containers (#1480)" },
|
||||
{ "type": "feature", "text": "allow secret-less git webhooks via the ALLOW_WEBHOOKS_WITHOUT_SECRET env var" },
|
||||
{ "type": "feature", "text": "optional STACKS_DIR flat layout for local stacks (#514, #778, PR#1482, @xd003)" },
|
||||
{ "type": "fix", "text": "faster incremental backups when multiple stacks share one repository (#1494)" },
|
||||
{ "type": "fix", "text": "\"disable build cache\" no longer errors on deploy (#1479, PR#1020, @He-Is-HaZaRdOuS)" },
|
||||
{ "type": "fix", "text": "test connection on a saved environment without re-entering the token (#1483)" },
|
||||
{ "type": "fix", "text": "populate environment variables again finds the repo's .env file (#1495)" },
|
||||
{ "type": "fix", "text": "POST /api/stacks honors the target environment in the body (#1491)" },
|
||||
{ "type": "fix", "text": "large image scans no longer fail when the scanner log rotates (#1496)" },
|
||||
{ "type": "fix", "text": "Compose Validate no longer false-flags a valid env_file (#1497)" },
|
||||
{ "type": "fix", "text": "cache app icons in one request so the containers and stacks pages load faster" },
|
||||
{ "type": "fix", "text": "upgrade svelte to 5.56.10 (#1476, PR#1477, @ThanatosDi)" },
|
||||
{ "type": "fix", "text": "refresh the bundled docker-compose (5.5.0-r2)" }
|
||||
{ "type": "fix", "text": "refresh the bundled docker-compose (5.5.0-r2)" },
|
||||
{ "type": "fix", "text": "stricter per-environment access and permission checks across the API" },
|
||||
{ "type": "fix", "text": "redact secret values from compose command output and restrict backup restore targets" },
|
||||
{ "type": "fix", "text": "local-path backup destinations now reject a host path that isn't a Dockhand bind mount (#1506)" },
|
||||
{ "type": "fix", "text": "escape $ in env values when generating a compose file from a container (#1507)" },
|
||||
{ "type": "fix", "text": "clearer git permission errors that match the credential type (token vs SSH key) (#1509)" }
|
||||
],
|
||||
"imageTag": "fnsys/dockhand:v1.0.46"
|
||||
},
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"openapi": "3.0.3",
|
||||
"info": {
|
||||
"title": "Dockhand API",
|
||||
"version": "1.0.45",
|
||||
"version": "1.0.46",
|
||||
"description": "Auto-generated from src/routes/**/+server.ts by scripts/generate-openapi.ts. Path, HTTP method, tag, and auth requirement are derived automatically from the route tree and hooks.server.ts PUBLIC_PATHS. Parameters, response status codes, and request body fields are additionally auto-detected from each handler’s own source (query params via url.searchParams, status codes via status:/error(), body fields via destructuring) — adding a new endpoint therefore requires ZERO manual spec edits to show up with real params/responses. An optional, additive `@openapi` JSDoc annotation on a handler replaces the generic auto-descriptions with hand-written summaries, exact types, and examples."
|
||||
},
|
||||
"servers": [
|
||||
@@ -6860,7 +6860,7 @@
|
||||
"description": "Directory listing (entries with name, type, size and permission metadata)"
|
||||
},
|
||||
"403": {
|
||||
"description": "Permission denied"
|
||||
"description": "Permission denied (needs containers:exec)"
|
||||
},
|
||||
"404": {
|
||||
"description": "Container not found"
|
||||
@@ -7063,7 +7063,7 @@
|
||||
"description": "Path is missing, the target is a directory, or the container is not running"
|
||||
},
|
||||
"403": {
|
||||
"description": "Permission denied to read the file"
|
||||
"description": "Permission denied to read the file (needs containers:exec)"
|
||||
},
|
||||
"404": {
|
||||
"description": "File not found"
|
||||
@@ -10078,7 +10078,7 @@
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Memory monitor not enabled (set MEMORY_MONITOR=true)"
|
||||
"description": "Memory monitor not enabled (set MEMORY_MONITOR=true), or the caller is not an admin"
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
@@ -11967,6 +11967,9 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Permission denied"
|
||||
},
|
||||
"404": {
|
||||
"description": "Environment not found"
|
||||
}
|
||||
@@ -12462,6 +12465,9 @@
|
||||
},
|
||||
"400": {
|
||||
"description": "Host is required for direct/hawser-standard connection types"
|
||||
},
|
||||
"403": {
|
||||
"description": "The caller cannot access the environment named by environmentId"
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
@@ -12472,6 +12478,7 @@
|
||||
"bearerAuth": []
|
||||
}
|
||||
],
|
||||
"description": "Pass environmentId to fall back to that saved environment's stored secrets (hawserToken, tlsKey) for any secret field left blank in the body, so Test connection works when editing without re-entering the token.",
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
@@ -12508,6 +12515,9 @@
|
||||
},
|
||||
"hawserToken": {
|
||||
"type": "string"
|
||||
},
|
||||
"environmentId": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
@@ -18489,6 +18499,9 @@
|
||||
"400": {
|
||||
"description": "Invalid ID (not a number)"
|
||||
},
|
||||
"403": {
|
||||
"description": "Permission denied (needs notifications:edit)"
|
||||
},
|
||||
"404": {
|
||||
"description": "Notification setting not found"
|
||||
},
|
||||
@@ -20996,6 +21009,9 @@
|
||||
"400": {
|
||||
"description": "Missing registry parameter, or Docker Hub was targeted (catalog listing unsupported)"
|
||||
},
|
||||
"403": {
|
||||
"description": "Permission denied (requires registries:view)"
|
||||
},
|
||||
"404": {
|
||||
"description": "Registry not found, or the registry does not implement the V2 catalog API"
|
||||
},
|
||||
@@ -21194,6 +21210,9 @@
|
||||
"400": {
|
||||
"description": "The term query parameter is missing"
|
||||
},
|
||||
"403": {
|
||||
"description": "Permission denied (requires registries:view)"
|
||||
},
|
||||
"404": {
|
||||
"description": "The referenced registry does not exist"
|
||||
},
|
||||
@@ -21280,6 +21299,9 @@
|
||||
"400": {
|
||||
"description": "image and tag are required"
|
||||
},
|
||||
"403": {
|
||||
"description": "Permission denied (requires registries:view)"
|
||||
},
|
||||
"404": {
|
||||
"description": "Registry not found"
|
||||
}
|
||||
@@ -21414,6 +21436,9 @@
|
||||
"400": {
|
||||
"description": "The image query parameter is missing"
|
||||
},
|
||||
"403": {
|
||||
"description": "Permission denied (requires registries:view)"
|
||||
},
|
||||
"404": {
|
||||
"description": "The referenced registry does not exist"
|
||||
},
|
||||
@@ -24279,7 +24304,7 @@
|
||||
"schema": {
|
||||
"type": "integer"
|
||||
},
|
||||
"description": "Target environment id"
|
||||
"description": "Target environment id (takes precedence over envId/environmentId in the body)"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@@ -24304,7 +24329,7 @@
|
||||
"bearerAuth": []
|
||||
}
|
||||
],
|
||||
"description": "Writes the compose + .env to the stack dir, stores secrets in the DB, and with start deploys it. Can bind a secret provider.",
|
||||
"description": "Writes the compose + .env to the stack dir, stores secrets in the DB, and with start deploys it. Can bind a secret provider. Target environment comes from the env query param, or from envId/environmentId in the body when the query is absent.",
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
@@ -24338,6 +24363,12 @@
|
||||
},
|
||||
"start": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"envId": {
|
||||
"type": "integer"
|
||||
},
|
||||
"environmentId": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
@@ -24355,7 +24386,9 @@
|
||||
],
|
||||
"rawEnvContent": "string",
|
||||
"secretProviderId": 0,
|
||||
"start": true
|
||||
"start": true,
|
||||
"envId": 0,
|
||||
"environmentId": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25779,7 +25812,10 @@
|
||||
"description": "oldDir and newComposePath are required, or the source directory does not exist"
|
||||
},
|
||||
"403": {
|
||||
"description": "Permission denied (requires stacks:edit)"
|
||||
"description": "Permission denied (requires stacks:edit), or a supplied path is not allowed"
|
||||
},
|
||||
"404": {
|
||||
"description": "No stack source row for this name and environment"
|
||||
},
|
||||
"500": {
|
||||
"description": "Failed to relocate stack"
|
||||
|
||||
Reference in new issue
Block a user