Dys is a Heroku/Fly.io Self Hosted Alternative
  • TypeScript 98.4%
  • Go Template 1.1%
  • Dockerfile 0.2%
  • CSS 0.2%
Find a file
Dunemask be0aeff69a
All checks were successful
Build Image / build-image (push) Successful in 15s
[CHORE] build the images only where they are pushed
A pull request built both images and packaged both charts, then threw all four
away: `push` is already false on any `pull_request`, so the login, the push and
the digest verification were all skipped and the build was minutes of runner time
spent on an artifact nobody received.

The image build and the chart packaging now carry the same `push == 'true'` gate
the login step already had. A pull request still runs the gates — tsc, biome,
test, ui build — and still lints both charts, so a chart that stops rendering is
caught there.

The trade is stated in the file rather than hidden: a Dockerfile that stops
building is now caught on the merge to main, not on the pull request.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-11-02 17:10:22 -07:00
.forgejo/workflows [CHORE] build the images only where they are pushed 2026-11-02 17:10:22 -07:00
chart/dys [FIX] turn off service links: DYS_PORT was being set to a URL 2026-10-28 10:46:43 -06:00
charts [FEATURE] verify declared ports from the setup wizard, on every backend 2026-11-02 14:45:32 -07:00
cli [FEATURE] the wizard stops overclaiming: edge-first route test, honest chips 2026-10-28 14:47:17 -06:00
dev [FEATURE] dys deploy control plane 2026-10-27 18:32:51 -06:00
docs [FEATURE] verify declared ports from the setup wizard, on every backend 2026-11-02 14:45:32 -07:00
examples [FEATURE] the wizard stops overclaiming: edge-first route test, honest chips 2026-10-28 14:47:17 -06:00
runner [FEATURE] verify declared ports from the setup wizard, on every backend 2026-11-02 14:45:32 -07:00
src [FEATURE] verify declared ports from the setup wizard, on every backend 2026-11-02 14:45:32 -07:00
web [FEATURE] verify declared ports from the setup wizard, on every backend 2026-11-02 14:45:32 -07:00
.env.example [FEATURE] make dys deployable, and close the pairing lane 2026-10-27 19:29:54 -06:00
.gitignore [FEATURE] dys deploy control plane 2026-10-27 18:32:51 -06:00
biome.json [FEATURE] the wizard stops overclaiming: edge-first route test, honest chips 2026-10-28 14:47:17 -06:00
bun.lock [FEATURE] dys deploy control plane 2026-10-27 18:32:51 -06:00
CLAUDE.md [FEATURE] verify declared ports from the setup wizard, on every backend 2026-11-02 14:45:32 -07:00
Dockerfile [FEATURE] make dys deployable, and close the pairing lane 2026-10-27 19:29:54 -06:00
package.json [FEATURE] the wizard stops overclaiming: edge-first route test, honest chips 2026-10-28 14:47:17 -06:00
Prod-Changes.md [FIX] the ramp proves a computed target, and a measurement advises instead of refusing 2026-10-31 00:42:53 -06:00
README.md [FEATURE] the wizard stops overclaiming: edge-first route test, honest chips 2026-10-28 14:47:17 -06:00
tsconfig.json [FEATURE] dys deploy control plane 2026-10-27 18:32:51 -06:00

dys

Deploy control plane. Push-based, token-auth, multi-cluster k8s app hosting.

deploying an app TO dys

examples/hello/: a small app, its dys.yaml and a CI workflow, with a walkthrough.

deploying dys itself

docs/deploy.md. Image Dockerfile -> forgejo.dunemask.dev/dunemask/dys; chart chart/dys, referenced in place by katsura, never vendored. .forgejo/workflows/build-image.yml publishes four artifacts from one commit: the control-plane image, the agent image, chart/dys and charts/dys-runner.

Three things are structural, not tuning: replicaCount: 1 (the live agent websocket registry is a process-local map), updateStrategy: Recreate, and no PVC (all state in Postgres). The chart has no value that can hold a credential — secrets.existingSecret names a Secret you made yourself.

Local: DYS_PORT=18800 bun src/index.ts. In a container the port is 8080.