feat(jobber): migrate to temporal - #299
Draft
dargmuesli wants to merge 17 commits into
Draft
Conversation
dargmuesli
force-pushed
the
feat/jobber/to-temporal
branch
from
September 3, 2026 07:51
21b11c5 to
e828110
Compare
# Conflicts: # src/development/jobber/compose.yaml # src/production/jobber/compose.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces
jobberwith a self-hosted Temporal: the workflow server, its ui, and a worker built from maevsi/temporal.All
jobberservice definitions, configurations, and notification sink scripts are gone from both environments.The S3 bucket secret keeps its
jobber-aws-bucketname on purpose, because dargstack generated that value, the value is the name of the bucket that already holds production's backups, and renaming it would generate a new word pointing at a bucket that does not exist.Temporal keeps its state in the existing
postgres, under two new database roles thatsqitchowns.The worker gets a role of its own for the outbox purge workflow, which stays disabled until the outbox table lands in
sqitch.A small entrypoint wrapper reads the mounted secret files, since the
auto-setupimage has no support for Docker's_FILE-suffixed secret convention.Prometheus scrapes both the server and the worker.
The workflow failure alert is written up in
docs/grafana.mdinstead of being provisioned from a file, matching how the rest of Grafana's configuration has been handled since it moved into Grafana's own database.Neither the Temporal ui nor the Redpanda console has a login of its own, and both can do damage: terminating or signalling workflows, deleting topics.
The reverse proxy now puts basic authentication in front of both in production, built from dargstack's
basic_authsecret type, which generates a username, a password, and the bcrypt htpasswd line joining them.Only the hash is mounted into the reverse proxy; both halves keep a file of their own so the generated credential stays readable with
dargstack secret show.That secret type arrived in dargstack 4.17.0, so the compatibility range moves accordingly.
Along the way, the production reverse proxy override replaced its base secrets list rather than appending to it, which silently dropped every secret the development definition mounted.
It appends now.
Merged with
mainafter the multi-node change landed.temporalbind-mounts its entrypoint fromconfigurations/andtemporal-workermounts the database backup volume, so both are pinned to the storage node anddocs/multi-node.mdlists them injobber's place.The worker's S3 credentials follow the same change
mainmade fortusd, templating from theminioroot secrets rather than carrying an insecure default.