Skip to content

Commit cc128f1

Browse files
committed
Merge remote-tracking branch 'origin/staging' into codex/pr-7477
# Conflicts: # helm/sim/Chart.yaml
2 parents c996233 + 776f148 commit cc128f1

9 files changed

Lines changed: 528 additions & 48 deletions

File tree

‎.github/workflows/helm.yml‎

Lines changed: 303 additions & 2 deletions
Large diffs are not rendered by default.

‎apps/docs/content/docs/platform/self-hosting/environment-variables.mdx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ Setting the variable to an empty string does **not** remove it: the chart reads
311311
Null the variable in every layer that sets it. If it appears in both `app.env` and `app.envDefaults`, nulling only the `app.env` entry lets the `envDefaults` value apply again and the limit stays in force. With External Secrets, also drop the key from `externalSecrets.remoteRefs.app`, which keeps syncing it independently. Confirm what the pod will actually receive before rolling out:
312312

313313
```bash
314-
helm template sim ./helm/sim -f values.yaml | grep -A1 FREE_TABLE # expect no output
314+
helm template sim oci://ghcr.io/simstudioai/charts/sim --version 1.9.5 -f values.yaml | grep -A1 FREE_TABLE # expect no output
315315
```
316316

317317
`null` deletion has no effect under `helm upgrade --reuse-values` — pass your full values with `-f`, or use `--reset-then-reuse-values` (Helm 3.14+). If you deploy with Argo CD, put the `null` in `valueFiles` or the `values` string rather than `valuesObject`, which strips nulls. On Docker Compose, delete the line from your `.env` file.

‎apps/docs/content/docs/platform/self-hosting/kubernetes.mdx‎

Lines changed: 60 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,15 @@ import { FAQ } from '@/components/ui/faq'
2121

2222
## Installation
2323

