GoRunner docs
Search or askSearch⌘K

v2026.10.4

Runs are never lost, and wait in line

13 Oct 2026 · Cloud · Self-hosted · Embed

A run over the limit waits in line instead of being dropped. The Storage and Queue apps keep their data in the database.

What changed

  • Runs wait in the database, so a Redis that loses its data loses no run. See Runs.
  • A run over a limit waits in line. At most 10,000 runs of one organization and 1,000 of one workflow wait (RUNS_WAITING_PER_ORG, RUNS_WAITING_PER_WORKFLOW), test runs included. A webhook waiting for its answer gets 202 after 30 seconds in line. See Limit runs at once.
  • Each organization can have its own runs at once. See Limit runs at once.
  • Storage data moves to the database once. One value holds at most 16 MB, and Test steps keep their own data. See Storage.
  • Queue data moves too, with the same limits. See Queue.
  • Replacing the license in force asks for your two-factor code. gorunner reset-two-factor helps when the only admin loses theirs. See Your license.
  • Embed SDK 1.1.0. Version 1.0.0 is still served. See Versions and upgrades.

When you update

Before you update

  1. Add the private addresses your workflows call to WORKFLOW_PRIVATE_NETWORKS. Otherwise those steps fail with “This address can’t be reached from workflows”. Cloud metadata is never reachable. See Outbound access.
  2. With Embed, turn on the new switches you want. Overview, Tokens, AI clients and AI building arrive off. Cancel runs arrives on. The 9 new notification events arrive unticked. See Switches.
  3. With Embed and customers on their own domains, add each customer’s website to that account through the Partner API. Your own list holds up to 200. See Security.
  4. If something reads the version from /api/health from outside the server, read it on the server, or set HEALTH_DETAILS=public. From outside it now gets only ok. See Health checks.
  5. If your own proxy asks /api/embed/frame-policy itself, it must pass the page’s address on. See Behind your own proxy.

During the update

  • The built-in Redis, object storage and Caddy restart once, for a few seconds. The built-in database doesn’t.
  • While Storage and Queue data moves, those steps wait, about 0.2 seconds for 10,000 keys. A step that waits past its own time limit fails once with “Storage and Queue data is being moved. Try again in a minute.”
  • The new indexes wait up to a minute for older database transactions, such as a running backup. If one is still open, the update stops with the old version running. Run the same command again once it ends.
  • The container that holds the address open keeps its version. To move it at a quiet moment, run ./deploy.sh --replace-gate v2026.10.4.
  • New settings: DB_ADMIN_HEADROOM keeps 5 database connections free for admins, and ACCESS_LOG turns on an access log.

GoRunner’s image is private for now. With Docker, sign in to the registry first. On Kubernetes, sign Helm in and give the cluster its pull Secret. See Update for the whole procedure, or Install with Docker and Install on Kubernetes to install this version anew.

# Check the image first: its Digest must be sha256:09de7241d7c9b551c208e9f3a184a3625885e19b1eb809029b81a7b6184df469
docker buildx imagetools inspect ghcr.io/ralve-org/gorunner-selfhost:v2026.10.4

# Update
./deploy.sh v2026.10.4

Going back

  • v2026.10.3’s check refuses the database this release changed, so go past it once. First run the check of this version, and go on only when it reports no problem: docker compose run --rm check. Then run ./deploy.sh v2026.10.3 --skip-check.
  • Runs waiting in line are started once each. v2026.10.3 reads the copy of the Storage and Queue data that Redis kept, and what it writes comes back when you update again. Redis keeps that copy for this release only.