values.yaml or your .env, and your Secrets. Every build has new files, since they name its images by digest: there is no upgrade of the images alone, and the engine, Command Center, the executor images the engine starts and the permissions they need always move together. The commands use your namespace in $NS on Kubernetes, and your stack name in $STACK on Docker Swarm (ai-2501, or the CLI’s for an installation moved from it).
Each Release says until when its version is supported, 3 months after its release. Fixes go into the newest version only: upgrade before that date.
Before you start
- Read the Upgrade actions. The release notes of each release list, under Upgrade actions, what changed in what you apply, such as a permission, a new required secret or value, or a change that interrupts running tasks. Read them for every release you cross, not only the last one.
-
Back up the database, schema and data. Restoring this backup is what makes going back possible. The commands take the role and database from
$Uand$DB:2501and2501, the CLI’s, which the chart keeps on Kubernetes; on Docker Swarm, yourdatabase.useranddatabase.name(2501by default,postgresand2501for an installation moved from the CLI).Keep automated backups for disaster recovery too, not only one dump before an upgrade. -
Download and verify the new build’s files from its Release on github.com/2501-ai/install, as for the install: see Verify the installation files. On Kubernetes and OpenShift,
https://github.com/2501-ai/install/releases/latest/download/2501.tgzis always the newest build’s chart;helm show chart 2501.tgzprints its build, and the commands below take it in place of2501-<build>.tgz. If you copy the images into your registry, copy the new ones first.
Review the change
Look at everything the new build changes before you apply it, permissions included:Apply
With the new build’s files, run the same commands as for the install:- kubectl or oc: render the new
2501-<build>.tgzwith the samevalues.yaml, then the samekubectl apply --pruneof the result, as in Apply. If the Upgrade actions name a new value, add it to yourvalues.yamlfirst: the render refuses one without it. Your Secrets stay as they are, and the diff shows only what the build changes. - Helm:
helm upgrade --installwith the new2501-<build>.tgzand the samevalues.yaml, as in With Helm or ArgoCD. - ArgoCD: replace the unpacked chart in your Git repository with the new one (
rm -rf <path>/2501 && tar -xzf 2501-<build>.tgz -C <path>), commit, and sync. - Docker Swarm: add any new variable to your
.envand create any new secret, then the samedocker stack deploy --with-registry-auth --prunewith the newcompose.yaml.
Go back
If the new build misbehaves, go back to the last one that worked, with the data that went with it:-
Stop the engine, Command Center and the bootstrap of the new build (with ArgoCD, turn off automated sync first, or it starts them again), which retries its migrations, and wait until their pods or containers are gone, so nothing writes to the database while it is restored.
scalereturns at once, and the engine gives running tasks up to 110 seconds. The wait fails after five minutes; do not go on until it succeeds.On Docker Swarm, the next deploy creates the bootstrap again. Rungoneon every node: -
Restore the backup into an empty database. The names are quoted:
2501is not a valid name without quotes.template0keeps the new database from inheritingtemplate1’s collation version, which a newer PostgreSQL image refuses to copy. For the PostgreSQL 2501 provides on Kubernetes:On Docker Swarm, on the node labelled 2501-data:For your own database, recreate it empty and runpg_restore -d "$DIRECT_URL" --exit-on-error 2501-preupgrade.dump. -
Apply the previous build by the method you use: its chart, from its Release, with the
values.yamlyou ran it with (from your Git history), or its Swarm files. A Release never changes, so they are still there. With ArgoCD, revert the commit that brought in the new chart. - If the two builds run different PostgreSQL images, PostgreSQL warns of a “collation version mismatch”: rebuild the indexes, as in step 4 of Move from the CLI.
- Check the installation before handing it back to users, and tell 2501 what went wrong, with the details you still have.