24-
```bash
25-
# Clone repo
26-
git clone https://github.com/simstudioai/sim.git && cd sim
24+
The chart is published to GitHub Container Registry as an OCI artifact at
25+
`oci://ghcr.io/simstudioai/charts/sim`. Install it directly — no clone required.
26+
27+
It is also available from a classic Helm repository at `https://charts.sim.ai`
28+
for tooling that expects one; see [Helm repository](#helm-repository) below.
29+
Prefer OCI where you can, since the signature and provenance are attached to the
30+
OCI artifact.
2731

32+
```bash
2833
# Generate secrets
2934
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
3035
ENCRYPTION_KEY=$(openssl rand -hex 32)
@@ -34,7 +39,8 @@ CRON_SECRET=$(openssl rand -hex 32)
3439
POSTGRES_PASSWORD=$(openssl rand -hex 24)
3540

3641
# Install
37-
helm install sim ./helm/sim \
42+
helm install sim oci://ghcr.io/simstudioai/charts/sim \
43+
--version 1.9.5 \
3844
--set app.env.BETTER_AUTH_SECRET="$BETTER_AUTH_SECRET" \
3945
--set app.env.ENCRYPTION_KEY="$ENCRYPTION_KEY" \
4046
--set app.env.INTERNAL_API_SECRET="$INTERNAL_API_SECRET" \
@@ -56,13 +62,58 @@ helm install sim ./helm/sim \
5662
This installs the chart's default image tag. For production, **pin `app`, `realtime`, and `migrations` to the same explicit release tag** — see [Upgrades](/platform/self-hosting/upgrades).
5763
</Callout>
5864

65+
## Helm repository
66+
67+
For clusters or GitOps configs that consume `helm repo add` rather than OCI:
68+
69+
```bash
70+
helm repo add sim https://charts.sim.ai
71+
helm repo update
72+
73+
helm install sim sim/sim --version 1.9.5 --namespace simstudio --create-namespace \
74+
--set app.env.BETTER_AUTH_SECRET="$BETTER_AUTH_SECRET" \
75+
--set app.env.ENCRYPTION_KEY="$ENCRYPTION_KEY" \
76+
--set app.env.INTERNAL_API_SECRET="$INTERNAL_API_SECRET" \
77+
--set app.env.API_ENCRYPTION_KEY="$API_ENCRYPTION_KEY" \
78+
--set app.env.CRON_SECRET="$CRON_SECRET" \
79+
--set postgresql.auth.password="$POSTGRES_PASSWORD"
80+
```
81+
82+
It serves the same chart as the OCI registry. The signature and provenance below
83+
apply to the OCI artifact only.
84+
85+
## Verifying the chart
86+
87+
Every published version is signed with Sigstore keyless signing and carries a SLSA build-provenance attestation. Both live in the registry alongside the chart, so they survive a mirror into an internal registry.
88+
89+
```bash
90+
cosign verify oci://ghcr.io/simstudioai/charts/sim:1.9.5 \
91+
--certificate-identity-regexp '^https://github.com/simstudioai/sim/' \
92+
--certificate-oidc-issuer https://token.actions.githubusercontent.com
93+
94+
gh attestation verify oci://ghcr.io/simstudioai/charts/sim:1.9.5 --repo simstudioai/sim
95+
```
96+
97+
Signing is Sigstore-only — there is no GPG `.prov` file, so `helm install --verify` does not apply.
98+
99+
<Callout type="warn">
100+
Verification requires **cosign v3.0 or newer**. Signatures use the Sigstore protobuf bundle format, which cosign v3 writes by default and cosign v2 cannot read. cosign v3.1+ auto-detects both formats.
101+
</Callout>
102+
59103
## Cloud-Specific Values
60104

61105
These are cloud-tuned **alternatives** to the generic install above — pick one path, don't run both. The commands reuse the `$BETTER_AUTH_SECRET`, `$ENCRYPTION_KEY`, `$INTERNAL_API_SECRET`, `$API_ENCRYPTION_KEY`, `$CRON_SECRET`, and `$POSTGRES_PASSWORD` variables generated in [Installation](#installation) above, so run that block's `openssl` lines first in the same shell. They use `helm upgrade --install`, so they work whether or not a release exists yet. Two caveats when converting an existing generic install rather than starting fresh: (1) **reuse the original secret values** — recover them with `helm get values sim -n simstudio` if your shell no longer has them; supplying a newly generated `ENCRYPTION_KEY` makes every previously encrypted value (workspace environment variables, stored provider keys, MCP OAuth credentials) undecryptable. (2) The cloud values rename the bundled PostgreSQL database to `simstudio`, but Postgres only applies that setting on first initialization — add `--set postgresql.auth.database=sim` to keep your existing database. If you'd rather start clean, `helm uninstall sim -n simstudio`, delete its PVCs, and run the cloud command fresh.
62106

63107
```bash
64-
helm upgrade --install sim ./helm/sim \
65-
--values ./helm/sim/examples/values-aws.yaml \
108+
# The example values files are not part of the packaged chart, so fetch the one
109+
# you want at a release tag — pinning the chart but reading values off a moving
110+
# branch would still make this command produce different deployments over time.
111+
SIM_RELEASE=v0.8.24
112+
curl -fsSLO "https://raw.githubusercontent.com/simstudioai/sim/$SIM_RELEASE/helm/sim/examples/values-aws.yaml"
113+
114+
helm upgrade --install sim oci://ghcr.io/simstudioai/charts/sim \
115+
--version 1.9.5 \
116+
--values values-aws.yaml \
66117
--set app.env.BETTER_AUTH_SECRET="$BETTER_AUTH_SECRET" \
67118
--set app.env.ENCRYPTION_KEY="$ENCRYPTION_KEY" \
68119
--set app.env.INTERNAL_API_SECRET="$INTERNAL_API_SECRET" \
@@ -80,7 +131,7 @@ helm upgrade --install sim ./helm/sim \
80131

81132
Every one of those overrides is required. The cloud values files hardcode a placeholder domain in all six places, and overriding only `NEXT_PUBLIC_APP_URL` leaves sign-in pointed at the placeholder, realtime rejecting every socket upgrade, and the Ingress serving the wrong host.
82133

83-
Swap the `--values` file for your cloud: `values-aws.yaml` (EKS), `values-azure.yaml` (AKS), or `values-gcp.yaml` (GKE). Everything else is identical.
134+
Swap the `--values` file for your cloud: `values-aws.yaml` (EKS), `values-azure.yaml` (AKS), or `values-gcp.yaml` (GKE). Everything else is identical. Keep the downloaded file in your own config repo — the `--set` overrides above cover the six placeholder domains, but anything else you tune belongs in the file.
84135

85136
## Key Configuration
86137

@@ -181,8 +232,8 @@ kubectl port-forward deployment/sim-app 3000:3000 -n simstudio
181232
# View logs
182233
kubectl logs -l app.kubernetes.io/component=app -n simstudio --tail=100
183234
184-
# Upgrade
185-
helm upgrade sim ./helm/sim --namespace simstudio
235+
# Upgrade (always pin the target chart version)
236+
helm upgrade sim oci://ghcr.io/simstudioai/charts/sim --version 1.9.5 --namespace simstudio
186237
187238
# Uninstall
188239
helm uninstall sim --namespace simstudio

‎apps/docs/content/docs/platform/self-hosting/reference-architectures.mdx‎

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,16 +139,23 @@ See [Security](/platform/self-hosting/security) for the full secret inventory, w
139139

140140
## Calling the chart from Terraform
141141

142-
If you already run Terraform, the chart is the resource to wrap — not something to reimplement. It is not published to a Helm repository or an OCI registry, so there is no `repository` to point at: vendor this repo as a submodule, a release tarball, or a `git clone` in your pipeline, and give `chart` the local path.
142+
If you already run Terraform, the chart is the resource to wrap — not something to reimplement. Point `repository` at the OCI registry and pin `version`; there is no need to vendor the repo.
143143

144144
```hcl
145145
resource "helm_release" "sim" {
146146
name = "sim"
147147
namespace = "sim"
148148
create_namespace = true
149149
150-
# Local path, not a repository. Pin the git ref you vendor from.
151-
chart = "${path.module}/sim/helm/sim"
150+
# Always pin `version`. Without it Terraform resolves the newest published
151+
# chart at apply time, which is how an unplanned apply moves Sim to a new
152+
# release with new migrations.
153+
repository = "oci://ghcr.io/simstudioai/charts"
154+
chart = "sim"
155+
version = "1.9.5"
156+
157+
# Or the classic repository, if your tooling does not speak OCI:
158+
# repository = "https://charts.sim.ai"
152159
153160
# Your own values file. The examples under helm/sim/examples/ carry
154161
# placeholder secrets and are starting points, not deployable as-is.
@@ -172,6 +179,6 @@ resource "helm_release" "sim" {
172179
The example values files ship literal placeholders such as `your-secure-production-auth-secret-here`. That includes `postgresql.auth.password`. The chart only rejects empty values and its own `CHANGE-ME` strings, so a deployment that inherits those placeholders installs cleanly with a publicly known session-signing secret and database password. Override every secret, or use External Secrets and set none of them inline.
173180
</Callout>
174181

175-
Because the chart is local, `version` does nothing — what pins it is the git ref you vendor from, and `helm/sim/Chart.yaml` tells you which chart release that ref carries. Pin that ref, and pin the image tags separately, or an unplanned `terraform apply` can move Sim to a new release with new migrations. See [Upgrades](/platform/self-hosting/upgrades).
182+
Pin `version` above, and pin the image tags separately — the chart version and the application version move independently, so pinning one does not pin the other. See [Upgrades](/platform/self-hosting/upgrades).
176183

177184
Once the infrastructure exists, follow [Kubernetes](/platform/self-hosting/kubernetes) for the install itself, then the [pre-launch checklist](/platform/self-hosting/security) and the [verification checklist](/platform/self-hosting/verify).

‎apps/docs/content/docs/platform/self-hosting/upgrades.mdx‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,15 +156,16 @@ Migration surprises are usually data-shaped rather than schema-shaped, so a stag
156156
<Tab value="Kubernetes (Helm)">
157157

158158
```bash
159-
helm upgrade sim ./helm/sim \
159+
helm upgrade sim oci://ghcr.io/simstudioai/charts/sim \
160+
--version 1.9.5 \
160161
--namespace simstudio \
161162
--values my-values.yaml
162163
```
163164

164165
Preview first if the chart version changed:
165166

166167
```bash
167-
helm diff upgrade sim ./helm/sim -n simstudio --values my-values.yaml
168+
helm diff upgrade sim oci://ghcr.io/simstudioai/charts/sim --version 1.9.5 -n simstudio --values my-values.yaml
168169
```
169170

170171
Then watch the rollout:

‎helm/artifacthub-repo.yml‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Artifact Hub repository metadata for the Sim chart.
2+
#
3+
# Lives outside `helm/sim/` on purpose: it describes the *repository* rather
4+
# than the chart, so it must not be packaged into the `.tgz`, and a change to it
5+
# must not trip the chart's mandatory Chart.yaml version bump.
6+
#
7+
# The publish job pushes this file to the OCI registry under the reserved
8+
# `artifacthub.io` tag, which is where Artifact Hub looks for it:
9+
# ghcr.io/simstudioai/charts/sim:artifacthub.io
10+
#
11+
# `owners` is what backs an ownership claim — Artifact Hub matches the email of
12+
# the requesting account against this list, and processes claims immediately
13+
# rather than waiting for the next repository scan.
14+
owners:
15+
- name: Sim Team
16+
email: help@sim.ai
17+
18+
# Set this to the repository's Artifact Hub ID once the repository has been
19+
# registered at https://artifacthub.io/control-panel/repositories. It is what
20+
# turns on the "Verified Publisher" badge; until then the listing still works,
21+
# just unverified.
22+
# repositoryID: ""

‎helm/sim/Chart.yaml‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: sim
33
description: A Helm chart for Sim - the open-source AI workspace where teams build, deploy, and manage AI agents
44
type: application
55
version: 1.10.0
6-
appVersion: "v0.8.18"
6+
appVersion: "v0.8.24"
77
kubeVersion: ">=1.25.0-0"
88
home: https://sim.ai
99
icon: https://raw.githubusercontent.com/simstudioai/sim/main/apps/sim/public/logo/primary/primary.svg
@@ -21,6 +21,9 @@ keywords:
2121
- nextjs
2222
annotations:
2323
category: developer-tools
24+
# Artifact Hub only accepts one value from its fixed list; the bare `category`
25+
# above is a different convention and does not categorise the listing.
26+
artifacthub.io/category: ai-machine-learning
2427
artifacthub.io/license: Apache-2.0
2528
artifacthub.io/links: |
2629
- name: Homepage

0 commit comments

Comments
 (0)