Commit Graph
363 Commits
Author SHA1 Message Date
Jarek Krochmalski a22ed6b809 resolve secret references pasted with surrounding quotes 2026-09-06 17:03:47 +05:30
Jarek Krochmalski 07f29f5afc deleting a secret provider warns which stacks it unbinds 2026-09-06 17:03:47 +05:30
Jarek Krochmalski 3a5dce99e2 back up stacks whose folder is bind-mounted over the data volume 2026-09-06 17:03:47 +05:30
Jarek Krochmalski 44223389d8 warn before saving a stack whose compose path won't survive a recreate 2026-09-06 17:03:47 +05:30
Jarek Krochmalski 63850bf5ae scope job status and cancel to the owner or an admin 2026-09-06 17:03:47 +05:30
Jarek Krochmalski bad04e0056 show Dockhand's own mark on its own container 2026-09-06 17:03:46 +05:30
Jarek Krochmalski db2b18571c refresh the app logo to a single SVG 2026-09-06 17:03:46 +05:30
Björn StrausmannandJarek Krochmalski 33c0c47855 fix(openapi): recognize bare object type + document existing field on validate (#1532)
* fix(openapi): recognize bare `object` type in annotation parser

The @openapi annotation parser's parseMiniSchema() only recognized the
bare words integer/number/boolean/string as scalar types. Any other
bare word - including `object`, used in 16 route annotations across
the codebase (e.g. severity:object, envVars:object on
POST /api/stacks/{name}/validate) - silently fell through to the
generic string fallback, so these fields were documented in
static/openapi.json as {"type": "string"} instead of
{"type": "object"}.

Add a dedicated branch for bare `object`, producing an opaque object
schema (no declared properties, since the bare word carries no shape
information of its own - a documented shape should use the existing
{...} form).

Verified no other bare non-standard word is used in any body:/resp-*:
annotation line across the 257 route files, so this closes the gap
completely for the current codebase.

Fixes #1531

* docs(openapi): document the existing field on POST /api/stacks/{name}/validate

The handler reads body.existing (an optional boolean, undocumented)
to control self-exclusion of the stack's own running containers/ports
from the cross-stack collision checks - the exact case the endpoint's
own summary advertises as handled. Without it, a client built strictly
from the OpenAPI document has no way to learn the field exists, and
will validate an existing stack the same way as a new one, silently
reintroducing false-positive collision findings against the stack's
own containers.

Add existing:boolean to the body: annotation, plus a one-line
description explaining the true/omitted semantics.

Fixes #1530

---------

Co-authored-by: Jarek Krochmalski <jotka@users.noreply.github.com>
2026-09-06 15:51:12 +05:30
Jarek Krochmalski 360c458144 test: restore DATA_DIR after fs-guard so it doesn't leak /app/data into later tests (#1535)
fs-guard.test.ts pins process.env.DATA_DIR=/app/data at module load (needed
before the fs-guard import) but never restored it. Under Bun's single-process
run this leaked into every later test file; selfhst-icons then did
mkdirSync('/app/data/icon-cache/...') and failed EACCES on CI, turning main red
in a file-order-dependent way. Save and restore DATA_DIR in an afterAll.
2026-09-06 15:43:05 +05:30
Macley 14f75845ed Add crossorigin attribute to manifest link (#1513)
Reason why see: https://github.com/cloudflare/cloudflare-docs/blob/production/src/content/docs/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/cors.mdx?utm_source=chatgpt.com and similiar: https://github.com/open-webui/open-webui/issues/1538
2026-09-04 18:45:33 +02:00
Jarek Krochmalski 18d00f1d9c Update README.md 2026-09-04 07:53:40 +02:00
Jarek Krochmalski c3b6ae02fb Add files via upload 2026-09-04 07:53:10 +02:00
Bill Lee d62ada3bab Fix: collapsing container uptimes < 1 min to 1 sec (affects sorting) (#1395) 2026-09-03 11:21:21 +02:00
Jarek Krochmalski 049221ceff release housekeeping and generated api spec 2026-09-02 15:52:45 +02:00
Jarek Krochmalski e88975afc4 test connection on a saved environment without re-entering the token 2026-09-02 15:52:45 +02:00
Jarek Krochmalski 585d923e3c post api stacks honors the target environment in the body 2026-09-02 15:52:45 +02:00
Jarek Krochmalski 52d99fa295 escape dollar signs in env values when generating a compose file from a container 2026-09-02 15:52:45 +02:00
Jarek Krochmalski d03554c69d populate environment variables again finds the repo env file 2026-09-02 15:52:44 +02:00
Jarek Krochmalski 34ceb74dc1 clearer git permission errors that match the credential type 2026-09-02 15:52:44 +02:00
Jarek Krochmalski ae754b3140 large image scans no longer fail when the scanner log rotates 2026-09-02 15:52:44 +02:00
Jarek Krochmalski 9a3c52374c compose validate no longer flags a valid env_file 2026-09-02 15:52:44 +02:00
Jarek Krochmalski 2d12085ae4 disable build cache no longer errors on deploy 2026-09-02 15:52:44 +02:00
Jarek Krochmalski 4d09c9c76f local-path backup destinations validate the configured path 2026-09-02 15:52:44 +02:00
Jarek Krochmalski 46a137316f faster incremental backups when multiple stacks share one repository 2026-09-02 15:52:44 +02:00
Jarek Krochmalski 002f53ce78 optional stacks_dir flat layout for local stacks 2026-09-02 15:52:44 +02:00
Jarek Krochmalski 3fa75c9702 drop the unused hawser stacks-dir column and layout 2026-09-02 15:52:44 +02:00
Jarek Krochmalski 5af4e69eb2 tighten permission checks and input validation across the api 2026-09-02 15:52:44 +02:00
Badal Singhandxd003 77686da02a feat(stacks): optional STACKS_DIR layout with Hawser display paths (#1482)
When STACKS_DIR is set, local managed stacks are stored in a flat
$STACKS_DIR/<stackName>/ layout instead of $DATA_DIR/stacks/<env>/<stack>/.
Existing stacks are not moved automatically and continue to resolve from
their existing locations. Invalid or unwritable STACKS_DIR values produce a
warning and fall back to $DATA_DIR/stacks instead of aborting startup. With
this layout, local stack names must be unique across environments.

Hawser agents report their remote stacks directory on hello. That path is
persisted on the environment as hawser_stacks_dir so compose APIs and the UI
can show host paths rather than Dockhand staging paths. Staging paths are
remapped to and from the remote stack dir for compose files, backups, and
environment settings. Backup restore may write under either the default
staging root or the configured STACKS_DIR.

Co-authored-by: xd003 <xd003@users.noreply.github.com>
2026-08-31 18:54:27 +02:00
Jarek Krochmalski 53161a6718 pin esm-env as a direct dependency for reproducible installs 2026-08-27 19:48:35 +02:00
Jarek Krochmalski ee4632a7b7 stacks page: env-var counts from sources, icon batching, and an in-order restart 2026-08-27 19:48:35 +02:00
古丁丁 3a60ca332f fix: upgrade svelte 5.56.10 strip ? from optional parameters (#1477) 2026-08-27 19:37:24 +02:00
Jarek Krochmalski a9b1998aad allow secret-less webhook triggers behind an env flag 2026-08-27 16:32:06 +02:00
Jarek Krochmalski 9a1f11c9b7 require the git permission for repository deploy/sync/test 2026-08-27 16:32:06 +02:00
Jarek Krochmalski 5359720a76 bump docker-compose to 5.5.0-r2 in the wolfi image 2026-08-27 16:32:05 +02:00
Jarek Krochmalski cc48b1e14b bump svelte to 5.56.10 2026-08-27 16:32:05 +02:00
Jarek Krochmalski 0816672222 harden authentication and authorization on the user API 2026-08-27 11:31:35 +02:00
Jarek Krochmalski 5adb374c0d keepass secret provider fails closed when a group cannot be listed 2026-08-27 08:10:03 +02:00
Jarek Krochmalski e7ee9b41c7 add the emergency relocate/reset-mfa scripts the tests exercise 2026-08-27 07:41:02 +02:00
Jarek Krochmalski d34a7733f7 validate and canonicalize outbound request hosts 2026-08-27 07:34:38 +02:00
Jarek Krochmalski 0d516be4dd sort by Disk I/O and Net I/O - the header cycles read/write and down/up 2026-08-27 07:34:38 +02:00
Jarek Krochmalski b1e7518096 release housekeeping 2026-08-27 07:34:38 +02:00
Jarek Krochmalski c7eb8542a1 pausing or resuming a backup schedule no longer clears the retention policy 2026-08-27 07:34:37 +02:00
Jarek Krochmalski e82b1aea89 optional Webhook column on the stacks list with a git stack's webhook id and copy-URL button 2026-08-27 07:34:37 +02:00
Jarek Krochmalski b04bc504f9 option to disable the session timeout 2026-08-27 07:34:37 +02:00
Jarek Krochmalski ef390e94ec internal cleanups and build config 2026-08-27 07:34:37 +02:00
Jarek Krochmalski fdca208795 git stacks can now set a custom icon 2026-08-27 07:34:37 +02:00
Jarek Krochmalski 58f712d432 environment API uses a write-only model for the tls key and hawser token 2026-08-27 07:34:37 +02:00
Jarek Krochmalski bf518f98aa emergency script to relocate stack paths after moving DATA_DIR 2026-08-27 07:34:37 +02:00
Jarek Krochmalski 9264a53a44 compose validate flags a service with no healthcheck and a defined-but-unused named volume 2026-08-27 07:34:37 +02:00
Jarek Krochmalski 909e9934d3 compose generated from a container now captures network config and resource limits 2026-08-27 07:34:37 +02:00