Upgrades
How an upgrade runs, how to roll back, and what happens to running workspaces.
Before you upgrade
- Read the release notes of every version between yours and the new one for values that changed.
- Check that the last nightly backup succeeded:
hart admin doctor(checkbackups). - Render your values against the new chart; the schema may have changed:
helm template harthelm oci://<your registry>/charts/harthelm --version <new version> \
-n harthelm-system -f my-values.yaml > /dev/nullUpgrade
helm upgrade harthelm oci://<your registry>/charts/harthelm --version <new version> \
-n harthelm-system -f my-values.yamlWhat happens, in order:
- The preflight Job checks the cluster against the new values. A failure stops the upgrade before anything changes; its log lists what is missing.
- The pre-migration dump writes
platform/pre-migration-<stamp>.dumpto the backup volume (the newestbackup.preMigration.keep, 10 by default, are kept). A failed dump stops the upgrade, so no migration runs without a copy. - The new core starts, migrates the database and takes over. During a rolling update only the newest core changes workspace objects, so two versions never fight over them.
With core.updateStrategy RollingUpdate (the default) the API stays up; Recreate has a short outage.
Running workspaces
workspaces.upgradePolicy decides:
| Value | Effect |
|---|---|
keep (default) | Running workspaces keep their pods until they sleep or stop, then start on the new images. The console marks them "Upgrade pending". What users change (plan, variables, Sync) still applies at once. |
restart | Every running workspace restarts with the new pod spec right away. |
The IDE's user settings are seeded once, when a workspace's IDE first starts, and then belong to the user. A release that changes the seed reaches new workspaces only.
hart warns its users when its version differs from the server's in major or minor version; they update it as in
Install hart.
Roll back
Database migrations only add in a release and remove in a later one, so the previous version runs on the newer schema. Roll back by upgrading to the previous version (or moving the Argo CD pin back):
helm upgrade harthelm oci://<your registry>/charts/harthelm --version <previous version> \
-n harthelm-system -f my-values.yamlRestore the pre-migration dump only if the database itself is damaged; see Backups and restore.
Upgrading from 1.4 to 1.5
Nothing needs to be done before the upgrade, and no value changes: 1.5.0 adds no values key and no migration, and the API stays at 0.12. What rolls:
- Core and the router roll as with every release, because their image changes. Core now sends
Strict-Transport-Securityon the console and logs the installation id when no licence is in force; the router answers CORS for custom domains on public S3 hosts and logs its start-up reconnects atINFO. - The backup jobs use the new image from their next run. Their dump lines carry
tls_verify, andtlsnow tells the transport that was used (Backups and restore). A log alert or a dashboard that matchestls=falseon a PostgreSQL dump line has to follow. The nightly run skips a managed service that has not reported where it listens yet, with theWARNlinemanaged service not ready yet; skipped, instead of failing (A service that is still starting), so a service created just before the run no longer fails the night's Job. The doctor'smanaged-backupsstays the check for an instance that is never dumped. - The console gains Platform → Doctor for cluster admins (The Doctor page). Nothing to enable.
- Nothing else restarts. No RabbitMQ broker, S3 store, MariaDB, Valkey or PostgreSQL instance, and no workspace or service, is touched: the stores' start arguments are unchanged, and the CORS answer lives in the router.
hartof 1.4 keeps working; update it from the release's archives to match.- A site behind a policy of its own that matches response headers may see the new
Strict-Transport-Securityon the console host. Browsers apply it for a year to that host only. - Where the release comes from is unchanged for a self-hosted installation: the same chart and images, by the same digests. From 1.5.0 a stable release is also copied, by digest, to the registry the hosted installations pull from; a hosted installation moves its chart pin to 1.5.0 there and changes nothing else.
The 1.4 core keeps working on the same database during the rolling update. See the 1.5.0 release notes.
Upgrading from 1.3 to 1.4
Nothing needs to be done before the upgrade. What happens after it:
- Every RabbitMQ broker restarts once (about 10 to 30 seconds without AMQP; clients reconnect, no service rolls):
its configuration gains the single sign-on of the browser hosts.
Until a broker has restarted, Open management UI ends at RabbitMQ's login form with "Not_Authorized"; the
broker's user and password work. To keep 1.3's behaviour, upgrade with
marketplace.browserHosts.enabled: false. - Every S3 store restarts once (about 20 to 35 seconds without S3) for its new startup probe. With in-cluster TLS on, its new certificate can restart it a second time; from then on the backups reach it over HTTPS on 8443.
- Nothing else restarts: workspaces, services, PostgreSQL, MariaDB and Valkey keep running.
- New values
marketplace.browserHostsandmarketplace.storageWriteProbe(both on by default). The 1.3 chart's schema rejects them: with your values in Git for Argo CD, move the pin to the 1.4 chart before or with a change of these values. - API 0.12: a
hartof 1.3 warns once a day; update it. - S3 bucket names that S3 does not accept are refused with a 422 on the next create or update of such a store.
- The doctor has three more checks.
managed-storage-writeshows a result within a minute or two of the new core becoming the leader.managed-s3-backup-spaceandmanaged-s3-blob-gcsayskipuntil the first managed backup run after the upgrade (the nightly one, or a dump on demand) has recorded the backup volume, and warn if none did within 48 hours. - The restore runbooks come from the release's
harthelm-restore-1.4.0.tar.gzfrom now on (Backups and restore); the S3 restore no longer needs a suspended backup CronJob.
The 1.3 core keeps working on the upgraded database during the rolling update; the migrations only add. See the 1.4.0 release notes.
Upgrading from 1.0 to 1.1
Nothing needs to be done before the upgrade. Three things change at the first start of 1.1:
- A licence is required. An installation upgraded from 1.0 without one runs 30 days in its grace period from that
start: nothing is paused, cluster admins see the grace banner and the doctor's
licensecheck says what to do. Install the licence within those 30 days, before or after the upgrade; see Licence. Withlicense.existingSecretin the values, the preflight checks the licence already during the upgrade. - Formats get new names. The availability values are
alwaysandon-demand(werealways-onandoff-when-unused; the console says "Always running" and "Sleeps when idle"), and provider definitions areharthelm/provider-v2(Managed services). The upgrade renames the stored values and the published definitions;harthelm.ymlfiles andmarketplace.builtin.postgres.overrideswith the old names keep working and show a note with the new name. Update them when convenient. - The importer is gone.
hart importand the import dialog of the harthelm.yml editor are removed. Files you converted with 1.0 stay as they are.
The 1.0 core keeps working on the upgraded database during the rolling update. See the 1.1.0 release notes.
Values that cannot change freely
security.defaultUidcannot change while workspace volumes exist;helm upgraderefuses. See Storage.storage.class,storage.modeand the volume size apply to new workspaces only.masterKey.existingSecretmust keep naming the same key: core refuses to start with a database set up under another one.platform.hostis part of the OIDC redirect URI and the Git OAuth applications' redirect URIs: change those with it. Both hosts are in your DNS records and certificates.