You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,8 +7,12 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
8
## [Unreleased]
9
9
10
+
## [v0.18.7] - 2026-07-20
11
+
10
12
### Added
11
13
14
+
- Added out-of-process binding providers: new binding types (mongodb, redis/valkey, sqlserver, oracle) are built as standalone executables in the [openrundev/bindings](https://github.com/openrundev/bindings) repo and invoked by the server over gRPC using hashicorp/go-plugin, so adding a binding type no longer grows the openrun binary or its dependency tree. Providers are installed with the new `openrun provider install/uninstall/list` commands (`/_openrun/provider` APIs, gated by the new `provider:read` / `provider:manage` RBAC permissions); the install is recorded in the metadata database with pinned sha256 checksums, so it survives restarts and propagates to all server replicas — each replica materializes the verified binaries into the `bindings.cache_dir` local cache at startup, before serving traffic, making installs work on Kubernetes multi-replica deployments.
15
+
- Added the OCI image distribution path for binding providers: each provider release also publishes a minimal `FROM scratch` image (`ghcr.io/openrundev/openrun-binding-<name>`), and the Helm chart's `bindings.images` values render one init container per provider which copies the binary (via the provider binary's new `export` subcommand) into a shared volume. The server registers pre-placed provider executables from the new `bindings.preinstalled_dir` config at startup, with no downloads and no database registration — integrity comes from the image digests, and the sha256 computed at discovery is verified on every provider launch. The new `bindings.disable_install` config (chart value `bindings.disableInstall`) rejects the imperative `openrun provider install/uninstall` API/CLI, for deployments where providers are managed only declaratively.
12
16
- Add agent builder support using ACP integration
13
17
- Added the `builtin` app auth type: username/password authentication (HTTP Basic) against `[builtin_auth.<username>]` config entries, each with a bcrypt `password` hash and a `groups` list used for RBAC `group:` matching (user id is `builtin:<username>` in grants). Users can be defined statically in `openrun.toml` or managed dynamically with the new `openrun user add/update/delete/list` commands (`/_openrun/user` APIs), which take effect immediately without a server restart and shadow static entries of the same name. Useful for small deployments and for testing RBAC policies with multiple users and groups without setting up OAuth/SAML.
14
18
- Added the global CLI flag `--as <provider>:<username>` (e.g. `openrun --as builtin:user1 app list`): the management API call runs as the given user with RBAC enforcement (permission checks, list filtering, the owner rule, audit attribution) instead of as the trusted administrator. Supported over the unix domain socket only and requires RBAC to be enabled; for `builtin:` users the entry must exist and its groups feed `group:` grant matching, other provider ids (e.g. `github:user`) are taken literally with no groups so grants for SSO identities can be tested without creating them. Useful for testing RBAC policies from the CLI without going through an app.
Copy file name to clipboardExpand all lines: deploy/terraform/README.md
+13Lines changed: 13 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -105,6 +105,19 @@ Wait for DNS to propagate before completing TLS issuance.
105
105
106
106
Set `openrun_auth_mode` to `oidc` or `saml` and provide the matching variables. Outputs include the callback/ACS URLs.
107
107
108
+
## Binding providers (optional)
109
+
110
+
Out-of-process [binding providers](https://github.com/openrundev/bindings) (mongodb, redis, sqlserver, oracle) can be installed declaratively:
111
+
112
+
```hcl
113
+
openrun_binding_providers = {
114
+
redis = "v0.1.0"
115
+
mongodb = "v0.1.0"
116
+
}
117
+
```
118
+
119
+
Every OpenRun replica downloads, verifies and registers the declared providers at startup; their service types become available for `openrun service create`. Upgrading a provider is a version change followed by `terraform apply` (which rolls out the deployment). Append `@sha256:<hex>` to a version to pin the binary digest. Set `openrun_bindings_release_url_template` to download from an internal mirror when the cluster restricts egress.
120
+
108
121
## Security summary
109
122
110
123
- EKS worker nodes are private and egress via NAT.
description="Out-of-process binding providers installed at server startup, provider name to version (e.g. { redis = \"v0.1.0\" }). Append @sha256:<hex> to a version to pin the binary digest (comma-separated digests for multi-arch). Providers declared here cannot be modified with the openrun provider CLI."
254
+
type=map(string)
255
+
default={}
256
+
}
257
+
258
+
variable"openrun_bindings_release_url_template" {
259
+
description="Optional mirror url template for downloading binding provider binaries ({provider}, {version}, {os}, {arch} are replaced). Leave empty to download from the openrundev/bindings GitHub releases."
260
+
type=string
261
+
default=""
262
+
}
263
+
252
264
variable"openrun_auth_mode" {
253
265
description="Authentication mode for OpenRun: none, oidc, or saml."
Copy file name to clipboardExpand all lines: docs/content/docs/Container/Kubernetes.md
+37-1Lines changed: 37 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -103,7 +103,28 @@ OpenRun service and Kaniko jobs run in the main namespace (default `openrun`). A
103
103
104
104
Out-of-process [binding providers](https://github.com/openrundev/bindings) (mongodb, redis, sqlserver, oracle) work on Kubernetes without any special setup: installed providers are registered in the metadata database (Postgres, required for Kubernetes installs), which is the source of truth. Each server replica materializes the provider executables into a node-local cache directory at startup, before serving traffic, and re-downloads them (with checksum verification) whenever a pod starts on a fresh node. Installs and uninstalls propagate to all replicas through Postgres notifications, so `openrun provider install` works on multi-replica deployments exactly as on a single server.
105
105
106
-
For declarative, config-managed deployments, declare the providers in the server config instead of using the CLI:
106
+
For declarative, config-managed deployments, declare the providers in the Helm values instead of using the CLI:
107
+
108
+
```yaml {filename="values.yaml"}
109
+
bindings:
110
+
install:
111
+
redis: v0.1.0
112
+
mongodb: v0.1.0
113
+
# Optional mirror for clusters with restricted egress; {provider}, {version},
or with `--set bindings.install.redis=v0.1.0` on the Helm command line. For Terraform-managed EKS installs, set the `openrun_binding_providers` variable in `terraform.tfvars`:
119
+
120
+
```hcl {filename="terraform.tfvars"}
121
+
openrun_binding_providers = {
122
+
redis = "v0.1.0"
123
+
mongodb = "v0.1.0"
124
+
}
125
+
```
126
+
127
+
The chart renders these into the `[bindings.install]` section of the generated server config:
107
128
108
129
```toml {filename="openrun.toml"}
109
130
[bindings.install]
@@ -117,6 +138,21 @@ A replica that misses an install notification (for example after a transient dat
117
138
118
139
The provider processes run inside the OpenRun server pod, so a provider binary must run in the server container image; the published providers are static pure-Go binaries and need nothing beyond the stock image. Provider startup materialization completes before the server starts serving, so binding operations never race provider registration during a rollout.
119
140
141
+
### OCI image install
142
+
143
+
Providers are also published as minimal OCI images (`ghcr.io/openrundev/openrun-binding-<provider>`, a `FROM scratch` image holding the provider binary). For clusters where binaries must come through image provenance policies, or where the server pods have no egress at all, declare the providers as images instead of versions:
The Helm chart renders one init container per provider, which copies the binary from its image into a shared volume (`export` subcommand of the provider binary); the server registers the pre-placed providers at startup, with no downloads and no database registration. Integrity comes from the image digests that placed the binaries — reference images by digest where policy requires it — and the server pins the discovered binary's checksum so every provider launch verifies the file has not changed. Images are pulled by the container runtime, so `imagePullSecrets` and registry mirrors apply as for any other image.
153
+
154
+
With either declarative path, `bindings.disableInstall: true` additionally rejects the imperative `openrun provider install`/`uninstall` CLI on the deployment, making the chart values the only way providers are added.
155
+
120
156
## Architecture
121
157
122
158
OpenRun is installed as a Kubernetes Deployment, with a Service for routing API calls. For each containerized app installed on OpenRun, a ClusterIP Service is created for app traffic. API calls to the OpenRun API Server are routed to the app-specific Service using its cluster IP.
0 commit comments