mirror of
https://github.com/Studio-Saelix/sencho.git
synced 2026-07-27 04:11:01 +00:00
28c7a8fd54
* feat(auto-update): add auto-update policies and fix image update detection Auto-Update Policies (Skipper+ tier): - New scheduled task action type 'update' for check-then-update flow - Dedicated AutoUpdatePoliciesView with CRUD, cron presets, and run history - Conditional tier gating: Skipper gets auto-update, Admiral gets full scheduled ops - Backend executeUpdate: checks digests, pulls only if newer, atomic redeploy Image Update Detection fixes (all tiers): - Fix stack name key mismatch: use working_dir label instead of project label - Add 5-minute periodic frontend polling for background check results - Replace fixed 3s timeout with polling-based manual refresh via /api/image-updates/status - Clear update status after successful stack update * fix(ui): remove Skipper tier badge from Auto-Update Policies header * fix(ui): remove auto-update action from Scheduled Operations view Admiral users have a dedicated Auto-Update view — showing update tasks in Scheduled Operations too was confusing duplication. Each view now owns a distinct, non-overlapping set of action types. * fix(auto-update): fix node-stack linking and add All Stacks option - Stack dropdown now re-fetches when node selection changes using fetchForNode, and resets the selected stack - Node selector moved above stack selector with stack disabled until a node is picked - Added "All Stacks" wildcard option that checks and updates every stack on the selected node - Backend executeUpdate refactored to iterate over all stacks when target_id is "*", with per-stack error isolation * refactor(ui): replace Select dropdowns with searchable Combobox component Add a reusable Combobox component with inline search and use it for Node/Stack selectors in both Auto-Update Policies and Scheduled Operations dialogs. Also fixes node-stack linking bug where changing node didn't update the stack list. * fix(ui): resolve CI TypeScript errors in Combobox and ScheduledOperationsView Add missing searchPlaceholder prop to ComboboxProps interface and remove dead 'update' action filter that conflicted with the narrowed type union. * fix(ui): use Geist Sans font in toast component The toast renders via React portal on document.body, bypassing the app's font inheritance. Add explicit font-family declaration using var(--font-sans) to match Sencho's design system.
242 lines
6.9 KiB
JSON
242 lines
6.9 KiB
JSON
{
|
|
"$schema": "https://mintlify.com/docs.json",
|
|
"theme": "mint",
|
|
"name": "Sencho",
|
|
"colors": {
|
|
"primary": "#00BEC7",
|
|
"light": "#007982",
|
|
"dark": "#00BEC7"
|
|
},
|
|
"logo": {
|
|
"light": "/images/logo/logo-light.png",
|
|
"dark": "/images/logo/logo-dark.png",
|
|
"href": "https://sencho.io"
|
|
},
|
|
"favicon": "/images/logo/favicon.ico",
|
|
"appearance": {
|
|
"default": "dark"
|
|
},
|
|
"fonts": {
|
|
"family": "Geist"
|
|
},
|
|
"background": {
|
|
"decoration": "gradient",
|
|
"color": {
|
|
"dark": "#090909"
|
|
}
|
|
},
|
|
"navbar": {
|
|
"links": [
|
|
{
|
|
"type": "github",
|
|
"href": "https://github.com/AnsoCode/Sencho"
|
|
}
|
|
],
|
|
"primary": {
|
|
"type": "button",
|
|
"label": "Get Started",
|
|
"href": "https://sencho.io/#pricing"
|
|
}
|
|
},
|
|
"footer": {
|
|
"socials": {
|
|
"github": "https://github.com/AnsoCode/Sencho"
|
|
},
|
|
"links": [
|
|
{
|
|
"header": "Product",
|
|
"items": [
|
|
{ "label": "Website", "href": "https://sencho.io" },
|
|
{ "label": "Pricing", "href": "https://sencho.io/#pricing" },
|
|
{ "label": "Changelog", "href": "https://github.com/AnsoCode/Sencho/releases" }
|
|
]
|
|
},
|
|
{
|
|
"header": "Community",
|
|
"items": [
|
|
{ "label": "GitHub", "href": "https://github.com/AnsoCode/Sencho" },
|
|
{ "label": "Contributing", "href": "https://github.com/AnsoCode/Sencho/blob/main/CONTRIBUTING.md" }
|
|
]
|
|
},
|
|
{
|
|
"header": "Legal",
|
|
"items": [
|
|
{ "label": "Terms of Service", "href": "https://sencho.io/terms" },
|
|
{ "label": "Privacy Policy", "href": "https://sencho.io/privacy" }
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"api": {
|
|
"auth": {
|
|
"method": "bearer",
|
|
"name": "Authorization"
|
|
},
|
|
"playground": {
|
|
"display": "simple"
|
|
}
|
|
},
|
|
"navigation": {
|
|
"tabs": [
|
|
{
|
|
"tab": "Documentation",
|
|
"groups": [
|
|
{
|
|
"group": "Getting Started",
|
|
"pages": [
|
|
"getting-started/introduction",
|
|
"getting-started/quickstart",
|
|
"getting-started/configuration",
|
|
"getting-started/sso-quickstart"
|
|
]
|
|
},
|
|
{
|
|
"group": "Features",
|
|
"pages": [
|
|
"features/overview",
|
|
"features/dashboard",
|
|
"features/stack-management",
|
|
"features/editor",
|
|
"features/resources",
|
|
"features/app-store",
|
|
"features/global-observability",
|
|
"features/host-console",
|
|
"features/multi-node",
|
|
"features/fleet-view",
|
|
"features/alerts-notifications",
|
|
"features/webhooks",
|
|
"features/rbac",
|
|
"features/atomic-deployments",
|
|
"features/fleet-backups",
|
|
"features/audit-log",
|
|
"features/api-tokens",
|
|
"features/private-registries",
|
|
"features/auto-update-policies",
|
|
"features/scheduled-operations",
|
|
"features/sso",
|
|
"features/licensing"
|
|
]
|
|
},
|
|
{
|
|
"group": "Reference",
|
|
"pages": [
|
|
"reference/settings",
|
|
"reference/security-advisories"
|
|
]
|
|
},
|
|
{
|
|
"group": "Operations",
|
|
"pages": [
|
|
"operations/troubleshooting",
|
|
"operations/backup"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"tab": "API Reference",
|
|
"openapi": "openapi.yaml",
|
|
"pages": [
|
|
"api-reference/overview",
|
|
{
|
|
"group": "Health",
|
|
"pages": [
|
|
"GET /api/health"
|
|
]
|
|
},
|
|
{
|
|
"group": "Stacks",
|
|
"pages": [
|
|
"GET /api/stacks",
|
|
"POST /api/stacks",
|
|
"GET /api/stacks/{stackName}",
|
|
"PUT /api/stacks/{stackName}",
|
|
"DELETE /api/stacks/{stackName}",
|
|
"GET /api/stacks/{stackName}/envs",
|
|
"GET /api/stacks/{stackName}/env",
|
|
"PUT /api/stacks/{stackName}/env",
|
|
"GET /api/stacks/{stackName}/containers",
|
|
"GET /api/stacks/{stackName}/services",
|
|
"POST /api/stacks/{stackName}/deploy",
|
|
"POST /api/stacks/{stackName}/down",
|
|
"POST /api/stacks/{stackName}/start",
|
|
"POST /api/stacks/{stackName}/stop",
|
|
"POST /api/stacks/{stackName}/restart",
|
|
"POST /api/stacks/{stackName}/update",
|
|
"POST /api/stacks/{stackName}/rollback",
|
|
"GET /api/stacks/{stackName}/backup"
|
|
]
|
|
},
|
|
{
|
|
"group": "Containers",
|
|
"pages": [
|
|
"GET /api/containers",
|
|
"GET /api/containers/{id}/logs",
|
|
"POST /api/containers/{id}/start",
|
|
"POST /api/containers/{id}/stop",
|
|
"POST /api/containers/{id}/restart"
|
|
]
|
|
},
|
|
{
|
|
"group": "API Tokens",
|
|
"pages": [
|
|
"POST /api/api-tokens",
|
|
"GET /api/api-tokens",
|
|
"DELETE /api/api-tokens/{id}"
|
|
]
|
|
},
|
|
{
|
|
"group": "Webhooks",
|
|
"pages": [
|
|
"GET /api/webhooks",
|
|
"POST /api/webhooks",
|
|
"PUT /api/webhooks/{id}",
|
|
"DELETE /api/webhooks/{id}",
|
|
"GET /api/webhooks/{id}/history",
|
|
"POST /api/webhooks/{id}/trigger"
|
|
]
|
|
},
|
|
{
|
|
"group": "Nodes",
|
|
"pages": [
|
|
"GET /api/nodes",
|
|
"POST /api/nodes",
|
|
"GET /api/nodes/{id}",
|
|
"PUT /api/nodes/{id}",
|
|
"DELETE /api/nodes/{id}",
|
|
"POST /api/nodes/{id}/test"
|
|
]
|
|
},
|
|
{
|
|
"group": "Fleet",
|
|
"pages": [
|
|
"GET /api/fleet/overview",
|
|
"GET /api/fleet/node/{nodeId}/stacks",
|
|
"GET /api/fleet/node/{nodeId}/stacks/{stackName}/containers",
|
|
"POST /api/fleet/snapshots",
|
|
"GET /api/fleet/snapshots",
|
|
"GET /api/fleet/snapshots/{id}",
|
|
"POST /api/fleet/snapshots/{id}/restore",
|
|
"DELETE /api/fleet/snapshots/{id}"
|
|
]
|
|
},
|
|
{
|
|
"group": "Scheduled Tasks",
|
|
"pages": [
|
|
"GET /api/scheduled-tasks",
|
|
"POST /api/scheduled-tasks",
|
|
"GET /api/scheduled-tasks/{id}",
|
|
"PUT /api/scheduled-tasks/{id}",
|
|
"DELETE /api/scheduled-tasks/{id}",
|
|
"PATCH /api/scheduled-tasks/{id}/toggle",
|
|
"POST /api/scheduled-tasks/{id}/run",
|
|
"GET /api/scheduled-tasks/{id}/runs",
|
|
"GET /api/scheduled-tasks/{id}/runs/export"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|