Commit Graph
71 Commits
Author SHA1 Message Date
Jarek Krochmalski 2a9299f932 release housekeeping for 1.0.47 2026-09-12 16:24:13 +02:00
Jarek Krochmalski 5954e22297 release housekeeping for 1.0.47 2026-09-09 09:37:27 +05:30
Jarek Krochmalski 2e6d3ed46c release housekeeping 2026-09-08 07:47:30 +05:30
Jarek Krochmalski 84c959910a release housekeeping 2026-09-06 17:03:48 +05:30
Jarek Krochmalski 049221ceff release housekeeping and generated api spec 2026-09-02 15:52:45 +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
Jarek Krochmalski cc48b1e14b bump svelte to 5.56.10 2026-08-27 16:32:05 +02:00
Jarek Krochmalski b1e7518096 release housekeeping 2026-08-27 07:34:38 +02:00
Jarek Krochmalski 674d80b178 release 1.0.44 2026-08-25 12:58:22 +02:00
Jarek Krochmalski a4e2637ea5 release housekeeping 2026-08-25 05:42:29 +02:00
Jarek Krochmalski 8ae0b4367e release housekeeping 2026-08-23 12:08:30 +02:00
Jarek Krochmalski c71d066835 release housekeeping 2026-08-23 11:00:36 +02:00
Jarek Krochmalski 40524e0d8d release housekeeping 2026-08-23 10:21:00 +02:00
Jarek Krochmalski 94f8f52f52 release housekeeping for 1.0.44 2026-08-22 16:22:18 +02:00
Jarek Krochmalski 7227b334f9 release housekeeping for 1.0.44 2026-08-22 09:09:42 +02:00
jarek 3d208e6f22 release housekeeping 2026-08-20 08:28:25 +02:00
jarek 5f401602bb release housekeeping 2026-08-19 14:26:45 +02:00
jarek 6fab8ec70a release housekeeping 2026-08-18 10:05:36 +02:00
jarek ff006965ce release housekeeping 2026-08-17 09:50:34 +02:00
jarek cda446a232 release housekeeping 2026-08-16 08:15:30 +02:00
jarek 78d67d2dc1 release housekeeping 2026-08-14 09:35:36 +02:00
jarek d7f435dd5f release housekeeping 2026-08-13 10:20:29 +02:00
1ad36a83fb feat: Add pluggable secret providers (1Password, Infisical, HashiCorp Vault) (#1360)
* Add pluggable secret provider foundation

Introduces a provider-agnostic secret backend abstraction so stacks can
pull deploy-time secrets from 1Password, Infisical or HashiCorp Vault.

Providers implement the SecretProvider contract in secretproviders/shared.ts
and advertise which of the two resolution modes they support:

  - reference interpolation: a variable's value is an inline reference in
    the backend's own syntax (e.g. 1Password's op://vault/item/field)
  - bulk pull: every secret under a provider-defined selector, fetched as
    a flat key/value map

Adding a backend means dropping a file in secretproviders/ and registering
it in the index; no caller changes.

Four providers ship here: 1Password service account (references + bulk),
1Password Connect (references), Infisical (bulk) and HashiCorp Vault KV v2
(bulk). Provider config is persisted as an encrypted JSON blob in the new
secret_providers table, mirroring the existing notification_settings
type+config pattern, and stack_sources gains a nullable secret_provider_id.

Decrypted tokens stay in the provider modules for the duration of a call
and are never written to disk or returned to the client.

Co-authored-by: GooRoo <sergey.olendarenko@gmail.com>

* Add secret provider API routes and permissions

CRUD plus two test-connection endpoints under /api/secret-providers. The
unsaved variant validates a config posted from the provider form; the
stored variant tests a persisted provider by id.

Responses only ever carry provider summaries (id, type, name, timestamps).
The decrypted config never leaves the server.

Adds a "secrets" permission resource with view/create/edit/delete actions,
wired through the permission type, the role editor and the seeded roles,
and a secret_provider audit entity type so provider changes are logged.
Config rotations are audited as a boolean rather than a value.

* Resolve provider secrets at stack deploy time

Stacks can bind a secret provider; when one is bound, its secrets are
resolved and merged into the vars handed to docker compose.

Bulk pull is triggered by a selector variable: OP_ENVIRONMENT_ID, kept for
compatibility with the original 1Password integration, or the generic
DOCKHAND_SECRET_SELECTOR for any bulk-capable provider. The selector is
consumed by the provider and stripped before the vars reach the stack.
Values the bound provider recognises as inline references are resolved in
place, and references found only in the stack's .env file are promoted into
the secret set so they are never written back as literals.

Resolution is applied on deploy, on up, on recreate and on service update.
Explicitly configured secrets always win over bulk-pulled ones. A missing
or unsupported provider warns and leaves values untouched rather than
failing the deploy; a provider that errors mid-resolution fails it.

* Add secret provider settings UI and stack binding

A Secrets tab under settings lists configured providers and drives the
create/edit modal, which switches its fields on the selected provider type
and can test a connection before saving.

Both stack modals gain a provider selector so a stack can be bound to a
provider or left unbound. When a provider is bound, the bulk selector
variables are no longer reported as unused compose variables, since they
are consumed by the provider rather than the compose file.

---------

Co-authored-by: GooRoo <sergey.olendarenko@gmail.com>
Co-authored-by: Jarek Krochmalski <jotka@users.noreply.github.com>
2026-08-13 10:08:02 +02:00
jarek 1cec7d0814 release housekeeping 2026-08-09 10:31:27 +02:00
jarek a115a5f539 release housekeeping for 1.0.40 2026-07-31 10:10:56 +02:00
jarek 49809865dc 1.0.39 2026-07-26 10:27:12 +02:00
jarek 64b6dcd744 1.0.38 2026-07-25 08:41:01 +02:00
jarek c718ac9a84 1.0.37 2026-07-11 15:31:52 +02:00
jarek 685132ff89 1.0.36 2026-06-27 15:15:54 +02:00
jarek ce12d7ae9f 1.0.35 2026-06-19 08:21:22 +02:00
jarek efb634701c 1.0.34 2026-06-17 08:21:38 +02:00
jarek 83c3a5ea09 1.0.33 2026-06-15 14:56:51 +02:00
jarek 3cbcfa3cdb 1.0.32 2026-06-06 16:18:05 +02:00
jarek 00bd09df55 1.0.31 2026-05-30 12:23:36 +02:00
jarek c8b3acc07e 1.0.30 2026-05-30 08:42:21 +02:00
jarek e7100f8926 1.0.29 2026-05-17 08:02:31 +02:00
jarek 002d969a5d 1.0.28 2026-05-09 09:55:18 +02:00
jarek 7e3797cbfe 1.0.27 2026-04-26 08:01:32 +02:00
jarek 22e0429094 V1.0.26 2026-04-19 13:06:27 +02:00
jarek c44f244b1d v1.0.25 2026-04-18 08:40:17 +02:00
jarek afee09866d v1.0.25 2026-04-18 08:34:20 +02:00
jarek 7f26c0a585 v1.0.24 2026-04-03 18:32:46 +02:00
jarek 0bb10cabb9 v1.0.23 2026-04-03 11:51:42 +02:00
jarek b55e1e5aad v1.0.22 2026-03-21 14:29:30 +01:00
jarek 55f3101a19 v1.0.21 2026-03-13 08:22:46 +01:00
Jarek Krochmalski a04040e1e9 1.0.20 2026-03-03 10:29:01 +01:00
jarek 5527d19198 v1.0.20 2026-03-02 13:10:03 +01:00
jarek 1066ce9eb1 v1.0.20 2026-03-02 10:41:42 +01:00
jarek 9c451aedf9 v1.0.19 2026-03-02 07:59:58 +01:00
jarek 33bdc39b49 1.0.18 2026-02-16 13:37:19 +01:00