Compare commits

...

826 Commits

Author SHA1 Message Date
Dokku Bot
ada4a82d77 Release 0.38.4
# History

## 0.38.4

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.38.4/bootstrap.sh
sudo DOKKU_TAG=v0.38.4 bash bootstrap.sh
```

### Bug Fixes

- #8615: @josegonzalez Reject per-app sets for openresty global-only properties
- #8613: @josegonzalez Expose raw deploy-branch and keep-git-dir in git:report
- #8549: @josegonzalez Route CNB images through launcher on scheduler-k3s

### New Features

- #8614: @josegonzalez Split scheduler-docker-local report into raw, computed, and global

### Documentation

- #8603: @cheif Add `dokku-http-oauth` to community plugins

### Tests

- #8618: @josegonzalez Isolate scheduler-k3s registry tags per bats file
- #8616: @josegonzalez Migrate from junit_files to files in EnricoMi/publish-unit-test-result-action
- #8617: @josegonzalez Upgrade actions in shared build-image compose action
- #8609: @josegonzalez Skip packer lint job on dependabot PRs
- #8604: @dependabot[bot] chore(deps): bump python from 3.14.3-bookworm to 3.15.0b1-bookworm in /tests/apps/dockerfile-release

### Dependencies

- #8606: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.50.0 to 0.51.0 in /plugins/common
- #8608: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.45 to 2.11.46 in /plugins/scheduler-k3s
- #8607: @dependabot[bot] chore(deps): bump dokku/openresty-docker-proxy from 0.10.0 to 0.11.0 in /plugins/openresty-vhosts
- #8605: @dependabot[bot] chore(deps): bump python from 3.14.3-alpine to 3.15.0b1-alpine in /docs/_build
2026-05-12 17:40:42 +00:00
Jose Diaz-Gonzalez
b8b0b527b0 Merge pull request #8618 from dokku/fix-k3s-exec
Isolate scheduler-k3s registry tags per bats file
2026-05-12 13:28:03 -04:00
Jose Diaz-Gonzalez
b30eb48444 test: isolate scheduler-k3s registry tags per bats file
Parallel `unit.scheduler-k3s-*` matrix jobs all pushed to the same `savant/rdmtestapp:1` tag on Docker Hub, so a herokuish run pod could pull a CNB or dockerfile image that another job had just overwritten and fail with `exec: "/exec": stat /exec: no such file or directory`. The image-repo-template now embeds the bats file basename so each job owns its own tag namespace.
2026-05-12 11:43:58 -04:00
Jose Diaz-Gonzalez
b32fb47e48 Merge pull request #8616 from dokku/josegonzalez-patch-1
Migrate from junit_files to files in EnricoMi/publish-unit-test-result-action
2026-05-12 11:24:11 -04:00
Jose Diaz-Gonzalez
e4695dc99a Merge pull request #8617 from dokku/josegonzalez-patch-2
Upgrade actions in shared build-image compose action
2026-05-12 10:57:54 -04:00
Jose Diaz-Gonzalez
7898f98488 Merge pull request #8615 from dokku/8612-openresty-set-accepts-per-app-writes-for-global-only-properties-silently-follow-up-to-8597
Reject per-app sets for openresty global-only properties
2026-05-12 01:34:57 -04:00
Jose Diaz-Gonzalez
3a36de7349 Merge pull request #8614 from dokku/8611-scheduler-docker-local-report-raw-computed-keys
Split scheduler-docker-local report into raw, computed, and global
2026-05-12 01:29:59 -04:00
Jose Diaz-Gonzalez
4551f258b2 Merge pull request #8613 from dokku/8610-git-report-deploy-branch-keep-git-dir-return-computed-value-at-bare-key-no-raw-per-app-key
Expose raw deploy-branch and keep-git-dir in git:report
2026-05-12 01:29:43 -04:00
Jose Diaz-Gonzalez
162af06c80 chore: upgrade actions in shared build-image compose action 2026-05-12 00:28:17 -04:00
Jose Diaz-Gonzalez
da52b8133d fix: migrate from junit_files to files in EnricoMi/publish-unit-test-result-action 2026-05-12 00:27:04 -04:00
Jose Diaz-Gonzalez
bc6f2da13a Merge pull request #8606 from dokku/dependabot/go_modules/plugins/common/golang.org/x/crypto-0.51.0
chore(deps): bump golang.org/x/crypto from 0.50.0 to 0.51.0 in /plugins/common
2026-05-11 23:31:04 -04:00
Jose Diaz-Gonzalez
ebdd5f2b2f fix: reject per-app sets for openresty global-only properties
`openresty:set <app>` previously accepted per-app writes for properties whose readers only consult the global store, so `:set myapp image foo` printed a success message while `:report myapp` kept showing the global default. The per-app form is now rejected with `The key '<key>' can only be set globally`, matching the behavior introduced for `caddy`, `haproxy`, and `traefik` in #8602.
2026-05-11 22:55:37 -04:00
Jose Diaz-Gonzalez
7d73cf78c4 feat: split scheduler-docker-local report into raw, computed, and global
The bare `init-process` and `parallel-schedule-count` keys previously returned the computed value, so external tooling could not tell whether a property had been set on the app or was merely defaulting. Both properties are now also configurable with `--global`, the report exposes `computed-*` and `global-*` keys alongside the bare raw keys, and the deploy path honors the global value before falling back to the linuxserver.io vendor heuristic.
2026-05-11 22:29:28 -04:00
Jose Diaz-Gonzalez
c45b95fc4d fix: expose raw deploy-branch and keep-git-dir in git:report
The bare `deploy-branch` and `keep-git-dir` keys in `git:report` returned the computed (effective) value rather than the raw per-app value, with no separate `computed-*` key to distinguish "set per-app" from "falling back to global or default". This left external tooling unable to detect a per-app unset without out-of-band state. The bare keys now hold the raw per-app value (empty when unset) and new `computed-deploy-branch` and `computed-keep-git-dir` keys hold the effective value, matching the convention used by `nginx-vhosts`, `network`, and `builder`. Closes #8610.
2026-05-11 22:18:17 -04:00
Jose Diaz-Gonzalez
db2cbd802f Merge pull request #8549 from dokku/8526-improve-scheduler-k3s-support-for-alternative-builders-cnb-etc
Route CNB images through launcher on scheduler-k3s
2026-05-11 22:01:07 -04:00
Jose Diaz-Gonzalez
22f1fcdc1f chore: bump go modules 2026-05-11 21:29:58 -04:00
dependabot[bot]
c2f927cd50 chore(deps): bump golang.org/x/crypto in /plugins/common
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.50.0 to 0.51.0.
- [Commits](https://github.com/golang/crypto/compare/v0.50.0...v0.51.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.51.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-11 21:29:11 -04:00
Jose Diaz-Gonzalez
541464b9c8 Merge pull request #8609 from dokku/skip-packer-lint-on-dependabot
ci: skip packer lint job on dependabot PRs
2026-05-11 21:28:39 -04:00
Jose Diaz-Gonzalez
993d727dcb ci: skip packer lint job on dependabot PRs
Dependabot PRs don't receive `secrets.DIGITALOCEAN_TOKEN`, so the `packer validate` step fails on every dependency bump. Guarding the job by PR author skips it cleanly while keeping it active for human PRs and pushes to `master`.
2026-05-11 21:27:10 -04:00
Jose Diaz-Gonzalez
228b6de482 Merge pull request #8608 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/traefik/traefik/v2-2.11.46
chore(deps): bump github.com/traefik/traefik/v2 from 2.11.45 to 2.11.46 in /plugins/scheduler-k3s
2026-05-11 21:17:15 -04:00
Jose Diaz-Gonzalez
bdc77c9706 Merge pull request #8607 from dokku/dependabot/docker/plugins/openresty-vhosts/dokku/openresty-docker-proxy-0.11.0
chore(deps): bump dokku/openresty-docker-proxy from 0.10.0 to 0.11.0 in /plugins/openresty-vhosts
2026-05-11 21:17:10 -04:00
Jose Diaz-Gonzalez
90e5903760 Merge pull request #8605 from dokku/dependabot/docker/docs/_build/python-3.15.0b1-alpine
chore(deps): bump python from 3.14.3-alpine to 3.15.0b1-alpine in /docs/_build
2026-05-11 21:16:10 -04:00
Jose Diaz-Gonzalez
d121eb982c Merge pull request #8604 from dokku/dependabot/docker/tests/apps/dockerfile-release/python-3.15.0b1-bookworm
chore(deps): bump python from 3.14.3-bookworm to 3.15.0b1-bookworm in /tests/apps/dockerfile-release
2026-05-11 21:16:03 -04:00
dependabot[bot]
2796733119 chore(deps): bump github.com/traefik/traefik/v2
Bumps [github.com/traefik/traefik/v2](https://github.com/traefik/traefik) from 2.11.45 to 2.11.46.
- [Release notes](https://github.com/traefik/traefik/releases)
- [Changelog](https://github.com/traefik/traefik/blob/v2.11.46/CHANGELOG.md)
- [Commits](https://github.com/traefik/traefik/compare/v2.11.45...v2.11.46)

---
updated-dependencies:
- dependency-name: github.com/traefik/traefik/v2
  dependency-version: 2.11.46
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-11 21:43:14 +00:00
dependabot[bot]
af614cd049 chore(deps): bump dokku/openresty-docker-proxy
Bumps dokku/openresty-docker-proxy from 0.10.0 to 0.11.0.

---
updated-dependencies:
- dependency-name: dokku/openresty-docker-proxy
  dependency-version: 0.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-11 21:42:13 +00:00
dependabot[bot]
194bfc6f12 chore(deps): bump python in /docs/_build
Bumps python from 3.14.3-alpine to 3.15.0b1-alpine.

---
updated-dependencies:
- dependency-name: python
  dependency-version: 3.15.0b1-alpine
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-11 21:40:35 +00:00
dependabot[bot]
95b97defb7 chore(deps): bump python in /tests/apps/dockerfile-release
Bumps python from 3.14.3-bookworm to 3.15.0b1-bookworm.

---
updated-dependencies:
- dependency-name: python
  dependency-version: 3.15.0b1-bookworm
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-11 21:40:34 +00:00
Jose Diaz-Gonzalez
b66df28d96 fix: harden scheduler-k3s cron manifests and dockerfile run startup
The cron-id label could exceed Kubernetes' 63-byte cap when commands or
schedules were long, and an all-digit job-suffix or cron-id rendered as
an unquoted YAML scalar caused the API server to reject manifests. Run
pods built from dockerfiles also occasionally hit the 10s startup wait
on a cold image pull, even though the pod was scheduled correctly.

The cron-id is now stored as an annotation and a shorter hash is used as
the selector label. Every interpolated annotation and label value in the
cron-job and deployment templates is now quoted to prevent numeric
coercion, and the run-pod wait timeout is raised to 30 seconds.
2026-05-11 14:49:58 -04:00
Jose Diaz-Gonzalez
d0588698f5 test: add scheduler-k3s run parity tests across builders
Extends bats coverage for the scheduler-k3s scheduler so that
herokuish and dockerfile builders match the cnb test surface for
`dokku run`, `dokku run:detached`, `dokku cron:run`, deployment
manifests, cronjob manifests, and Procfile-key resolution. Adds
the corresponding `app-cron-procfile.json` fixture for the python
app and `app-cron.json` / `app-cron-procfile.json` fixtures for
the dockerfile-procfile app.
2026-05-11 12:10:54 -04:00
Jose Diaz-Gonzalez
41afd7646e Merge pull request #8603 from cheif/feat/add-oauth-auth-plugin
Add `dokku-http-oauth` to community plugins
2026-05-11 11:46:44 -04:00
Dokku Bot
029e98673f Release 0.38.3
# History

## 0.38.3

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.38.3/bootstrap.sh
sudo DOKKU_TAG=v0.38.3 bash bootstrap.sh
```

### Bug Fixes

- #8602: @josegonzalez Reject per-app sets for global-only proxy properties
- #8601: @josegonzalez Rename app-json:report flags to match property
- #8600: @josegonzalez Report info-flag should not error when app undeployed

### New Features

- #8599: @josegonzalez Add docker healthcheck to dokku container
2026-05-11 08:04:48 +00:00
Dan Berglund
eb8316d3a8 Add dokku-http-oauth to community plugins 2026-05-11 08:49:17 +02:00
Jose Diaz-Gonzalez
f1e2f41bd9 fix: wait for terminal pod phase on scheduler-k3s run
After streaming logs from a run pod on scheduler-k3s, the apiserver may still report `PodRunning` for a short window due to kubelet status propagation lag, causing `dokku run` to fail with `Unable to attach as the pod is in an unknown state: Running`. Wait briefly for the pod to reach a terminal phase before classifying the outcome.
2026-05-11 02:38:20 -04:00
Jose Diaz-Gonzalez
59c1bef87b fix: stream logs for non-tty dokku run on scheduler-k3s
For short-lived commands the run pod can transition Running to Succeeded
between the running-pod check and the kubectl exec SPDY upgrade, leaving
the upgrade to fail with `container not found`. When stdout is not a TTY
(and DOKKU_FORCE_TTY is not set) the exec attach is only being used to
capture stdout, so stream the run pod logs in follow mode instead. The
pod's `TTLSecondsAfterFinished` of 60s keeps the kubelet's log file
readable for the duration of the call, eliminating the race.
2026-05-11 02:05:56 -04:00
Jose Diaz-Gonzalez
ff1296859b test: stabilize scheduler-k3s cnb bats tests
Drop the assertion that the web deployment has no command since the python buildpack auto-emits a web Procfile entry, which correctly routes through launcher just like docker-local. Shorten the cron command fixture so the base36-encoded cron-id stays under the 63-byte kubernetes label limit, and relax the `dokku run` and `dokku cron:run` output assertions to `assert_output_contains` so they tolerate the leading blank line emitted on k3s.
2026-05-11 02:05:56 -04:00
Jose Diaz-Gonzalez
3a845f4d14 fix: route CNB images through launcher on scheduler-k3s
Mirror the docker-local fix in #8525 for the k3s scheduler. CNB images default to a `/cnb/process/web` entrypoint that ignores incoming args, so non-web deployments, scheduled cron jobs, and ad-hoc `dokku run` / `cron:run` commands all need an explicit `launcher` entrypoint. The deployment and cron-job helm templates now set `command: [launcher]` when `image.type` is `pack`, and `TriggerSchedulerRun` sets the entrypoint to `launcher` for pack images while finishing the previously stubbed Procfile lookup branch so the resolved command is actually scheduled.
2026-05-11 02:05:56 -04:00
Jose Diaz-Gonzalez
3ddce21aef Merge pull request #8602 from dokku/8597-caddy-haproxy-traefik-accept-per-app-set-but-report-only-returns-global-value 2026-05-11 01:04:14 -04:00
Jose Diaz-Gonzalez
cdce68f8a2 Merge pull request #8601 from dokku/8598-app-json-set-appjson-path-succeeds-but-app-json-appjson-path-is-not-a-valid-report-flag
Rename app-json:report flags to match property
2026-05-10 23:58:05 -04:00
Jose Diaz-Gonzalez
74dc94bad2 Merge pull request #8599 from dokku/dokku-container-healthcheck
Add docker healthcheck to dokku container
2026-05-10 23:50:29 -04:00
Jose Diaz-Gonzalez
9123d14f3c Merge pull request #8600 from dokku/8596-report-subcommand-errors-with-not-deployed-when-probing-config-properties-before-deploy
Report info-flag should not error when app undeployed
2026-05-10 23:49:56 -04:00
Jose Diaz-Gonzalez
66eb1340f5 fix: install nginx catch-all default site in dokku container
Pre-seeds the `dokku/install_default_site` debconf answer to `true` so the dokku postinst installs `/etc/nginx/conf.d/00-default-vhost.conf` during image build. Without this, debconf returned an empty value in non-interactive docker builds, the postinst's `setup-default-site` short-circuited, and nginx had no listener on port 80 - which left the readiness sentinel untouched and the container stuck unhealthy.
2026-05-10 22:54:49 -04:00
Jose Diaz-Gonzalez
822b7dddcd fix: reject per-app sets for global-only proxy properties
`caddy:set`, `haproxy:set`, and `traefik:set` previously accepted per-app writes for properties that only have a single host-wide reader, so `:set myapp image foo:bar` printed a success message while `:report myapp` kept showing the global default. The per-app form is now rejected with `The key '<key>' can only be set globally`, matching the existing rejection used for haproxy `refresh-conf` and traefik `challenge-mode`. Caddy `tls-internal` remains the only legitimate per-app property in this family.
2026-05-10 22:42:57 -04:00
Jose Diaz-Gonzalez
4eee229bbc fix: rename app-json:report flags to match property
The property name set via `app-json:set` is `appjson-path`, but the matching read-back flags on `app-json:report` were named `--app-json-selected`, `--app-json-global-selected`, and `--app-json-computed-selected`. The mismatch meant `dokku app-json:report <app> --app-json-appjson-path` (the form already documented in deployment-tasks.md) was rejected as an invalid flag, and the `--format json` output advertised keys that did not correspond to any settable property. The flags and JSON keys are renamed to `--app-json-appjson-path`, `--app-json-global-appjson-path`, and `--app-json-computed-appjson-path` so that the property name round-trips through set and report.
2026-05-10 22:32:16 -04:00
Jose Diaz-Gonzalez
7b515ea129 refactor: drop unused value_exists from report functions
The `value_exists` variable in the report info-flag loop is no longer read after the `not deployed` failure was removed, and was already unused in domains, haproxy-vhosts, traefik-vhosts, caddy-vhosts, and openresty-vhosts. Drop the declaration and the trailing assignment so the loop reads cleanly across all plugins.
2026-05-10 22:23:46 -04:00
Jose Diaz-Gonzalez
bd748052a1 fix: report info-flag should not error when app undeployed
Several plugin `:report` subcommands erroneously failed with `not deployed` when an info-flag matched a property that was empty. Empty values are legitimate for configuration properties pre-deploy and the `--format json` path already returns them without error. Remove the `value_exists` check across nginx, checks, git, certs, scheduler-docker-local, and the builder-* plugins so the info-flag form behaves consistently with the JSON form.
2026-05-10 22:15:27 -04:00
Jose Diaz-Gonzalez
2c274217de chore: run shfmt 2026-05-10 21:42:35 -04:00
Jose Diaz-Gonzalez
2a4393a63a test: cover dokku container healthcheck wiring
Adds a bats lint test that guards the static wiring (nginx conf, dokku-restore finish-script ordering, my_init sentinel reset, and the Dockerfile HEALTHCHECK line) plus a docker smoke test that boots the built image, waits for the health flip, exercises the loopback endpoint, asserts the port is not published to the host, and verifies the negative path. The smoke test is invoked via a new `make test-image-healthcheck` target and runs automatically in the build-image action after `docker buildx --load`.
2026-05-10 21:39:43 -04:00
Jose Diaz-Gonzalez
cc0843391f feat: add docker healthcheck to dokku container
The official dokku/dokku image gains a HEALTHCHECK directive backed by a loopback-only HTTP endpoint at `127.0.0.1:18080/_dokku/health`. The endpoint reports 200 once first-boot bootstrap finishes, sshd and nginx are accepting connections, and `dokku ps:restore` completes; otherwise it returns 503. Changes are scoped to the Docker overlay and Dockerfile so debian-package installs are unaffected.
2026-05-10 21:17:09 -04:00
Dokku Bot
a553f04966 Release 0.38.2
# History

## 0.38.2

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.38.2/bootstrap.sh
sudo DOKKU_TAG=v0.38.2 bash bootstrap.sh
```

### Security

- #8590: @josegonzalez Restrict app names to prevent command injection
- #8591: @josegonzalez Harden archive extraction against symlink traversal
- #8589: @josegonzalez Enforce 0600 permissions on .netrc credentials file
- #8588: @josegonzalez Sanitize openresty include filenames to prevent eval injection

### Bug Fixes

- #8593: @josegonzalez Gate ssl_reject_handshake behind nginx 1.19.4
- #8578: @josegonzalez Reference SOURCECODE_WORK_DIR in builder core-post-extract

### Documentation

- #8592: @josegonzalez Add security section to release changelog
- #8587: @vixalien Correct buildkit builder code block syntax
- #8580: @othercorey Set issue type in bug report template

### Tests

- #8586: @josegonzalez Count assert_output_contains matches as fixed strings
- #8581: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/go-fail-predeploy
- #8582: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/gogrpc
- #8584: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/go-fail-postdeploy
- #8583: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/zombies-dockerfile-tini
- #8585: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/zombies-dockerfile-no-tini
- #8574: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-noexpose
- #8575: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-procfile-bad
- #8577: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-app-json-formations
- #8576: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile
- #8573: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-procfile

### Dependencies

- #8579: @josegonzalez Use type prefix for dokku-bot dependency label
2026-05-10 20:17:51 +00:00
Jose Diaz-Gonzalez
9adf6e5f36 Merge pull request #8593 from dokku/fix-debian-bullseye-ssl-reject-handshake 2026-05-10 16:16:16 -04:00
Jose Diaz-Gonzalez
235078f111 Merge pull request #8590 from dokku/command-injection-via-app-name 2026-05-10 15:29:35 -04:00
Jose Diaz-Gonzalez
392ac73d33 fix: gate ssl_reject_handshake behind nginx 1.19.4
The shipped catch-all default site uses `ssl_reject_handshake`, which is unsupported on nginx older than 1.19.4 and causes nginx to fail to start on Debian Bullseye. The postinst now detects the installed nginx version and installs an HTTP-only variant of the catch-all on older systems.
2026-05-09 16:32:30 -04:00
Jose Diaz-Gonzalez
4f4fed7101 test: update apps:rename assertions for quoted git-hook app name
The security fix that quoted `$APP` inside the pre-receive hook heredoc changed the literal hook contents from `dokku git-hook foo` to `dokku git-hook "foo"`, so the existing substring assertions no longer match.
2026-05-09 16:06:27 -04:00
Jose Diaz-Gonzalez
dbac12e9f1 refactor: route bash app name validation through go
The bash and go validators previously each kept their own copy of the regex, which had to be updated in lockstep. Both bash wrappers now invoke the existing common binary via the same pattern as `verify_app_name`, leaving go as the single source of truth. The legacy `IsValidAppNameOld` rule is also widened to allow underscores again so apps created under the old naming rules can still be looked up through `VerifyAppName`'s either-rule fallback.
2026-05-09 16:00:51 -04:00
Jose Diaz-Gonzalez
93f87a0f07 fix: restrict app names to prevent command injection
The previous app name validation regex permitted shell metacharacters such as `;`, `$`, backticks, `|`, and `&`. These names were embedded unquoted into the generated git pre-receive hook script, allowing an authenticated user to execute arbitrary commands as the dokku user simply by pushing to a remote with a crafted app name. App names are now restricted to lowercase alphanumerics, dots, and hyphens, and the hook script also quotes the app variable as a defense-in-depth measure.
2026-05-09 16:00:51 -04:00
Jose Diaz-Gonzalez
d00aaf3ff3 Merge pull request #8586 from dokku/assert-output-contains
Count assert_output_contains matches as fixed strings
2026-05-09 16:00:27 -04:00
Jose Diaz-Gonzalez
e78d3bcc78 Merge pull request #8591 from dokku/arbitrary-file-write
Harden archive extraction against symlink traversal
2026-05-09 15:58:31 -04:00
Jose Diaz-Gonzalez
33dd8005dd Merge pull request #8589 from dokku/netrc-permissions 2026-05-09 15:36:10 -04:00
Jose Diaz-Gonzalez
90aa64e7e3 Merge pull request #8588 from dokku/sanitize-openresty-filenames 2026-05-09 15:36:01 -04:00
Jose Diaz-Gonzalez
f4213a4bf5 tests: prevent assert_output_contains from aborting on no match
Bats runs tests under `set -eo pipefail`, so when `grep -F -o` finds nothing inside the count pipe it exits 1, the whole pipe fails, errexit fires, and the function aborts before reaching the count comparison. Wrap grep in `{ ... || true; }` so the pipe stays zero when the pattern is absent and the helper falls through to the flunk message.
2026-05-09 13:36:29 -04:00
Jose Diaz-Gonzalez
253d47ecf5 Merge pull request #8592 from dokku/security-section
Add security section to release changelog
2026-05-09 13:27:34 -04:00
Jose Diaz-Gonzalez
0b93488006 feat: add security section to release changelog 2026-05-09 13:19:33 -04:00
Jose Diaz-Gonzalez
9decf16ea1 feat: configure archive limits via git properties
Replaces the `DOKKU_ARCHIVE_MAX_SIZE` and `DOKKU_ARCHIVE_MAX_FILES` environment variables with global git properties (`archive-max-size` and `archive-max-files`), configurable via `dokku git:set --global` and surfaced through `dokku git:report --global`. Defaults remain `1073741824` bytes and `10000` entries.
2026-05-09 13:08:23 -04:00
Jose Diaz-Gonzalez
2df0791fcd fix: prevent tar symlink traversal in archive extraction
Archives passed to git:from-archive and certs:add were extracted without symlink or path validation, allowing a crafted archive to write arbitrary files anywhere writable by the dokku user via symlink traversal. Extraction now pre-scans entries for absolute paths, parent traversal, and unsafe symlinks, applies the GNU tar `--no-unsafe-links` flag when available, and validates symlinks after extraction.
2026-05-09 12:54:42 -04:00
Jose Diaz-Gonzalez
6eb8b8632c fix: enforce 0600 permissions on .netrc credentials file
The previous use of `touch` before `netrc set` allowed the file to inherit the umask and be world-readable, exposing stored git credentials to local users. The set and unset paths now explicitly chmod 0600 and chown to the dokku user, and the plugin install hook repairs permissions on already-affected installations.
2026-05-09 12:22:17 -04:00
Jose Diaz-Gonzalez
a70728f61e fix: sanitize openresty include filenames to prevent eval injection
Add defense-in-depth sanitization for OpenResty include files to prevent
OS command injection via malicious filenames that break shell quoting in eval.

- Add filename validation in core-post-extract using regex [^a-zA-Z0-9_.-]
- Validate both http-includes and location-includes paths
- Abort deploy via dokku_log_fail on unsafe filenames
- Skip non-regular files (symlinks, directories) during extraction
- Add security regression test with unsafe filename containing space
- Keep existing guards in docker-args-process-deploy as belt-and-suspenders
- Update documentation to clarify allowed filename characters

Addresses CVSS 9.9 vulnerability where filenames like poc'$(cmd)'x.conf
could escape shell quoting and execute arbitrary commands during deploy.
2026-05-09 12:20:50 -04:00
Jose Diaz-Gonzalez
25abd38387 tests: use /bin/bash -c to execute commands in init tests 2026-05-09 10:48:29 -04:00
Jose Diaz-Gonzalez
2974830e8f Merge pull request #8587 from vixalien/patch-1
Correct buildkit builder code block syntax
2026-05-09 10:45:42 -04:00
Angelo Verlain
2c3f29daca fox: correct buildkit builder code block syntax 2026-05-09 04:07:01 +02:00
Jose Diaz-Gonzalez
38de83eabf tests: use inverted assert
Also echo the status
2026-05-08 21:39:57 -04:00
Jose Diaz-Gonzalez
01268ebad9 tests: fix count 2026-05-08 21:38:22 -04:00
Jose Diaz-Gonzalez
2cf2846c6b test: count assert_output_contains matches as fixed strings
Replace the bash pattern-substitution loop with grep -F -o piped to wc -l so the helper counts literal substring occurrences instead of treating the expected value as a glob pattern. The old implementation interpreted `[`, `]`, `*`, `?`, and `\` as pattern syntax, which made `assert_output_contains "['task.py', 'test']"` report 17 matches against an output that contained the string exactly once - the inner characters were being matched as a character class. assert_output_not_contains delegates to assert_output_contains and is fixed transitively.
2026-05-08 18:56:33 -04:00
Jose Diaz-Gonzalez
47c8141148 Merge pull request #8578 from dokku/8566-core-post-extract-in-four-builder-plugins-fails-under-bash-5-3
Reference SOURCECODE_WORK_DIR in builder core-post-extract
2026-05-08 17:06:10 -04:00
Jose Diaz-Gonzalez
b8f94dfa7f Merge pull request #8581 from dokku/dependabot/docker/tests/apps/go-fail-predeploy/golang-1.26.3
chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/go-fail-predeploy
2026-05-08 17:00:05 -04:00
Jose Diaz-Gonzalez
4efe0eb9fd Merge pull request #8582 from dokku/dependabot/docker/tests/apps/gogrpc/golang-1.26.3
chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/gogrpc
2026-05-08 16:59:53 -04:00
Jose Diaz-Gonzalez
a6cfe3a2d1 Merge pull request #8584 from dokku/dependabot/docker/tests/apps/go-fail-postdeploy/golang-1.26.3
chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/go-fail-postdeploy
2026-05-08 16:31:33 -04:00
Jose Diaz-Gonzalez
390fe2b35a Merge pull request #8583 from dokku/dependabot/docker/tests/apps/zombies-dockerfile-tini/golang-1.26.3
chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/zombies-dockerfile-tini
2026-05-08 16:28:33 -04:00
Jose Diaz-Gonzalez
a5ee710496 Merge pull request #8585 from dokku/dependabot/docker/tests/apps/zombies-dockerfile-no-tini/golang-1.26.3
chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/zombies-dockerfile-no-tini
2026-05-08 16:28:25 -04:00
dependabot[bot]
1706729cfe chore(deps): bump golang in /tests/apps/zombies-dockerfile-no-tini
Bumps golang from 1.26.2 to 1.26.3.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-08 13:53:22 +00:00
dependabot[bot]
51dc7799d0 chore(deps): bump golang in /tests/apps/go-fail-postdeploy
Bumps golang from 1.26.2 to 1.26.3.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-08 13:53:11 +00:00
dependabot[bot]
07d301775e chore(deps): bump golang in /tests/apps/zombies-dockerfile-tini
Bumps golang from 1.26.2 to 1.26.3.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-08 13:53:10 +00:00
dependabot[bot]
0619338607 chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/gogrpc
Bumps golang from 1.26.2 to 1.26.3.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-08 13:53:04 +00:00
dependabot[bot]
902b7f6af4 chore(deps): bump golang in /tests/apps/go-fail-predeploy
Bumps golang from 1.26.2 to 1.26.3.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-08 13:53:03 +00:00
Jose Diaz-Gonzalez
25f87164ce Merge pull request #8574 from dokku/dependabot/docker/tests/apps/dockerfile-noexpose/node-26-alpine
chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-noexpose
2026-05-08 01:35:18 -04:00
Jose Diaz-Gonzalez
67ce12b973 Merge pull request #8575 from dokku/dependabot/docker/tests/apps/dockerfile-procfile-bad/node-26-alpine
chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-procfile-bad
2026-05-08 01:35:10 -04:00
Jose Diaz-Gonzalez
5d212f3195 test: use BATS_TEST_TMPDIR in core-post-extract regression tests
The previous form set `trap "rm -rf '$TMP_DIR'" RETURN` inside the test, but bats propagates `RETURN` traps to nested function calls, so the trap fired on the first `assert_success` and removed the work directory before the trigger script ran. Switching to bats's per-test `BATS_TEST_TMPDIR` removes the trap entirely and lets bats handle cleanup.
2026-05-08 01:34:05 -04:00
Jose Diaz-Gonzalez
05ffccd7e7 Merge pull request #8577 from dokku/dependabot/docker/tests/apps/dockerfile-app-json-formations/node-26-alpine
chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-app-json-formations
2026-05-07 15:46:32 -04:00
Jose Diaz-Gonzalez
5dfda450d9 Merge pull request #8576 from dokku/dependabot/docker/tests/apps/dockerfile/node-26-alpine
chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile
2026-05-07 15:28:44 -04:00
Jose Diaz-Gonzalez
a7119ba693 Merge pull request #8573 from dokku/dependabot/docker/tests/apps/dockerfile-procfile/node-26-alpine
chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-procfile
2026-05-07 15:28:24 -04:00
Jose Diaz-Gonzalez
870b93c8e3 Merge pull request #8580 from othercorey/patch-1
Set issue type in bug report template
2026-05-07 15:28:07 -04:00
othercorey
48594ca0a4 Set issue type in bug report template 2026-05-07 14:18:30 -05:00
Jose Diaz-Gonzalez
5e279074fd Merge pull request #8579 from dokku/dokku-bot-dependency-patching
Use type prefix for dokku-bot dependency label
2026-05-07 14:41:44 -04:00
Jose Diaz-Gonzalez
5f0c5a5a4f chore: use type prefix for dokku-bot dependency label 2026-05-07 14:39:06 -04:00
Dokku Bot
983c462904 Release 0.38.1
# History

## 0.38.1

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.38.1/bootstrap.sh
sudo DOKKU_TAG=v0.38.1 bash bootstrap.sh
```

### Bug Fixes

- #8563: @josegonzalez Source property-functions where fn-plugin-property-* helpers are used
- #8559: @josegonzalez Install cnb pack from github releases instead of ppa
- #8558: @josegonzalez Chown migrated legacy storage entries to dokku
- #8545: @josegonzalez Deflake haproxy bats tests

### Refactors

- #8546: @josegonzalez Consolidate nginx.conf.sigil server blocks

### Documentation

- #8548: @josegonzalez Use explicit type property in proxy:set examples
- #8547: @josegonzalez Document plugin properties migrated from env vars
- #8544: @josegonzalez Fix reference to when the build plugin was introduced

### Tests

- #8565: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.80.0 to 1.81.0 in /tests/apps/gogrpc
- #8568: @dependabot[bot] chore(deps): bump gunicorn from 25.3.0 to 26.0.0 in /tests/apps/multi
- #8572: @dependabot[bot] chore(deps): bump django from 5.2.13 to 5.2.14 in /tests/apps/dockerfile-release
- #8570: @dependabot[bot] chore(deps): bump gunicorn from 25.3.0 to 26.0.0 in /tests/apps/dockerfile-release
- #8567: @dependabot[bot] chore(deps): bump gunicorn from 25.3.0 to 26.0.0 in /tests/apps/python-flask

### Dependencies

- #8571: @dependabot[bot] chore(deps): bump traefik from v3.6.15 to v3.7.0 in /plugins/traefik-vhosts
- #8569: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.44 to 2.11.45 in /plugins/scheduler-k3s
- #8561: @dokku-bot chore: bump pack to 0.40.4
- #8555: @dependabot[bot] chore(deps): bump github.com/mattn/go-isatty from 0.0.20 to 0.0.22 in /plugins/app-json
- #8556: @dependabot[bot] chore(deps): bump github.com/Masterminds/semver/v3 from 3.4.0 to 3.5.0 in /plugins/scheduler-k3s
- #8550: @dokku-bot chore: bump docker-container-healthchecker to 0.15.2
- #8553: @dokku-bot chore: bump dokku-event-listener to 0.19.1
- #8552: @dokku-bot chore: bump lambda-builder to 0.9.3
- #8551: @dokku-bot chore: bump procfile-util to 0.20.7
- #8554: @dependabot[bot] chore(deps): bump peter-evans/create-pull-request from 7 to 8
2026-05-07 17:29:53 +00:00
Jose Diaz-Gonzalez
bc8adfa6e2 test: add run_plugn_trigger and run_plugin_script bats helpers
Both helpers wrap `run /bin/bash -c "..."` with the env vars dokku plugin scripts and `plugn` need, replacing the long inline boilerplate that was duplicated across `tests/unit/resource_3.bats` and the new `core-post-extract` regression tests in the builder bats files.
2026-05-07 12:47:00 -04:00
Jose Diaz-Gonzalez
eb17a383c6 fix: reference SOURCECODE_WORK_DIR in builder core-post-extract
The builder-dockerfile, builder-lambda, builder-nixpacks, builder-pack and builder-railpack `core-post-extract` triggers assigned `$2` to a local `SOURCECODE_WORK_DIR` but called `pushd "$TMP_WORK_DIR"`, which was unset. Bash 5.2 silently accepted `pushd ""`, so the bug stayed dormant. Bash 5.3 (shipped with Ubuntu 26.04) makes it a hard error and `set -e` aborts the trigger, causing every `git push` to fail with `pushd: null directory`.
2026-05-07 12:39:46 -04:00
Jose Diaz-Gonzalez
368a6999c9 Merge pull request #8565 from dokku/dependabot/go_modules/tests/apps/gogrpc/google.golang.org/grpc-1.81.0
chore(deps): bump google.golang.org/grpc from 1.80.0 to 1.81.0 in /tests/apps/gogrpc
2026-05-07 10:37:25 -04:00
dependabot[bot]
1e7df47feb chore(deps): bump node in /tests/apps/dockerfile-app-json-formations
Bumps node from 25-alpine to 26-alpine.

---
updated-dependencies:
- dependency-name: node
  dependency-version: 26-alpine
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-07 13:55:48 +00:00
dependabot[bot]
39f15930a0 chore(deps): bump node in /tests/apps/dockerfile
Bumps node from 25-alpine to 26-alpine.

---
updated-dependencies:
- dependency-name: node
  dependency-version: 26-alpine
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-07 13:55:42 +00:00
dependabot[bot]
a8fd9122fe chore(deps): bump node in /tests/apps/dockerfile-procfile-bad
Bumps node from 25-alpine to 26-alpine.

---
updated-dependencies:
- dependency-name: node
  dependency-version: 26-alpine
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-07 13:55:38 +00:00
dependabot[bot]
09ee789849 chore(deps): bump node in /tests/apps/dockerfile-noexpose
Bumps node from 25-alpine to 26-alpine.

---
updated-dependencies:
- dependency-name: node
  dependency-version: 26-alpine
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-07 13:55:36 +00:00
dependabot[bot]
117a9b43f9 chore(deps): bump node in /tests/apps/dockerfile-procfile
Bumps node from 25-alpine to 26-alpine.

---
updated-dependencies:
- dependency-name: node
  dependency-version: 26-alpine
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-07 13:55:35 +00:00
Jose Diaz-Gonzalez
2d9521a855 Merge pull request #8568 from dokku/dependabot/pip/tests/apps/multi/gunicorn-26.0.0 2026-05-07 07:55:41 -04:00
Jose Diaz-Gonzalez
0429ecfd98 Merge pull request #8572 from dokku/dependabot/pip/tests/apps/dockerfile-release/django-5.2.14
chore(deps): bump django from 5.2.13 to 5.2.14 in /tests/apps/dockerfile-release
2026-05-07 07:09:01 -04:00
Jose Diaz-Gonzalez
c676a09bd5 Merge pull request #8571 from dokku/dependabot/docker/plugins/traefik-vhosts/traefik-v3.7.0
chore(deps): bump traefik from v3.6.15 to v3.7.0 in /plugins/traefik-vhosts
2026-05-07 07:08:53 -04:00
Jose Diaz-Gonzalez
dc6a3690d9 Merge pull request #8570 from dokku/dependabot/pip/tests/apps/dockerfile-release/gunicorn-26.0.0
chore(deps): bump gunicorn from 25.3.0 to 26.0.0 in /tests/apps/dockerfile-release
2026-05-07 07:08:48 -04:00
Jose Diaz-Gonzalez
c2c02e174c Merge pull request #8569 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/traefik/traefik/v2-2.11.45
chore(deps): bump github.com/traefik/traefik/v2 from 2.11.44 to 2.11.45 in /plugins/scheduler-k3s
2026-05-07 07:08:40 -04:00
Jose Diaz-Gonzalez
d4ce0b987b Merge pull request #8567 from dokku/dependabot/pip/tests/apps/python-flask/gunicorn-26.0.0
chore(deps): bump gunicorn from 25.3.0 to 26.0.0 in /tests/apps/python-flask
2026-05-07 07:08:25 -04:00
dependabot[bot]
097b3c5449 chore(deps): bump django in /tests/apps/dockerfile-release
Bumps [django](https://github.com/django/django) from 5.2.13 to 5.2.14.
- [Commits](https://github.com/django/django/compare/5.2.13...5.2.14)

---
updated-dependencies:
- dependency-name: django
  dependency-version: 5.2.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-06 13:56:02 +00:00
dependabot[bot]
494c42428f chore(deps): bump traefik in /plugins/traefik-vhosts
Bumps traefik from v3.6.15 to v3.7.0.

---
updated-dependencies:
- dependency-name: traefik
  dependency-version: v3.7.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-06 13:55:24 +00:00
dependabot[bot]
5e092caef3 chore(deps): bump gunicorn in /tests/apps/dockerfile-release
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.3.0 to 26.0.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.3.0...26.0.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 26.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-05 13:55:32 +00:00
dependabot[bot]
d573054731 chore(deps): bump github.com/traefik/traefik/v2
Bumps [github.com/traefik/traefik/v2](https://github.com/traefik/traefik) from 2.11.44 to 2.11.45.
- [Release notes](https://github.com/traefik/traefik/releases)
- [Changelog](https://github.com/traefik/traefik/blob/v2.11.45/CHANGELOG.md)
- [Commits](https://github.com/traefik/traefik/compare/v2.11.44...v2.11.45)

---
updated-dependencies:
- dependency-name: github.com/traefik/traefik/v2
  dependency-version: 2.11.45
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-05 13:55:27 +00:00
dependabot[bot]
f8813232d8 chore(deps): bump gunicorn from 25.3.0 to 26.0.0 in /tests/apps/multi
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.3.0 to 26.0.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.3.0...26.0.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 26.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-05 13:52:52 +00:00
dependabot[bot]
824aed042f chore(deps): bump gunicorn in /tests/apps/python-flask
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.3.0 to 26.0.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.3.0...26.0.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 26.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-05 13:52:23 +00:00
Jose Diaz-Gonzalez
5d7c683daa Merge pull request #8563 from dokku/8560-fn-plugin-property-get-default-command-not-found
Source property-functions where fn-plugin-property-* helpers are used
2026-05-04 14:39:56 -04:00
dependabot[bot]
91e40634f4 chore(deps): bump google.golang.org/grpc in /tests/apps/gogrpc
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.80.0 to 1.81.0.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.80.0...v1.81.0)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.81.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 17:52:13 +00:00
Jose Diaz-Gonzalez
aea322be6f chore: use old path 2026-05-04 13:17:49 -04:00
Jose Diaz-Gonzalez
d268074189 chore: standardize on PLUGIN_AVAILABLE_PATH for source 2026-05-04 13:17:11 -04:00
Jose Diaz-Gonzalez
f0a4a7fc29 chore: remove now invalid tests 2026-05-04 13:16:28 -04:00
Jose Diaz-Gonzalez
473bcce688 fix: use inline source instead of global source
Ensure property-functions are sourced only if not already defined.
2026-05-04 09:32:09 -04:00
Jose Diaz-Gonzalez
49dc1c1e64 fix: correct the assertion 2026-05-04 09:30:00 -04:00
Jose Diaz-Gonzalez
964c0fc4e9 fix: source property-functions where fn-plugin-property-* helpers are used
The release_and_deploy function and several proxy plugin scripts call fn-plugin-property-* helpers without sourcing `plugins/common/property-functions`, producing `command not found` errors during deploys. Source the helpers from `plugins/common/functions` and from each proxy plugin entry point that consumes them.
2026-05-04 06:11:22 -04:00
Jose Diaz-Gonzalez
ec8fd0994b Merge pull request #8561 from dokku/chore/bump-pack-0.40.4
chore: bump pack to 0.40.4
2026-05-04 06:01:21 -04:00
Dokku Bot
1e04955c4d chore: bump pack to 0.40.4 2026-05-03 06:52:51 +00:00
Jose Diaz-Gonzalez
eaaed79b39 Merge pull request #8559 from dokku/alternative-pack-install
Install cnb pack from github releases instead of ppa
2026-05-02 10:03:00 -04:00
Jose Diaz-Gonzalez
31ce5a7c48 fix: install cnb pack from github releases instead of ppa
The ppa:cncf-buildpacks/pack-cli launchpad source is currently down, breaking the runtime image build and any bats run that calls install_pack. Pack is now tracked in contrib/dependencies.json and pulled from the buildpacks/pack GitHub release tarball, matching how other binary deps are managed. update-deb-dependencies gains hyphen-aware word-boundary matching so single-word names like pack cannot accidentally rewrite unrelated debian/control lines, keeping pack out of the package's hard requirements.
2026-05-02 09:12:46 -04:00
Jose Diaz-Gonzalez
ef959160bd Merge pull request #8558 from dokku/8557-storage-mount-migration-in-0-38-0-uses-the-wrong-owner-for-the-legacy-files-causing-ps-rebuild-failures 2026-05-02 07:12:36 -04:00
Jose Diaz-Gonzalez
179d09fdd5 fix: chown migrated legacy storage entries to dokku
`SaveEntry` and `touchMigrationFlag` wrote files via `os.WriteFile` and `os.Create` and never chowned them, so the install-time legacy-mount migration produced root-owned `legacy-*.json` files in `/var/lib/dokku/data/storage-registry/entries/`. The dokku user that runs `ps:rebuild` could not read them and every rebuild on a 0.37.x to 0.38.0 upgrade failed with permission denied. The companion `repairRegistryOwnership` pass in `TriggerInstall` rewrites ownership across the whole registry tree so installs that already ran the buggy code are fixed on the next package upgrade, since the per-app migration flag would otherwise cause `MigrateLegacyMounts` to skip the broken files forever.
2026-05-02 05:37:11 -04:00
Jose Diaz-Gonzalez
cdfcd4d2c8 Merge pull request #8555 from dokku/dependabot/go_modules/plugins/app-json/github.com/mattn/go-isatty-0.0.22
chore(deps): bump github.com/mattn/go-isatty from 0.0.20 to 0.0.22 in /plugins/app-json
2026-05-02 03:52:13 -04:00
Jose Diaz-Gonzalez
ea807bb46e chore: bump go modules 2026-05-02 03:46:40 -04:00
dependabot[bot]
2c3ed3ad14 chore(deps): bump github.com/mattn/go-isatty in /plugins/app-json
Bumps [github.com/mattn/go-isatty](https://github.com/mattn/go-isatty) from 0.0.20 to 0.0.22.
- [Commits](https://github.com/mattn/go-isatty/compare/v0.0.20...v0.0.22)

---
updated-dependencies:
- dependency-name: github.com/mattn/go-isatty
  dependency-version: 0.0.22
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-02 03:46:23 -04:00
Jose Diaz-Gonzalez
4f0a7e63f3 Merge pull request #8556 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/Masterminds/semver/v3-3.5.0
chore(deps): bump github.com/Masterminds/semver/v3 from 3.4.0 to 3.5.0 in /plugins/scheduler-k3s
2026-05-02 03:45:40 -04:00
Jose Diaz-Gonzalez
4dbd2e5bba Merge pull request #8550 from dokku/chore/bump-docker-container-healthchecker-0.15.2
chore: bump docker-container-healthchecker to 0.15.2
2026-05-02 03:44:55 -04:00
Jose Diaz-Gonzalez
9671cbd78e Merge pull request #8553 from dokku/chore/bump-dokku-event-listener-0.19.1
chore: bump dokku-event-listener to 0.19.1
2026-05-02 03:44:33 -04:00
Jose Diaz-Gonzalez
641f1e3374 Merge pull request #8552 from dokku/chore/bump-lambda-builder-0.9.3
chore: bump lambda-builder to 0.9.3
2026-05-02 03:43:56 -04:00
Jose Diaz-Gonzalez
b4c1eb246d Merge pull request #8551 from dokku/chore/bump-procfile-util-0.20.7
chore: bump procfile-util to 0.20.7
2026-05-02 03:42:35 -04:00
Dokku Bot
9e9f374050 chore: bump procfile-util to 0.20.7 2026-05-02 06:40:39 +00:00
Dokku Bot
75d42dfa38 chore: bump dokku-event-listener to 0.19.1 2026-05-02 06:40:38 +00:00
Dokku Bot
d3f977f953 chore: bump lambda-builder to 0.9.3 2026-05-02 06:40:38 +00:00
Dokku Bot
e76785e629 chore: bump docker-container-healthchecker to 0.15.2 2026-05-02 06:40:35 +00:00
Jose Diaz-Gonzalez
8497a1cc52 Merge pull request #8545 from dokku/haproxy-fails
Deflake haproxy bats tests
2026-05-01 16:53:41 -04:00
Jose Diaz-Gonzalez
6b03e2ed88 Merge pull request #8554 from dokku/dependabot/github_actions/peter-evans/create-pull-request-8
chore(deps): bump peter-evans/create-pull-request from 7 to 8
2026-05-01 12:38:47 -04:00
dependabot[bot]
3bf2478393 chore(deps): bump github.com/Masterminds/semver/v3
Bumps [github.com/Masterminds/semver/v3](https://github.com/Masterminds/semver) from 3.4.0 to 3.5.0.
- [Release notes](https://github.com/Masterminds/semver/releases)
- [Changelog](https://github.com/Masterminds/semver/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Masterminds/semver/compare/v3.4.0...v3.5.0)

---
updated-dependencies:
- dependency-name: github.com/Masterminds/semver/v3
  dependency-version: 3.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-01 16:31:06 +00:00
dependabot[bot]
edceed1524 chore(deps): bump peter-evans/create-pull-request from 7 to 8
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7 to 8.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7...v8)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-01 16:28:48 +00:00
Jose Diaz-Gonzalez
60fe2400a9 fix: openresty bats global-flag test uses settable key
The previous regression case selected `--openresty-global-hsts`, but `hsts` is rejected by `openresty:set --global` because it is not in the plugin's GLOBAL_KEYS list. Switch to `--openresty-letsencrypt-server`, which the bats setup already pins to a known staging URL, so the test exercises the same `--global --<info-flag>` parsing path without needing a separate set step.
2026-05-01 04:02:26 -04:00
Jose Diaz-Gonzalez
e8d8b0683a fix: preserve info flag in plugin reports with --global
The argument-handling block in each plugin's report command overwrote APP with --global before checking whether $1 actually held an info flag, so `dokku <plugin>:report --global --<plugin>-foo` always emitted the full report instead of the requested value. Reorder the conditionals across the sixteen plugins that share the pattern so the info-flag check runs first, and add a regression bats case for each one.
2026-04-30 21:05:46 -04:00
Jose Diaz-Gonzalez
53ef8c7780 fix: deflake haproxy bats tests
The byjg/easy-haproxy image polls Docker for label changes every 10
seconds by default, which races with the haproxy bats suite and
intermittently produces curl exit 7. Expose `refresh-conf` as a
global-only haproxy property that maps to `EASYHAPROXY_REFRESH_CONF`,
lower it to 2 seconds in the bats setup, and wrap the localhost HTTP
assertions in a retry loop so checks wait for haproxy to converge
rather than failing on the first attempt.
2026-04-30 18:40:57 -04:00
Jose Diaz-Gonzalez
8f8a23aac3 Merge pull request #8546 from dokku/simpler-nginx-conf-sigil
Consolidate nginx.conf.sigil server blocks
2026-04-30 18:40:11 -04:00
Jose Diaz-Gonzalez
dc5b9cc883 test: relax ssl_certificate occurrence count in nginx-vhosts_16 2026-04-30 17:30:03 -04:00
Jose Diaz-Gonzalez
8d3506a09c Merge pull request #8548 from dokku/migration-docs-2
Use explicit type property in proxy:set examples
2026-04-30 17:21:36 -04:00
Jose Diaz-Gonzalez
554fee91de docs: use explicit type property in proxy:set examples
The 0.38.0 migration documents `proxy:set <app> type <value>` as the canonical way to set the proxy implementation, but several user-facing examples still taught the legacy implicit form. Switch every example over to the explicit property syntax so the docs match the migration guide and other property-based plugin commands.
2026-04-30 17:20:16 -04:00
Jose Diaz-Gonzalez
4c8bdef06d Merge pull request #8547 from dokku/migration-docs
Document plugin properties migrated from env vars
2026-04-30 17:04:46 -04:00
Jose Diaz-Gonzalez
cb0f729299 docs: document plugin properties migrated from env vars
Per-plugin management docs now describe the properties introduced by the env-var-to-property migration in PR #8498, and stale prose and command-output examples that still referenced the old `DOKKU_*` names have been refreshed. The deprecated env vars table moves out of `environment-variables.md` and into the 0.38.0 migration guide, where it functions as a one-time pointer for upgrading users rather than ongoing reference material.
2026-04-30 17:02:39 -04:00
Jose Diaz-Gonzalez
ae3d63668d fix: drop trailing blank line in nginx-vhosts_16.bats 2026-04-30 16:38:43 -04:00
Jose Diaz-Gonzalez
465de6cc71 refactor: consolidate nginx.conf.sigil server blocks
The default nginx template rendered four near-identical server blocks per app, so the same listen, access_log, error_log, ssl_*, error_page, and proxy chain had to be maintained across http, https, grpc, and grpcs branches. Merging http and https into a single branch keyed on an `is_ssl` boolean, and likewise grpc and grpcs, removes the duplicate proxy_set_header chain and error-page locations and brings the structure in line with the openresty proxy template. Output is preserved up to whitespace and the existing `cat -s` pass already squashes the leftover blank lines. Adds plugins/nginx-vhosts/template_test.go exercising the rendered output via sigil as a Go library across HTTP-only, HTTPS, HTTP-to-HTTPS redirect, no-listeners 502 fallback, gRPC, gRPCs, gRPC-without-listeners skip, IPv4 bind, upstream blocks with and without keepalive, the access_log `off` short-circuit, the X-Forwarded-Ssl toggle, the http2 listen-parameter vs directive split, http2_push_preload conditional emission, and the nginx.conf.d/*.conf include in every code path; and tests/unit/nginx-vhosts_16.bats covering deploy plus `nginx -t` end-to-end for both HTTP and HTTPS apps.
2026-04-30 16:36:45 -04:00
Jose Diaz-Gonzalez
823b37e383 Merge pull request #8544 from dokku/josegonzalez-patch-1
Fix reference to when the build plugin was introduced
2026-04-30 14:39:16 -04:00
Jose Diaz-Gonzalez
63f0aaa0cf docs: fix reference to when the build plugin was introduced 2026-04-30 14:39:02 -04:00
Dokku Bot
7dfe8dd336 Release 0.38.0
# History

## 0.38.0

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.38.0/bootstrap.sh
sudo DOKKU_TAG=v0.38.0 bash bootstrap.sh
```

See the [0.38.0 migration guide](/docs/appendices/0.38.0-migration-guide.md) for more information on migrating to 0.38.0.

### Bug Fixes

- #8533: @josegonzalez Split env config and image pull secret into separate helm releases
- #8530: @josegonzalez Split multi-flag input in docker-options
- #8528: @josegonzalez Skip retiring images still in use by app containers
- #8525: @josegonzalez Add launcher entrypoint for CNB images on dokku run and cron:run
- #8522: @josegonzalez Only emit keda fallback when a non-cpu/memory trigger exists
- #8515: @josegonzalez Fix vector mount directory config
- #8508: @josegonzalez Preserve all domains when renaming an app
- #8507: @josegonzalez Retire orphaned containers when scaling down

### New Features

- #8538: @josegonzalez Add scheduler-aware named storage entries
- #8527: @josegonzalez Accept --global on :report subcommands
- #8524: @josegonzalez Pre-validate custom nginx.conf.sigil during core-post-extract
- #8523: @josegonzalez Support resource limits on the build container
- #8517: @josegonzalez Send SIGTERM to old containers immediately on deploy
- #8516: @josegonzalez Scope docker-options to specific procfile processes
- #8509: @josegonzalez Ship default catch-all site on fresh apt install
- #8506: @josegonzalez Add --format json to git:report and nginx:report
- #8505: @josegonzalez Add git:auth-status to check netrc match
- #8493: @josegonzalez Generate 502 config for apps without web listeners
- #8404: @josegonzalez Upgrade vector chart from 0.42.0 to 0.52.0
- #8403: @josegonzalez Upgrade ingress-nginx chart from 4.10.0 to 4.15.1
- #8402: @josegonzalez Upgrade keda to 2.19.0 and keda-add-ons-http to 0.12.2
- #8259: @josegonzalez Add post-create support for env key in app.json
- #8157: @josegonzalez Add support for specifying buildpacks via app.json
- #8154: @josegonzalez Enable live-restore by default when installing Dokku
- #3697: @josegonzalez Migrate builds plugin to go and track per-build records

### Refactors

- #8514: @josegonzalez Migrate docker-options subcommands to go
- #6716: @josegonzalez Move app and global ENV files to consolidated config path

### Dependencies

- #8541: @dependabot[bot] chore(deps): bump traefik from v3.6.14 to v3.6.15 in /plugins/traefik-vhosts
- #8537: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.43 to 2.11.44 in /plugins/scheduler-k3s
- #8535: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.39.1 to 1.40.0 in /plugins/common
- #8529: @josegonzalez chore: bump dokku/netrc to v0.11.0
- #8520: @dependabot[bot] chore(deps): bump packaging from 26.1 to 26.2 in /docs/_build
- #8510: @dependabot[bot] chore(deps): bump packaging from 26.1 to 26.2 in /docs/_build
- #8503: @josegonzalez Bump dependency versions and add daily updater workflow
- #8502: @josegonzalez Bump go version to 1.26.2
- #8495: @dependabot[bot] chore(deps): bump k8s.io/apimachinery from 0.35.4 to 0.36.0 in /plugins/scheduler-k3s
- #8494: @dependabot[bot] chore(deps): bump dokku/openresty-docker-proxy from 0.9.3 to 0.10.0 in /plugins/openresty-vhosts
- #8490: @dependabot[bot] chore(deps): bump k8s.io/kubernetes from 1.35.4 to 1.36.0 in /plugins/scheduler-k3s

### Other

- #8498: @josegonzalez Migrate environment variables to plugin properties
2026-04-30 17:38:51 +00:00
Jose Diaz-Gonzalez
c95c9f8518 Merge pull request #8501 from dokku/0.38-release
Release 0.38.0
2026-04-30 13:36:29 -04:00
Jose Diaz-Gonzalez
c0794abc30 Merge pull request #8538 from dokku/6814-k3s-plugin-add-pv-option
Add scheduler-aware named storage entries
2026-04-30 12:10:30 -04:00
Jose Diaz-Gonzalez
f020b76e11 Merge pull request #3697 from dokku/track-deploys
Migrate builds plugin to go and track per-build records
2026-04-30 12:08:11 -04:00
Jose Diaz-Gonzalez
0a857b7966 docs: add file formats to list 2026-04-30 12:08:00 -04:00
Jose Diaz-Gonzalez
1a6f01a1eb docs: link to build tracking docs in sidebar 2026-04-30 12:04:23 -04:00
Jose Diaz-Gonzalez
8de073c960 docs: delete docs/deployment/builds-management.md
This is duplicated
2026-04-30 12:03:07 -04:00
Jose Diaz-Gonzalez
7cd4493cc7 Merge pull request #8541 from dokku/dependabot/docker/plugins/traefik-vhosts/traefik-v3.6.15
chore(deps): bump traefik from v3.6.14 to v3.6.15 in /plugins/traefik-vhosts
2026-04-30 10:15:10 -04:00
dependabot[bot]
2210307e42 chore(deps): bump traefik in /plugins/traefik-vhosts
Bumps traefik from v3.6.14 to v3.6.15.

---
updated-dependencies:
- dependency-name: traefik
  dependency-version: v3.6.15
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-30 13:54:23 +00:00
Jose Diaz-Gonzalez
4d5a16b714 fix: chown test-fixture build records to dokku user 2026-04-30 02:58:18 -04:00
Jose Diaz-Gonzalez
f0d088bc1d test: cover the legacy -v migration with go and bats tests
Adds plugins/storage/migrate_test.go exercising migrateApp and MigrateLegacyMounts: single deploy phase, cross-phase grouping into one attachment, :ro and free-form volume options preserved on the attachment, idempotency on a second pass, the per-app flag-file fast path that skips already-migrated apps, and the name-collision refusal that aborts before draining. tests/unit/storage.bats gains an end-to-end case that stages a -v line via docker-options:add, runs storage:migrate, and asserts the synthesized colon form shows up in storage:list, the legacy-<hash> entry shows up in storage:list-entries, and the original -v line is gone from docker-options:report on both phases. To make that test (and operators with restored backups) practical, storage gains a storage:migrate <app>|--all subcommand backed by a new MigrateApp helper that skips the per-app flag file so a re-run actually re-scans.
2026-04-30 02:37:01 -04:00
Jose Diaz-Gonzalez
ea25c5b6e2 fix: keep operator stdout when teeing build output to file 2026-04-30 02:02:02 -04:00
Jose Diaz-Gonzalez
ae61547505 fix: pad shfmt-required spaces around arithmetic operator 2026-04-30 01:19:21 -04:00
Jose Diaz-Gonzalez
67e4cf04ab feat: migrate builds plugin to go and track per-build records
Adds typed JSON build records under data/builds/<app>/<build-id>.{json,log} keyed on a stable base36 ULID-style DOKKU_BUILD_ID generated for every deploy. The new commands surface that history (builds:list, builds:info, builds:prune) and an operator-configurable retention via builds:set retention. The existing builds:cancel and builds:output now key on the build-id (with safe handling for already-finalized and abandoned records), and the per-build log file replaces journalctl as the durable source of truth for builds:output.
2026-04-30 01:18:03 -04:00
Jose Diaz-Gonzalez
e9a53ac82d fix: propagate storage:exec exit codes and route legacy mounts to attachments
CallExecCommand wraps non-zero exit codes as errors with the code populated on the response, so storage:exec was returning the wrapped error and being collapsed to exit 1 by LogFailWithError before the os.Exit branch ran. Both storage's CommandExec and scheduler-docker-local's TriggerSchedulerStorageExec now check ExitCode before err so the underlying tool's status flows through verbatim. Separately, the legacy host:container colon form of storage:mount used to write straight into docker-options, but storage:list now reads only attachments, so newly mounted legacy-form storage was invisible. CommandMount and CommandUnmount route the colon form through LegacyMountToEntry plus AddAttachment / RemoveAttachment, making storage:list show every mount regardless of form while preserving the existing "Mount path already exists." / "Mount path does not exist." error wording.
2026-04-30 01:10:00 -04:00
Jose Diaz-Gonzalez
cdbc91048a fix: chown the storage registry tree to the dokku user
The install trigger created /var/lib/dokku/data/storage-registry and its entries / migrations subdirectories as root with mode 0755, so the dokku user that runs storage:create couldn't write entry JSON files or migration flag files into them. Mirrors what PropertySetup does for config/storage by calling SetPermissions on each registry path. This unblocks the bats coverage that was failing at the first storage:create call.
2026-04-30 00:01:54 -04:00
Jose Diaz-Gonzalez
58042b9330 feat: delegate storage:exec to scheduler plugins, harden the flow
Moves the actual exec out of the storage plugin and into a new scheduler-storage-exec plugn trigger. scheduler-docker-local does docker run with TTY-aware -it/-i selection and --user derived from entry.Chown; scheduler-k3s creates a throwaway Pod via the kubernetes API, waits for it to reach Running with structured error reporting (ImagePullBackOff and friends are surfaced from the container status verbatim, no kubectl involvement), execs the user command via the existing SPDY plumbing in k8s.go, and deletes the Pod on the way out. (Entry).Validate now accepts either an absolute path or a docker named-volume token for docker-local entries so the migration synthesizer's named-volume legacy entries work cleanly. storage:exec gains --as-user for one-off uid overrides, propagates the underlying tool's exit code via os.Exit, and detects TTY/interactive mode from os.Stdin so non-interactive scripted use no longer trips over docker's input-device-is-not-a-tty error.
2026-04-29 23:29:30 -04:00
Jose Diaz-Gonzalez
d75228f165 fix: storage:list reads from attachments, deprecate storage-list trigger
storage:list was calling the storage-list plugn trigger which read -v lines from docker-options. After the install-time migration drains those lines into the attachment store, that source is empty for every migrated app and for any app that only ever used storage:create + storage:mount. The fix moves CommandList to call a new in-process ListAppMountEntries helper that reads attachments directly, surfaces the entry name in JSON output via a new entry_name field, and falls back to the entry name as the host token for k3s entries with no host path so the colon form remains well-formed. The storage-list plugn trigger is kept for back-compat with external callers but emits a deprecation warning and now reads from the same attachment-driven source.
2026-04-29 22:51:50 -04:00
Jose Diaz-Gonzalez
3b3bc3dd39 fix: scope deploy output redirect to git-hook only
The previous condition used a bash regex `git-*` that matched git-receive-pack and git-upload-pack, interposing a tee chain on the binary git wire protocol and producing `fatal: protocol error: bad line length character: !` on every push. Restrict the redirect to the pre-receive hook, where tee passthrough is safe because git-receive-pack forwards hook output via the protocol sideband.
2026-04-29 22:48:49 -04:00
Jose Diaz-Gonzalez
6a5d568944 fix: remove the per-app property folder on app delete and rename
Switches the storage plugin's post-delete and post-app-rename-setup triggers from rewriting the attachment list as empty to removing the per-app property folder outright via PropertyDestroy. This matches the convention other plugins use on app deletion and avoids leaving an empty mounts file behind for an app that no longer exists.
2026-04-29 22:39:12 -04:00
Jose Diaz-Gonzalez
89afd09087 fix: storage plugin install setup and post-delete permissions
apps:destroy was failing in CI because the post-delete trigger called PropertyListWrite, which tried to mkdir /var/lib/dokku/config/storage/<app> as the dokku user but the parent directory had been created by the install trigger as root. The install trigger now calls PropertySetup("storage") so the per-plugin config root has the correct ownership, and post-delete / post-app-clone / post-app-rename short-circuit when the app has no attachments to begin with so they can't fail on a never-touched property tree. The entry registry and migration flag directories also moved out of config/storage (where they would have collided with the property-store path config/storage/<appName>) into a dedicated data/storage-registry tree.
2026-04-29 22:36:00 -04:00
Jose Diaz-Gonzalez
b601a626f5 docs: storage entries and migration guide for #6814
Updates persistent-storage.md to lead with the named storage entry workflow while keeping the legacy colon-form documentation intact, adds a Persistent storage section to the k3s scheduler doc, documents the storage-app-mounts, storage-create, storage-destroy, and storage-status triggers in plugin-triggers, and adds an entry to the 0.38.0 migration guide explaining the install-time migration of legacy mounts and the new DNS-1123 name validation. Bats coverage in tests/unit/storage.bats now exercises storage:create / list-entries / destroy, name validation rejections, multi-entry attachment, the destroy-while-mounted error, and the ensure-directory deprecation warning.
2026-04-29 14:54:15 -04:00
Jose Diaz-Gonzalez
1ca961251d feat: add storage:set, storage:exec, storage:wait, storage:report --global
storage:set is the in-place editor for an existing entry; size grows are passed through to a helm upgrade and Kubernetes-incompatible swaps (access-mode, storage-class) are rejected up front. storage:exec spawns a throwaway container that mounts the entry: docker run on docker-local entries, kubectl run with a Pod-spec override on k3s, falling back to bash then sh when no command is supplied. storage:wait blocks until a k3s entry's PVC reports Bound via the storage-status trigger, with a docker-local fast path that just checks the host directory. storage:report --global enumerates every registered entry and the apps that mount it, in text or JSON form.
2026-04-29 14:51:49 -04:00
Jose Diaz-Gonzalez
cfb7da8ec0 feat: scheduler-k3s renders pvc-backed volumes from storage attachments
Adds a per-entry storage helm chart that owns the PVC and (when host_path is set) the PV, and three triggers for the storage plugin to drive: storage-create installs/upgrades the chart with storage-class existence validation, storage-destroy uninstalls it, storage-status reports the PVC phase. App deployment and cron-job charts now consume storage-app-mounts and reference each PVC by name; the // todo: implement volumes blocks are gone. ProcessVolume gained sub_path, read_only, and persistent_claim fields and the deployment/cron-job templates render them.
2026-04-29 14:49:15 -04:00
Jose Diaz-Gonzalez
e1b6bdb1d4 feat: storage attachments, docker-args triggers, install-time migration
storage:mount and storage:unmount now accept the named-entry form (--container-dir, --phase, --process-type, --volume-subpath, --volume-readonly, --volume-chown), persisting attachments via the property list. The legacy host:container colon form is preserved for back-compat. Storage now emits its own docker-args-deploy and docker-args-run triggers so docker-local apps continue to receive bind mounts even after their data moves out of docker-options. The install trigger walks every app once per upgrade and converts legacy -v lines into legacy-<hash> entries plus attachments, draining the originals from docker-options last so a partial run leaves the old behavior intact. Lifecycle triggers post-delete, post-app-clone-setup, and post-app-rename-setup keep the attachment store in sync with app state.
2026-04-29 14:43:51 -04:00
Jose Diaz-Gonzalez
8a46d89181 feat: add storage:create, storage:destroy, storage:info, storage:list-entries
Wires the new entry-management commands on top of the Entry type. storage:create accepts both docker-local entries (with idempotent host-directory creation) and k3s entries (which delegate PVC provisioning to a forthcoming scheduler-side storage-create trigger). storage:destroy refuses to remove an entry that any app still mounts. storage:ensure-directory now emits a deprecation warning. storage:mount and storage:unmount keep the existing colon-form behavior so this commit is non-breaking; the named-entry mount form follows in a later commit.
2026-04-29 14:39:59 -04:00
Jose Diaz-Gonzalez
4e87d1f447 feat: add storage entry and attachment types
Introduces the Entry and Attachment types that the storage plugin will use as the source of truth for named storage volumes, replacing the colon-delimited mount strings stored under docker-options. Entries persist as JSON under config/storage/entries and validate against scheduler-specific rules; attachments persist via the property list and capture how an app uses an entry. The legacy migration name synthesizer is also added so existing colon-form mounts can converge on a deterministic legacy- entry name. Existing storage commands are unchanged in this commit.
2026-04-29 14:36:47 -04:00
Jose Diaz-Gonzalez
aa72794711 feat: redirect output in every case as appropriate 2026-04-29 13:48:50 -04:00
Jose Diaz-Gonzalez
7d00e2c422 feat: implement builds:output
This still needs tightening to ensure we don't trigger this for normal git plugin commands - as well as anything that triggers a deploy - but works in a pinch.
2026-04-29 13:48:50 -04:00
Jose Diaz-Gonzalez
99855ae9f8 fix: correct issue with cancel 2026-04-29 13:48:50 -04:00
Jose Diaz-Gonzalez
0c08aefc54 feat: implement build tracking
The DOKKU_PID now never gets overwritten except in the case that DOKKU is executed by the sudo user. If the command ends up executing a deploy, then the pid of the `dokku` owned process - which may have been executed via sudo - will be written to the file lock, allowing future commands to interact with the original process.

Additionally, the new builds plugin can be used to handle killing a build.
2026-04-29 13:48:50 -04:00
Jose Diaz-Gonzalez
4257c17eab Merge pull request #8533 from dokku/8531-split-out-imagepullsecrets-and-config-env-into-separate-helm-charts
Split env config and image pull secret into separate helm releases
2026-04-29 13:48:08 -04:00
Jose Diaz-Gonzalez
3a6ae559c4 Merge pull request #8530 from dokku/8010-docker-options-cleaning-up-arguments
Split multi-flag input in docker-options
2026-04-29 13:16:37 -04:00
Jose Diaz-Gonzalez
507df612e8 fix: tidy go.sum for plugins importing docker-options 2026-04-29 13:16:18 -04:00
Jose Diaz-Gonzalez
55d7487d66 fix: split multi-flag input in docker-options
Multi-flag inputs (e.g. `--build-arg X=Y --link a --link b`) used to be stored as a single line, which bypassed the per-line filter that drops `--link` and similar flags for dockerfile-based builders. Each `--flag [value]` group is now stored as its own entry, and a `--process` typed after the app name is lifted into the subcommand flag instead of being stored as a docker option.
2026-04-29 13:15:51 -04:00
Jose Diaz-Gonzalez
7ba453e588 fix: thread secret annotations and labels through new helm charts
The new config and pull secret helm releases need to honor user-set annotations and labels for `--resource-type secret` so existing scheduler-k3s annotation tests keep passing. The dedicated charts now render `.Values.global.annotations` and `.Values.global.labels` onto their Secret manifest, and the deploy trigger plumbs `SecretAnnotations` and `SecretLabels` from the global annotation/label config. The rollback regression bats test now uses `dokku ps:rebuild` for its second deploy because git push of an unchanged ref is rejected by the dokku remote.
2026-04-29 12:18:06 -04:00
Jose Diaz-Gonzalez
ef9bdc0379 fix: split env config and image pull secret into separate helm releases
Bundling these Secrets in the app helm chart caused two bugs in the scheduler-k3s plugin: a chart rollback could delete Secrets that older ReplicaSets still referenced by exact timestamped name (`env-{app}.{ts}` and `ims-{app}.{ts}`), hard-crashing pods until manual intervention; and the strategic-merge `patchMergeKey` on `imagePullSecrets` let stale entries leak into the live Deployment until the list pointed at many nonexistent Secrets. Each Secret now lives in its own helm release with a stable name (`config-{app}` and `pull-secret-{app}`), installed before the app chart on every deploy. The deployment trigger also prunes any leaked `imagePullSecrets` entries from the live Deployment so the next deploy lands on a clean list, and the rename and destroy paths uninstall the new releases (and the previously-leaked TLS release on rename) under the old app name.
2026-04-29 12:18:03 -04:00
Jose Diaz-Gonzalez
f06048a266 Merge pull request #8535 from dokku/dependabot/go_modules/plugins/common/github.com/onsi/gomega-1.40.0
chore(deps): bump github.com/onsi/gomega from 1.39.1 to 1.40.0 in /plugins/common
2026-04-29 12:17:08 -04:00
Jose Diaz-Gonzalez
579481e76b chore: bump go modules 2026-04-29 12:16:58 -04:00
dependabot[bot]
2f1268172b chore(deps): bump github.com/onsi/gomega in /plugins/common
Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.39.1 to 1.40.0.
- [Release notes](https://github.com/onsi/gomega/releases)
- [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/gomega/compare/v1.39.1...v1.40.0)

---
updated-dependencies:
- dependency-name: github.com/onsi/gomega
  dependency-version: 1.40.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-29 12:16:18 -04:00
Jose Diaz-Gonzalez
abb7faa503 Merge pull request #8527 from dokku/8500-allow-format-json-with-global-on-report-subcommands
Accept --global on :report subcommands
2026-04-29 12:14:54 -04:00
Jose Diaz-Gonzalez
1a45fef839 Merge pull request #8523 from dokku/3826-extending-resource-management-to-include-build-containers
Support resource limits on the build container
2026-04-29 10:45:16 -04:00
Jose Diaz-Gonzalez
0f78f81d71 test: drop cron:set in cron:report --global test
The set step relied on scheduler-cron-write accepting `--global` as the appName, which the scheduler-k3s plugin trigger does not.
2026-04-29 10:31:02 -04:00
Jose Diaz-Gonzalez
b28e4e552b test: align git:report --global assertion with rendered key 2026-04-29 10:31:01 -04:00
Jose Diaz-Gonzalez
8282981361 feat: accept --global on :report subcommands
Every `:report` subcommand now recognizes `--global` as a scope selector that limits the report to globally-configured properties, including in JSON form via `--global --format json`. Previously this combination was rejected because `--global` was treated as an info flag, conflicting with `--format`. The shared `common.ParseReportArgs` helper now returns a `ReportArgs` struct exposing the parsed scope; each Go and bash report selects a global-only flag map when scope is global, and skips per-app verification.
2026-04-29 10:30:59 -04:00
Jose Diaz-Gonzalez
ec70e10c5d Merge pull request #8528 from dokku/6998-dokku-ps-retire-or-cron-job-trying-to-retire-running-app
Skip retiring images still in use by app containers
2026-04-29 10:28:18 -04:00
Jose Diaz-Gonzalez
63958b99ef Merge pull request #8537 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/traefik/traefik/v2-2.11.44
chore(deps): bump github.com/traefik/traefik/v2 from 2.11.43 to 2.11.44 in /plugins/scheduler-k3s
2026-04-29 10:26:16 -04:00
dependabot[bot]
3267cb2ac8 chore(deps): bump github.com/traefik/traefik/v2
Bumps [github.com/traefik/traefik/v2](https://github.com/traefik/traefik) from 2.11.43 to 2.11.44.
- [Release notes](https://github.com/traefik/traefik/releases)
- [Changelog](https://github.com/traefik/traefik/blob/v2.11.44/CHANGELOG.md)
- [Commits](https://github.com/traefik/traefik/compare/v2.11.43...v2.11.44)

---
updated-dependencies:
- dependency-name: github.com/traefik/traefik/v2
  dependency-version: 2.11.44
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-29 14:24:21 +00:00
Jose Diaz-Gonzalez
cf5807c157 Merge pull request #8529 from dokku/fix-netrc-bug
chore: bump dokku/netrc to v0.11.0
2026-04-29 09:02:22 -04:00
Jose Diaz-Gonzalez
73238b7c97 Merge pull request #8524 from dokku/7827-pre-validate-the-nginx-conf-prior-to-starting-a-deploy
Pre-validate custom nginx.conf.sigil during core-post-extract
2026-04-29 08:47:56 -04:00
Jose Diaz-Gonzalez
ab804c678a test: assert dead-images grep result instead of count
The previous assertion piped grep -c through `|| echo 0`, which printed an extra `0` when the file existed without matches because grep -c emits the count of `0` and exits 1, triggering the fallback.
2026-04-29 08:19:54 -04:00
Jose Diaz-Gonzalez
40b8b25ad4 Merge pull request #8525 from dokku/8242-cron-run-and-dokku-run-fail-on-cnb-pack-images-since-0-37-fix
Add launcher entrypoint for CNB images on dokku run and cron:run
2026-04-29 08:15:24 -04:00
Jose Diaz-Gonzalez
7791a26e98 test: pass plugin and dokku root paths to plugn invocations 2026-04-29 08:11:47 -04:00
Jose Diaz-Gonzalez
f4a1559edc chore: bump dokku/netrc to v0.11.0
The `git:auth` test in `tests/unit/git_3.bats` verifies the written entry with `netrc get --netrc-file ${DOKKU_ROOT}/.netrc github.com`, but the `--netrc-file` flag was added in netrc v0.11.0 and CI was still pinned to v0.10.3, so the assertion ran against root's `~/.netrc` and exited 1.
2026-04-29 06:09:07 -04:00
Jose Diaz-Gonzalez
3a7d74cdaa fix: ensure leading space when injecting --entrypoint launcher
The trigger output started with `--entrypoint` and relied on the caller
to provide a trailing space. `scheduler-deploy-process-container` does
that, but `scheduler-run` does not when `DOKKU_TRACE` is unset, so the
flag concatenated onto the previous arg as `--env=KEY--entrypoint`,
leaving `launcher` as the image positional argument and causing
`docker container create` to fail with `Unable to find image 'launcher:latest'`.
Match the leading-space convention used by the other docker-args triggers
(`config/docker-args-run`, `builder-herokuish/docker-args-run`).
2026-04-29 05:48:43 -04:00
Jose Diaz-Gonzalez
effa9d37cf fix: add launcher entrypoint for CNB images on dokku run and cron:run
The scheduler-run script classified CNB-based images as `herokuish` because
`is_image_herokuish_based` returns true for them, which caused the
`docker-args-process-run` trigger for builder-pack to skip injecting
`--entrypoint launcher`. Without that flag the container fell back to the
image entrypoint (`/cnb/process/web`) and dropped the user-supplied
arguments. Mirror the deploy-side detection so CNB images set
`IMAGE_SOURCE_TYPE=pack`, allowing the launcher entrypoint to be added.
2026-04-29 05:39:56 -04:00
Jose Diaz-Gonzalez
d88e8f137f fix: skip retiring images still in use by app containers
When ps:rebuild runs against an image-based deploy via git:from-image, the resulting image often shares the same SHA as the previous deployment, so retiring the old container's image would target the live image of the new container. The retirement is now skipped when another running container of the same app still references the image, and the cron retire loop self-heals previously stuck entries the next time it encounters them.
2026-04-29 05:36:04 -04:00
Jose Diaz-Gonzalez
ec7841a07b fix: inject placeholder listener for pre-validation upstream blocks
When pre-validating a custom nginx.conf.sigil before the build phase, no app listeners exist yet on first deploys. Templates that emit `proxy_pass http://app-port` while gating the matching upstream block on `DOKKU_APP_WEB_LISTENERS` render an undefined upstream, causing `nginx -t` to fail with "host not found in upstream". Pre-validation now passes a `127.0.0.1:5000` placeholder for `DOKKU_APP_WEB_LISTENERS` so the upstream block emits a static server entry and the template can be validated for syntax without depending on live listeners.
2026-04-29 05:12:05 -04:00
Jose Diaz-Gonzalez
63b809f64c feat: pre-validate custom nginx.conf.sigil during core-post-extract
Renders the user-supplied nginx.conf.sigil via sigil into a tmp file and runs `nginx -t` against a wrapped copy as soon as the template is extracted from the source tree, so syntactically invalid templates abort the deploy before the build phase runs. Skipped when `proxy-type` is not `nginx`, when `disable-custom-config=true`, or when no custom template was extracted. Closes #7827.
2026-04-29 05:01:25 -04:00
Jose Diaz-Gonzalez
1812cfbdeb test: export PLUGIN_PATH when invoking plugn trigger in subshells 2026-04-29 05:00:53 -04:00
Jose Diaz-Gonzalez
9b6c32f39c Merge pull request #8516 from dokku/2441-process-scoped-docker-options
Scope docker-options to specific procfile processes
2026-04-29 04:45:23 -04:00
Jose Diaz-Gonzalez
132f724841 feat: support resource limits on the build container
Adds a `docker-args-process-build` trigger to the resource plugin so
limits set via `dokku resource:limit --process-type build APP` are
applied during the build phase. Only `build.limit.*` properties are
read - defaults do not inherit, since builds typically need more memory
than runtime and a leaked tiny default would cause confusing OOM
failures. Reservations are never applied at build time. Allowed flags
are filtered per builder: herokuish gets cpu, memory, memory-swap, and
nvidia-gpu; dockerfile gets memory and memory-swap; pack, nixpacks,
railpack, lambda, and null emit nothing because their underlying CLIs
do not accept docker run resource flags. The dockerfile builder
whitelists the new memory flags and corrects pre-existing typos where
`--ssh` mapped to `--platform` and `--ulimit` mapped to `--tag`.
2026-04-29 03:42:10 -04:00
Jose Diaz-Gonzalez
9a795fcf91 test: cover migration via go unit test
The bats test for migration idempotency invoked the install binary directly via sudo, which kept hitting fresh missing env vars on each iteration (DOKKU_LIB_ROOT, then PLUGIN_PATH, etc). The dokku launcher script exports a chain of vars that the install path reads via common.MustGetEnv, and mirroring that chain in a bats test is fragile. Migration is pure file IO plus a property marker - perfect for a Go unit test that isolates itself with t.TempDir and t.Setenv. The new test covers parsing comments and blank lines, the marker-based no-op on re-run, and the rule that a manually re-created legacy file is left untouched after the marker is set.
2026-04-29 03:14:17 -04:00
Jose Diaz-Gonzalez
d1213c14a8 test: relax default-scope assertions and pass env to install
The ps plugin auto-adds --restart=on-failure:10 to the default deploy scope on app create, so docker-options:list --phase deploy is never empty for a freshly-created app. Switch the default-scope assertions from exact-match to contains/not-contains so the auto-injected restart line stops causing false failures. The migration test invoked the install binary directly via sudo, but DOKKU_LIB_ROOT is normally exported by the dokku launcher script and isn't set in that subprocess; pass it (and DOKKU_ROOT) explicitly.
2026-04-29 02:34:30 -04:00
Jose Diaz-Gonzalez
d51726b7cb Merge pull request #8522 from dokku/fix-keda-scaling
Only emit keda fallback when a non-cpu/memory trigger exists
2026-04-29 02:27:03 -04:00
Jose Diaz-Gonzalez
177eac4ef1 Merge pull request #8517 from dokku/6833-send-sigterm-immediately-to-old-containers-when-deploying-via-docker-local
Send SIGTERM to old containers immediately on deploy
2026-04-29 01:50:35 -04:00
Jose Diaz-Gonzalez
f728fc8cd7 fix: only emit keda fallback when a non-cpu/memory trigger exists
Keda 2.17+ rejects ScaledObjects whose spec.fallback is set unless at least one trigger is not a cpu or memory scaler, so unconditionally emitting fallback broke deploys for apps autoscaled on cpu or memory alone. The chart now skips the fallback block when every configured trigger is cpu or memory and keeps the existing behavior otherwise.
2026-04-29 01:10:34 -04:00
Jose Diaz-Gonzalez
8a6c853ccd Merge pull request #8515 from dokku/fix-vector-data-dir
Fix vector mount directory config
2026-04-29 00:36:40 -04:00
Jose Diaz-Gonzalez
97b86707e7 fix: docker-options:list flag parsing and ci test fixes
The :list subcommand had `SetInterspersed(false)` which forced flags to come before positional arguments; in practice users invoke it as `docker-options:list <app> --process X --phase Y`. Drop the non-interspersed setting so flags can appear after the app name. Two existing buildpacks/dockerfile tests appended directly to the legacy `DOCKER_OPTIONS_DEPLOY` file - that path is no longer the source of truth, so switch them to `docker-options:add`. The new migration test invoked `dokku plugin:trigger install` which fans out to every plugin and trips on unrelated permission errors; call the docker-options install binary directly instead. Tighten the report and JSON assertions to match the actual output format (`.` becomes a space in the display key, and JSON values may concatenate options).
2026-04-29 00:35:26 -04:00
Jose Diaz-Gonzalez
c424cb06c2 Merge pull request #8520 from dokku/dependabot/pip/docs/_build/packaging-26.2
chore(deps): bump packaging from 26.1 to 26.2 in /docs/_build
2026-04-29 00:28:22 -04:00
dependabot[bot]
32c997e4a7 chore(deps): bump packaging from 26.1 to 26.2 in /docs/_build
Bumps [packaging](https://github.com/pypa/packaging) from 26.1 to 26.2.
- [Release notes](https://github.com/pypa/packaging/releases)
- [Changelog](https://github.com/pypa/packaging/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pypa/packaging/compare/26.1...26.2)

---
updated-dependencies:
- dependency-name: packaging
  dependency-version: '26.2'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-28 13:54:14 +00:00
Jose Diaz-Gonzalez
1161dda05e feat: send SIGTERM to old containers immediately on deploy
The docker-local scheduler now sends `SIGTERM` to old containers immediately after a successful deploy via `docker container kill --signal=SIGTERM`, rather than waiting `wait-to-retire` seconds before signaling. This matches Heroku's graceful-shutdown contract and lets applications begin draining in-flight work as soon as proxy traffic switches. The existing `wait-to-retire` grace period and `stop-timeout-seconds` hard-stop continue to apply unchanged as the authoritative cleanup path.
2026-04-27 18:18:39 -04:00
Jose Diaz-Gonzalez
9c8d5f54fb feat: scope docker-options to specific procfile processes
Adds a `--process` flag (repeatable) to docker-options:add/remove/clear/list and the new docker-options:list subcommand for querying a single process+phase pair. Process scoping is supported only for the deploy phase since build runs once per app and run covers ad-hoc commands and cron tasks where no Procfile process type is available. Storage moves from `$DOKKU_ROOT/$APP/DOCKER_OPTIONS_*` files to property lists under `/var/lib/dokku/config/docker-options/$APP/{processType}.{phase}`, with `_default_` as the sentinel for app-wide options. The install trigger migrates pre-existing DOCKER_OPTIONS_* files into property lists once and renames them to `.migrated`; a global marker makes re-runs strictly no-op. The legacy docker-args-{build,deploy,run} bash triggers are reimplemented in Go alongside a new docker-args-process-deploy trigger that surfaces per-process options to the scheduler. The :report command exposes one dynamic flag per configured `process.deploy` pair (e.g. `--docker-options-deploy.web`) and supports `--format json`. There is no `--global` flag; omitting `--process` keeps the historical default behaviour, since `--global` elsewhere in dokku means "across all apps". Closes #2441.
2026-04-27 18:12:52 -04:00
Jose Diaz-Gonzalez
c0f23528af fix: just use an emptyDir
Let vector decide how to handle the directory.
2026-04-27 17:53:23 -04:00
Jose Diaz-Gonzalez
f19227dcd9 Merge pull request #8514 from dokku/migrate-docker-options-to-go
Migrate docker-options subcommands to go
2026-04-27 17:29:22 -04:00
Jose Diaz-Gonzalez
9767f996c6 Merge pull request #8509 from dokku/7309-nginx-default-site-038
Ship default catch-all site on fresh apt install
2026-04-27 17:11:57 -04:00
Jose Diaz-Gonzalez
acf841606c Merge pull request #8510 from dokku/dependabot/pip/docs/_build/packaging-26.2
chore(deps): bump packaging from 26.1 to 26.2 in /docs/_build
2026-04-27 16:09:24 -04:00
Jose Diaz-Gonzalez
8e7d158ac2 chore: revert transforms changes 2026-04-27 16:06:45 -04:00
Jose Diaz-Gonzalez
5dcefe7ffa fix: use extraVolumeMount just for the vector state 2026-04-27 16:06:07 -04:00
Jose Diaz-Gonzalez
87dd39e0b3 refactor: collect docker-options file helpers in functions.go
Moves `copyPhaseFile` and `removePhaseFile` next to the other phase-file helpers so the package keeps a single home for filesystem plumbing.
2026-04-27 15:58:40 -04:00
Jose Diaz-Gonzalez
b397cf1bd7 test: pass deploy phase to docker-options:add in udp test
The single-udp network test was calling `docker-options:add $TEST_APP -p 1194:1194` without a phase argument. The bash subcommand silently no-op'd because `-p` is not a recognized phase, so the test happened to pass even though it was not actually setting the option. The go port surfaces the validation error correctly, so the test now needs the proper `deploy` phase to keep working.
2026-04-27 15:58:35 -04:00
Jose Diaz-Gonzalez
eaaf0e41c2 fix: clear auto-detected port maps when re-enabling vhost
Re-enabling vhost on an app that was previously deployed with no global VHOST left the auto-assigned random high port behind in the ports plugin's `map-detected` property, so nginx kept listening on that port and the new catch-all default vhost rejected requests for the app's own domain on port 80.
2026-04-27 15:43:33 -04:00
Jose Diaz-Gonzalez
af6267f3b5 fix: restore default domains and reset proxy ports on vhost enable
Re-enabling vhost (via `proxy:enable`, `domains:enable`, or `domains:add` with no global VHOST) was leaving the app pinned to the random high port and the empty VHOST file from the previous disabled state, so the new catch-all vhost intercepted requests for the app's domain. The `domains-enable` trigger now restores default vhosts via `domains_enable`, and `pre-enable-vhost` clears any stored proxy ports so they can be recomputed to 80/443. Also fixes the netrc lookup in the `git:auth` test to read dokku's netrc file directly.
2026-04-27 14:43:20 -04:00
Jose Diaz-Gonzalez
b2ea5406fe fix: remove sites-enabled default instead of renaming
Renaming `/etc/nginx/sites-enabled/default` to `.dokku-disabled` left a broken symlink that nginx's `include /etc/nginx/sites-enabled/*;` glob still picked up, breaking config validation. Files inside `sites-enabled/` are now removed; the real config in `sites-available/default` is still preserved via rename.
2026-04-27 14:43:20 -04:00
Jose Diaz-Gonzalez
d7c88ae298 feat: ship default catch-all site on fresh apt install
Fresh apt installs now drop a catch-all server block at `/etc/nginx/conf.d/00-default-vhost.conf` that uses `ssl_reject_handshake on` and `return 444` to drop requests with unknown Host headers. Conflicting upstream nginx default vhosts are renamed to `*.dokku-disabled` rather than deleted, preserving any local edits. The new `dokku/install_default_site` debconf flag opts out of the install. Upgrades leave existing nginx config untouched.
2026-04-27 14:43:20 -04:00
Jose Diaz-Gonzalez
a4f26a356a feat: add nginx:reload command
Reloads the nginx server config after validating it with `nginx -t`. Useful for picking up changes to globally managed nginx configs without restarting the running process.
2026-04-27 14:43:20 -04:00
Jose Diaz-Gonzalez
099c358a1e fix: set the defaultVolumeMounts instead of using extraVolumeMounts
Without this, the daemonset will inject customConfig.data_dir as a default mount, which will collide with extraVolumeMounts.
2026-04-27 14:27:05 -04:00
Jose Diaz-Gonzalez
e4a8cfc74f Merge pull request #8402 from dokku/upgrade-keda
Upgrade keda to 2.19.0 and keda-add-ons-http to 0.12.2
2026-04-27 14:12:37 -04:00
Jose Diaz-Gonzalez
4eb42f1b82 refactor: migrate docker-options subcommands to go
Ports the user-facing CLI subcommands and lifecycle triggers from bash to go, mirroring the layout used by the ports plugin. The on-disk format (`DOCKER_OPTIONS_BUILD/DEPLOY/RUN` files), the `docker-args-build/deploy/run` triggers, and every exported helper consumed by other plugins are unchanged. Reserves the `--process` and `--global` flags on add, remove, and clear so usage today exits with a not-yet-implemented error and the surface is locked in ahead of the process-scoping work tracked in #2441.
2026-04-27 14:11:37 -04:00
dependabot[bot]
d356ee6847 chore(deps): bump packaging from 26.1 to 26.2 in /docs/_build
Bumps [packaging](https://github.com/pypa/packaging) from 26.1 to 26.2.
- [Release notes](https://github.com/pypa/packaging/releases)
- [Changelog](https://github.com/pypa/packaging/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pypa/packaging/compare/26.1...26.2)

---
updated-dependencies:
- dependency-name: packaging
  dependency-version: '26.2'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-27 17:15:21 +00:00
Jose Diaz-Gonzalez
da13367ca8 feat: add version-aware helm chart upgrade callbacks
Some helm chart upgrades require side-effects that a plain `helm upgrade` cannot perform, such as deleting deployments whose immutable selectors changed. Charts may now register pre and post upgrade hooks against a target version; applicable hooks fire in ascending semver order, each bracketed around an upgrade to its version, with a final upgrade to the chart's configured version when needed. The new `keda-add-ons-http` 0.12.2 hook deletes the chart-managed deployments before the upgrade so the new selectors take effect cleanly.
2026-04-27 07:57:38 -04:00
Jose Diaz-Gonzalez
db1308a2ab feat: upgrade keda to 2.19.0 and keda-add-ons-http to 0.12.2
While there are breaking changes in the addon, none of these impact how Dokku exposes the addon.
2026-04-27 07:32:38 -04:00
Jose Diaz-Gonzalez
b92310c4c8 Merge pull request #8508 from dokku/8230-renaming-app-clears-the-set-domain
Preserve all domains when renaming an app
2026-04-27 07:19:48 -04:00
Jose Diaz-Gonzalez
b17eaedbec Merge pull request #8507 from dokku/fix-8497-orphaned-containers-on-scale-down
Retire orphaned containers when scaling down
2026-04-27 07:19:36 -04:00
Jose Diaz-Gonzalez
bc603d7b9c test: drain dead-containers before scale-up assertion
The intermediate container count check raced with the existing
zero-downtime retire of the previous container, so docker ps still
saw the renamed-but-pending container until wait-to-retire elapsed.
2026-04-27 03:29:06 -04:00
Jose Diaz-Gonzalez
4927ca092d fix: retire orphaned containers when scaling down
When scaling a process type to a smaller count, the indices above the
new count had their `CONTAINER.<proctype>.<idx>` state files deleted but
the underlying Docker containers were never registered for retirement,
so they remained running indefinitely. The cleanup block now reads each
orphaned state file and registers its container id with the existing
`scheduler-register-retired` trigger before the file is removed.
2026-04-27 03:23:15 -04:00
Jose Diaz-Gonzalez
e54fcc4035 Merge pull request #6716 from dokku/1558-move-env
Move app and global ENV files to consolidated config path
2026-04-27 02:50:24 -04:00
Jose Diaz-Gonzalez
c2a07c3f1c fix: preserve all domains when renaming an app
The `post-app-rename-setup` trigger redirected `sed` output to the new
app's VHOST file inside a loop over global vhosts, so each iteration
clobbered the previous one and only the last global subdomain was
rewritten. When no global vhost was set, the loop never ran and the
new app's VHOST file was never written, leaving the renamed app with
no domains.

Copy the old app's VHOST file once as a baseline, then apply `sed -i`
in place for each global vhost so substitutions accumulate. Guard
against a missing global VHOST file and skip blank lines.
2026-04-27 01:47:50 -04:00
Jose Diaz-Gonzalez
8847fcb6b0 Merge pull request #8505 from dokku/8504-git-auth-status
Add git:auth-status to check netrc match
2026-04-27 01:25:46 -04:00
Jose Diaz-Gonzalez
d1554461ab docs: move migration note to 0.38.x doc 2026-04-27 01:07:39 -04:00
Jose Diaz-Gonzalez
d24ab6ffdf fix: set DOKKU_LIB_ROOT in Go coverage test environment 2026-04-27 01:06:32 -04:00
Jose Diaz-Gonzalez
aa45f748b1 fix: create DOKKU_ROOT app dir in Go tests and set global ENV permissions
- config_test.go: create app dir at DOKKU_ROOT for VerifyAppName and
  ensure global config parent directory exists
- migrateGlobalEnv: set dokku:dokku ownership on global ENV file after
  writing so deploy processes running as dokku can read it
2026-04-27 01:06:32 -04:00
Jose Diaz-Gonzalez
c3db713c27 fix: ensure app ENV directory exists at DOKKU_LIB_ROOT/config/{app}
The post-create trigger only created the property directory at
DOKKU_LIB_ROOT/config/config/{app}/, but getAppFile() writes the
ENV file to DOKKU_LIB_ROOT/config/{app}/ENV. Add setupAppConfigDir
to create and permission the ENV directory in both post-create and
install triggers, and clean it up on post-delete.
2026-04-27 01:06:32 -04:00
Jose Diaz-Gonzalez
17c549ee63 fix: run global env migration before listing apps and set DOKKU_LIB_ROOT in tests
- Move migrateGlobalEnv() before UnfilteredDokkuApps() so the global
  config directory is created even on fresh installs with no apps
- Add DOKKU_LIB_ROOT to Go test env vars in tests.mk
2026-04-27 01:06:32 -04:00
Jose Diaz-Gonzalez
d846324fd5 fix: correct global env path, migration join, and test app dirs
- Use DOKKU_LIB_ROOT instead of DOKKU_ROOT in getGlobalFile() to match
  the intended new config path layout
- Add missing comma in filepath.Join for old app ENV migration path
- Revert common_test.go app dirs to DOKKU_ROOT since app detection
  still uses AppRoot()
2026-04-27 01:06:32 -04:00
Jose Diaz-Gonzalez
bc4d3a76b9 Update docs/appendices/0.37-migration-guide.md
Co-authored-by: othercorey <corey.taylor.fl@gmail.com>
2026-04-27 01:06:32 -04:00
Jose Diaz-Gonzalez
30e4123949 fix: migrate global env vars 2026-04-27 01:06:31 -04:00
Jose Diaz-Gonzalez
81e6cdf5a5 fix: ensure config properties for an app are setup prior to usage 2026-04-27 01:06:31 -04:00
Jose Diaz-Gonzalez
f2f6e0b473 refactor: move the env files to the new path on upgrade
Refs #1558
2026-04-27 01:06:29 -04:00
Jose Diaz-Gonzalez
38c6b180af fix: reference env from config dir 2026-04-27 01:05:41 -04:00
Jose Diaz-Gonzalez
b8accfd463 docs: remove references to ENV file 2026-04-27 01:05:41 -04:00
Jose Diaz-Gonzalez
365e300eb6 Merge pull request #8506 from dokku/8499-add-format-json-support-to-nginx-report-and-git-report
Add --format json to git:report and nginx:report
2026-04-27 01:04:52 -04:00
Jose Diaz-Gonzalez
8ea9dd28ff Merge pull request #8259 from dokku/4498-post-create-env-support
Add post-create support for env key in app.json
2026-04-27 00:12:16 -04:00
Jose Diaz-Gonzalez
769d029b0d fix: verify piped git:auth password via netrc get 2026-04-27 00:08:05 -04:00
Jose Diaz-Gonzalez
66c4b3b30e feat: add --format json to git:report and nginx:report
Mirrors the JSON output convention already used by scheduler:report, builder:report, network:report, and traefik:report. Both plugins now accept `--format json` to emit a single-line JSON object whose keys are the property names with the plugin prefix stripped. Combining `--format` with an info flag is rejected with an error message that matches the Go-based report helper.

Closes #8499
2026-04-26 23:30:22 -04:00
Jose Diaz-Gonzalez
65bdbefbea feat: add git:auth-status to check netrc match
Adds `git:auth-status HOST [USERNAME] [PASSWORD]` which exits 0 when the
configured `.netrc` entry matches the requested state and 1 otherwise,
allowing external tooling to detect whether `git:auth` would change
anything without reading `$DOKKU_ROOT/.netrc` directly. Both `git:auth`
and `git:auth-status` now also accept the password via `STDIN`.
2026-04-26 23:10:30 -04:00
Jose Diaz-Gonzalez
3ba51725be fix(tests): adapt app.json fixtures and tini test for env processing
Pre-set LOCAL_DOMAIN in the tini test so mastodon's required env var
resolves, and replace unsupported `generator: "echo 5"` with `value: "5"`
in the nodejs-express and dockerfile fixtures so WEB_CONCURRENCY no
longer aborts deploys via the new app.json env processor.
2026-04-26 22:43:32 -04:00
Jose Diaz-Gonzalez
34c336c668 feat: add post-create support for env key in app.json
Closes #4498
2026-04-26 22:43:32 -04:00
Jose Diaz-Gonzalez
ad00918891 Merge pull request #8490 from dokku/dependabot/go_modules/plugins/scheduler-k3s/k8s.io/kubernetes-1.36.0
chore(deps): bump k8s.io/kubernetes from 1.35.4 to 1.36.0 in /plugins/scheduler-k3s
2026-04-26 22:41:08 -04:00
dependabot[bot]
ef51f1f942 chore(deps): bump k8s.io/kubernetes in /plugins/scheduler-k3s
Bumps [k8s.io/kubernetes](https://github.com/kubernetes/kubernetes) from 1.35.4 to 1.36.0.
- [Release notes](https://github.com/kubernetes/kubernetes/releases)
- [Commits](https://github.com/kubernetes/kubernetes/compare/v1.35.4...v1.36.0)

---
updated-dependencies:
- dependency-name: k8s.io/kubernetes
  dependency-version: 1.36.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-26 12:15:40 -04:00
Jose Diaz-Gonzalez
68dd1b83a2 Merge pull request #8495 from dokku/dependabot/go_modules/plugins/scheduler-k3s/k8s.io/apimachinery-0.36.0
chore(deps): bump k8s.io/apimachinery from 0.35.4 to 0.36.0 in /plugins/scheduler-k3s
2026-04-26 12:14:25 -04:00
dependabot[bot]
76f3c3ec12 chore(deps): bump k8s.io/apimachinery in /plugins/scheduler-k3s
Bumps [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) from 0.35.4 to 0.36.0.
- [Commits](https://github.com/kubernetes/apimachinery/compare/v0.35.4...v0.36.0)

---
updated-dependencies:
- dependency-name: k8s.io/apimachinery
  dependency-version: 0.36.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-26 11:18:46 -04:00
Jose Diaz-Gonzalez
b8e5c3251c Merge pull request #8494 from dokku/dependabot/docker/plugins/openresty-vhosts/dokku/openresty-docker-proxy-0.10.0
chore(deps): bump dokku/openresty-docker-proxy from 0.9.3 to 0.10.0 in /plugins/openresty-vhosts
2026-04-26 11:15:52 -04:00
Jose Diaz-Gonzalez
de0e743880 Merge pull request #8502 from dokku/upgrade-to-go126
Bump go version to 1.26.2
2026-04-26 11:15:32 -04:00
Jose Diaz-Gonzalez
cef1e7aff5 chore: bump go version to 1.26.2 and run go mod tidy 2026-04-26 09:57:35 -04:00
Jose Diaz-Gonzalez
052b342c65 Merge pull request #8503 from dokku/chore/bump-dependencies
Bump dependency versions and add daily updater workflow
2026-04-26 09:57:22 -04:00
Jose Diaz-Gonzalez
f5cbc51fec fix(tests): drop DOKKU_PROXY_PORT from config:show and config:export expectations now that it lives as a property rather than a config var 2026-04-26 08:53:27 -04:00
Jose Diaz-Gonzalez
ef430e815b chore: use Dokku Bot identity for dependency update PRs
Switches the dependency-updates workflow to use HOMEBREW_GITHUB_API_TOKEN
(the same PAT used to bump the homebrew formula on release) and sets
the committer/author to Dokku Bot <no-reply@dokku.com>.
2026-04-26 08:06:47 -04:00
Jose Diaz-Gonzalez
ed2fbf3d44 chore: bump dependency versions and add daily updater workflow
Bumps every entry in contrib/dependencies.json to its latest upstream
release. Adds a scheduled GitHub Actions workflow that checks each
dependency once a day and opens one PR per outdated entry.
2026-04-26 08:00:12 -04:00
Jose Diaz-Gonzalez
207a32e6ae Merge pull request #8403 from dokku/upgrade-ingress-nginx
Upgrade ingress-nginx chart from 4.10.0 to 4.14.4
2026-04-26 04:52:28 -04:00
Jose Diaz-Gonzalez
973f6ffb2c chore: upgrade to 4.15.1 2026-04-26 04:52:05 -04:00
Jose Diaz-Gonzalez
bc3b166ce7 Merge pull request #8404 from dokku/upgrade-vector
feat: upgrade vector chart from 0.42.0 to 0.52.0
2026-04-26 04:50:24 -04:00
Jose Diaz-Gonzalez
4af68e75c5 chore: upgrade the vector helm chart to 0.52.0 2026-04-26 04:46:05 -04:00
Jose Diaz-Gonzalez
807ddf29a7 fix: update helm chart values for k3s scheduler
- Mount `/vector-data-dir` from host (`/var/lib/vector` via `hostPath`, `DirectoryOrCreate`) so `kubernetes_logs` checkpoints survive pod restarts; resolves conflict with the chart's read-only `/var/lib` default volume
- Enable Vector API on `:8686` and wire HTTP `/health` liveness and readiness probes; add `internal_metrics` source and `prometheus_exporter` sink on `:9090` so the `prom-exporter` service port is actually backed by an exporter
- Set explicit `targetPort` on the `prom-exporter` port to avoid inference mismatches
- Remove the `.message = .message` no-op
- Add `node-role.kubernetes.io/control-plane` toleration alongside the legacy `master` key so the DaemonSet schedules on control-plane nodes regardless of cluster age
2026-04-26 04:45:15 -04:00
Jose Diaz-Gonzalez
1158db380a Merge pull request #8493 from dokku/6760-build-empty-nginx-config-when-there-are-no-web-processes
Generate 502 config for apps without web listeners
2026-04-26 04:08:17 -04:00
Jose Diaz-Gonzalez
0a6eb14dd1 Merge pull request #8157 from dokku/7102-buildpacks-app-json
Add support for specifying buildpacks via app.json
2026-04-26 04:07:14 -04:00
Jose Diaz-Gonzalez
f30da59b84 Merge pull request #8498 from dokku/migrate-env-vars-to-properties
Migrate environment variables to plugin properties
2026-04-26 04:05:59 -04:00
Dokku Bot
9324ccf5b9 Release 0.37.10
# History

## 0.37.10

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.37.10/bootstrap.sh
sudo DOKKU_TAG=v0.37.10 bash bootstrap.sh
```

### Tests

- #8491: @dependabot[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 285 to 287 in /tests/apps/php
- #8478: @josegonzalez chore: label test app dependency updates as type: tests

### Dependencies

- #8486: @dependabot[bot] chore(deps): bump click from 8.3.2 to 8.3.3 in /docs/_build
- #8492: @dependabot[bot] chore(deps): bump github.com/fluxcd/pkg/kustomize from 1.29.0 to 1.31.0 in /plugins/scheduler-k3s
- #8489: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.42 to 2.11.43 in /plugins/scheduler-k3s
- #8488: @dependabot[bot] chore(deps): bump timberio/vector from 0.54.0-debian to 0.55.0-debian in /plugins/logs
- #8487: @dependabot[bot] chore(deps): bump traefik from v3.6.13 to v3.6.14 in /plugins/traefik-vhosts
- #8483: @dependabot[bot] chore(deps): update markdown requirement from <3.11,>=3.2.1 to >=3.10.2,<3.11 in /docs/_build
- #8485: @dependabot[bot] chore(deps): bump k8s.io/kubectl from 0.35.2 to 0.35.4 in /plugins/scheduler-k3s
- #8484: @dependabot[bot] chore(deps): bump k8s.io/client-go from 0.35.2 to 0.35.4 in /plugins/scheduler-k3s
- #8482: @dependabot[bot] chore(deps): bump ruby from 4.0.2 to 4.0.3 in /tests/apps/dockerfile-entrypoint
- #8481: @dependabot[bot] chore(deps): bump psycopg2-binary from 2.9.11 to 2.9.12 in /tests/apps/dockerfile-release
- #8479: @dependabot[bot] chore(deps): bump github.com/go-openapi/jsonpointer from 0.23.0 to 0.23.1 in /plugins/scheduler-k3s
- #8480: @dependabot[bot] chore(deps): bump k8s.io/kubernetes from 1.35.3 to 1.35.4 in /plugins/scheduler-k3s
2026-04-26 04:07:58 +00:00
Jose Diaz-Gonzalez
c7afc0523d fix: maintain backward compatibility for proxy:set command
proxy:set <app> <proxy-type> continues to work as before by detecting
when the first argument is not a known property name and treating it
as the type value. Also preserves the port mapping detection error
for inputs containing colons.
2026-04-25 18:07:10 -04:00
Jose Diaz-Gonzalez
915172c0c5 fix: move proxy-port properties to proxy plugin and fix CI failures
- Move proxy-port and proxy-ssl-port properties from ports plugin to
  proxy plugin where they conceptually belong
- Generalize proxy:set to handle any property (matching ps:set pattern)
  instead of only handling the type property
- Fix apps:set --global flag parsing (pflag treats --global as a flag,
  not an argument — must be defined explicitly like ps:set does)
- Add missing property-functions source to scheduler-docker-local
  shell scripts (scheduler-enter, scheduler-run, scheduler-deploy,
  check-deploy, bin/scheduler-deploy-process-container)
- Update nginx-vhosts property references from ports to proxy plugin
- Update tests to use proxy:set for proxy-port properties
2026-04-25 17:19:42 -04:00
Jose Diaz-Gonzalez
24f460f5d3 fix: address CI failures from env var migration
- Add apps:set subcommand for managing apps properties (mirrors
  ps:set, scheduler:set, builder:set pattern)
- Update nginx-vhosts functions/pre-disable-vhost/pre-enable-vhost
  to read proxy port from properties instead of config vars
- Fix test commands to use correct property-setting approaches:
  prop binary for ports properties, apps:set for apps properties
2026-04-25 16:33:34 -04:00
Jose Diaz-Gonzalez
1308e21947 feat: migrate environment variables to plugin properties
Standardize how environment variables are migrated to properties during
install triggers and migrate all remaining DOKKU_* config vars to their
appropriate plugin properties.

Adds a reusable MigrateConfigToProperties() function in the common
package with Transform callback and ListProperty support, plus a
migrate-config-to-property subcommand for the prop binary so shell
plugins can use the same code path.

Migrated variables and their new property owners:
- DOKKU_APP_PROXY_TYPE/DOKKU_PROXY_TYPE → proxy type
- DOKKU_DISABLE_PROXY → proxy disabled
- DOKKU_PROXY_PORT → ports proxy-port
- DOKKU_PROXY_SSL_PORT → ports proxy-ssl-port
- DOKKU_APP_RESTORE → ps restore
- DOKKU_SKIP_DEPLOY → ps skip-deploy
- DOKKU_START_CMD → ps start-cmd
- DOKKU_DOCKERFILE_START_CMD → ps dockerfile-start-cmd
- DOKKU_DISABLE_APP_AUTOCREATION → apps disable-autocreation
- DOKKU_APP_SHELL → scheduler shell
- DOKKU_SKIP_CLEANUP → builder skip-cleanup
- DOKKU_CHECKS_DISABLED → checks disabled
- DOKKU_CHECKS_SKIPPED → checks skipped
- DOKKU_CHECKS_WAIT → checks wait
- DOKKU_CHECKS_TIMEOUT → checks timeout
- DOKKU_CHECKS_ATTEMPTS → checks attempts
- DOKKU_DEFAULT_CHECKS_WAIT → checks default-wait
- DOKKU_SKIP_ALL_CHECKS → checks disabled (legacy)
- DOKKU_SKIP_DEFAULT_CHECKS → checks skipped (legacy)

Also refactors existing bespoke migration loops in scheduler, ports, ps,
builder, and nginx-vhosts plugins to use the standardized utility.

Removes DOKKU_PARALLEL_ARGUMENTS from documentation (unused in core).
Deprecates fn-migrate-config-to-property bash function.

closes #1558
2026-04-25 05:11:07 -04:00
Jose Diaz-Gonzalez
2745e46054 fix(tests): expect 502 for cloned app without deploy
The apps:clone --skip-deploy test expected 404 for the cloned app's
domain. With the new empty nginx config, undeployed apps now correctly
return 502 Bad Gateway instead of falling through to nginx's default.
2026-04-25 00:55:55 -04:00
dependabot[bot]
f3e29c7c94 chore(deps): bump dokku/openresty-docker-proxy
Bumps dokku/openresty-docker-proxy from 0.9.3 to 0.10.0.

---
updated-dependencies:
- dependency-name: dokku/openresty-docker-proxy
  dependency-version: 0.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-24 13:53:53 +00:00
Jose Diaz-Gonzalez
ddf470282e fix(tests): update config and nginx tests for post-create side effects
The config:show and config:export tests now include DOKKU_PROXY_PORT
in expected output since ports-configure runs at app creation time.

Add sleep before HTTP assertion in nginx-vhosts_13 test to allow
nginx async reload to complete.
2026-04-24 05:02:49 -04:00
Jose Diaz-Gonzalez
dcce09f19f fix(nginx): skip post-create config when nginx is stopped
When nginx is stopped (e.g. during traefik/caddy tests), the
post-create trigger should not attempt to build and reload the
nginx config as the service is not running.
2026-04-24 04:14:49 -04:00
Jose Diaz-Gonzalez
fc7ddf34ba fix(nginx): make post-create executable and guard empty port maps
The post-create trigger was not executable so plugn skipped it.
Also skip generating the 502 config when PROXY_PORT_MAP is empty
(e.g. after ports:clear) to avoid a sigil template index error.
2026-04-24 03:57:22 -04:00
Jose Diaz-Gonzalez
7529d8cb08 refactor(nginx): deduplicate sigil params in nginx_build_config
Merge the deployed and empty-listeners branches into a single flow
that shares the SIGIL_PARAMS array, temp dir setup, sigil rendering,
and nginx reload. Branch only for deployed-specific logic: image
verification, custom template lookup, per-process listeners, and HSTS.
2026-04-24 03:04:04 -04:00
Jose Diaz-Gonzalez
20f2100d46 docs: add 0.38.0 migration guide with nginx.conf.sigil update notes
Custom nginx.conf.sigil templates that reference DOKKU_APP_WEB_LISTENERS
may now receive an empty value when rendered for apps without running web
processes. The migration guide documents how to handle this with a
conditional in the template.
2026-04-24 02:54:22 -04:00
Jose Diaz-Gonzalez
5bf82d2585 docs: add note about when the new feature lands 2026-04-24 02:40:27 -04:00
Jose Diaz-Gonzalez
2993fa800c feat(nginx): generate 502 config for apps without web listeners
When an app has no web listeners (not yet deployed, no web process type,
or web processes not running), generate a minimal nginx config that
returns 502 Bad Gateway instead of having no config at all. This ensures
domains resolve, monitoring tools detect non-200 status codes, and SSL
certificate provisioning tools like letsencrypt can function.
2026-04-24 02:10:30 -04:00
Jose Diaz-Gonzalez
71ec612fbd Merge pull request #8486 from dokku/dependabot/pip/docs/_build/click-8.3.3
chore(deps): bump click from 8.3.2 to 8.3.3 in /docs/_build
2026-04-24 00:13:21 -04:00
Jose Diaz-Gonzalez
914be7276f Merge pull request #8492 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/fluxcd/pkg/kustomize-1.31.0
chore(deps): bump github.com/fluxcd/pkg/kustomize from 1.29.0 to 1.31.0 in /plugins/scheduler-k3s
2026-04-23 14:37:05 -04:00
dependabot[bot]
ae5cbe1e98 chore(deps): bump github.com/fluxcd/pkg/kustomize
Bumps [github.com/fluxcd/pkg/kustomize](https://github.com/fluxcd/pkg) from 1.29.0 to 1.31.0.
- [Commits](https://github.com/fluxcd/pkg/compare/kustomize/v1.29.0...kustomize/v1.31.0)

---
updated-dependencies:
- dependency-name: github.com/fluxcd/pkg/kustomize
  dependency-version: 1.31.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 13:54:54 +00:00
Jose Diaz-Gonzalez
ce45b8fca3 Merge pull request #8491 from dokku/dependabot/composer/tests/apps/php/heroku/heroku-buildpack-php-287
chore(deps-dev): bump heroku/heroku-buildpack-php from 285 to 287 in /tests/apps/php
2026-04-23 04:46:40 -04:00
Jose Diaz-Gonzalez
8cebe9270a Merge pull request #8489 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/traefik/traefik/v2-2.11.43
chore(deps): bump github.com/traefik/traefik/v2 from 2.11.42 to 2.11.43 in /plugins/scheduler-k3s
2026-04-23 04:46:16 -04:00
Jose Diaz-Gonzalez
6ad2e13f32 Merge pull request #8488 from dokku/dependabot/docker/plugins/logs/timberio/vector-0.55.0-debian
chore(deps): bump timberio/vector from 0.54.0-debian to 0.55.0-debian in /plugins/logs
2026-04-23 04:45:58 -04:00
Jose Diaz-Gonzalez
8721db17c2 Merge pull request #8487 from dokku/dependabot/docker/plugins/traefik-vhosts/traefik-v3.6.14
chore(deps): bump traefik from v3.6.13 to v3.6.14 in /plugins/traefik-vhosts
2026-04-23 04:45:26 -04:00
dependabot[bot]
9087d8d5d5 chore(deps-dev): bump heroku/heroku-buildpack-php in /tests/apps/php
Bumps [heroku/heroku-buildpack-php](https://github.com/heroku/heroku-buildpack-php) from 285 to 287.
- [Release notes](https://github.com/heroku/heroku-buildpack-php/releases)
- [Changelog](https://github.com/heroku/heroku-buildpack-php/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heroku/heroku-buildpack-php/compare/v285...v287)

---
updated-dependencies:
- dependency-name: heroku/heroku-buildpack-php
  dependency-version: '287'
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 05:12:06 +00:00
dependabot[bot]
3e417a15df chore(deps): bump github.com/traefik/traefik/v2
Bumps [github.com/traefik/traefik/v2](https://github.com/traefik/traefik) from 2.11.42 to 2.11.43.
- [Release notes](https://github.com/traefik/traefik/releases)
- [Changelog](https://github.com/traefik/traefik/blob/v2.11.43/CHANGELOG.md)
- [Commits](https://github.com/traefik/traefik/compare/v2.11.42...v2.11.43)

---
updated-dependencies:
- dependency-name: github.com/traefik/traefik/v2
  dependency-version: 2.11.43
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 05:11:15 +00:00
dependabot[bot]
66373a4ce8 chore(deps): bump timberio/vector in /plugins/logs
Bumps timberio/vector from 0.54.0-debian to 0.55.0-debian.

---
updated-dependencies:
- dependency-name: timberio/vector
  dependency-version: 0.55.0-debian
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 05:10:42 +00:00
dependabot[bot]
c3a5e59045 chore(deps): bump traefik in /plugins/traefik-vhosts
Bumps traefik from v3.6.13 to v3.6.14.

---
updated-dependencies:
- dependency-name: traefik
  dependency-version: v3.6.14
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 05:10:40 +00:00
dependabot[bot]
1024d65d8c chore(deps): bump click from 8.3.2 to 8.3.3 in /docs/_build
Bumps [click](https://github.com/pallets/click) from 8.3.2 to 8.3.3.
- [Release notes](https://github.com/pallets/click/releases)
- [Changelog](https://github.com/pallets/click/blob/8.3.3/CHANGES.rst)
- [Commits](https://github.com/pallets/click/compare/8.3.2...8.3.3)

---
updated-dependencies:
- dependency-name: click
  dependency-version: 8.3.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 05:10:17 +00:00
Jose Diaz-Gonzalez
80d2ed5aa3 Merge pull request #8478 from dokku/8477-omit-irrelevant-dep-bump-changelog-entries
chore: label test app dependency updates as type: tests
2026-04-23 01:09:21 -04:00
Jose Diaz-Gonzalez
f13501ae3e Merge pull request #8483 from dokku/dependabot/pip/docs/_build/markdown-gte-3.10.2-and-lt-3.11
chore(deps): update markdown requirement from <3.11,>=3.2.1 to >=3.10.2,<3.11 in /docs/_build
2026-04-22 13:56:52 -04:00
Jose Diaz-Gonzalez
621a9a218d Merge pull request #8485 from dokku/dependabot/go_modules/plugins/scheduler-k3s/k8s.io/kubectl-0.35.4
chore(deps): bump k8s.io/kubectl from 0.35.2 to 0.35.4 in /plugins/scheduler-k3s
2026-04-22 13:56:35 -04:00
dependabot[bot]
d487b595d4 chore(deps): bump k8s.io/kubectl in /plugins/scheduler-k3s
Bumps [k8s.io/kubectl](https://github.com/kubernetes/kubectl) from 0.35.2 to 0.35.4.
- [Commits](https://github.com/kubernetes/kubectl/compare/v0.35.2...v0.35.4)

---
updated-dependencies:
- dependency-name: k8s.io/kubectl
  dependency-version: 0.35.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-22 16:15:35 +00:00
Jose Diaz-Gonzalez
338bceb20e Merge pull request #8484 from dokku/dependabot/go_modules/plugins/scheduler-k3s/k8s.io/client-go-0.35.4
chore(deps): bump k8s.io/client-go from 0.35.2 to 0.35.4 in /plugins/scheduler-k3s
2026-04-22 12:13:36 -04:00
Jose Diaz-Gonzalez
107b5f5f0a Merge pull request #8482 from dokku/dependabot/docker/tests/apps/dockerfile-entrypoint/ruby-4.0.3
chore(deps): bump ruby from 4.0.2 to 4.0.3 in /tests/apps/dockerfile-entrypoint
2026-04-22 12:13:24 -04:00
dependabot[bot]
fe3d5c25dd chore(deps): bump k8s.io/client-go in /plugins/scheduler-k3s
Bumps [k8s.io/client-go](https://github.com/kubernetes/client-go) from 0.35.2 to 0.35.4.
- [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kubernetes/client-go/compare/v0.35.2...v0.35.4)

---
updated-dependencies:
- dependency-name: k8s.io/client-go
  dependency-version: 0.35.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-22 13:54:32 +00:00
dependabot[bot]
351ca493d3 chore(deps): update markdown requirement in /docs/_build
Updates the requirements on [markdown](https://github.com/Python-Markdown/markdown) to permit the latest version.
- [Release notes](https://github.com/Python-Markdown/markdown/releases)
- [Changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/changelog.md)
- [Commits](https://github.com/Python-Markdown/markdown/compare/3.2.1...3.10.2)

---
updated-dependencies:
- dependency-name: markdown
  dependency-version: 3.10.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-22 13:53:32 +00:00
dependabot[bot]
424ecb96dc chore(deps): bump ruby in /tests/apps/dockerfile-entrypoint
Bumps ruby from 4.0.2 to 4.0.3.

---
updated-dependencies:
- dependency-name: ruby
  dependency-version: 4.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-22 13:53:09 +00:00
Jose Diaz-Gonzalez
5f99b683ee Merge pull request #8481 from dokku/dependabot/pip/tests/apps/dockerfile-release/psycopg2-binary-2.9.12
chore(deps): bump psycopg2-binary from 2.9.11 to 2.9.12 in /tests/apps/dockerfile-release
2026-04-21 23:16:19 -04:00
Jose Diaz-Gonzalez
387bbf4c8a Merge pull request #8479 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/go-openapi/jsonpointer-0.23.1
chore(deps): bump github.com/go-openapi/jsonpointer from 0.23.0 to 0.23.1 in /plugins/scheduler-k3s
2026-04-21 23:16:10 -04:00
Jose Diaz-Gonzalez
0caab03276 Merge pull request #8480 from dokku/dependabot/go_modules/plugins/scheduler-k3s/k8s.io/kubernetes-1.35.4
chore(deps): bump k8s.io/kubernetes from 1.35.3 to 1.35.4 in /plugins/scheduler-k3s
2026-04-21 23:16:04 -04:00
dependabot[bot]
9dbaf34f99 chore(deps): bump psycopg2-binary in /tests/apps/dockerfile-release
Bumps [psycopg2-binary](https://github.com/psycopg/psycopg2) from 2.9.11 to 2.9.12.
- [Changelog](https://github.com/psycopg/psycopg2/blob/master/NEWS)
- [Commits](https://github.com/psycopg/psycopg2/compare/2.9.11...2.9.12)

---
updated-dependencies:
- dependency-name: psycopg2-binary
  dependency-version: 2.9.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-21 13:54:44 +00:00
dependabot[bot]
0ee28bf4c7 chore(deps): bump k8s.io/kubernetes in /plugins/scheduler-k3s
Bumps [k8s.io/kubernetes](https://github.com/kubernetes/kubernetes) from 1.35.3 to 1.35.4.
- [Release notes](https://github.com/kubernetes/kubernetes/releases)
- [Commits](https://github.com/kubernetes/kubernetes/compare/v1.35.3...v1.35.4)

---
updated-dependencies:
- dependency-name: k8s.io/kubernetes
  dependency-version: 1.35.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-20 16:18:29 +00:00
dependabot[bot]
d91ed9f683 chore(deps): bump github.com/go-openapi/jsonpointer
Bumps [github.com/go-openapi/jsonpointer](https://github.com/go-openapi/jsonpointer) from 0.23.0 to 0.23.1.
- [Release notes](https://github.com/go-openapi/jsonpointer/releases)
- [Commits](https://github.com/go-openapi/jsonpointer/compare/v0.23.0...v0.23.1)

---
updated-dependencies:
- dependency-name: github.com/go-openapi/jsonpointer
  dependency-version: 0.23.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-20 16:18:19 +00:00
Jose Diaz-Gonzalez
197dc69056 chore: label test app dependency updates as type: tests
Move dependabot entries for /tests/apps/ directories from the
"type: dependencies" label to "type: tests" so they appear under
the Tests section in the changelog instead of Dependencies.
2026-04-19 19:02:59 -04:00
Jose Diaz-Gonzalez
08596c9648 fix: skip app.json buildpacks for image-based deploys
When deploying via git:from-image, the source image may contain an
app.json with buildpacks entries that are not relevant. Check for
the source-image property and skip app.json buildpacks when set.
2026-04-18 20:29:05 -04:00
Jose Diaz-Gonzalez
b0b11bcf26 fix: remove buildpacks from dockerfile test app and add tests for app.json buildpacks
The buildpacks entry in tests/apps/dockerfile/app.json caused
the post-extract trigger to write a .buildpacks file during
Dockerfile-based deploys, breaking builder detection. Remove
the entry and add Go unit tests for getBuildpacks/validBuildpackURL,
a bats integration test for deploying with app.json buildpacks,
and documentation for the new feature.
2026-04-18 05:43:44 -04:00
Jose Diaz-Gonzalez
44dbbe6a34 fix: return buildpacks specified by the buildpacks plugin 2026-04-18 04:15:53 -04:00
Jose Diaz-Gonzalez
5a787af3ae feat: add support for specifying buildpacks via app.json
The order of detection is:

- buildpacks:set
- app.json
- .buildpacks
- auto-detected from codebase

Closes #7102
2026-04-18 04:15:51 -04:00
Dokku Bot
996d882310 Release 0.37.9
# History

## 0.37.9

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.37.9/bootstrap.sh
sudo DOKKU_TAG=v0.37.9 bash bootstrap.sh
```

### Dependencies

- #8473: @dependabot[bot] chore(deps): bump k8s.io/api from 0.35.2 to 0.35.4 in /plugins/scheduler-k3s
- #8474: @dependabot[bot] chore(deps): bump github.com/go-openapi/jsonpointer from 0.22.5 to 0.23.0 in /plugins/scheduler-k3s
- #8476: @dependabot[bot] chore(deps): bump github.com/go-acme/lego/v4 from 4.25.2 to 4.34.0 in /plugins/scheduler-k3s
- #8475: @dependabot[bot] chore(deps): bump github.com/moby/spdystream from 0.5.0 to 0.5.1 in /plugins/scheduler-k3s
2026-04-18 07:40:42 +00:00
Jose Diaz-Gonzalez
b686a8f8a4 Merge pull request #8473 from dokku/dependabot/go_modules/plugins/scheduler-k3s/k8s.io/api-0.35.4
chore(deps): bump k8s.io/api from 0.35.2 to 0.35.4 in /plugins/scheduler-k3s
2026-04-18 01:59:51 -04:00
Jose Diaz-Gonzalez
6806b1c17b Merge pull request #8474 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/go-openapi/jsonpointer-0.23.0
chore(deps): bump github.com/go-openapi/jsonpointer from 0.22.5 to 0.23.0 in /plugins/scheduler-k3s
2026-04-18 01:59:40 -04:00
Jose Diaz-Gonzalez
cacafbc181 Merge pull request #8476 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/go-acme/lego/v4-4.34.0
chore(deps): bump github.com/go-acme/lego/v4 from 4.25.2 to 4.34.0 in /plugins/scheduler-k3s
2026-04-18 01:59:15 -04:00
Jose Diaz-Gonzalez
71db1e24ec Merge pull request #8475 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/moby/spdystream-0.5.1
chore(deps): bump github.com/moby/spdystream from 0.5.0 to 0.5.1 in /plugins/scheduler-k3s
2026-04-16 17:48:03 -04:00
dependabot[bot]
2acfdbd7d4 chore(deps): bump github.com/go-acme/lego/v4 in /plugins/scheduler-k3s
Bumps [github.com/go-acme/lego/v4](https://github.com/go-acme/lego) from 4.25.2 to 4.34.0.
- [Release notes](https://github.com/go-acme/lego/releases)
- [Changelog](https://github.com/go-acme/lego/blob/master/CHANGELOG.md)
- [Commits](https://github.com/go-acme/lego/compare/v4.25.2...v4.34.0)

---
updated-dependencies:
- dependency-name: github.com/go-acme/lego/v4
  dependency-version: 4.34.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-16 21:31:12 +00:00
dependabot[bot]
fd6c2c5f62 chore(deps): bump github.com/moby/spdystream in /plugins/scheduler-k3s
Bumps [github.com/moby/spdystream](https://github.com/moby/spdystream) from 0.5.0 to 0.5.1.
- [Release notes](https://github.com/moby/spdystream/releases)
- [Commits](https://github.com/moby/spdystream/compare/v0.5.0...v0.5.1)

---
updated-dependencies:
- dependency-name: github.com/moby/spdystream
  dependency-version: 0.5.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-16 20:50:59 +00:00
dependabot[bot]
d1aeb04797 chore(deps): bump github.com/go-openapi/jsonpointer
Bumps [github.com/go-openapi/jsonpointer](https://github.com/go-openapi/jsonpointer) from 0.22.5 to 0.23.0.
- [Release notes](https://github.com/go-openapi/jsonpointer/releases)
- [Commits](https://github.com/go-openapi/jsonpointer/compare/v0.22.5...v0.23.0)

---
updated-dependencies:
- dependency-name: github.com/go-openapi/jsonpointer
  dependency-version: 0.23.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-16 13:54:30 +00:00
dependabot[bot]
5923689e32 chore(deps): bump k8s.io/api in /plugins/scheduler-k3s
Bumps [k8s.io/api](https://github.com/kubernetes/api) from 0.35.2 to 0.35.4.
- [Commits](https://github.com/kubernetes/api/compare/v0.35.2...v0.35.4)

---
updated-dependencies:
- dependency-name: k8s.io/api
  dependency-version: 0.35.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-16 13:54:26 +00:00
Dokku Bot
a4cf06bd15 Release 0.37.8
# History

## 0.37.8

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.37.8/bootstrap.sh
sudo DOKKU_TAG=v0.37.8 bash bootstrap.sh
```

### Bug Fixes

- #8451: @mykolasolodukha Fix client prepending `--app` for non-app commands

### New Features

- #8443: @chemicalkosek Add application/graphql-response+json to nginx gzip_types

### Dependencies

- #8470: @dependabot[bot] chore(deps): bump packaging from 26.0 to 26.1 in /docs/_build
- #8471: @dependabot[bot] chore(deps): bump k8s.io/kubernetes from 1.35.0 to 1.35.3 in /plugins/scheduler-k3s
- #8472: @dependabot[bot] chore(deps): bump k8s.io/apimachinery from 0.35.2 to 0.35.3 in /plugins/scheduler-k3s
- #8413: @dependabot[bot] chore(deps): bump github.com/fluxcd/pkg/kustomize from 1.24.0 to 1.28.0 in /plugins/scheduler-k3s
- #8425: @dependabot[bot] chore(deps): bump github.com/cert-manager/cert-manager from 1.19.3 to 1.20.0 in /plugins/scheduler-k3s
- #8469: @dependabot[bot] chore(deps): bump zipp from 3.23.0 to 3.23.1 in /docs/_build
- #8450: @dependabot[bot] chore(deps): bump mvdan.cc/sh/v3 from 3.13.0 to 3.13.1 in /plugins/cron
- #8465: @dependabot[bot] chore(deps): bump github.com/joho/godotenv from 1.2.0 to 1.5.1 in /plugins/config
- #8463: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.49.0 to 0.50.0 in /plugins/common
- #8449: @dependabot[bot] chore(deps): bump click from 8.3.1 to 8.3.2 in /docs/_build
- #8464: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.20.1 to 3.20.2 in /plugins/scheduler-k3s
- #8458: @dependabot[bot] chore(deps): bump traefik from v3.6.12 to v3.6.13 in /plugins/traefik-vhosts
- #8457: @dependabot[bot] chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/zombies-dockerfile-no-tini
- #8456: @dependabot[bot] chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/go-fail-postdeploy
- #8455: @dependabot[bot] chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/gogrpc
- #8454: @dependabot[bot] chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/zombies-dockerfile-tini
- #8453: @dependabot[bot] chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/go-fail-predeploy
- #8452: @dependabot[bot] chore(deps): bump rack-session from 2.1.1 to 2.1.2 in /tests/apps/ruby
- #8459: @dependabot[bot] chore(deps): bump django from 5.2.12 to 5.2.13 in /tests/apps/dockerfile-release
- #8444: @dependabot[bot] chore(deps): bump rack from 3.2.5 to 3.2.6 in /tests/apps/ruby
- #8445: @dependabot[bot] chore(deps): bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 in /plugins/scheduler-k3s
- #8447: @dependabot[bot] chore(deps): bump werkzeug from 3.1.7 to 3.1.8 in /tests/apps/python-flask
- #8440: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.21 to 10.21.2 in /docs/_build
- #8441: @dependabot[bot] chore(deps): bump pygments from 2.19.2 to 2.20.0 in /docs/_build
- #8442: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.79.3 to 1.80.0 in /tests/apps/gogrpc
- #8410: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.48.0 to 0.49.0 in /plugins/common
- #8422: @dependabot[bot] chore(deps): bump github.com/fatih/color from 1.18.0 to 1.19.0 in /plugins/common
- #8434: @dependabot[bot] chore(deps): bump gunicorn from 25.2.0 to 25.3.0 in /tests/apps/python-flask
- #8439: @dependabot[bot] chore(deps): bump brace-expansion from 1.1.12 to 1.1.13 in /tests/apps/multi
- #8438: @dependabot[bot] chore(deps): bump path-to-regexp from 8.2.0 to 8.4.0 in /tests/apps/checks-root
- #8437: @dependabot[bot] chore(deps): bump gunicorn from 25.2.0 to 25.3.0 in /tests/apps/dockerfile-release
- #8436: @dependabot[bot] chore(deps): bump traefik from v3.6.11 to v3.6.12 in /plugins/traefik-vhosts
- #8435: @dependabot[bot] chore(deps): bump gunicorn from 25.2.0 to 25.3.0 in /tests/apps/multi
- #8427: @dependabot[bot] chore(deps): bump werkzeug from 3.1.6 to 3.1.7 in /tests/apps/python-flask
- #8428: @dependabot[bot] chore(deps): bump gunicorn from 25.1.0 to 25.2.0 in /tests/apps/multi
- #8429: @dependabot[bot] chore(deps): bump gunicorn from 25.1.0 to 25.2.0 in /tests/apps/python-flask
- #8430: @dependabot[bot] chore(deps): bump djangorestframework from 3.17.0 to 3.17.1 in /tests/apps/dockerfile-release
- #8431: @dependabot[bot] chore(deps): bump gunicorn from 25.1.0 to 25.2.0 in /tests/apps/dockerfile-release
- #8432: @dependabot[bot] chore(deps): bump picomatch from 2.3.1 to 2.3.2 in /tests/apps/multi
- #8423: @dependabot[bot] chore(deps): bump traefik from v3.6.10 to v3.6.11 in /plugins/traefik-vhosts
- #8420: @dependabot[bot] chore(deps): bump mkdocs-material from 9.7.5 to 9.7.6 in /docs/_build
- #8421: @dependabot[bot] chore(deps): bump importlib-metadata from 8.8.0 to 9.0.0 in /docs/_build
- #8424: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.40 to 2.11.41 in /plugins/scheduler-k3s
- #8411: @dependabot[bot] chore(deps): bump lucaslorentz/caddy-docker-proxy from 2.11 to 2.12 in /plugins/caddy-vhosts
- #8412: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.20.0 to 3.20.1 in /plugins/scheduler-k3s
- #8419: @dependabot[bot] chore(deps): bump djangorestframework from 3.16.1 to 3.17.0 in /tests/apps/dockerfile-release
- #8418: @dependabot[bot] chore(deps): bump importlib-metadata from 8.7.1 to 8.8.0 in /docs/_build
- #8417: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.77.0-dev to 1.79.3 in /plugins/scheduler-k3s
- #8416: @dependabot[bot] chore(deps): bump ruby from 4.0.1 to 4.0.2 in /tests/apps/dockerfile-entrypoint
- #8415: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.79.2 to 1.79.3 in /tests/apps/gogrpc
- #8409: @dependabot[bot] chore(deps): bump github.com/go-openapi/jsonpointer from 0.22.4 to 0.22.5 in /plugins/scheduler-k3s
- #8408: @dependabot[bot] chore(deps): bump github.com/go-resty/resty/v2 from 2.17.1 to 2.17.2 in /plugins/scheduler-k3s
- #8407: @dependabot[bot] chore(deps): bump mkdocs-material from 9.7.4 to 9.7.5 in /docs/_build
- #8406: @dependabot[bot] chore(deps): bump timberio/vector from 0.53.0-debian to 0.54.0-debian in /plugins/logs

### Other

- #8468: @josegonzalez chore: bump dependencies in tests/apps/php
- #8467: @josegonzalez chore: upgrade traefik from v2.11.41 to v2.11.42
- #8466: @josegonzalez chore: bump dependencies in tests/apps/multi
2026-04-16 04:12:27 +00:00
Jose Diaz-Gonzalez
f2933b864c Merge pull request #8470 from dokku/dependabot/pip/docs/_build/packaging-26.1
chore(deps): bump packaging from 26.0 to 26.1 in /docs/_build
2026-04-15 17:44:25 -04:00
Jose Diaz-Gonzalez
17656052f9 Merge pull request #8471 from dokku/dependabot/go_modules/plugins/scheduler-k3s/k8s.io/kubernetes-1.35.3
chore(deps): bump k8s.io/kubernetes from 1.35.0 to 1.35.3 in /plugins/scheduler-k3s
2026-04-15 17:42:37 -04:00
Jose Diaz-Gonzalez
b3853cfa3c Merge pull request #8472 from dokku/dependabot/go_modules/plugins/scheduler-k3s/k8s.io/apimachinery-0.35.3
chore(deps): bump k8s.io/apimachinery from 0.35.2 to 0.35.3 in /plugins/scheduler-k3s
2026-04-15 17:42:26 -04:00
dependabot[bot]
f6e2ecca1a chore(deps): bump k8s.io/apimachinery in /plugins/scheduler-k3s
Bumps [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) from 0.35.2 to 0.35.3.
- [Commits](https://github.com/kubernetes/apimachinery/compare/v0.35.2...v0.35.3)

---
updated-dependencies:
- dependency-name: k8s.io/apimachinery
  dependency-version: 0.35.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-15 13:54:54 +00:00
dependabot[bot]
2e605b6e0f chore(deps): bump k8s.io/kubernetes in /plugins/scheduler-k3s
Bumps [k8s.io/kubernetes](https://github.com/kubernetes/kubernetes) from 1.35.0 to 1.35.3.
- [Release notes](https://github.com/kubernetes/kubernetes/releases)
- [Commits](https://github.com/kubernetes/kubernetes/compare/v1.35.0...v1.35.3)

---
updated-dependencies:
- dependency-name: k8s.io/kubernetes
  dependency-version: 1.35.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-15 13:54:45 +00:00
dependabot[bot]
62da542f20 chore(deps): bump packaging from 26.0 to 26.1 in /docs/_build
Bumps [packaging](https://github.com/pypa/packaging) from 26.0 to 26.1.
- [Release notes](https://github.com/pypa/packaging/releases)
- [Changelog](https://github.com/pypa/packaging/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pypa/packaging/compare/26.0...26.1)

---
updated-dependencies:
- dependency-name: packaging
  dependency-version: '26.1'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-15 13:53:35 +00:00
Jose Diaz-Gonzalez
53dfce384e Merge pull request #8413 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/fluxcd/pkg/kustomize-1.28.0
chore(deps): bump github.com/fluxcd/pkg/kustomize from 1.24.0 to 1.28.0 in /plugins/scheduler-k3s
2026-04-14 12:34:19 -04:00
dependabot[bot]
ded1a88f48 chore(deps): bump github.com/fluxcd/pkg/kustomize
Bumps [github.com/fluxcd/pkg/kustomize](https://github.com/fluxcd/pkg) from 1.24.0 to 1.28.0.
- [Commits](https://github.com/fluxcd/pkg/compare/apis/meta/v1.24.0...kustomize/v1.28.0)

---
updated-dependencies:
- dependency-name: github.com/fluxcd/pkg/kustomize
  dependency-version: 1.28.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-14 14:42:44 +00:00
Jose Diaz-Gonzalez
6fc840a1df Merge pull request #8425 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/cert-manager/cert-manager-1.20.0
chore(deps): bump github.com/cert-manager/cert-manager from 1.19.3 to 1.20.0 in /plugins/scheduler-k3s
2026-04-14 10:41:30 -04:00
Jose Diaz-Gonzalez
a8b30502d0 Merge pull request #8468 from dokku/dependencies/tests/apps/php
chore: bump dependencies in tests/apps/php
2026-04-14 10:41:11 -04:00
Jose Diaz-Gonzalez
2d3ce9b0b2 Merge pull request #8469 from dokku/dependabot/pip/docs/_build/zipp-3.23.1
chore(deps): bump zipp from 3.23.0 to 3.23.1 in /docs/_build
2026-04-14 10:40:51 -04:00
dependabot[bot]
207ffedc47 chore(deps): bump zipp from 3.23.0 to 3.23.1 in /docs/_build
Bumps [zipp](https://github.com/jaraco/zipp) from 3.23.0 to 3.23.1.
- [Release notes](https://github.com/jaraco/zipp/releases)
- [Changelog](https://github.com/jaraco/zipp/blob/main/NEWS.rst)
- [Commits](https://github.com/jaraco/zipp/compare/v3.23.0...v3.23.1)

---
updated-dependencies:
- dependency-name: zipp
  dependency-version: 3.23.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-14 13:53:41 +00:00
Jose Diaz-Gonzalez
2d6ba95888 fix(deps): pin controller-runtime to v0.22.4 for keda compatibility
KEDA v2.18.3 webhook code is incompatible with controller-runtime
v0.23.x which was pulled in by the cert-manager v1.20.0 upgrade.
2026-04-14 05:04:11 -04:00
dependabot[bot]
59d20f4b59 chore(deps): bump github.com/cert-manager/cert-manager
Bumps [github.com/cert-manager/cert-manager](https://github.com/cert-manager/cert-manager) from 1.19.3 to 1.20.0.
- [Release notes](https://github.com/cert-manager/cert-manager/releases)
- [Changelog](https://github.com/cert-manager/cert-manager/blob/master/RELEASE.md)
- [Commits](https://github.com/cert-manager/cert-manager/compare/v1.19.3...v1.20.0)

---
updated-dependencies:
- dependency-name: github.com/cert-manager/cert-manager
  dependency-version: 1.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-14 04:49:17 -04:00
Jose Diaz-Gonzalez
d191c1d6e9 chore: bump dependencies in tests/apps/php 2026-04-14 04:41:48 -04:00
Jose Diaz-Gonzalez
e1f592496c Merge pull request #8467 from dokku/dependencies/plugins/scheduler-k3s/go.mod
chore: upgrade traefik from v2.11.41 to v2.11.42
2026-04-14 04:30:49 -04:00
Jose Diaz-Gonzalez
80e687e159 chore: upgrade traefik from v2.11.41 to v2.11.42 2026-04-14 04:29:54 -04:00
Jose Diaz-Gonzalez
abeeeccf9f Merge pull request #8450 from dokku/dependabot/go_modules/plugins/cron/mvdan.cc/sh/v3-3.13.1
chore(deps): bump mvdan.cc/sh/v3 from 3.13.0 to 3.13.1 in /plugins/cron
2026-04-14 04:24:43 -04:00
Jose Diaz-Gonzalez
8f26660f9b Merge pull request #8466 from dokku/update-multi-packages
chore: bump dependencies in tests/apps/multi
2026-04-14 04:23:19 -04:00
Jose Diaz-Gonzalez
daaf6a11b6 chore: bump go modules 2026-04-14 03:16:56 -04:00
dependabot[bot]
daef410a23 chore(deps): bump mvdan.cc/sh/v3 from 3.13.0 to 3.13.1 in /plugins/cron
Bumps [mvdan.cc/sh/v3](https://github.com/mvdan/sh) from 3.13.0 to 3.13.1.
- [Release notes](https://github.com/mvdan/sh/releases)
- [Changelog](https://github.com/mvdan/sh/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mvdan/sh/compare/v3.13.0...v3.13.1)

---
updated-dependencies:
- dependency-name: mvdan.cc/sh/v3
  dependency-version: 3.13.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-14 03:16:44 -04:00
Jose Diaz-Gonzalez
9b92c59a47 Merge pull request #8465 from dokku/dependabot/go_modules/plugins/config/github.com/joho/godotenv-1.5.1
chore(deps): bump github.com/joho/godotenv from 1.2.0 to 1.5.1 in /plugins/config
2026-04-14 03:16:07 -04:00
Jose Diaz-Gonzalez
be14329b9a chore: bump dependencies in tests/apps/multi
While not in the build path, we should try and avoid unsupported dependencies where possible.
2026-04-14 03:14:11 -04:00
Jose Diaz-Gonzalez
e04f285c00 Merge pull request #8463 from dokku/dependabot/go_modules/plugins/common/golang.org/x/crypto-0.50.0
chore(deps): bump golang.org/x/crypto from 0.49.0 to 0.50.0 in /plugins/common
2026-04-14 02:12:29 -04:00
Jose Diaz-Gonzalez
bbcac75b73 Merge pull request #8451 from mykolasolodukha/fix/client-network-commands-app-prepend
Fix client prepending `--app` for non-app commands
2026-04-14 01:35:08 -04:00
Jose Diaz-Gonzalez
fbce6c8ec9 chore: bump go modules 2026-04-14 01:33:08 -04:00
Jose Diaz-Gonzalez
f7161cde90 chore: bump go modules 2026-04-14 01:30:35 -04:00
dependabot[bot]
66e38b1ec4 chore(deps): bump golang.org/x/crypto in /plugins/common
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.49.0 to 0.50.0.
- [Commits](https://github.com/golang/crypto/compare/v0.49.0...v0.50.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.50.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-14 01:29:09 -04:00
dependabot[bot]
81d42b2873 chore(deps): bump github.com/joho/godotenv in /plugins/config
Bumps [github.com/joho/godotenv](https://github.com/joho/godotenv) from 1.2.0 to 1.5.1.
- [Release notes](https://github.com/joho/godotenv/releases)
- [Commits](https://github.com/joho/godotenv/compare/v1.2.0...v1.5.1)

---
updated-dependencies:
- dependency-name: github.com/joho/godotenv
  dependency-version: 1.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-13 15:02:43 +00:00
Jose Diaz-Gonzalez
83659b3e21 Merge pull request #8449 from dokku/dependabot/pip/docs/_build/click-8.3.2
chore(deps): bump click from 8.3.1 to 8.3.2 in /docs/_build
2026-04-11 01:30:53 -04:00
Jose Diaz-Gonzalez
fc0eedc853 Merge pull request #8464 from dokku/dependabot/go_modules/plugins/scheduler-k3s/helm.sh/helm/v3-3.20.2
chore(deps): bump helm.sh/helm/v3 from 3.20.1 to 3.20.2 in /plugins/scheduler-k3s
2026-04-10 21:36:49 -04:00
dependabot[bot]
b7f29b4ce4 chore(deps): bump helm.sh/helm/v3 in /plugins/scheduler-k3s
Bumps [helm.sh/helm/v3](https://github.com/helm/helm) from 3.20.1 to 3.20.2.
- [Release notes](https://github.com/helm/helm/releases)
- [Commits](https://github.com/helm/helm/compare/v3.20.1...v3.20.2)

---
updated-dependencies:
- dependency-name: helm.sh/helm/v3
  dependency-version: 3.20.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 18:22:56 +00:00
Jose Diaz-Gonzalez
35ded52402 Merge pull request #8458 from dokku/dependabot/docker/plugins/traefik-vhosts/traefik-v3.6.13
chore(deps): bump traefik from v3.6.12 to v3.6.13 in /plugins/traefik-vhosts
2026-04-08 17:51:58 -04:00
Jose Diaz-Gonzalez
b7c921ce32 Merge pull request #8457 from dokku/dependabot/docker/tests/apps/zombies-dockerfile-no-tini/golang-1.26.2
chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/zombies-dockerfile-no-tini
2026-04-08 17:51:43 -04:00
Jose Diaz-Gonzalez
75642a9fe1 Merge pull request #8456 from dokku/dependabot/docker/tests/apps/go-fail-postdeploy/golang-1.26.2
chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/go-fail-postdeploy
2026-04-08 17:51:32 -04:00
Jose Diaz-Gonzalez
f2770f6301 Merge pull request #8455 from dokku/dependabot/docker/tests/apps/gogrpc/golang-1.26.2
chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/gogrpc
2026-04-08 17:49:33 -04:00
Jose Diaz-Gonzalez
6feabe15b9 Merge pull request #8454 from dokku/dependabot/docker/tests/apps/zombies-dockerfile-tini/golang-1.26.2
chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/zombies-dockerfile-tini
2026-04-08 17:49:08 -04:00
Jose Diaz-Gonzalez
af03d9eb08 Merge pull request #8453 from dokku/dependabot/docker/tests/apps/go-fail-predeploy/golang-1.26.2
chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/go-fail-predeploy
2026-04-08 17:48:47 -04:00
Jose Diaz-Gonzalez
96ef28539e Merge pull request #8452 from dokku/dependabot/bundler/tests/apps/ruby/rack-session-2.1.2
chore(deps): bump rack-session from 2.1.1 to 2.1.2 in /tests/apps/ruby
2026-04-08 17:48:37 -04:00
Jose Diaz-Gonzalez
66cf13786a Merge pull request #8459 from dokku/dependabot/pip/tests/apps/dockerfile-release/django-5.2.13
chore(deps): bump django from 5.2.12 to 5.2.13 in /tests/apps/dockerfile-release
2026-04-08 17:48:09 -04:00
dependabot[bot]
c0644644f4 chore(deps): bump django in /tests/apps/dockerfile-release
Bumps [django](https://github.com/django/django) from 5.2.12 to 5.2.13.
- [Commits](https://github.com/django/django/compare/5.2.12...5.2.13)

---
updated-dependencies:
- dependency-name: django
  dependency-version: 5.2.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 13:56:09 +00:00
dependabot[bot]
eaaafcd605 chore(deps): bump traefik in /plugins/traefik-vhosts
Bumps traefik from v3.6.12 to v3.6.13.

---
updated-dependencies:
- dependency-name: traefik
  dependency-version: v3.6.13
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 13:55:07 +00:00
dependabot[bot]
8a0443dc37 chore(deps): bump golang in /tests/apps/zombies-dockerfile-no-tini
Bumps golang from 1.26.1 to 1.26.2.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 13:53:30 +00:00
dependabot[bot]
f4c224f464 chore(deps): bump golang in /tests/apps/go-fail-postdeploy
Bumps golang from 1.26.1 to 1.26.2.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 13:53:26 +00:00
dependabot[bot]
88c25ef9fd chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/gogrpc
Bumps golang from 1.26.1 to 1.26.2.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 13:53:24 +00:00
dependabot[bot]
1735efc9ea chore(deps): bump golang in /tests/apps/zombies-dockerfile-tini
Bumps golang from 1.26.1 to 1.26.2.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 13:53:17 +00:00
dependabot[bot]
a8e4323693 chore(deps): bump golang in /tests/apps/go-fail-predeploy
Bumps golang from 1.26.1 to 1.26.2.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 13:53:10 +00:00
dependabot[bot]
bc9140a2fe chore(deps): bump rack-session from 2.1.1 to 2.1.2 in /tests/apps/ruby
Bumps [rack-session](https://github.com/rack/rack-session) from 2.1.1 to 2.1.2.
- [Release notes](https://github.com/rack/rack-session/releases)
- [Changelog](https://github.com/rack/rack-session/blob/main/releases.md)
- [Commits](https://github.com/rack/rack-session/compare/v2.1.1...v2.1.2)

---
updated-dependencies:
- dependency-name: rack-session
  dependency-version: 2.1.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 03:50:58 +00:00
Mykola Solodukha
50e383f061 ✏️ Fix random_name → fn-random-name in apps:create retry loop
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 22:09:06 +03:00
Mykola Solodukha
b548eb00ca 🐛 Add missing global commands to client --app exclusion whitelist
Add `domains:clear-global`, `logs:vector-*`, and `scheduler-k3s`
cluster, profile, and system commands that take resource names
instead of app names as their first argument.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 22:08:52 +03:00
Mykola Solodukha
42af3c4a6e 🐛 Prevent client from prepending --app for network commands
The dokku client auto-detects the app name from the git remote
and prepends `--app <name>` to all SSH commands not explicitly
excluded. Network commands like `network:create` take a network
name (not an app name) as their first argument, so the injected
app name was being used as the network name instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 21:01:11 +03:00
dependabot[bot]
f251007d0d chore(deps): bump click from 8.3.1 to 8.3.2 in /docs/_build
Bumps [click](https://github.com/pallets/click) from 8.3.1 to 8.3.2.
- [Release notes](https://github.com/pallets/click/releases)
- [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/click/compare/8.3.1...8.3.2)

---
updated-dependencies:
- dependency-name: click
  dependency-version: 8.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-06 13:53:32 +00:00
Jose Diaz-Gonzalez
3140b680da Merge pull request #8444 from dokku/dependabot/bundler/tests/apps/ruby/rack-3.2.6
Some checks failed
CI / check-commit (push) Successful in -1s
CodeQL / Analyze (go) (push) Failing after 1m2s
docs / deploy (push) Failing after 15m9s
lint / hadolint (push) Successful in 39s
lint / markdown-lint (push) Successful in 11m6s
lint / packer (push) Failing after 59s
lint / shellcheck (push) Successful in 38s
lint / shfmt (push) Successful in 6m37s
lint / yamllint (push) Failing after 2s
CI / build (push) Failing after 15m46s
CI / build-image.linux/amd64 (push) Has been skipped
CI / build-image.linux/arm64 (push) Has been skipped
CI / unit.${{ matrix.index }} (push) Has been skipped
CI / docker (push) Has been skipped
CI / go.0 (push) Has been skipped
CI / go.1 (push) Has been skipped
CI / go.2 (push) Has been skipped
CI / go.3 (push) Has been skipped
CI / publish-test-results (push) Has been skipped
chore(deps): bump rack from 3.2.5 to 3.2.6 in /tests/apps/ruby
2026-04-04 06:01:15 -04:00
Jose Diaz-Gonzalez
08ffda6344 Merge pull request #8445 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/go-jose/go-jose/v4-4.1.4
chore(deps): bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 in /plugins/scheduler-k3s
2026-04-04 05:59:32 -04:00
Jose Diaz-Gonzalez
d29863ac92 Merge pull request #8447 from dokku/dependabot/pip/tests/apps/python-flask/werkzeug-3.1.8
chore(deps): bump werkzeug from 3.1.7 to 3.1.8 in /tests/apps/python-flask
2026-04-04 05:59:22 -04:00
dependabot[bot]
c576e1cd4b chore(deps): bump werkzeug in /tests/apps/python-flask
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.1.7 to 3.1.8.
- [Release notes](https://github.com/pallets/werkzeug/releases)
- [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/werkzeug/compare/3.1.7...3.1.8)

---
updated-dependencies:
- dependency-name: werkzeug
  dependency-version: 3.1.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-03 13:52:26 +00:00
dependabot[bot]
ae70303845 chore(deps): bump github.com/go-jose/go-jose/v4
Bumps [github.com/go-jose/go-jose/v4](https://github.com/go-jose/go-jose) from 4.1.3 to 4.1.4.
- [Release notes](https://github.com/go-jose/go-jose/releases)
- [Commits](https://github.com/go-jose/go-jose/compare/v4.1.3...v4.1.4)

---
updated-dependencies:
- dependency-name: github.com/go-jose/go-jose/v4
  dependency-version: 4.1.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-03 04:15:55 +00:00
dependabot[bot]
8a2b907d3b chore(deps): bump rack from 3.2.5 to 3.2.6 in /tests/apps/ruby
Bumps [rack](https://github.com/rack/rack) from 3.2.5 to 3.2.6.
- [Release notes](https://github.com/rack/rack/releases)
- [Changelog](https://github.com/rack/rack/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rack/rack/compare/v3.2.5...v3.2.6)

---
updated-dependencies:
- dependency-name: rack
  dependency-version: 3.2.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-02 19:00:59 +00:00
Jose Diaz-Gonzalez
bf8c89023f Merge pull request #8440 from dokku/dependabot/pip/docs/_build/pymdown-extensions-10.21.2
chore(deps): bump pymdown-extensions from 10.21 to 10.21.2 in /docs/_build
2026-04-02 06:03:14 -04:00
dependabot[bot]
fd40138053 chore(deps): bump pymdown-extensions in /docs/_build
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.21 to 10.21.2.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.21...10.21.2)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-version: 10.21.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-02 09:57:07 +00:00
Jose Diaz-Gonzalez
e0b7548605 Merge pull request #8441 from dokku/dependabot/pip/docs/_build/pygments-2.20.0
chore(deps): bump pygments from 2.19.2 to 2.20.0 in /docs/_build
2026-04-02 05:55:51 -04:00
Jose Diaz-Gonzalez
4dbaeef458 Merge pull request #8442 from dokku/dependabot/go_modules/tests/apps/gogrpc/google.golang.org/grpc-1.80.0
chore(deps): bump google.golang.org/grpc from 1.79.3 to 1.80.0 in /tests/apps/gogrpc
2026-04-02 05:55:43 -04:00
Jose Diaz-Gonzalez
2cbf09ef08 Merge pull request #8443 from chemicalkosek/patch-1
Add application/graphql-response+json to nginx gzip_types
2026-04-02 05:51:06 -04:00
chemicalkosek
a0fb569151 Add application/graphql-response+json to nginx gzip_types
GraphQL servers like Yoga v5 and Apollo Server 4 use the application/graphql-response+json content type per the GraphQL-over-HTTP spec (IANA registered). Without this in gzip_types, nginx silently skips compression for all GraphQL responses, sending megabytes of uncompressed JSON over the wire.
2026-04-02 11:27:47 +02:00
dependabot[bot]
63f339fe0e chore(deps): bump google.golang.org/grpc in /tests/apps/gogrpc
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.79.3 to 1.80.0.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.79.3...v1.80.0)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.80.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-01 17:32:07 +00:00
dependabot[bot]
c341cd62e0 chore(deps): bump pygments from 2.19.2 to 2.20.0 in /docs/_build
Bumps [pygments](https://github.com/pygments/pygments) from 2.19.2 to 2.20.0.
- [Release notes](https://github.com/pygments/pygments/releases)
- [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES)
- [Commits](https://github.com/pygments/pygments/compare/2.19.2...2.20.0)

---
updated-dependencies:
- dependency-name: pygments
  dependency-version: 2.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-30 15:09:17 +00:00
Jose Diaz-Gonzalez
a695cf63ea Merge pull request #8410 from dokku/dependabot/go_modules/plugins/common/golang.org/x/crypto-0.49.0
chore(deps): bump golang.org/x/crypto from 0.48.0 to 0.49.0 in /plugins/common
2026-03-29 04:23:06 -04:00
dependabot[bot]
99021b3ba9 chore(deps): bump golang.org/x/crypto in /plugins/common
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.48.0 to 0.49.0.
- [Commits](https://github.com/golang/crypto/compare/v0.48.0...v0.49.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.49.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-29 03:20:16 -04:00
Jose Diaz-Gonzalez
ace2e33d95 Merge pull request #8422 from dokku/dependabot/go_modules/plugins/common/github.com/fatih/color-1.19.0
chore(deps): bump github.com/fatih/color from 1.18.0 to 1.19.0 in /plugins/common
2026-03-29 03:18:02 -04:00
Jose Diaz-Gonzalez
cdac6675e1 chore: bump go modules 2026-03-29 02:43:06 -04:00
dependabot[bot]
b17756f9da chore(deps): bump github.com/fatih/color in /plugins/common
Bumps [github.com/fatih/color](https://github.com/fatih/color) from 1.18.0 to 1.19.0.
- [Release notes](https://github.com/fatih/color/releases)
- [Commits](https://github.com/fatih/color/compare/v1.18.0...v1.19.0)

---
updated-dependencies:
- dependency-name: github.com/fatih/color
  dependency-version: 1.19.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-29 02:35:55 -04:00
Jose Diaz-Gonzalez
4e6560c57c Merge pull request #8434 from dokku/dependabot/pip/tests/apps/python-flask/gunicorn-25.3.0
chore(deps): bump gunicorn from 25.2.0 to 25.3.0 in /tests/apps/python-flask
2026-03-29 02:29:13 -04:00
Jose Diaz-Gonzalez
dbe65409dc Merge pull request #8439 from dokku/dependabot/npm_and_yarn/tests/apps/multi/brace-expansion-1.1.13
chore(deps): bump brace-expansion from 1.1.12 to 1.1.13 in /tests/apps/multi
2026-03-29 02:28:59 -04:00
dependabot[bot]
4dee5d5582 chore(deps): bump brace-expansion in /tests/apps/multi
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.12 to 1.1.13.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v1.1.13)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.13
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-29 05:21:54 +00:00
dependabot[bot]
6fecd1f0ea chore(deps): bump gunicorn in /tests/apps/python-flask
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.2.0 to 25.3.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.2.0...25.3.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-29 04:53:24 +00:00
Jose Diaz-Gonzalez
c35a17f648 Merge pull request #8438 from dokku/dependabot/npm_and_yarn/tests/apps/checks-root/path-to-regexp-8.4.0
chore(deps): bump path-to-regexp from 8.2.0 to 8.4.0 in /tests/apps/checks-root
2026-03-29 00:52:28 -04:00
Jose Diaz-Gonzalez
6536ad4c41 Merge pull request #8437 from dokku/dependabot/pip/tests/apps/dockerfile-release/gunicorn-25.3.0
chore(deps): bump gunicorn from 25.2.0 to 25.3.0 in /tests/apps/dockerfile-release
2026-03-29 00:52:21 -04:00
Jose Diaz-Gonzalez
defd041976 Merge pull request #8436 from dokku/dependabot/docker/plugins/traefik-vhosts/traefik-v3.6.12
chore(deps): bump traefik from v3.6.11 to v3.6.12 in /plugins/traefik-vhosts
2026-03-29 00:52:14 -04:00
Jose Diaz-Gonzalez
8d4cf7eadb Merge pull request #8435 from dokku/dependabot/pip/tests/apps/multi/gunicorn-25.3.0
chore(deps): bump gunicorn from 25.2.0 to 25.3.0 in /tests/apps/multi
2026-03-29 00:52:06 -04:00
Jose Diaz-Gonzalez
2f4d8f7014 Merge pull request #8427 from dokku/dependabot/pip/tests/apps/python-flask/werkzeug-3.1.7
chore(deps): bump werkzeug from 3.1.6 to 3.1.7 in /tests/apps/python-flask
2026-03-29 00:51:33 -04:00
dependabot[bot]
1a6034ebca chore(deps): bump path-to-regexp in /tests/apps/checks-root
Bumps [path-to-regexp](https://github.com/pillarjs/path-to-regexp) from 8.2.0 to 8.4.0.
- [Release notes](https://github.com/pillarjs/path-to-regexp/releases)
- [Changelog](https://github.com/pillarjs/path-to-regexp/blob/master/History.md)
- [Commits](https://github.com/pillarjs/path-to-regexp/compare/v8.2.0...v8.4.0)

---
updated-dependencies:
- dependency-name: path-to-regexp
  dependency-version: 8.4.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-28 08:50:01 +00:00
dependabot[bot]
a5b806661e chore(deps): bump gunicorn in /tests/apps/dockerfile-release
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.2.0 to 25.3.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.2.0...25.3.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 13:54:41 +00:00
dependabot[bot]
fce2e9c818 chore(deps): bump traefik in /plugins/traefik-vhosts
Bumps traefik from v3.6.11 to v3.6.12.

---
updated-dependencies:
- dependency-name: traefik
  dependency-version: v3.6.12
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 13:53:52 +00:00
dependabot[bot]
62b7e5f06a chore(deps): bump gunicorn from 25.2.0 to 25.3.0 in /tests/apps/multi
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.2.0 to 25.3.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.2.0...25.3.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 13:52:33 +00:00
dependabot[bot]
c85691cbda chore(deps): bump werkzeug in /tests/apps/python-flask
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.1.6 to 3.1.7.
- [Release notes](https://github.com/pallets/werkzeug/releases)
- [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/werkzeug/compare/3.1.6...3.1.7)

---
updated-dependencies:
- dependency-name: werkzeug
  dependency-version: 3.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-25 23:24:16 +00:00
Jose Diaz-Gonzalez
7a943f4678 Merge pull request #8428 from dokku/dependabot/pip/tests/apps/multi/gunicorn-25.2.0
chore(deps): bump gunicorn from 25.1.0 to 25.2.0 in /tests/apps/multi
2026-03-25 19:23:04 -04:00
Jose Diaz-Gonzalez
e055893f7b Merge pull request #8429 from dokku/dependabot/pip/tests/apps/python-flask/gunicorn-25.2.0
chore(deps): bump gunicorn from 25.1.0 to 25.2.0 in /tests/apps/python-flask
2026-03-25 19:22:58 -04:00
Jose Diaz-Gonzalez
2f1d64e826 Merge pull request #8430 from dokku/dependabot/pip/tests/apps/dockerfile-release/djangorestframework-3.17.1
chore(deps): bump djangorestframework from 3.17.0 to 3.17.1 in /tests/apps/dockerfile-release
2026-03-25 19:22:51 -04:00
Jose Diaz-Gonzalez
3739c86570 Merge pull request #8431 from dokku/dependabot/pip/tests/apps/dockerfile-release/gunicorn-25.2.0
chore(deps): bump gunicorn from 25.1.0 to 25.2.0 in /tests/apps/dockerfile-release
2026-03-25 19:21:21 -04:00
Jose Diaz-Gonzalez
5f74d306c4 Merge pull request #8432 from dokku/dependabot/npm_and_yarn/tests/apps/multi/picomatch-2.3.2
chore(deps): bump picomatch from 2.3.1 to 2.3.2 in /tests/apps/multi
2026-03-25 19:20:47 -04:00
dependabot[bot]
0d3c22f651 chore(deps): bump picomatch from 2.3.1 to 2.3.2 in /tests/apps/multi
Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.1 to 2.3.2.
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-25 21:53:44 +00:00
dependabot[bot]
3eb7e1dad8 chore(deps): bump gunicorn in /tests/apps/dockerfile-release
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.1.0 to 25.2.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.1.0...25.2.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-25 13:54:53 +00:00
dependabot[bot]
8418c413f8 chore(deps): bump djangorestframework in /tests/apps/dockerfile-release
Bumps [djangorestframework](https://github.com/encode/django-rest-framework) from 3.17.0 to 3.17.1.
- [Release notes](https://github.com/encode/django-rest-framework/releases)
- [Commits](https://github.com/encode/django-rest-framework/compare/3.17.0...3.17.1)

---
updated-dependencies:
- dependency-name: djangorestframework
  dependency-version: 3.17.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-25 13:54:39 +00:00
dependabot[bot]
0f31cb62ef chore(deps): bump gunicorn in /tests/apps/python-flask
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.1.0 to 25.2.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.1.0...25.2.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-25 13:52:39 +00:00
dependabot[bot]
dbfc2d8002 chore(deps): bump gunicorn from 25.1.0 to 25.2.0 in /tests/apps/multi
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.1.0 to 25.2.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.1.0...25.2.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-25 13:52:31 +00:00
Jose Diaz-Gonzalez
3caca8595b Merge pull request #8423 from dokku/dependabot/docker/plugins/traefik-vhosts/traefik-v3.6.11
chore(deps): bump traefik from v3.6.10 to v3.6.11 in /plugins/traefik-vhosts
2026-03-20 13:35:31 -04:00
Jose Diaz-Gonzalez
ef5ab01478 Merge pull request #8420 from dokku/dependabot/pip/docs/_build/mkdocs-material-9.7.6
chore(deps): bump mkdocs-material from 9.7.5 to 9.7.6 in /docs/_build
2026-03-20 13:06:25 -04:00
Jose Diaz-Gonzalez
3e81693093 Merge pull request #8421 from dokku/dependabot/pip/docs/_build/importlib-metadata-9.0.0
chore(deps): bump importlib-metadata from 8.8.0 to 9.0.0 in /docs/_build
2026-03-20 13:06:19 -04:00
Jose Diaz-Gonzalez
0822dc5558 Merge pull request #8424 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/traefik/traefik/v2-2.11.41
chore(deps): bump github.com/traefik/traefik/v2 from 2.11.40 to 2.11.41 in /plugins/scheduler-k3s
2026-03-20 13:05:56 -04:00
dependabot[bot]
d46dc2ab22 chore(deps): bump github.com/traefik/traefik/v2
Bumps [github.com/traefik/traefik/v2](https://github.com/traefik/traefik) from 2.11.40 to 2.11.41.
- [Release notes](https://github.com/traefik/traefik/releases)
- [Changelog](https://github.com/traefik/traefik/blob/v2.11.41/CHANGELOG.md)
- [Commits](https://github.com/traefik/traefik/compare/v2.11.40...v2.11.41)

---
updated-dependencies:
- dependency-name: github.com/traefik/traefik/v2
  dependency-version: 2.11.41
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-20 13:54:47 +00:00
dependabot[bot]
f6137bcd3c chore(deps): bump traefik in /plugins/traefik-vhosts
Bumps traefik from v3.6.10 to v3.6.11.

---
updated-dependencies:
- dependency-name: traefik
  dependency-version: v3.6.11
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-20 13:53:51 +00:00
dependabot[bot]
b39576812b chore(deps): bump importlib-metadata from 8.8.0 to 9.0.0 in /docs/_build
Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 8.8.0 to 9.0.0.
- [Release notes](https://github.com/python/importlib_metadata/releases)
- [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst)
- [Commits](https://github.com/python/importlib_metadata/compare/v8.8.0...v9.0.0)

---
updated-dependencies:
- dependency-name: importlib-metadata
  dependency-version: 9.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-20 13:53:23 +00:00
dependabot[bot]
9246a92e75 chore(deps): bump mkdocs-material from 9.7.5 to 9.7.6 in /docs/_build
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.7.5 to 9.7.6.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.7.5...9.7.6)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-version: 9.7.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-20 13:53:19 +00:00
Jose Diaz-Gonzalez
7b050cf3b1 Merge pull request #8411 from dokku/dependabot/docker/plugins/caddy-vhosts/lucaslorentz/caddy-docker-proxy-2.12
chore(deps): bump lucaslorentz/caddy-docker-proxy from 2.11 to 2.12 in /plugins/caddy-vhosts
2026-03-19 19:11:44 -04:00
Jose Diaz-Gonzalez
b34e497bae Merge pull request #8412 from dokku/dependabot/go_modules/plugins/scheduler-k3s/helm.sh/helm/v3-3.20.1
chore(deps): bump helm.sh/helm/v3 from 3.20.0 to 3.20.1 in /plugins/scheduler-k3s
2026-03-19 19:11:32 -04:00
Jose Diaz-Gonzalez
527c097b98 Merge pull request #8419 from dokku/dependabot/pip/tests/apps/dockerfile-release/djangorestframework-3.17.0
chore(deps): bump djangorestframework from 3.16.1 to 3.17.0 in /tests/apps/dockerfile-release
2026-03-19 19:11:14 -04:00
Jose Diaz-Gonzalez
3e9d35c1ca Merge pull request #8418 from dokku/dependabot/pip/docs/_build/importlib-metadata-8.8.0
chore(deps): bump importlib-metadata from 8.7.1 to 8.8.0 in /docs/_build
2026-03-19 19:11:08 -04:00
Jose Diaz-Gonzalez
5aec273077 Merge pull request #8417 from dokku/dependabot/go_modules/plugins/scheduler-k3s/google.golang.org/grpc-1.79.3
chore(deps): bump google.golang.org/grpc from 1.77.0-dev to 1.79.3 in /plugins/scheduler-k3s
2026-03-19 19:11:01 -04:00
Jose Diaz-Gonzalez
e4511642b4 Merge pull request #8416 from dokku/dependabot/docker/tests/apps/dockerfile-entrypoint/ruby-4.0.2
chore(deps): bump ruby from 4.0.1 to 4.0.2 in /tests/apps/dockerfile-entrypoint
2026-03-19 19:10:53 -04:00
Jose Diaz-Gonzalez
22d41e9f1a Merge pull request #8415 from dokku/dependabot/go_modules/tests/apps/gogrpc/google.golang.org/grpc-1.79.3
chore(deps): bump google.golang.org/grpc from 1.79.2 to 1.79.3 in /tests/apps/gogrpc
2026-03-19 19:10:44 -04:00
dependabot[bot]
34b3e9b3c2 chore(deps): bump djangorestframework in /tests/apps/dockerfile-release
Bumps [djangorestframework](https://github.com/encode/django-rest-framework) from 3.16.1 to 3.17.0.
- [Release notes](https://github.com/encode/django-rest-framework/releases)
- [Commits](https://github.com/encode/django-rest-framework/compare/3.16.1...3.17.0)

---
updated-dependencies:
- dependency-name: djangorestframework
  dependency-version: 3.17.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 13:54:45 +00:00
dependabot[bot]
e1afeeb054 chore(deps): bump importlib-metadata from 8.7.1 to 8.8.0 in /docs/_build
Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 8.7.1 to 8.8.0.
- [Release notes](https://github.com/python/importlib_metadata/releases)
- [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst)
- [Commits](https://github.com/python/importlib_metadata/compare/v8.7.1...v8.8.0)

---
updated-dependencies:
- dependency-name: importlib-metadata
  dependency-version: 8.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 13:53:28 +00:00
dependabot[bot]
9333c9263c chore(deps): bump google.golang.org/grpc in /plugins/scheduler-k3s
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.77.0-dev to 1.79.3.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.77.0-dev...v1.79.3)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.79.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 02:25:33 +00:00
dependabot[bot]
7b62023d0f chore(deps): bump ruby in /tests/apps/dockerfile-entrypoint
Bumps ruby from 4.0.1 to 4.0.2.

---
updated-dependencies:
- dependency-name: ruby
  dependency-version: 4.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-18 13:53:08 +00:00
dependabot[bot]
c60b0e81d1 chore(deps): bump google.golang.org/grpc in /tests/apps/gogrpc
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.79.2 to 1.79.3.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.79.2...v1.79.3)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.79.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-18 13:52:35 +00:00
dependabot[bot]
49aa7a6424 chore(deps): bump helm.sh/helm/v3 in /plugins/scheduler-k3s
Bumps [helm.sh/helm/v3](https://github.com/helm/helm) from 3.20.0 to 3.20.1.
- [Release notes](https://github.com/helm/helm/releases)
- [Commits](https://github.com/helm/helm/compare/v3.20.0...v3.20.1)

---
updated-dependencies:
- dependency-name: helm.sh/helm/v3
  dependency-version: 3.20.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-12 13:54:33 +00:00
dependabot[bot]
bc51cece4a chore(deps): bump lucaslorentz/caddy-docker-proxy
Bumps lucaslorentz/caddy-docker-proxy from 2.11 to 2.12.

---
updated-dependencies:
- dependency-name: lucaslorentz/caddy-docker-proxy
  dependency-version: '2.12'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-12 13:53:53 +00:00
Jose Diaz-Gonzalez
c46b471938 Merge pull request #8409 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/go-openapi/jsonpointer-0.22.5
chore(deps): bump github.com/go-openapi/jsonpointer from 0.22.4 to 0.22.5 in /plugins/scheduler-k3s
2026-03-11 17:24:32 -04:00
dependabot[bot]
4162c62e56 chore(deps): bump github.com/go-openapi/jsonpointer
Bumps [github.com/go-openapi/jsonpointer](https://github.com/go-openapi/jsonpointer) from 0.22.4 to 0.22.5.
- [Release notes](https://github.com/go-openapi/jsonpointer/releases)
- [Commits](https://github.com/go-openapi/jsonpointer/compare/v0.22.4...v0.22.5)

---
updated-dependencies:
- dependency-name: github.com/go-openapi/jsonpointer
  dependency-version: 0.22.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 21:24:05 +00:00
Jose Diaz-Gonzalez
8fe62d6b64 Merge pull request #8408 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/go-resty/resty/v2-2.17.2
chore(deps): bump github.com/go-resty/resty/v2 from 2.17.1 to 2.17.2 in /plugins/scheduler-k3s
2026-03-11 17:23:05 -04:00
Jose Diaz-Gonzalez
1778ef973e Merge pull request #8407 from dokku/dependabot/pip/docs/_build/mkdocs-material-9.7.5
chore(deps): bump mkdocs-material from 9.7.4 to 9.7.5 in /docs/_build
2026-03-11 17:22:56 -04:00
Jose Diaz-Gonzalez
57a27f9c98 Merge pull request #8406 from dokku/dependabot/docker/plugins/logs/timberio/vector-0.54.0-debian
chore(deps): bump timberio/vector from 0.53.0-debian to 0.54.0-debian in /plugins/logs
2026-03-11 17:22:49 -04:00
dependabot[bot]
812ef8e92e chore(deps): bump github.com/go-resty/resty/v2 in /plugins/scheduler-k3s
Bumps [github.com/go-resty/resty/v2](https://github.com/go-resty/resty) from 2.17.1 to 2.17.2.
- [Release notes](https://github.com/go-resty/resty/releases)
- [Commits](https://github.com/go-resty/resty/compare/v2.17.1...v2.17.2)

---
updated-dependencies:
- dependency-name: github.com/go-resty/resty/v2
  dependency-version: 2.17.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 13:55:23 +00:00
dependabot[bot]
ed77f1193f chore(deps): bump mkdocs-material from 9.7.4 to 9.7.5 in /docs/_build
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.7.4 to 9.7.5.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.7.4...9.7.5)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-version: 9.7.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 13:55:02 +00:00
dependabot[bot]
c5a49bfae5 chore(deps): bump timberio/vector in /plugins/logs
Bumps timberio/vector from 0.53.0-debian to 0.54.0-debian.

---
updated-dependencies:
- dependency-name: timberio/vector
  dependency-version: 0.54.0-debian
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 13:54:52 +00:00
Dokku Bot
661268f149 Release 0.37.7
# History

## 0.37.7

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.37.7/bootstrap.sh
sudo DOKKU_TAG=v0.37.7 bash bootstrap.sh
```

### Bug Fixes

- #8379: @josegonzalez Call correct function for limiting letsencrypt to certain domains

### New Features

- #8405: @josegonzalez Add Debian 13 versions of docker plugin packages
- #8261: @josegonzalez Configure Traefik readiness healthchecks based on app.json config
- #8378: @farmdawgnation Support custom entrypoint for api and dashboard

### Dependencies

- #8395: @dependabot[bot] chore(deps): bump mvdan.cc/sh/v3 from 3.12.0 to 3.13.0 in /plugins/cron
- #8401: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.38 to 2.11.40 in /plugins/scheduler-k3s
- #8400: @dependabot[bot] chore(deps): bump github.com/melbahja/goph from 1.4.0 to 1.5.0 in /plugins/common
- #8394: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.47.0 to 0.48.0 in /plugins/common
- #8396: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.19.0 to 0.20.0 in /plugins/common
- #8399: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.19.0 to 0.20.0 in /plugins/scheduler-k3s
- #8398: @dependabot[bot] chore(deps): bump traefik from 3.6.9 to v3.6.10 in /plugins/traefik-vhosts
- #8397: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.19.0 to 0.20.0 in /plugins/scheduler-docker-local
- #8314: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.39.0 to 1.39.1 in /plugins/common
- #8380: @dependabot[bot] chore(deps): bump lucaslorentz/caddy-docker-proxy from 2.10 to 2.11 in /plugins/caddy-vhosts
- #8381: @dependabot[bot] chore(deps): bump k8s.io/kubectl from 0.35.0 to 0.35.2 in /plugins/scheduler-k3s
- #8382: @dependabot[bot] chore(deps): bump docker/login-action from 3 to 4
- #8383: @dependabot[bot] chore(deps): bump docker/setup-qemu-action from 3 to 4
- #8384: @dependabot[bot] chore(deps): bump mkdocs-material from 9.7.3 to 9.7.4 in /docs/_build
- #8385: @dependabot[bot] chore(deps): bump django from 5.2.11 to 5.2.12 in /tests/apps/dockerfile-release
- #8387: @dependabot[bot] chore(deps): bump docker/setup-buildx-action from 3 to 4
- #8388: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.79.1 to 1.79.2 in /tests/apps/gogrpc
- #8389: @dependabot[bot] chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/go-fail-postdeploy
- #8390: @dependabot[bot] chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/gogrpc
- #8391: @dependabot[bot] chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/go-fail-predeploy
- #8392: @dependabot[bot] chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/zombies-dockerfile-tini
- #8393: @dependabot[bot] chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/zombies-dockerfile-no-tini
- #8354: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.78.0 to 1.79.1 in /tests/apps/gogrpc
- #8340: @dependabot[bot] chore(deps): bump python from 3.14.2-alpine to 3.14.3-alpine in /docs/_build
- #8353: @dependabot[bot] chore(deps): bump gunicorn from 25.0.2 to 25.1.0 in /tests/apps/multi
- #8357: @dependabot[bot] chore(deps): bump qs from 6.14.1 to 6.14.2 in /tests/apps/checks-root
- #8361: @dependabot[bot] chore(deps): bump flask from 3.1.2 to 3.1.3 in /tests/apps/multi
- #8360: @dependabot[bot] chore(deps): bump rack from 3.2.4 to 3.2.5 in /tests/apps/ruby
- #8332: @dependabot[bot] chore(deps-dev): bump org.apache.maven.plugins:maven-dependency-plugin from 3.9.0 to 3.10.0 in /tests/apps/java
- #8336: @dependabot[bot] chore(deps): bump python from 3.14.2-bookworm to 3.14.3-bookworm in /tests/apps/dockerfile-release
- #8355: @dependabot[bot] chore(deps): bump gunicorn from 25.0.2 to 25.1.0 in /tests/apps/python-flask
- #8356: @dependabot[bot] chore(deps): bump gunicorn from 25.0.2 to 25.1.0 in /tests/apps/dockerfile-release
- #8358: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.20.1 to 10.21 in /docs/_build
- #8371: @dependabot[bot] chore(deps): bump byjg/easy-haproxy from 5.0.0 to 6.0.1 in /plugins/haproxy-vhosts
- #8362: @dependabot[bot] chore(deps): bump flask from 3.1.2 to 3.1.3 in /tests/apps/python-flask
- #8374: @dependabot[bot] chore(deps): bump actions/download-artifact from 7 to 8
- #8375: @dependabot[bot] chore(deps): bump actions/upload-artifact from 6 to 7
- #8376: @dependabot[bot] chore(deps): bump phusion/baseimage from noble-1.0.2 to noble-1.0.3
- #8377: @dependabot[bot] chore(deps): bump whitenoise from 6.11.0 to 6.12.0 in /tests/apps/dockerfile-release
- #8365: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.36 to 2.11.37 in /plugins/scheduler-k3s
- #8367: @dependabot[bot] chore(deps): bump werkzeug from 3.1.5 to 3.1.6 in /tests/apps/python-flask
- #8368: @dependabot[bot] chore(deps): bump dj-database-url from 3.1.0 to 3.1.2 in /tests/apps/dockerfile-release
- #8372: @dependabot[bot] chore(deps): bump mkdocs-material from 9.7.1 to 9.7.3 in /docs/_build
- #8373: @dependabot[bot] chore(deps): bump traefik from 3.6.7 to 3.6.9 in /plugins/traefik-vhosts
- #8351: @dependabot[bot] chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/zombies-dockerfile-tini
- #8350: @dependabot[bot] chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/zombies-dockerfile-no-tini
- #8349: @dependabot[bot] chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/go-fail-postdeploy
- #8348: @dependabot[bot] chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/gogrpc
- #8347: @dependabot[bot] chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/go-fail-predeploy
- #8344: @dependabot[bot] chore(deps): bump sigs.k8s.io/kustomize/api from 0.21.0 to 0.21.1 in /plugins/scheduler-k3s
- #8329: @dependabot[bot] chore(deps): bump gunicorn from 25.0.1 to 25.0.2 in /tests/apps/multi
- #8330: @dependabot[bot] chore(deps): bump gunicorn from 25.0.1 to 25.0.2 in /tests/apps/python-flask
- #8331: @dependabot[bot] chore(deps): bump gunicorn from 25.0.1 to 25.0.2 in /tests/apps/dockerfile-release
- #8320: @dependabot[bot] chore(deps): bump django from 5.2.10 to 5.2.11 in /tests/apps/dockerfile-release
- #8321: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.35 to 2.11.36 in /plugins/scheduler-k3s
- #8319: @dependabot[bot] chore(deps): bump gunicorn from 24.1.1 to 25.0.1 in /tests/apps/dockerfile-release
- #8318: @dependabot[bot] chore(deps): bump github.com/cert-manager/cert-manager from 1.19.2 to 1.19.3 in /plugins/scheduler-k3s
- #8317: @dependabot[bot] chore(deps): bump gunicorn from 24.1.1 to 25.0.1 in /tests/apps/multi
- #8316: @dependabot[bot] chore(deps): bump gunicorn from 24.1.1 to 25.0.1 in /tests/apps/python-flask
2026-03-11 00:38:03 +00:00
Jose Diaz-Gonzalez
a675d5dfe8 Merge pull request #8405 from dokku/8278-native-packages
Add Debian 13 versions of docker plugin packages
2026-03-10 20:36:21 -04:00
Jose Diaz-Gonzalez
933adabad6 Merge pull request #8261 from dokku/6834-traefik-healthcheck-labels
Configure Traefik readiness healthchecks based on app.json config
2026-03-10 20:35:50 -04:00
Jose Diaz-Gonzalez
9c2eb09c66 fix: remove extra newline 2026-03-10 20:35:41 -04:00
Jose Diaz-Gonzalez
e1dd3abb10 feat: add Debian 13 versions of docker plugin packages
Closes #8278
2026-03-10 19:31:27 -04:00
Jose Diaz-Gonzalez
8cad6c3179 feat: configure Traefik readiness healthchecks based on app.json config
Closes #6834
2026-03-10 19:17:20 -04:00
Jose Diaz-Gonzalez
2b0f96dc1a feat: upgrade vector chart from 0.42.0 to 0.50.0 2026-03-10 15:38:33 -04:00
Jose Diaz-Gonzalez
8240096dda feat: upgrade ingress-nginx chart from 4.10.0 to 4.14.4 2026-03-10 15:37:49 -04:00
Jose Diaz-Gonzalez
b4c598ed17 Merge pull request #8395 from dokku/dependabot/go_modules/plugins/cron/mvdan.cc/sh/v3-3.13.0
chore(deps): bump mvdan.cc/sh/v3 from 3.12.0 to 3.13.0 in /plugins/cron
2026-03-10 15:28:13 -04:00
Jose Diaz-Gonzalez
38db6949bf chore: bump go modules 2026-03-10 14:04:48 -04:00
dependabot[bot]
b71dea72bd chore(deps): bump mvdan.cc/sh/v3 from 3.12.0 to 3.13.0 in /plugins/cron
Bumps [mvdan.cc/sh/v3](https://github.com/mvdan/sh) from 3.12.0 to 3.13.0.
- [Release notes](https://github.com/mvdan/sh/releases)
- [Changelog](https://github.com/mvdan/sh/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mvdan/sh/compare/v3.12.0...v3.13.0)

---
updated-dependencies:
- dependency-name: mvdan.cc/sh/v3
  dependency-version: 3.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-10 14:04:36 -04:00
Jose Diaz-Gonzalez
491af9961d Merge pull request #8401 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/traefik/traefik/v2-2.11.40
chore(deps): bump github.com/traefik/traefik/v2 from 2.11.38 to 2.11.40 in /plugins/scheduler-k3s
2026-03-10 13:59:09 -04:00
dependabot[bot]
5332368a3d chore(deps): bump github.com/traefik/traefik/v2
Bumps [github.com/traefik/traefik/v2](https://github.com/traefik/traefik) from 2.11.38 to 2.11.40.
- [Release notes](https://github.com/traefik/traefik/releases)
- [Changelog](https://github.com/traefik/traefik/blob/master/CHANGELOG.md)
- [Commits](https://github.com/traefik/traefik/compare/v2.11.38...v2.11.40)

---
updated-dependencies:
- dependency-name: github.com/traefik/traefik/v2
  dependency-version: 2.11.40
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-10 16:47:44 +00:00
Jose Diaz-Gonzalez
38545f96be Merge pull request #8400 from dokku/dependabot/go_modules/plugins/common/github.com/melbahja/goph-1.5.0
chore(deps): bump github.com/melbahja/goph from 1.4.0 to 1.5.0 in /plugins/common
2026-03-10 12:45:36 -04:00
dependabot[bot]
6931a6b430 chore(deps): bump github.com/melbahja/goph in /plugins/common
Bumps [github.com/melbahja/goph](https://github.com/melbahja/goph) from 1.4.0 to 1.5.0.
- [Commits](https://github.com/melbahja/goph/compare/v1.4.0...v1.5.0)

---
updated-dependencies:
- dependency-name: github.com/melbahja/goph
  dependency-version: 1.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-10 10:41:54 -04:00
Jose Diaz-Gonzalez
5e1cea4883 Merge pull request #8394 from dokku/dependabot/go_modules/plugins/common/golang.org/x/crypto-0.48.0
chore(deps): bump golang.org/x/crypto from 0.47.0 to 0.48.0 in /plugins/common
2026-03-10 10:40:16 -04:00
Jose Diaz-Gonzalez
554a041bcd chore: bump go modules 2026-03-10 09:21:08 -04:00
dependabot[bot]
5944ad30ad chore(deps): bump golang.org/x/crypto in /plugins/common
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.47.0 to 0.48.0.
- [Commits](https://github.com/golang/crypto/compare/v0.47.0...v0.48.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.48.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-10 09:20:45 -04:00
Jose Diaz-Gonzalez
9a01d5337f Merge pull request #8396 from dokku/dependabot/go_modules/plugins/common/golang.org/x/sync-0.20.0
chore(deps): bump golang.org/x/sync from 0.19.0 to 0.20.0 in /plugins/common
2026-03-10 09:19:46 -04:00
Jose Diaz-Gonzalez
5886e8190f chore: bump go modules 2026-03-10 08:13:16 -04:00
dependabot[bot]
bc4f62b972 chore(deps): bump golang.org/x/sync in /plugins/common
Bumps [golang.org/x/sync](https://github.com/golang/sync) from 0.19.0 to 0.20.0.
- [Commits](https://github.com/golang/sync/compare/v0.19.0...v0.20.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sync
  dependency-version: 0.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-10 08:13:16 -04:00
Jose Diaz-Gonzalez
1fec3b4ab8 Merge pull request #8399 from dokku/dependabot/go_modules/plugins/scheduler-k3s/golang.org/x/sync-0.20.0
chore(deps): bump golang.org/x/sync from 0.19.0 to 0.20.0 in /plugins/scheduler-k3s
2026-03-09 13:36:15 -04:00
Jose Diaz-Gonzalez
80442c9109 Merge pull request #8398 from dokku/dependabot/docker/plugins/traefik-vhosts/traefik-v3.6.10
chore(deps): bump traefik from 3.6.9 to v3.6.10 in /plugins/traefik-vhosts
2026-03-09 13:36:09 -04:00
Jose Diaz-Gonzalez
52804c9461 Merge pull request #8397 from dokku/dependabot/go_modules/plugins/scheduler-docker-local/golang.org/x/sync-0.20.0
chore(deps): bump golang.org/x/sync from 0.19.0 to 0.20.0 in /plugins/scheduler-docker-local
2026-03-09 13:36:00 -04:00
dependabot[bot]
63690741d2 chore(deps): bump golang.org/x/sync in /plugins/scheduler-k3s
Bumps [golang.org/x/sync](https://github.com/golang/sync) from 0.19.0 to 0.20.0.
- [Commits](https://github.com/golang/sync/compare/v0.19.0...v0.20.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sync
  dependency-version: 0.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 14:48:54 +00:00
dependabot[bot]
7877cebb27 chore(deps): bump traefik in /plugins/traefik-vhosts
Bumps traefik from 3.6.9 to v3.6.10.

---
updated-dependencies:
- dependency-name: traefik
  dependency-version: v3.6.10
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 14:48:31 +00:00
dependabot[bot]
d9ac94bc13 chore(deps): bump golang.org/x/sync in /plugins/scheduler-docker-local
Bumps [golang.org/x/sync](https://github.com/golang/sync) from 0.19.0 to 0.20.0.
- [Commits](https://github.com/golang/sync/compare/v0.19.0...v0.20.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sync
  dependency-version: 0.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 14:47:46 +00:00
Jose Diaz-Gonzalez
0abb1568e1 Merge pull request #8314 from dokku/dependabot/go_modules/plugins/common/github.com/onsi/gomega-1.39.1
chore(deps): bump github.com/onsi/gomega from 1.39.0 to 1.39.1 in /plugins/common
2026-03-07 13:30:09 -05:00
Jose Diaz-Gonzalez
ca0adc1c55 Merge pull request #8378 from farmdawgnation/msf/traefik-dashboard-entrypoint
feat(traefik): support custom entrypoint for api and dashboard
2026-03-07 13:02:11 -05:00
Jose Diaz-Gonzalez
ed5b2e38f6 chore: bump go modules 2026-03-07 11:32:48 -05:00
Jose Diaz-Gonzalez
c33cfa4e5d Merge pull request #8380 from dokku/dependabot/docker/plugins/caddy-vhosts/lucaslorentz/caddy-docker-proxy-2.11
chore(deps): bump lucaslorentz/caddy-docker-proxy from 2.10 to 2.11 in /plugins/caddy-vhosts
2026-03-07 11:22:44 -05:00
Jose Diaz-Gonzalez
95b02e50dd Merge pull request #8381 from dokku/dependabot/go_modules/plugins/scheduler-k3s/k8s.io/kubectl-0.35.2
chore(deps): bump k8s.io/kubectl from 0.35.0 to 0.35.2 in /plugins/scheduler-k3s
2026-03-07 11:22:21 -05:00
Jose Diaz-Gonzalez
7a53dc0b89 Merge pull request #8382 from dokku/dependabot/github_actions/docker/login-action-4
chore(deps): bump docker/login-action from 3 to 4
2026-03-07 11:21:52 -05:00
Jose Diaz-Gonzalez
576a75f7e1 Merge pull request #8383 from dokku/dependabot/github_actions/docker/setup-qemu-action-4
chore(deps): bump docker/setup-qemu-action from 3 to 4
2026-03-07 11:21:43 -05:00
Jose Diaz-Gonzalez
97850d0431 Merge pull request #8384 from dokku/dependabot/pip/docs/_build/mkdocs-material-9.7.4
chore(deps): bump mkdocs-material from 9.7.3 to 9.7.4 in /docs/_build
2026-03-07 11:21:28 -05:00
Jose Diaz-Gonzalez
d04edb6129 Merge pull request #8385 from dokku/dependabot/pip/tests/apps/dockerfile-release/django-5.2.12
chore(deps): bump django from 5.2.11 to 5.2.12 in /tests/apps/dockerfile-release
2026-03-07 11:21:13 -05:00
Jose Diaz-Gonzalez
cf03de9f06 Merge pull request #8387 from dokku/dependabot/github_actions/docker/setup-buildx-action-4
chore(deps): bump docker/setup-buildx-action from 3 to 4
2026-03-07 11:20:59 -05:00
Jose Diaz-Gonzalez
08ff20a1a8 Merge pull request #8388 from dokku/dependabot/go_modules/tests/apps/gogrpc/google.golang.org/grpc-1.79.2
chore(deps): bump google.golang.org/grpc from 1.79.1 to 1.79.2 in /tests/apps/gogrpc
2026-03-07 11:20:53 -05:00
Jose Diaz-Gonzalez
308f944f68 Merge pull request #8389 from dokku/dependabot/docker/tests/apps/go-fail-postdeploy/golang-1.26.1
chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/go-fail-postdeploy
2026-03-07 11:20:14 -05:00
Jose Diaz-Gonzalez
ab138c300b Merge pull request #8390 from dokku/dependabot/docker/tests/apps/gogrpc/golang-1.26.1
chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/gogrpc
2026-03-07 11:20:06 -05:00
Jose Diaz-Gonzalez
678d1d1291 Merge pull request #8391 from dokku/dependabot/docker/tests/apps/go-fail-predeploy/golang-1.26.1
chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/go-fail-predeploy
2026-03-07 11:19:58 -05:00
Jose Diaz-Gonzalez
57640d73e5 Merge pull request #8392 from dokku/dependabot/docker/tests/apps/zombies-dockerfile-tini/golang-1.26.1
chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/zombies-dockerfile-tini
2026-03-07 11:19:50 -05:00
Jose Diaz-Gonzalez
0fe192daf4 Merge pull request #8393 from dokku/dependabot/docker/tests/apps/zombies-dockerfile-no-tini/golang-1.26.1
chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/zombies-dockerfile-no-tini
2026-03-07 11:18:19 -05:00
dependabot[bot]
f08b54a62a chore(deps): bump golang in /tests/apps/zombies-dockerfile-no-tini
Bumps golang from 1.26.0 to 1.26.1.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 13:52:54 +00:00
dependabot[bot]
9e64b1410a chore(deps): bump golang in /tests/apps/zombies-dockerfile-tini
Bumps golang from 1.26.0 to 1.26.1.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 13:52:50 +00:00
dependabot[bot]
dcc68fce97 chore(deps): bump golang in /tests/apps/go-fail-predeploy
Bumps golang from 1.26.0 to 1.26.1.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 13:52:47 +00:00
dependabot[bot]
e006ef8e94 chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/gogrpc
Bumps golang from 1.26.0 to 1.26.1.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 13:52:43 +00:00
dependabot[bot]
e98bcf96cd chore(deps): bump golang in /tests/apps/go-fail-postdeploy
Bumps golang from 1.26.0 to 1.26.1.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 13:52:41 +00:00
dependabot[bot]
0708255811 chore(deps): bump google.golang.org/grpc in /tests/apps/gogrpc
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.79.1 to 1.79.2.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.79.1...v1.79.2)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.79.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 13:52:20 +00:00
dependabot[bot]
5247a24172 chore(deps): bump docker/setup-buildx-action from 3 to 4
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-05 13:53:17 +00:00
dependabot[bot]
ffb582efda chore(deps): bump django in /tests/apps/dockerfile-release
Bumps [django](https://github.com/django/django) from 5.2.11 to 5.2.12.
- [Commits](https://github.com/django/django/compare/5.2.11...5.2.12)

---
updated-dependencies:
- dependency-name: django
  dependency-version: 5.2.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-04 13:55:02 +00:00
dependabot[bot]
fb1b434991 chore(deps): bump mkdocs-material from 9.7.3 to 9.7.4 in /docs/_build
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.7.3 to 9.7.4.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.7.3...9.7.4)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-version: 9.7.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-04 13:53:30 +00:00
dependabot[bot]
3743d90b5c chore(deps): bump docker/setup-qemu-action from 3 to 4
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-04 13:53:06 +00:00
dependabot[bot]
6d86544e56 chore(deps): bump docker/login-action from 3 to 4
Bumps [docker/login-action](https://github.com/docker/login-action) from 3 to 4.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-04 13:52:59 +00:00
dependabot[bot]
6bed287140 chore(deps): bump k8s.io/kubectl in /plugins/scheduler-k3s
Bumps [k8s.io/kubectl](https://github.com/kubernetes/kubectl) from 0.35.0 to 0.35.2.
- [Commits](https://github.com/kubernetes/kubectl/compare/v0.35.0...v0.35.2)

---
updated-dependencies:
- dependency-name: k8s.io/kubectl
  dependency-version: 0.35.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 14:43:46 +00:00
dependabot[bot]
2bd0114e28 chore(deps): bump lucaslorentz/caddy-docker-proxy
Bumps lucaslorentz/caddy-docker-proxy from 2.10 to 2.11.

---
updated-dependencies:
- dependency-name: lucaslorentz/caddy-docker-proxy
  dependency-version: '2.11'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 14:43:10 +00:00
Jose Diaz-Gonzalez
1b08b8c0e6 Merge pull request #8354 from dokku/dependabot/go_modules/tests/apps/gogrpc/google.golang.org/grpc-1.79.1
chore(deps): bump google.golang.org/grpc from 1.78.0 to 1.79.1 in /tests/apps/gogrpc
2026-03-01 06:19:44 -05:00
Jose Diaz-Gonzalez
64f90e231b Merge pull request #8340 from dokku/dependabot/docker/docs/_build/python-3.14.3-alpine
chore(deps): bump python from 3.14.2-alpine to 3.14.3-alpine in /docs/_build
2026-03-01 06:19:28 -05:00
Jose Diaz-Gonzalez
a60ef2106b Merge pull request #8353 from dokku/dependabot/pip/tests/apps/multi/gunicorn-25.1.0
chore(deps): bump gunicorn from 25.0.2 to 25.1.0 in /tests/apps/multi
2026-03-01 04:53:21 -05:00
dependabot[bot]
7be2754ab2 chore(deps): bump gunicorn from 25.0.2 to 25.1.0 in /tests/apps/multi
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.0.2 to 25.1.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.0.2...25.1.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 09:48:56 +00:00
Jose Diaz-Gonzalez
42100e5bba Merge pull request #8357 from dokku/dependabot/npm_and_yarn/tests/apps/checks-root/qs-6.14.2
chore(deps): bump qs from 6.14.1 to 6.14.2 in /tests/apps/checks-root
2026-03-01 04:48:02 -05:00
Jose Diaz-Gonzalez
4448b1f9b4 Merge pull request #8361 from dokku/dependabot/pip/tests/apps/multi/flask-3.1.3
chore(deps): bump flask from 3.1.2 to 3.1.3 in /tests/apps/multi
2026-03-01 04:47:42 -05:00
Jose Diaz-Gonzalez
cb0833aa38 Merge pull request #8360 from dokku/dependabot/bundler/tests/apps/ruby/rack-3.2.5
chore(deps): bump rack from 3.2.4 to 3.2.5 in /tests/apps/ruby
2026-03-01 03:44:14 -05:00
dependabot[bot]
7c9fab1c63 chore(deps): bump github.com/onsi/gomega in /plugins/common
Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.39.0 to 1.39.1.
- [Release notes](https://github.com/onsi/gomega/releases)
- [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/gomega/compare/v1.39.0...v1.39.1)

---
updated-dependencies:
- dependency-name: github.com/onsi/gomega
  dependency-version: 1.39.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 07:12:46 +00:00
dependabot[bot]
58a56e7da3 chore(deps): bump flask from 3.1.2 to 3.1.3 in /tests/apps/multi
Bumps [flask](https://github.com/pallets/flask) from 3.1.2 to 3.1.3.
- [Release notes](https://github.com/pallets/flask/releases)
- [Changelog](https://github.com/pallets/flask/blob/3.1.3/CHANGES.rst)
- [Commits](https://github.com/pallets/flask/compare/3.1.2...3.1.3)

---
updated-dependencies:
- dependency-name: flask
  dependency-version: 3.1.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 07:12:23 +00:00
dependabot[bot]
b99e9647e1 chore(deps): bump python in /docs/_build
Bumps python from 3.14.2-alpine to 3.14.3-alpine.

---
updated-dependencies:
- dependency-name: python
  dependency-version: 3.14.3-alpine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 07:12:17 +00:00
dependabot[bot]
f20ea22812 chore(deps): bump google.golang.org/grpc in /tests/apps/gogrpc
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.78.0 to 1.79.1.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.78.0...v1.79.1)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.79.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 07:12:08 +00:00
dependabot[bot]
d90172cabc chore(deps): bump qs from 6.14.1 to 6.14.2 in /tests/apps/checks-root
Bumps [qs](https://github.com/ljharb/qs) from 6.14.1 to 6.14.2.
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.1...v6.14.2)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 07:12:06 +00:00
Jose Diaz-Gonzalez
d54d4d3c9d Merge pull request #8332 from dokku/dependabot/maven/tests/apps/java/org.apache.maven.plugins-maven-dependency-plugin-3.10.0
chore(deps-dev): bump org.apache.maven.plugins:maven-dependency-plugin from 3.9.0 to 3.10.0 in /tests/apps/java
2026-03-01 02:11:57 -05:00
Jose Diaz-Gonzalez
bc631c9644 Merge pull request #8336 from dokku/dependabot/docker/tests/apps/dockerfile-release/python-3.14.3-bookworm
chore(deps): bump python from 3.14.2-bookworm to 3.14.3-bookworm in /tests/apps/dockerfile-release
2026-03-01 02:11:51 -05:00
Jose Diaz-Gonzalez
36aaf81839 Merge pull request #8355 from dokku/dependabot/pip/tests/apps/python-flask/gunicorn-25.1.0
chore(deps): bump gunicorn from 25.0.2 to 25.1.0 in /tests/apps/python-flask
2026-03-01 02:11:28 -05:00
Jose Diaz-Gonzalez
a5dadaa184 Merge pull request #8356 from dokku/dependabot/pip/tests/apps/dockerfile-release/gunicorn-25.1.0
chore(deps): bump gunicorn from 25.0.2 to 25.1.0 in /tests/apps/dockerfile-release
2026-03-01 02:11:22 -05:00
Jose Diaz-Gonzalez
0e8bf543ac Merge pull request #8358 from dokku/dependabot/pip/docs/_build/pymdown-extensions-10.21
chore(deps): bump pymdown-extensions from 10.20.1 to 10.21 in /docs/_build
2026-03-01 02:11:10 -05:00
dependabot[bot]
5648d05b7e chore(deps): bump rack from 3.2.4 to 3.2.5 in /tests/apps/ruby
Bumps [rack](https://github.com/rack/rack) from 3.2.4 to 3.2.5.
- [Release notes](https://github.com/rack/rack/releases)
- [Changelog](https://github.com/rack/rack/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rack/rack/compare/v3.2.4...v3.2.5)

---
updated-dependencies:
- dependency-name: rack
  dependency-version: 3.2.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 07:11:07 +00:00
Jose Diaz-Gonzalez
4fb976b3a3 Merge pull request #8379 from dokku/fix-allowed-domains-call
fix: call correct function for limiting letsencrypt to certain domains
2026-03-01 02:10:29 -05:00
Jose Diaz-Gonzalez
f2b367ec7a Merge pull request #8371 from dokku/dependabot/docker/plugins/haproxy-vhosts/byjg/easy-haproxy-6.0.1
chore(deps): bump byjg/easy-haproxy from 5.0.0 to 6.0.1 in /plugins/haproxy-vhosts
2026-03-01 00:08:09 -05:00
Jose Diaz-Gonzalez
dcf93a4610 fix: call correct function for limiting letsencrypt to certain domains 2026-03-01 00:07:47 -05:00
dependabot[bot]
bc9873c75d chore(deps): bump gunicorn in /tests/apps/python-flask
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.0.2 to 25.1.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.0.2...25.1.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 05:02:41 +00:00
Jose Diaz-Gonzalez
ecc2b39c00 Merge pull request #8362 from dokku/dependabot/pip/tests/apps/python-flask/flask-3.1.3
chore(deps): bump flask from 3.1.2 to 3.1.3 in /tests/apps/python-flask
2026-03-01 00:01:44 -05:00
Jose Diaz-Gonzalez
cd55d85dbe Merge pull request #8374 from dokku/dependabot/github_actions/actions/download-artifact-8
chore(deps): bump actions/download-artifact from 7 to 8
2026-03-01 00:01:35 -05:00
Jose Diaz-Gonzalez
4b4af8ff99 Merge pull request #8375 from dokku/dependabot/github_actions/actions/upload-artifact-7
chore(deps): bump actions/upload-artifact from 6 to 7
2026-02-28 23:59:51 -05:00
Jose Diaz-Gonzalez
54162738f1 Merge pull request #8376 from dokku/dependabot/docker/phusion/baseimage-noble-1.0.3
chore(deps): bump phusion/baseimage from noble-1.0.2 to noble-1.0.3
2026-02-28 23:59:41 -05:00
Jose Diaz-Gonzalez
de52540815 Merge pull request #8377 from dokku/dependabot/pip/tests/apps/dockerfile-release/whitenoise-6.12.0
chore(deps): bump whitenoise from 6.11.0 to 6.12.0 in /tests/apps/dockerfile-release
2026-02-28 23:59:26 -05:00
Jose Diaz-Gonzalez
0feda6ecc2 Merge pull request #8365 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/traefik/traefik/v2-2.11.37
chore(deps): bump github.com/traefik/traefik/v2 from 2.11.36 to 2.11.37 in /plugins/scheduler-k3s
2026-02-28 18:55:23 -05:00
Matt Farmer
3cf02f9904 feat(traefik-vhosts): support custom entrypoint for API/dashboard
Add two new global-only properties to configure a dedicated Traefik entrypoint
for the API and dashboard, enabling network isolation on private interfaces.
Includes comprehensive test coverage for property management and compose config.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-02-28 18:07:07 -05:00
dependabot[bot]
383f70f981 chore(deps): bump whitenoise in /tests/apps/dockerfile-release
Bumps [whitenoise](https://github.com/evansd/whitenoise) from 6.11.0 to 6.12.0.
- [Changelog](https://github.com/evansd/whitenoise/blob/main/docs/changelog.rst)
- [Commits](https://github.com/evansd/whitenoise/compare/6.11.0...6.12.0)

---
updated-dependencies:
- dependency-name: whitenoise
  dependency-version: 6.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 13:54:30 +00:00
dependabot[bot]
59867f20ad chore(deps): bump phusion/baseimage from noble-1.0.2 to noble-1.0.3
Bumps phusion/baseimage from noble-1.0.2 to noble-1.0.3.

---
updated-dependencies:
- dependency-name: phusion/baseimage
  dependency-version: noble-1.0.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 13:52:51 +00:00
dependabot[bot]
704035b92d chore(deps): bump actions/upload-artifact from 6 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 13:52:47 +00:00
dependabot[bot]
c65eec7027 chore(deps): bump actions/download-artifact from 7 to 8
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 7 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v7...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 13:52:39 +00:00
dependabot[bot]
1651b8abf4 chore(deps): bump github.com/traefik/traefik/v2
Bumps [github.com/traefik/traefik/v2](https://github.com/traefik/traefik) from 2.11.36 to 2.11.37.
- [Release notes](https://github.com/traefik/traefik/releases)
- [Changelog](https://github.com/traefik/traefik/blob/master/CHANGELOG.md)
- [Commits](https://github.com/traefik/traefik/compare/v2.11.36...v2.11.37)

---
updated-dependencies:
- dependency-name: github.com/traefik/traefik/v2
  dependency-version: 2.11.37
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 04:36:50 +00:00
dependabot[bot]
2c102cc815 chore(deps): bump gunicorn in /tests/apps/dockerfile-release
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.0.2 to 25.1.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.0.2...25.1.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 04:36:43 +00:00
dependabot[bot]
a70184c65d chore(deps): bump flask from 3.1.2 to 3.1.3 in /tests/apps/python-flask
Bumps [flask](https://github.com/pallets/flask) from 3.1.2 to 3.1.3.
- [Release notes](https://github.com/pallets/flask/releases)
- [Changelog](https://github.com/pallets/flask/blob/3.1.3/CHANGES.rst)
- [Commits](https://github.com/pallets/flask/compare/3.1.2...3.1.3)

---
updated-dependencies:
- dependency-name: flask
  dependency-version: 3.1.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 04:36:21 +00:00
Jose Diaz-Gonzalez
ffc724993a Merge pull request #8367 from dokku/dependabot/pip/tests/apps/python-flask/werkzeug-3.1.6
chore(deps): bump werkzeug from 3.1.5 to 3.1.6 in /tests/apps/python-flask
2026-02-24 23:35:17 -05:00
Jose Diaz-Gonzalez
dd69c08400 Merge pull request #8368 from dokku/dependabot/pip/tests/apps/dockerfile-release/dj-database-url-3.1.2
chore(deps): bump dj-database-url from 3.1.0 to 3.1.2 in /tests/apps/dockerfile-release
2026-02-24 23:35:10 -05:00
Jose Diaz-Gonzalez
bccd940ebf Merge pull request #8372 from dokku/dependabot/pip/docs/_build/mkdocs-material-9.7.3
chore(deps): bump mkdocs-material from 9.7.1 to 9.7.3 in /docs/_build
2026-02-24 21:38:57 -05:00
Jose Diaz-Gonzalez
31e9048425 Merge pull request #8373 from dokku/dependabot/docker/plugins/traefik-vhosts/traefik-3.6.9
chore(deps): bump traefik from 3.6.7 to 3.6.9 in /plugins/traefik-vhosts
2026-02-24 21:38:49 -05:00
dependabot[bot]
d9c70c55a8 chore(deps): bump traefik from 3.6.7 to 3.6.9 in /plugins/traefik-vhosts
Bumps traefik from 3.6.7 to 3.6.9.

---
updated-dependencies:
- dependency-name: traefik
  dependency-version: 3.6.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-24 13:54:58 +00:00
dependabot[bot]
02a0a47ffb chore(deps): bump mkdocs-material from 9.7.1 to 9.7.3 in /docs/_build
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.7.1 to 9.7.3.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.7.1...9.7.3)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-version: 9.7.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-24 13:54:27 +00:00
dependabot[bot]
0af185df3d chore(deps): bump byjg/easy-haproxy in /plugins/haproxy-vhosts
Bumps byjg/easy-haproxy from 5.0.0 to 6.0.1.

---
updated-dependencies:
- dependency-name: byjg/easy-haproxy
  dependency-version: 6.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-23 14:52:12 +00:00
dependabot[bot]
918cba4f1b chore(deps): bump dj-database-url in /tests/apps/dockerfile-release
Bumps [dj-database-url](https://github.com/jazzband/dj-database-url) from 3.1.0 to 3.1.2.
- [Release notes](https://github.com/jazzband/dj-database-url/releases)
- [Changelog](https://github.com/jazzband/dj-database-url/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jazzband/dj-database-url/compare/v3.1.0...v3.1.2)

---
updated-dependencies:
- dependency-name: dj-database-url
  dependency-version: 3.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-20 13:54:38 +00:00
dependabot[bot]
64886aae22 chore(deps): bump werkzeug in /tests/apps/python-flask
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.1.5 to 3.1.6.
- [Release notes](https://github.com/pallets/werkzeug/releases)
- [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/werkzeug/compare/3.1.5...3.1.6)

---
updated-dependencies:
- dependency-name: werkzeug
  dependency-version: 3.1.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-20 13:52:36 +00:00
Jose Diaz-Gonzalez
e734b87ead Merge pull request #8351 from dokku/dependabot/docker/tests/apps/zombies-dockerfile-tini/golang-1.26.0
chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/zombies-dockerfile-tini
2026-02-19 00:11:52 -05:00
Jose Diaz-Gonzalez
ee9335fb46 Merge pull request #8350 from dokku/dependabot/docker/tests/apps/zombies-dockerfile-no-tini/golang-1.26.0
chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/zombies-dockerfile-no-tini
2026-02-19 00:11:45 -05:00
Jose Diaz-Gonzalez
73c6282e6b Merge pull request #8349 from dokku/dependabot/docker/tests/apps/go-fail-postdeploy/golang-1.26.0
chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/go-fail-postdeploy
2026-02-19 00:11:34 -05:00
Jose Diaz-Gonzalez
1897af90f9 Merge pull request #8348 from dokku/dependabot/docker/tests/apps/gogrpc/golang-1.26.0
chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/gogrpc
2026-02-19 00:11:22 -05:00
Jose Diaz-Gonzalez
7eca88180b Merge pull request #8347 from dokku/dependabot/docker/tests/apps/go-fail-predeploy/golang-1.26.0
chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/go-fail-predeploy
2026-02-19 00:11:16 -05:00
Jose Diaz-Gonzalez
1f7330649f Merge pull request #8344 from dokku/dependabot/go_modules/plugins/scheduler-k3s/sigs.k8s.io/kustomize/api-0.21.1
chore(deps): bump sigs.k8s.io/kustomize/api from 0.21.0 to 0.21.1 in /plugins/scheduler-k3s
2026-02-19 00:11:06 -05:00
dependabot[bot]
334b3186c1 chore(deps): bump pymdown-extensions in /docs/_build
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.20.1 to 10.21.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/commits/10.21)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-version: '10.21'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-16 14:52:58 +00:00
dependabot[bot]
a80822a9da chore(deps): bump golang in /tests/apps/zombies-dockerfile-tini
Bumps golang from 1.25.6 to 1.26.0.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-11 13:52:59 +00:00
dependabot[bot]
43842213a7 chore(deps): bump golang in /tests/apps/zombies-dockerfile-no-tini
Bumps golang from 1.25.6 to 1.26.0.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-11 13:52:55 +00:00
dependabot[bot]
ba162a6ffa chore(deps): bump golang in /tests/apps/go-fail-postdeploy
Bumps golang from 1.25.6 to 1.26.0.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-11 13:52:55 +00:00
dependabot[bot]
d534fc6f2c chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/gogrpc
Bumps golang from 1.25.6 to 1.26.0.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-11 13:52:51 +00:00
dependabot[bot]
fba51a1906 chore(deps): bump golang in /tests/apps/go-fail-predeploy
Bumps golang from 1.25.6 to 1.26.0.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-11 13:52:50 +00:00
dependabot[bot]
2a1704ff6a chore(deps): bump sigs.k8s.io/kustomize/api in /plugins/scheduler-k3s
Bumps [sigs.k8s.io/kustomize/api](https://github.com/kubernetes-sigs/kustomize) from 0.21.0 to 0.21.1.
- [Release notes](https://github.com/kubernetes-sigs/kustomize/releases)
- [Commits](https://github.com/kubernetes-sigs/kustomize/compare/api/v0.21.0...api/v0.21.1)

---
updated-dependencies:
- dependency-name: sigs.k8s.io/kustomize/api
  dependency-version: 0.21.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-10 13:53:58 +00:00
dependabot[bot]
eb6777be4a chore(deps): bump python in /tests/apps/dockerfile-release
Bumps python from 3.14.2-bookworm to 3.14.3-bookworm.

---
updated-dependencies:
- dependency-name: python
  dependency-version: 3.14.3-bookworm
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-09 15:34:11 +00:00
dependabot[bot]
77603ee82e chore(deps-dev): bump org.apache.maven.plugins:maven-dependency-plugin
Bumps [org.apache.maven.plugins:maven-dependency-plugin](https://github.com/apache/maven-dependency-plugin) from 3.9.0 to 3.10.0.
- [Release notes](https://github.com/apache/maven-dependency-plugin/releases)
- [Commits](https://github.com/apache/maven-dependency-plugin/compare/maven-dependency-plugin-3.9.0...maven-dependency-plugin-3.10.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-dependency-plugin
  dependency-version: 3.10.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-09 15:33:04 +00:00
Jose Diaz-Gonzalez
ed4b0c844a Merge pull request #8329 from dokku/dependabot/pip/tests/apps/multi/gunicorn-25.0.2
chore(deps): bump gunicorn from 25.0.1 to 25.0.2 in /tests/apps/multi
2026-02-06 16:18:03 -05:00
Jose Diaz-Gonzalez
29ec622dfe Merge pull request #8330 from dokku/dependabot/pip/tests/apps/python-flask/gunicorn-25.0.2
chore(deps): bump gunicorn from 25.0.1 to 25.0.2 in /tests/apps/python-flask
2026-02-06 16:17:57 -05:00
Jose Diaz-Gonzalez
3a19b18839 Merge pull request #8331 from dokku/dependabot/pip/tests/apps/dockerfile-release/gunicorn-25.0.2
chore(deps): bump gunicorn from 25.0.1 to 25.0.2 in /tests/apps/dockerfile-release
2026-02-06 16:17:48 -05:00
dependabot[bot]
01cb3c3cfc chore(deps): bump gunicorn in /tests/apps/dockerfile-release
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.0.1 to 25.0.2.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.0.1...v25.0.2)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-06 13:55:02 +00:00
dependabot[bot]
9e6aba96f2 chore(deps): bump gunicorn in /tests/apps/python-flask
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.0.1 to 25.0.2.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.0.1...v25.0.2)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-06 13:52:39 +00:00
dependabot[bot]
5cc4c3da36 chore(deps): bump gunicorn from 25.0.1 to 25.0.2 in /tests/apps/multi
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.0.1 to 25.0.2.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.0.1...v25.0.2)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-06 13:52:29 +00:00
Jose Diaz-Gonzalez
85ea47c6ed Merge pull request #8320 from dokku/dependabot/pip/tests/apps/dockerfile-release/django-5.2.11
chore(deps): bump django from 5.2.10 to 5.2.11 in /tests/apps/dockerfile-release
2026-02-04 10:05:46 -05:00
Jose Diaz-Gonzalez
5a90da2125 Merge pull request #8321 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/traefik/traefik/v2-2.11.36
chore(deps): bump github.com/traefik/traefik/v2 from 2.11.35 to 2.11.36 in /plugins/scheduler-k3s
2026-02-04 10:05:36 -05:00
dependabot[bot]
a9ae0ec6ad chore(deps): bump github.com/traefik/traefik/v2
Bumps [github.com/traefik/traefik/v2](https://github.com/traefik/traefik) from 2.11.35 to 2.11.36.
- [Release notes](https://github.com/traefik/traefik/releases)
- [Changelog](https://github.com/traefik/traefik/blob/v2.11.36/CHANGELOG.md)
- [Commits](https://github.com/traefik/traefik/compare/v2.11.35...v2.11.36)

---
updated-dependencies:
- dependency-name: github.com/traefik/traefik/v2
  dependency-version: 2.11.36
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-03 13:54:38 +00:00
dependabot[bot]
81f32a143b chore(deps): bump django in /tests/apps/dockerfile-release
Bumps [django](https://github.com/django/django) from 5.2.10 to 5.2.11.
- [Commits](https://github.com/django/django/commits)

---
updated-dependencies:
- dependency-name: django
  dependency-version: 5.2.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-03 13:54:36 +00:00
Jose Diaz-Gonzalez
8bf1fdad22 Merge pull request #8319 from dokku/dependabot/pip/tests/apps/dockerfile-release/gunicorn-25.0.1
chore(deps): bump gunicorn from 24.1.1 to 25.0.1 in /tests/apps/dockerfile-release
2026-02-02 20:32:26 -05:00
Jose Diaz-Gonzalez
7601fa2c7f Merge pull request #8318 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/cert-manager/cert-manager-1.19.3
chore(deps): bump github.com/cert-manager/cert-manager from 1.19.2 to 1.19.3 in /plugins/scheduler-k3s
2026-02-02 20:32:19 -05:00
Jose Diaz-Gonzalez
5c1be45a43 Merge pull request #8317 from dokku/dependabot/pip/tests/apps/multi/gunicorn-25.0.1
chore(deps): bump gunicorn from 24.1.1 to 25.0.1 in /tests/apps/multi
2026-02-02 20:31:51 -05:00
Jose Diaz-Gonzalez
d621c5dd76 Merge pull request #8316 from dokku/dependabot/pip/tests/apps/python-flask/gunicorn-25.0.1
chore(deps): bump gunicorn from 24.1.1 to 25.0.1 in /tests/apps/python-flask
2026-02-02 20:31:45 -05:00
dependabot[bot]
4c16f7df82 chore(deps): bump gunicorn in /tests/apps/dockerfile-release
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 24.1.1 to 25.0.1.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/24.1.1...25.0.1)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-02 15:37:15 +00:00
dependabot[bot]
b65de7dcbb chore(deps): bump github.com/cert-manager/cert-manager
Bumps [github.com/cert-manager/cert-manager](https://github.com/cert-manager/cert-manager) from 1.19.2 to 1.19.3.
- [Release notes](https://github.com/cert-manager/cert-manager/releases)
- [Changelog](https://github.com/cert-manager/cert-manager/blob/master/RELEASE.md)
- [Commits](https://github.com/cert-manager/cert-manager/compare/v1.19.2...v1.19.3)

---
updated-dependencies:
- dependency-name: github.com/cert-manager/cert-manager
  dependency-version: 1.19.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-02 15:36:58 +00:00
dependabot[bot]
ab6c1eaedc chore(deps): bump gunicorn from 24.1.1 to 25.0.1 in /tests/apps/multi
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 24.1.1 to 25.0.1.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/24.1.1...25.0.1)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-02 15:33:56 +00:00
dependabot[bot]
47b0dd23bd chore(deps): bump gunicorn in /tests/apps/python-flask
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 24.1.1 to 25.0.1.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/24.1.1...25.0.1)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-02 15:33:52 +00:00
Dokku Bot
82469c4c5f Release 0.37.6
# History

## 0.37.6

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.37.6/bootstrap.sh
sudo DOKKU_TAG=v0.37.6 bash bootstrap.sh
```

### Bug Fixes

- #8306: @josegonzalez Ensure we can call storage:report properly

### Documentation

- #8289: @josegonzalez Add an architecture document for dokku
- #8288: @josegonzalez Add a readme for the docs folder

### Dependencies

- #8312: @dependabot[bot] chore(deps): bump timberio/vector from 0.52.0-debian to 0.53.0-debian in /plugins/logs
- #8311: @dependabot[bot] chore(deps): bump gunicorn from 24.0.0 to 24.1.1 in /tests/apps/dockerfile-release
- #8308: @dependabot[bot] chore(deps): bump gunicorn from 24.0.0 to 24.1.1 in /tests/apps/multi
- #8309: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.20 to 10.20.1 in /docs/_build
- #8307: @dependabot[bot] chore(deps): bump gunicorn from 24.0.0 to 24.1.1 in /tests/apps/python-flask
- #8301: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.19.5 to 3.20.0 in /plugins/scheduler-k3s
- #8299: @dependabot[bot] chore(deps): bump ruby from 4.0.0 to 4.0.1 in /tests/apps/dockerfile-entrypoint
- #8293: @dependabot[bot] chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/zombies-dockerfile-no-tini
- #8296: @dependabot[bot] chore(deps): bump soupsieve from 2.8.1 to 2.8.3 in /docs/_build
- #8295: @dependabot[bot] chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/go-fail-postdeploy
- #8294: @dependabot[bot] chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/gogrpc
- #8291: @dependabot[bot] chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/zombies-dockerfile-tini
- #8292: @dependabot[bot] chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/go-fail-predeploy
- #8277: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.34 to 2.11.35 in /plugins/scheduler-k3s
- #8297: @dependabot[bot] chore(deps): bump pyparsing from 3.3.1 to 3.3.2 in /docs/_build
- #8298: @dependabot[bot] chore(deps): bump lodash from 4.17.21 to 4.17.23 in /tests/apps/multi
- #8300: @dependabot[bot] chore(deps): bump packaging from 25.0 to 26.0 in /docs/_build
- #8303: @dependabot[bot] chore(deps): bump gunicorn from 23.0.0 to 24.0.0 in /tests/apps/python-flask
- #8305: @dependabot[bot] chore(deps): bump gunicorn from 23.0.0 to 24.0.0 in /tests/apps/dockerfile-release
- #8304: @dependabot[bot] chore(deps): bump gunicorn from 23.0.0 to 24.0.0 in /tests/apps/multi
- #8280: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.19.4 to 3.19.5 in /plugins/scheduler-k3s
- #8279: @dependabot[bot] chore(deps): bump traefik from 3.6.6 to 3.6.7 in /plugins/traefik-vhosts
2026-01-28 17:39:04 +00:00
Jose Diaz-Gonzalez
edbb7fe664 Merge pull request #8312 from dokku/dependabot/docker/plugins/logs/timberio/vector-0.53.0-debian
chore(deps): bump timberio/vector from 0.52.0-debian to 0.53.0-debian in /plugins/logs
2026-01-28 12:37:40 -05:00
dependabot[bot]
febfe26e8c chore(deps): bump timberio/vector in /plugins/logs
Bumps timberio/vector from 0.52.0-debian to 0.53.0-debian.

---
updated-dependencies:
- dependency-name: timberio/vector
  dependency-version: 0.53.0-debian
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 13:53:36 +00:00
Jose Diaz-Gonzalez
3aaa54d5eb Merge pull request #8311 from dokku/dependabot/pip/tests/apps/dockerfile-release/gunicorn-24.1.1
chore(deps): bump gunicorn from 24.0.0 to 24.1.1 in /tests/apps/dockerfile-release
2026-01-26 12:03:51 -05:00
Jose Diaz-Gonzalez
e34c14591c Merge pull request #8308 from dokku/dependabot/pip/tests/apps/multi/gunicorn-24.1.1
chore(deps): bump gunicorn from 24.0.0 to 24.1.1 in /tests/apps/multi
2026-01-26 11:08:17 -05:00
Jose Diaz-Gonzalez
c4209be082 Merge pull request #8309 from dokku/dependabot/pip/docs/_build/pymdown-extensions-10.20.1
chore(deps): bump pymdown-extensions from 10.20 to 10.20.1 in /docs/_build
2026-01-26 11:07:32 -05:00
Jose Diaz-Gonzalez
4278b8876a Merge pull request #8307 from dokku/dependabot/pip/tests/apps/python-flask/gunicorn-24.1.1
chore(deps): bump gunicorn from 24.0.0 to 24.1.1 in /tests/apps/python-flask
2026-01-26 11:05:58 -05:00
dependabot[bot]
ef0787e12d chore(deps): bump gunicorn in /tests/apps/dockerfile-release
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 24.0.0 to 24.1.1.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/24.0.0...24.1.1)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 24.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-26 15:08:42 +00:00
dependabot[bot]
f127a04337 chore(deps): bump pymdown-extensions in /docs/_build
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.20 to 10.20.1.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/commits)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-version: 10.20.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-26 15:06:34 +00:00
dependabot[bot]
aad9072b3a chore(deps): bump gunicorn from 24.0.0 to 24.1.1 in /tests/apps/multi
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 24.0.0 to 24.1.1.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/24.0.0...24.1.1)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 24.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-26 15:05:18 +00:00
dependabot[bot]
7d833428ac chore(deps): bump gunicorn in /tests/apps/python-flask
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 24.0.0 to 24.1.1.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/24.0.0...24.1.1)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 24.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-26 15:05:09 +00:00
Jose Diaz-Gonzalez
8ba3ab3b4a Merge pull request #8301 from dokku/dependabot/go_modules/plugins/scheduler-k3s/helm.sh/helm/v3-3.20.0
chore(deps): bump helm.sh/helm/v3 from 3.19.5 to 3.20.0 in /plugins/scheduler-k3s
2026-01-26 00:05:41 -05:00
Jose Diaz-Gonzalez
d5eefba20a Merge pull request #8299 from dokku/dependabot/docker/tests/apps/dockerfile-entrypoint/ruby-4.0.1
chore(deps): bump ruby from 4.0.0 to 4.0.1 in /tests/apps/dockerfile-entrypoint
2026-01-26 00:05:34 -05:00
Jose Diaz-Gonzalez
de6bf2812f Merge pull request #8306 from dokku/8275-fix-storage-report
Ensure we can call storage:report properly
2026-01-26 00:05:23 -05:00
Jose Diaz-Gonzalez
bdbd295a02 fix: ensure we can call storage:report properly
Closes #8275
2026-01-25 22:58:10 -05:00
dependabot[bot]
7aa5d41350 chore(deps): bump helm.sh/helm/v3 in /plugins/scheduler-k3s
Bumps [helm.sh/helm/v3](https://github.com/helm/helm) from 3.19.5 to 3.20.0.
- [Release notes](https://github.com/helm/helm/releases)
- [Commits](https://github.com/helm/helm/compare/v3.19.5...v3.20.0)

---
updated-dependencies:
- dependency-name: helm.sh/helm/v3
  dependency-version: 3.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-24 22:30:36 +00:00
Jose Diaz-Gonzalez
6a9e416724 Merge pull request #8293 from dokku/dependabot/docker/tests/apps/zombies-dockerfile-no-tini/golang-1.25.6
chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/zombies-dockerfile-no-tini
2026-01-24 17:28:27 -05:00
Jose Diaz-Gonzalez
e9625047d7 Merge pull request #8296 from dokku/dependabot/pip/docs/_build/soupsieve-2.8.3
chore(deps): bump soupsieve from 2.8.1 to 2.8.3 in /docs/_build
2026-01-24 17:28:20 -05:00
Jose Diaz-Gonzalez
73aaf500ba Merge pull request #8295 from dokku/dependabot/docker/tests/apps/go-fail-postdeploy/golang-1.25.6
chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/go-fail-postdeploy
2026-01-24 17:28:14 -05:00
Jose Diaz-Gonzalez
e402e766b0 Merge pull request #8294 from dokku/dependabot/docker/tests/apps/gogrpc/golang-1.25.6
chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/gogrpc
2026-01-24 17:28:09 -05:00
Jose Diaz-Gonzalez
ec1fe57ff4 Merge pull request #8291 from dokku/dependabot/docker/tests/apps/zombies-dockerfile-tini/golang-1.25.6
chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/zombies-dockerfile-tini
2026-01-24 17:27:57 -05:00
Jose Diaz-Gonzalez
c466c6efab Merge pull request #8292 from dokku/dependabot/docker/tests/apps/go-fail-predeploy/golang-1.25.6
chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/go-fail-predeploy
2026-01-24 17:27:50 -05:00
Jose Diaz-Gonzalez
9881497bc9 Merge pull request #8277 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/traefik/traefik/v2-2.11.35
chore(deps): bump github.com/traefik/traefik/v2 from 2.11.34 to 2.11.35 in /plugins/scheduler-k3s
2026-01-24 17:27:46 -05:00
Jose Diaz-Gonzalez
ac3efe1675 Merge pull request #8297 from dokku/dependabot/pip/docs/_build/pyparsing-3.3.2
chore(deps): bump pyparsing from 3.3.1 to 3.3.2 in /docs/_build
2026-01-24 17:27:29 -05:00
Jose Diaz-Gonzalez
2ba1e6ec3b Merge pull request #8298 from dokku/dependabot/npm_and_yarn/tests/apps/multi/lodash-4.17.23
chore(deps): bump lodash from 4.17.21 to 4.17.23 in /tests/apps/multi
2026-01-24 17:27:18 -05:00
Jose Diaz-Gonzalez
3d0658f3d8 Merge pull request #8300 from dokku/dependabot/pip/docs/_build/packaging-26.0
chore(deps): bump packaging from 25.0 to 26.0 in /docs/_build
2026-01-24 17:26:58 -05:00
Jose Diaz-Gonzalez
c4f8327ef0 docs: fix readme indentation 2026-01-24 17:26:36 -05:00
Jose Diaz-Gonzalez
8bfb5ff8ca Merge pull request #8303 from dokku/dependabot/pip/tests/apps/python-flask/gunicorn-24.0.0
chore(deps): bump gunicorn from 23.0.0 to 24.0.0 in /tests/apps/python-flask
2026-01-24 17:25:27 -05:00
Jose Diaz-Gonzalez
873bf5eb45 Merge pull request #8305 from dokku/dependabot/pip/tests/apps/dockerfile-release/gunicorn-24.0.0
chore(deps): bump gunicorn from 23.0.0 to 24.0.0 in /tests/apps/dockerfile-release
2026-01-24 17:25:13 -05:00
Jose Diaz-Gonzalez
82c8cf5587 Merge pull request #8304 from dokku/dependabot/pip/tests/apps/multi/gunicorn-24.0.0
chore(deps): bump gunicorn from 23.0.0 to 24.0.0 in /tests/apps/multi
2026-01-24 17:25:08 -05:00
dependabot[bot]
5b4d30a9ad chore(deps): bump gunicorn in /tests/apps/dockerfile-release
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 23.0.0 to 24.0.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/23.0.0...24.0.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 24.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-23 13:54:49 +00:00
dependabot[bot]
bbabba727b chore(deps): bump gunicorn from 23.0.0 to 24.0.0 in /tests/apps/multi
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 23.0.0 to 24.0.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/23.0.0...24.0.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 24.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-23 13:52:35 +00:00
dependabot[bot]
cf6377298d chore(deps): bump gunicorn in /tests/apps/python-flask
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 23.0.0 to 24.0.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/23.0.0...24.0.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 24.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-23 13:52:33 +00:00
dependabot[bot]
a5cc27eaba chore(deps): bump packaging from 25.0 to 26.0 in /docs/_build
Bumps [packaging](https://github.com/pypa/packaging) from 25.0 to 26.0.
- [Release notes](https://github.com/pypa/packaging/releases)
- [Changelog](https://github.com/pypa/packaging/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pypa/packaging/compare/25.0...26.0)

---
updated-dependencies:
- dependency-name: packaging
  dependency-version: '26.0'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-22 13:53:24 +00:00
dependabot[bot]
55435f549a chore(deps): bump ruby in /tests/apps/dockerfile-entrypoint
Bumps ruby from 4.0.0 to 4.0.1.

---
updated-dependencies:
- dependency-name: ruby
  dependency-version: 4.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-22 13:52:58 +00:00
dependabot[bot]
842a8f2839 chore(deps): bump lodash from 4.17.21 to 4.17.23 in /tests/apps/multi
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 23:07:04 +00:00
dependabot[bot]
1f5758268e chore(deps): bump pyparsing from 3.3.1 to 3.3.2 in /docs/_build
Bumps [pyparsing](https://github.com/pyparsing/pyparsing) from 3.3.1 to 3.3.2.
- [Release notes](https://github.com/pyparsing/pyparsing/releases)
- [Changelog](https://github.com/pyparsing/pyparsing/blob/master/CHANGES)
- [Commits](https://github.com/pyparsing/pyparsing/compare/3.3.1...3.3.2)

---
updated-dependencies:
- dependency-name: pyparsing
  dependency-version: 3.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 13:53:29 +00:00
dependabot[bot]
eec52362cd chore(deps): bump soupsieve from 2.8.1 to 2.8.3 in /docs/_build
Bumps [soupsieve](https://github.com/facelessuser/soupsieve) from 2.8.1 to 2.8.3.
- [Release notes](https://github.com/facelessuser/soupsieve/releases)
- [Commits](https://github.com/facelessuser/soupsieve/compare/2.8.1...2.8.3)

---
updated-dependencies:
- dependency-name: soupsieve
  dependency-version: 2.8.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-20 13:53:29 +00:00
dependabot[bot]
a21debe4b0 chore(deps): bump golang in /tests/apps/go-fail-postdeploy
Bumps golang from 1.25.5 to 1.25.6.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.25.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-20 13:53:10 +00:00
dependabot[bot]
09934eaa89 chore(deps): bump golang in /tests/apps/zombies-dockerfile-no-tini
Bumps golang from 1.25.5 to 1.25.6.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.25.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-20 13:53:05 +00:00
dependabot[bot]
436fcebdd8 chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/gogrpc
Bumps golang from 1.25.5 to 1.25.6.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.25.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-20 13:53:05 +00:00
dependabot[bot]
fdb85039b1 chore(deps): bump golang in /tests/apps/zombies-dockerfile-tini
Bumps golang from 1.25.5 to 1.25.6.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.25.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-20 13:53:03 +00:00
dependabot[bot]
4cff2dd02f chore(deps): bump golang in /tests/apps/go-fail-predeploy
Bumps golang from 1.25.5 to 1.25.6.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.25.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-20 13:53:03 +00:00
Jose Diaz-Gonzalez
08cd8909b3 Merge pull request #8289 from dokku/architecture-docs
Add an architecture document for dokku
2026-01-19 01:27:09 -05:00
Jose Diaz-Gonzalez
8614706763 docs: add an architecture document for dokku 2026-01-19 01:26:48 -05:00
Jose Diaz-Gonzalez
7dfeff4ffd Merge pull request #8288 from dokku/docs-readme
Add a readme for the docs folder
2026-01-19 00:55:26 -05:00
Jose Diaz-Gonzalez
fba79477df docs: add a readme for the docs folder 2026-01-19 00:54:57 -05:00
dependabot[bot]
956d372dad chore(deps): bump github.com/traefik/traefik/v2
Bumps [github.com/traefik/traefik/v2](https://github.com/traefik/traefik) from 2.11.34 to 2.11.35.
- [Release notes](https://github.com/traefik/traefik/releases)
- [Changelog](https://github.com/traefik/traefik/blob/v2.11.35/CHANGELOG.md)
- [Commits](https://github.com/traefik/traefik/compare/v2.11.34...v2.11.35)

---
updated-dependencies:
- dependency-name: github.com/traefik/traefik/v2
  dependency-version: 2.11.35
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-17 21:15:25 +00:00
Jose Diaz-Gonzalez
9a34b4716f Merge pull request #8280 from dokku/dependabot/go_modules/plugins/scheduler-k3s/helm.sh/helm/v3-3.19.5
chore(deps): bump helm.sh/helm/v3 from 3.19.4 to 3.19.5 in /plugins/scheduler-k3s
2026-01-17 16:13:39 -05:00
Jose Diaz-Gonzalez
bc3ae5f515 Merge pull request #8279 from dokku/dependabot/docker/plugins/traefik-vhosts/traefik-3.6.7
chore(deps): bump traefik from 3.6.6 to 3.6.7 in /plugins/traefik-vhosts
2026-01-17 16:13:33 -05:00
dependabot[bot]
7b5db312aa chore(deps): bump helm.sh/helm/v3 in /plugins/scheduler-k3s
Bumps [helm.sh/helm/v3](https://github.com/helm/helm) from 3.19.4 to 3.19.5.
- [Release notes](https://github.com/helm/helm/releases)
- [Commits](https://github.com/helm/helm/compare/v3.19.4...v3.19.5)

---
updated-dependencies:
- dependency-name: helm.sh/helm/v3
  dependency-version: 3.19.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-15 13:54:54 +00:00
dependabot[bot]
1660538e07 chore(deps): bump traefik from 3.6.6 to 3.6.7 in /plugins/traefik-vhosts
Bumps traefik from 3.6.6 to 3.6.7.

---
updated-dependencies:
- dependency-name: traefik
  dependency-version: 3.6.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-15 13:53:58 +00:00
Dokku Bot
f924c0be62 Release 0.37.5
# History

## 0.37.5

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.37.5/bootstrap.sh
sudo DOKKU_TAG=v0.37.5 bash bootstrap.sh
```

### Bug Fixes

- #8274: @josegonzalez Delete the tls app chart when the app is deleted
- #8273: @josegonzalez Ensure the destination directory exists when extracting files from a repository
- #8263: @josegonzalez Set correct version for builder-railpack plugin

### New Features

- #8268: @josegonzalez Add the ability to log into a registry on a per-app basis
- #8258: @josegonzalez Add support for dns-01 challenge mode when using traefik
- #8262: @josegonzalez Use certificates imported by certs plugin when deploying via scheduler-k3s
- #8266: @josegonzalez Add a method to force build when re-using an image with git:from-image
- #8265: @josegonzalez Add the ability to skip setting the deploy-branch when running git:sync

### Refactors

- #8264: @josegonzalez Rewrite the storage plugin in golang

### Dependencies

- #8270: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.38.3 to 1.39.0 in /plugins/common
- #8267: @dependabot[bot] chore(deps): bump werkzeug from 3.1.4 to 3.1.5 in /tests/apps/python-flask
- #8260: @dependabot[bot] chore(deps): bump django from 5.2.9 to 5.2.10 in /tests/apps/dockerfile-release
- #8256: @dependabot[bot] chore(deps): bump luizm/action-sh-checker from 0.9.0 to 0.10.0
- #8257: @dependabot[bot] chore(deps): bump dj-database-url from 3.0.1 to 3.1.0 in /tests/apps/dockerfile-release
2026-01-10 13:50:01 +00:00
Jose Diaz-Gonzalez
ed8fe40a1c Merge pull request #8268 from dokku/5324-login-to-registry-per-app
Add the ability to log into a registry on a per-app basis
2026-01-10 08:48:16 -05:00
Jose Diaz-Gonzalez
4ff3cbc6c6 Merge pull request #8274 from dokku/8271-delete-tls-app-chart
Delete the tls app chart when the app is deleted
2026-01-10 04:44:00 -05:00
Jose Diaz-Gonzalez
68babd168a fix: print out Login Succeeded messages 2026-01-10 03:07:31 -05:00
Jose Diaz-Gonzalez
5c2045b6ea fix: delete the tls app chart when the app is deleted 2026-01-10 02:52:01 -05:00
Jose Diaz-Gonzalez
9bb766cf17 fix: reference app-specific config.json for retrieving registry auths 2026-01-10 02:33:59 -05:00
Jose Diaz-Gonzalez
b9ede65d6e fix: do not stream output from login/logout commands 2026-01-10 02:30:27 -05:00
Jose Diaz-Gonzalez
2123201410 fix: use correct value for DOCKER_CONFIG when logging in or out 2026-01-10 02:29:18 -05:00
Jose Diaz-Gonzalez
b45520f5b8 Merge pull request #8273 from dokku/8272-fix-missing-directory
Ensure the destination directory exists when extracting files from a repository
2026-01-10 01:46:11 -05:00
Jose Diaz-Gonzalez
3b040767e0 fix: add missing whitespace 2026-01-10 00:33:22 -05:00
Jose Diaz-Gonzalez
f202072220 fix: ensure the destination directory exists when extracting files from a repository
Closes #8272
2026-01-09 23:58:52 -05:00
Jose Diaz-Gonzalez
41a15a7319 fix: set DOCKER_CONFIG to the directory holding the config.json 2026-01-09 23:47:00 -05:00
Jose Diaz-Gonzalez
475b395d9a Merge pull request #8270 from dokku/dependabot/go_modules/plugins/common/github.com/onsi/gomega-1.39.0
chore(deps): bump github.com/onsi/gomega from 1.38.3 to 1.39.0 in /plugins/common
2026-01-09 22:28:59 -05:00
Jose Diaz-Gonzalez
1ae431e81b chore: bump go modules and run go mod tidy 2026-01-09 19:58:34 -05:00
dependabot[bot]
af1c916574 chore(deps): bump github.com/onsi/gomega in /plugins/common
Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.38.3 to 1.39.0.
- [Release notes](https://github.com/onsi/gomega/releases)
- [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/gomega/compare/v1.38.3...v1.39.0)

---
updated-dependencies:
- dependency-name: github.com/onsi/gomega
  dependency-version: 1.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-09 13:59:48 +00:00
Jose Diaz-Gonzalez
6a83fd053c feat: add the ability to log into a registry on a per-app basis
Closes #5324
2026-01-09 00:12:16 -05:00
Jose Diaz-Gonzalez
2093db6e74 Merge pull request #8267 from dokku/dependabot/pip/tests/apps/python-flask/werkzeug-3.1.5 2026-01-08 21:08:26 -05:00
dependabot[bot]
dc5fe1b1ef chore(deps): bump werkzeug in /tests/apps/python-flask
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.1.4 to 3.1.5.
- [Release notes](https://github.com/pallets/werkzeug/releases)
- [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/werkzeug/compare/3.1.4...3.1.5)

---
updated-dependencies:
- dependency-name: werkzeug
  dependency-version: 3.1.5
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-09 00:59:27 +00:00
Jose Diaz-Gonzalez
3cfdee77e3 Merge pull request #8258 from dokku/6423-traefik-challenge-support
Add support for dns-01 challenge mode when using traefik
2026-01-08 12:47:16 -05:00
Jose Diaz-Gonzalez
fd08478f90 Merge pull request #8262 from dokku/7257-import-certificate-into-k8s-app
Use certificates imported by certs plugin when deploying via scheduler-k3s
2026-01-08 12:46:30 -05:00
Jose Diaz-Gonzalez
ea712c0562 Merge pull request #8264 from dokku/6814-rewrite-storage-plugin-in-golang
Rewrite the storage plugin in golang
2026-01-08 12:45:52 -05:00
Jose Diaz-Gonzalez
91e800a97b Merge pull request #8266 from dokku/6847-allow-force-pull-image-on-git-from-image
Add a method to force build when re-using an image with git:from-image
2026-01-08 12:11:54 -05:00
Jose Diaz-Gonzalez
00e07f7c89 fix: correct the report output 2026-01-08 11:56:31 -05:00
Jose Diaz-Gonzalez
b56dd52727 chore: fix lint issues 2026-01-08 10:37:57 -05:00
Jose Diaz-Gonzalez
2a29c7aee5 Merge pull request #8265 from dokku/8212-git-sync-skip-setting-deploy-branch
Add the ability to skip setting the deploy-branch when running git:sync
2026-01-08 10:30:32 -05:00
Jose Diaz-Gonzalez
6c3936802e feat: add a method to force build when re-using an image with git:from-image
Closes #6847
2026-01-08 02:46:53 -05:00
Jose Diaz-Gonzalez
dd70fb823d feat: add the ability to skip setting the deploy-branch when running git:sync
Closes #8212
2026-01-08 02:19:22 -05:00
Jose Diaz-Gonzalez
8af070ac00 feat: rewrite the storage plugin in golang
Refs #6814
2026-01-08 02:01:53 -05:00
Jose Diaz-Gonzalez
924d010330 Merge pull request #8263 from dokku/josegonzalez-patch-1
Set correct version for builder-railpack plugin
2026-01-08 01:37:55 -05:00
Jose Diaz-Gonzalez
c7ef613118 fix: set correct version for builder-railpack plugin 2026-01-08 01:37:34 -05:00
Jose Diaz-Gonzalez
b8e8ea74ff feat: use certificates imported by certs plugin when deploying via scheduler-k3s
Closes #7257
2026-01-08 01:05:40 -05:00
Jose Diaz-Gonzalez
b99e0b303d Merge pull request #8260 from dokku/dependabot/pip/tests/apps/dockerfile-release/django-5.2.10
chore(deps): bump django from 5.2.9 to 5.2.10 in /tests/apps/dockerfile-release
2026-01-07 21:04:26 -05:00
dependabot[bot]
50830545e9 chore(deps): bump django in /tests/apps/dockerfile-release
Bumps [django](https://github.com/django/django) from 5.2.9 to 5.2.10.
- [Commits](https://github.com/django/django/compare/5.2.9...5.2.10)

---
updated-dependencies:
- dependency-name: django
  dependency-version: 5.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-07 13:15:07 +00:00
Jose Diaz-Gonzalez
df8b725081 feat: add support for dns-01 challenge mode when using traefik
Closes #6423
2026-01-07 01:16:05 -05:00
Jose Diaz-Gonzalez
ffba7ed2f5 Merge pull request #8256 from dokku/dependabot/github_actions/luizm/action-sh-checker-0.10.0
chore(deps): bump luizm/action-sh-checker from 0.9.0 to 0.10.0
2026-01-05 15:39:59 -05:00
Jose Diaz-Gonzalez
52b2e2f3aa Merge pull request #8257 from dokku/dependabot/pip/tests/apps/dockerfile-release/dj-database-url-3.1.0
chore(deps): bump dj-database-url from 3.0.1 to 3.1.0 in /tests/apps/dockerfile-release
2026-01-05 15:39:51 -05:00
dependabot[bot]
290e320108 chore(deps): bump dj-database-url in /tests/apps/dockerfile-release
Bumps [dj-database-url](https://github.com/jazzband/dj-database-url) from 3.0.1 to 3.1.0.
- [Release notes](https://github.com/jazzband/dj-database-url/releases)
- [Changelog](https://github.com/jazzband/dj-database-url/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jazzband/dj-database-url/compare/v3.0.1...v3.1.0)

---
updated-dependencies:
- dependency-name: dj-database-url
  dependency-version: 3.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-05 13:10:46 +00:00
dependabot[bot]
20c45ffb61 chore(deps): bump luizm/action-sh-checker from 0.9.0 to 0.10.0
Bumps [luizm/action-sh-checker](https://github.com/luizm/action-sh-checker) from 0.9.0 to 0.10.0.
- [Release notes](https://github.com/luizm/action-sh-checker/releases)
- [Commits](17bd25a6ee...883217215b)

---
updated-dependencies:
- dependency-name: luizm/action-sh-checker
  dependency-version: 0.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-05 13:03:44 +00:00
Dokku Bot
10e835f6fe Release 0.37.4
# History

## 0.37.4

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.37.4/bootstrap.sh
sudo DOKKU_TAG=v0.37.4 bash bootstrap.sh
```

### Bug Fixes

- #8168: @josegonzalez Install logrotate in the container

### Tests

- #8254: @josegonzalez Add a test to prove cron:run commands work as expected
- #8255: @josegonzalez Update test ruby app

### Dependencies

- #8252: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.19.1 to 10.20 in /docs/_build
- #8253: @dependabot[bot] chore(deps): bump qs from 6.14.0 to 6.14.1 in /tests/apps/checks-root
- #8249: @dependabot[bot] chore(deps): bump traefik from 3.6.5 to 3.6.6 in /plugins/traefik-vhosts
- #8250: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.33 to 2.11.34 in /plugins/scheduler-k3s
- #8247: @dependabot[bot] chore(deps): bump ruby from 3.4.8 to 4.0.0 in /tests/apps/dockerfile-entrypoint

### Other

- #8248: @osbre Add `proxy-keepalive` to Nginx properties
2026-01-05 04:54:10 +00:00
Jose Diaz-Gonzalez
822e5d9111 Merge pull request #8168 from dokku/8166-logrotate
Install logrotate in the container
2026-01-04 23:52:59 -05:00
Jose Diaz-Gonzalez
7033a90659 fix: drop check 2026-01-04 23:52:27 -05:00
Jose Diaz-Gonzalez
47e6420c43 Merge pull request #8254 from dokku/8242-cron-run
Add a test to prove cron:run commands work as expected
2026-01-04 23:51:10 -05:00
Jose Diaz-Gonzalez
f64b87cc27 fix: use correct path for app-cnb-cron.json 2026-01-04 22:03:59 -05:00
Jose Diaz-Gonzalez
9d603e1a45 fix: use real path when extracting files 2026-01-04 20:46:00 -05:00
Jose Diaz-Gonzalez
8f9ca78642 chore: debug 2026-01-04 03:38:44 -05:00
Jose Diaz-Gonzalez
1844416917 Merge pull request #8255 from dokku/update-ruby-test-app
Update test ruby app
2026-01-04 02:53:33 -05:00
Jose Diaz-Gonzalez
7cfabe1322 fix: move the correct file over 2026-01-04 02:42:21 -05:00
Jose Diaz-Gonzalez
c19cb81c4b tests: add a test to prove cron:run commands work as expected
Closes #8242
2026-01-04 00:57:43 -05:00
Jose Diaz-Gonzalez
52c95d4317 tests: update test ruby app 2026-01-04 00:55:49 -05:00
Jose Diaz-Gonzalez
b1ebd694e6 refactor: standardize on add_requirements_txt wrapper 2026-01-04 00:35:30 -05:00
Jose Diaz-Gonzalez
1683cff5f9 chore: re-purge syslog-ng-core 2026-01-04 00:10:35 -05:00
Jose Diaz-Gonzalez
3f492f2f25 fix: install logrotate in the container 2026-01-03 22:50:38 -05:00
Jose Diaz-Gonzalez
58bc159063 Merge pull request #8248 from osbre/feat/nginx-upstream-keepalive-property
Add `proxy-keepalive` to Nginx properties
2026-01-03 22:08:02 -05:00
Jose Diaz-Gonzalez
8891fcd61e Merge pull request #8252 from dokku/dependabot/pip/docs/_build/pymdown-extensions-10.20
chore(deps): bump pymdown-extensions from 10.19.1 to 10.20 in /docs/_build
2026-01-03 21:38:14 -05:00
Jose Diaz-Gonzalez
bc9ef6b832 Merge pull request #8253 from dokku/dependabot/npm_and_yarn/tests/apps/checks-root/qs-6.14.1
chore(deps): bump qs from 6.14.0 to 6.14.1 in /tests/apps/checks-root
2026-01-03 21:38:07 -05:00
dependabot[bot]
ab4ab29a32 chore(deps): bump qs from 6.14.0 to 6.14.1 in /tests/apps/checks-root
Bumps [qs](https://github.com/ljharb/qs) from 6.14.0 to 6.14.1.
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.0...v6.14.1)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-01 19:19:39 +00:00
dependabot[bot]
b9d5556b72 chore(deps): bump pymdown-extensions in /docs/_build
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.19.1 to 10.20.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.19.1...10.20)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-version: '10.20'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-01 13:04:14 +00:00
Jose Diaz-Gonzalez
f3797264ce Merge pull request #8249 from dokku/dependabot/docker/plugins/traefik-vhosts/traefik-3.6.6
chore(deps): bump traefik from 3.6.5 to 3.6.6 in /plugins/traefik-vhosts
2025-12-30 13:57:56 -05:00
Jose Diaz-Gonzalez
f8f1588764 Merge pull request #8250 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/traefik/traefik/v2-2.11.34
chore(deps): bump github.com/traefik/traefik/v2 from 2.11.33 to 2.11.34 in /plugins/scheduler-k3s
2025-12-30 13:57:49 -05:00
dependabot[bot]
1d3a1a938a chore(deps): bump github.com/traefik/traefik/v2
Bumps [github.com/traefik/traefik/v2](https://github.com/traefik/traefik) from 2.11.33 to 2.11.34.
- [Release notes](https://github.com/traefik/traefik/releases)
- [Changelog](https://github.com/traefik/traefik/blob/master/CHANGELOG.md)
- [Commits](https://github.com/traefik/traefik/compare/v2.11.33...v2.11.34)

---
updated-dependencies:
- dependency-name: github.com/traefik/traefik/v2
  dependency-version: 2.11.34
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-30 13:09:14 +00:00
dependabot[bot]
8c49dac90e chore(deps): bump traefik from 3.6.5 to 3.6.6 in /plugins/traefik-vhosts
Bumps traefik from 3.6.5 to 3.6.6.

---
updated-dependencies:
- dependency-name: traefik
  dependency-version: 3.6.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-30 13:08:32 +00:00
Ostap Brehin
c84c0208a9 Nginx property proxy-keepalive must be an integer 2025-12-28 10:08:11 +00:00
Ostap Brehin
caff2e6b96 Document proxy-keepalive Nginx property 2025-12-27 20:27:29 +00:00
Ostap Brehin
675529cb6f Add proxy-keepalive to Nginx properties 2025-12-27 20:27:29 +00:00
Jose Diaz-Gonzalez
fd03ee7849 Merge pull request #8247 from dokku/dependabot/docker/tests/apps/dockerfile-entrypoint/ruby-4.0.0
chore(deps): bump ruby from 3.4.8 to 4.0.0 in /tests/apps/dockerfile-entrypoint
2025-12-26 16:48:29 -05:00
dependabot[bot]
4cbf4e9424 chore(deps): bump ruby in /tests/apps/dockerfile-entrypoint
Bumps ruby from 3.4.8 to 4.0.0.

---
updated-dependencies:
- dependency-name: ruby
  dependency-version: 4.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-26 13:04:03 +00:00
Dokku Bot
337a56d45f Release 0.37.3
# History

## 0.37.3

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.37.3/bootstrap.sh
sudo DOKKU_TAG=v0.37.3 bash bootstrap.sh
```

### Bug Fixes

- #8199: @josegonzalez Pass global build args as array when building nixpacks apps
- #8236: @josegonzalez Ensure the /etc/docker exists when interacting with it via postinst

### Documentation

- #8229: @kleutzinger Fix command syntax for removing docker options
- #8219: @deanmarano Add deanmarano to community plugins list
- #8205: @deanmarano Add DNS plugin to community plugins list

### Tests

- #8246: @josegonzalez Add tests to prove that Procfile tasks all work for every builder

### Dependencies

- #8243: @dependabot[bot] chore(deps): bump k8s.io/kubectl from 0.34.2 to 0.35.0 in /plugins/scheduler-k3s
- #8245: @dependabot[bot] chore(deps): bump github.com/go-resty/resty/v2 from 2.17.0 to 2.17.1 in /plugins/scheduler-k3s
- #8244: @dependabot[bot] chore(deps): bump k8s.io/kubernetes from 1.34.2 to 1.35.0 in /plugins/scheduler-k3s
- #8233: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.38.2 to 1.38.3 in /plugins/common
- #8241: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.32 to 2.11.33 in /plugins/scheduler-k3s
- #8240: @dependabot[bot] chore(deps): bump github.com/cert-manager/cert-manager from 1.19.1 to 1.19.2 in /plugins/scheduler-k3s
- #8239: @dependabot[bot] chore(deps): bump pyparsing from 3.2.5 to 3.3.1 in /docs/_build
- #8238: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.77.0 to 1.78.0 in /tests/apps/gogrpc
- #8237: @dependabot[bot] chore(deps): bump github.com/kedacore/keda/v2 from 2.18.2 to 2.18.3 in /plugins/scheduler-k3s
- #8235: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.19.2 to 3.19.4 in /plugins/scheduler-k3s
- #8232: @dependabot[bot] chore(deps): bump importlib-metadata from 8.7.0 to 8.7.1 in /docs/_build
- #8234: @dependabot[bot] chore(deps): bump k8s.io/client-go from 0.34.2 to 0.35.0 in /plugins/scheduler-k3s
- #8231: @dependabot[bot] chore(deps): bump github.com/expr-lang/expr from 1.17.6 to 1.17.7 in /plugins/scheduler-k3s
- #8208: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.45.0 to 0.46.0 in /plugins/common
- #8201: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.18.0 to 0.19.0 in /plugins/common
- #8214: @dependabot[bot] chore(deps): bump google.golang.org/protobuf from 1.36.10 to 1.36.11 in /tests/apps/gogrpc
- #8216: @dependabot[bot] chore(deps): bump actions/download-artifact from 6 to 7
- #8217: @dependabot[bot] chore(deps): bump actions/upload-artifact from 5 to 6
- #8228: @dependabot[bot] chore(deps): bump soupsieve from 2.8 to 2.8.1 in /docs/_build
- #8226: @dependabot[bot] chore(deps): bump ruby from 3.4.7 to 3.4.8 in /tests/apps/dockerfile-entrypoint
- #8227: @dependabot[bot] chore(deps): bump mkdocs-material from 9.7.0 to 9.7.1 in /docs/_build
- #8224: @dependabot[bot] chore(deps): bump traefik from 3.6.4 to 3.6.5 in /plugins/traefik-vhosts
- #8225: @dependabot[bot] chore(deps): bump timberio/vector from 0.51.1-debian to 0.52.0-debian in /plugins/logs
- #8220: @dependabot[bot] chore(deps): bump python from 3.14.1-bookworm to 3.14.2-bookworm in /tests/apps/dockerfile-release
- #8221: @dependabot[bot] chore(deps): bump python from 3.14.1-alpine to 3.14.2-alpine in /docs/_build
- #8218: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.19 to 10.19.1 in /docs/_build
- #8215: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.18 to 10.19 in /docs/_build
- #8209: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.38.2 to 1.38.3 in /plugins/config
- #8210: @dependabot[bot] chore(deps): bump github.com/kedacore/keda/v2 from 2.18.1 to 2.18.2 in /plugins/scheduler-k3s
- #8211: @dependabot[bot] chore(deps): bump github.com/go-openapi/jsonpointer from 0.22.3 to 0.22.4 in /plugins/scheduler-k3s
- #8200: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.17.2 to 10.18 in /docs/_build
- #8202: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.18.0 to 0.19.0 in /plugins/scheduler-docker-local
- #8203: @dependabot[bot] chore(deps): bump traefik from 3.6.2 to 3.6.4 in /plugins/traefik-vhosts
- #8204: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.18.0 to 0.19.0 in /plugins/scheduler-k3s
2025-12-26 06:59:05 +00:00
Jose Diaz-Gonzalez
8fdef7cc2e Merge pull request #8243 from dokku/dependabot/go_modules/plugins/scheduler-k3s/k8s.io/kubectl-0.35.0
chore(deps): bump k8s.io/kubectl from 0.34.2 to 0.35.0 in /plugins/scheduler-k3s
2025-12-26 01:57:10 -05:00
Jose Diaz-Gonzalez
f004dafb99 fix: wrap the TerminalSizeQueue in an adapter
This fixes an issue with the updated interface dropped in ce4d90902a
2025-12-25 20:58:24 -05:00
dependabot[bot]
eb6de2f709 chore(deps): bump k8s.io/kubectl in /plugins/scheduler-k3s
Bumps [k8s.io/kubectl](https://github.com/kubernetes/kubectl) from 0.34.2 to 0.35.0.
- [Commits](https://github.com/kubernetes/kubectl/compare/v0.34.2...v0.35.0)

---
updated-dependencies:
- dependency-name: k8s.io/kubectl
  dependency-version: 0.35.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-25 20:40:47 -05:00
Jose Diaz-Gonzalez
e4ab5dab1b Merge pull request #8245 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/go-resty/resty/v2-2.17.1
chore(deps): bump github.com/go-resty/resty/v2 from 2.17.0 to 2.17.1 in /plugins/scheduler-k3s
2025-12-25 20:40:14 -05:00
Jose Diaz-Gonzalez
4427edef2c Merge pull request #8246 from dokku/8242-tests
Add tests to prove that Procfile tasks all work for every builder
2025-12-25 20:36:03 -05:00
Jose Diaz-Gonzalez
3ae8fae9fd fix: ensure the buildkit container is always running 2025-12-25 19:49:57 -05:00
Jose Diaz-Gonzalez
5e2e53d864 tests: run python3 instead of python 2025-12-25 19:07:56 -05:00
Jose Diaz-Gonzalez
4e50dbfb02 tests: run tasks with quiet output so we can check the entire output 2025-12-25 19:05:30 -05:00
Jose Diaz-Gonzalez
4a7328b022 tests: update expected output 2025-12-25 18:34:39 -05:00
Jose Diaz-Gonzalez
153ff6ecb4 tests: fix expected output when task is specified from Procfile
When run from a Procfile, we output an additional message like "-----> Found 'task' in Procfile, running that command".
2025-12-25 18:32:26 -05:00
Jose Diaz-Gonzalez
52418dd799 tests: allow 1 or more occurrends of 'load build definition from Dockerfile'
For unknown reasons, sometimes this gets output twice by the nixpacks builder.
2025-12-25 18:29:42 -05:00
Jose Diaz-Gonzalez
3a476716eb tests: allow specifying 'at least 1 occurrence' for assert_output_contains 2025-12-25 18:29:02 -05:00
Jose Diaz-Gonzalez
ca51f2de01 chore: remove debug mode 2025-12-25 18:26:01 -05:00
Jose Diaz-Gonzalez
3d49dbe63f tests: add tests to prove that Procfile tasks all work for every builder
Closes #8242
2025-12-25 18:06:22 -05:00
Jose Diaz-Gonzalez
99664b9de5 Merge pull request #8199 from dokku/8187-fix-flags
Pass global build args as array when building nixpacks apps
2025-12-25 17:26:37 -05:00
dependabot[bot]
0103f20ed6 chore(deps): bump github.com/go-resty/resty/v2 in /plugins/scheduler-k3s
Bumps [github.com/go-resty/resty/v2](https://github.com/go-resty/resty) from 2.17.0 to 2.17.1.
- [Release notes](https://github.com/go-resty/resty/releases)
- [Commits](https://github.com/go-resty/resty/compare/v2.17.0...v2.17.1)

---
updated-dependencies:
- dependency-name: github.com/go-resty/resty/v2
  dependency-version: 2.17.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-25 13:07:26 +00:00
Jose Diaz-Gonzalez
9d18896c4c tests: drop lambda run tests as they shouldn't be relevant
These are functions and therefore are invoked differently.
2025-12-24 17:05:50 -05:00
Jose Diaz-Gonzalez
89c260ac84 fix: deploy correct app for lambda tests 2025-12-24 16:49:29 -05:00
Jose Diaz-Gonzalez
d5c44e80e7 fix: remove duplicate test 2025-12-24 16:30:01 -05:00
Jose Diaz-Gonzalez
bba2cd9710 fix: correct lint issues 2025-12-24 16:30:01 -05:00
Jose Diaz-Gonzalez
e7be49f0ce fix: ensure all build flags are consumed as an array 2025-12-24 16:30:01 -05:00
Jose Diaz-Gonzalez
2d3782c8eb fix: pass global build args as array when building nixpacks apps
Refs #8187
2025-12-24 16:30:01 -05:00
Jose Diaz-Gonzalez
120f844397 Merge pull request #8244 from dokku/dependabot/go_modules/plugins/scheduler-k3s/k8s.io/kubernetes-1.35.0
chore(deps): bump k8s.io/kubernetes from 1.34.2 to 1.35.0 in /plugins/scheduler-k3s
2025-12-24 15:49:46 -05:00
dependabot[bot]
9634facf8b chore(deps): bump k8s.io/kubernetes in /plugins/scheduler-k3s
Bumps [k8s.io/kubernetes](https://github.com/kubernetes/kubernetes) from 1.34.2 to 1.35.0.
- [Release notes](https://github.com/kubernetes/kubernetes/releases)
- [Commits](https://github.com/kubernetes/kubernetes/compare/v1.34.2...v1.35.0)

---
updated-dependencies:
- dependency-name: k8s.io/kubernetes
  dependency-version: 1.35.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-24 13:07:35 +00:00
Jose Diaz-Gonzalez
c28d28de2d Merge pull request #8233 from dokku/dependabot/go_modules/plugins/common/github.com/onsi/gomega-1.38.3
chore(deps): bump github.com/onsi/gomega from 1.38.2 to 1.38.3 in /plugins/common
2025-12-23 22:32:19 -05:00
Jose Diaz-Gonzalez
7367aeedcc chore: bump go modules and run go mod tidy 2025-12-23 22:12:47 -05:00
dependabot[bot]
ea2ffc7747 chore(deps): bump github.com/onsi/gomega in /plugins/common
Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.38.2 to 1.38.3.
- [Release notes](https://github.com/onsi/gomega/releases)
- [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/gomega/compare/v1.38.2...v1.38.3)

---
updated-dependencies:
- dependency-name: github.com/onsi/gomega
  dependency-version: 1.38.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-23 22:12:18 -05:00
Jose Diaz-Gonzalez
bec82d7fd5 Merge pull request #8241 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/traefik/traefik/v2-2.11.33
chore(deps): bump github.com/traefik/traefik/v2 from 2.11.32 to 2.11.33 in /plugins/scheduler-k3s
2025-12-23 13:57:05 -05:00
Jose Diaz-Gonzalez
5759c1e2e7 Merge pull request #8240 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/cert-manager/cert-manager-1.19.2
chore(deps): bump github.com/cert-manager/cert-manager from 1.19.1 to 1.19.2 in /plugins/scheduler-k3s
2025-12-23 13:56:56 -05:00
Jose Diaz-Gonzalez
13407a687b Merge pull request #8239 from dokku/dependabot/pip/docs/_build/pyparsing-3.3.1
chore(deps): bump pyparsing from 3.2.5 to 3.3.1 in /docs/_build
2025-12-23 13:56:40 -05:00
Jose Diaz-Gonzalez
12e630f48d Merge pull request #8238 from dokku/dependabot/go_modules/tests/apps/gogrpc/google.golang.org/grpc-1.78.0
chore(deps): bump google.golang.org/grpc from 1.77.0 to 1.78.0 in /tests/apps/gogrpc
2025-12-23 13:56:32 -05:00
dependabot[bot]
e8eacbad93 chore(deps): bump github.com/traefik/traefik/v2
Bumps [github.com/traefik/traefik/v2](https://github.com/traefik/traefik) from 2.11.32 to 2.11.33.
- [Release notes](https://github.com/traefik/traefik/releases)
- [Changelog](https://github.com/traefik/traefik/blob/v2.11.33/CHANGELOG.md)
- [Commits](https://github.com/traefik/traefik/compare/v2.11.32...v2.11.33)

---
updated-dependencies:
- dependency-name: github.com/traefik/traefik/v2
  dependency-version: 2.11.33
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-23 13:08:00 +00:00
dependabot[bot]
bd597c52c7 chore(deps): bump github.com/cert-manager/cert-manager
Bumps [github.com/cert-manager/cert-manager](https://github.com/cert-manager/cert-manager) from 1.19.1 to 1.19.2.
- [Release notes](https://github.com/cert-manager/cert-manager/releases)
- [Changelog](https://github.com/cert-manager/cert-manager/blob/master/RELEASE.md)
- [Commits](https://github.com/cert-manager/cert-manager/compare/v1.19.1...v1.19.2)

---
updated-dependencies:
- dependency-name: github.com/cert-manager/cert-manager
  dependency-version: 1.19.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-23 13:07:48 +00:00
dependabot[bot]
871c6a91a1 chore(deps): bump pyparsing from 3.2.5 to 3.3.1 in /docs/_build
Bumps [pyparsing](https://github.com/pyparsing/pyparsing) from 3.2.5 to 3.3.1.
- [Release notes](https://github.com/pyparsing/pyparsing/releases)
- [Changelog](https://github.com/pyparsing/pyparsing/blob/master/CHANGES)
- [Commits](https://github.com/pyparsing/pyparsing/compare/3.2.5...3.3.1)

---
updated-dependencies:
- dependency-name: pyparsing
  dependency-version: 3.3.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-23 13:04:50 +00:00
dependabot[bot]
214e543094 chore(deps): bump google.golang.org/grpc in /tests/apps/gogrpc
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.77.0 to 1.78.0.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.77.0...v1.78.0)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.78.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-23 13:01:24 +00:00
Jose Diaz-Gonzalez
238e015453 Merge pull request #8237 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/kedacore/keda/v2-2.18.3
chore(deps): bump github.com/kedacore/keda/v2 from 2.18.2 to 2.18.3 in /plugins/scheduler-k3s
2025-12-23 00:33:42 -05:00
Jose Diaz-Gonzalez
14271fa507 Merge pull request #8235 from dokku/dependabot/go_modules/plugins/scheduler-k3s/helm.sh/helm/v3-3.19.4
chore(deps): bump helm.sh/helm/v3 from 3.19.2 to 3.19.4 in /plugins/scheduler-k3s
2025-12-23 00:29:44 -05:00
dependabot[bot]
a238e41516 chore(deps): bump github.com/kedacore/keda/v2 in /plugins/scheduler-k3s
Bumps [github.com/kedacore/keda/v2](https://github.com/kedacore/keda) from 2.18.2 to 2.18.3.
- [Release notes](https://github.com/kedacore/keda/releases)
- [Changelog](https://github.com/kedacore/keda/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kedacore/keda/compare/v2.18.2...v2.18.3)

---
updated-dependencies:
- dependency-name: github.com/kedacore/keda/v2
  dependency-version: 2.18.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-22 20:09:32 +00:00
dependabot[bot]
6f30be43c6 chore(deps): bump helm.sh/helm/v3 in /plugins/scheduler-k3s
Bumps [helm.sh/helm/v3](https://github.com/helm/helm) from 3.19.2 to 3.19.4.
- [Release notes](https://github.com/helm/helm/releases)
- [Commits](https://github.com/helm/helm/compare/v3.19.2...v3.19.4)

---
updated-dependencies:
- dependency-name: helm.sh/helm/v3
  dependency-version: 3.19.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-22 18:21:18 +00:00
Jose Diaz-Gonzalez
c05ec28b60 Merge pull request #8232 from dokku/dependabot/pip/docs/_build/importlib-metadata-8.7.1
chore(deps): bump importlib-metadata from 8.7.0 to 8.7.1 in /docs/_build
2025-12-22 13:20:18 -05:00
Jose Diaz-Gonzalez
6ed37ec3be Merge pull request #8234 from dokku/dependabot/go_modules/plugins/scheduler-k3s/k8s.io/client-go-0.35.0
chore(deps): bump k8s.io/client-go from 0.34.2 to 0.35.0 in /plugins/scheduler-k3s
2025-12-22 13:20:02 -05:00
Jose Diaz-Gonzalez
241a7bff16 Merge pull request #8236 from dokku/josegonzalez-patch-1
Ensure the /etc/docker exists when interacting with it via postinst
2025-12-22 13:19:51 -05:00
Jose Diaz-Gonzalez
1733b8ec81 fix: ensure the /etc/docker exists when interacting with it via postinst 2025-12-22 13:19:30 -05:00
dependabot[bot]
6f1d967968 chore(deps): bump k8s.io/client-go in /plugins/scheduler-k3s
Bumps [k8s.io/client-go](https://github.com/kubernetes/client-go) from 0.34.2 to 0.35.0.
- [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kubernetes/client-go/compare/v0.34.2...v0.35.0)

---
updated-dependencies:
- dependency-name: k8s.io/client-go
  dependency-version: 0.35.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-22 13:09:29 +00:00
dependabot[bot]
5f410113ea chore(deps): bump importlib-metadata from 8.7.0 to 8.7.1 in /docs/_build
Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 8.7.0 to 8.7.1.
- [Release notes](https://github.com/python/importlib_metadata/releases)
- [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst)
- [Commits](https://github.com/python/importlib_metadata/compare/v8.7.0...v8.7.1)

---
updated-dependencies:
- dependency-name: importlib-metadata
  dependency-version: 8.7.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-22 13:05:37 +00:00
Jose Diaz-Gonzalez
949cb5bffc Merge pull request #8231 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/expr-lang/expr-1.17.7
chore(deps): bump github.com/expr-lang/expr from 1.17.6 to 1.17.7 in /plugins/scheduler-k3s
2025-12-22 01:54:18 -05:00
Jose Diaz-Gonzalez
8718587cc0 Merge pull request #8208 from dokku/dependabot/go_modules/plugins/common/golang.org/x/crypto-0.46.0
chore(deps): bump golang.org/x/crypto from 0.45.0 to 0.46.0 in /plugins/common
2025-12-22 01:54:08 -05:00
Jose Diaz-Gonzalez
2b3cdffccf chore: bump go modules and run go mod tidy 2025-12-22 00:31:48 -05:00
dependabot[bot]
c2dc3163c4 chore(deps): bump github.com/expr-lang/expr in /plugins/scheduler-k3s
Bumps [github.com/expr-lang/expr](https://github.com/expr-lang/expr) from 1.17.6 to 1.17.7.
- [Release notes](https://github.com/expr-lang/expr/releases)
- [Commits](https://github.com/expr-lang/expr/compare/v1.17.6...v1.17.7)

---
updated-dependencies:
- dependency-name: github.com/expr-lang/expr
  dependency-version: 1.17.7
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-22 05:31:03 +00:00
dependabot[bot]
af9feb6a1d chore(deps): bump golang.org/x/crypto in /plugins/common
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.45.0 to 0.46.0.
- [Commits](https://github.com/golang/crypto/compare/v0.45.0...v0.46.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-22 05:30:43 +00:00
Jose Diaz-Gonzalez
a3435054e7 Merge pull request #8201 from dokku/dependabot/go_modules/plugins/common/golang.org/x/sync-0.19.0
chore(deps): bump golang.org/x/sync from 0.18.0 to 0.19.0 in /plugins/common
2025-12-22 00:29:15 -05:00
Jose Diaz-Gonzalez
1376b052f5 chore: upgrade herokuish to fix golang tests 2025-12-21 23:29:20 -05:00
Jose Diaz-Gonzalez
732970ab4e Merge pull request #8214 from dokku/dependabot/go_modules/tests/apps/gogrpc/google.golang.org/protobuf-1.36.11
chore(deps): bump google.golang.org/protobuf from 1.36.10 to 1.36.11 in /tests/apps/gogrpc
2025-12-21 23:25:22 -05:00
Jose Diaz-Gonzalez
b2cffa657e Merge pull request #8216 from dokku/dependabot/github_actions/actions/download-artifact-7
chore(deps): bump actions/download-artifact from 6 to 7
2025-12-21 23:25:03 -05:00
Jose Diaz-Gonzalez
46ce076783 Merge pull request #8217 from dokku/dependabot/github_actions/actions/upload-artifact-6
chore(deps): bump actions/upload-artifact from 5 to 6
2025-12-21 23:24:52 -05:00
Jose Diaz-Gonzalez
a06a732c89 Merge pull request #8229 from kleutzinger/patch-1
Fix command syntax for removing docker options
2025-12-21 02:28:18 -05:00
Jose Diaz-Gonzalez
83b1c27391 Merge pull request #8228 from dokku/dependabot/pip/docs/_build/soupsieve-2.8.1
chore(deps): bump soupsieve from 2.8 to 2.8.1 in /docs/_build
2025-12-21 02:27:59 -05:00
Kevin Leutzinger
bf89577f2e Fix command syntax for removing docker options 2025-12-19 09:10:55 -05:00
dependabot[bot]
96e019e410 chore(deps): bump soupsieve from 2.8 to 2.8.1 in /docs/_build
Bumps [soupsieve](https://github.com/facelessuser/soupsieve) from 2.8 to 2.8.1.
- [Release notes](https://github.com/facelessuser/soupsieve/releases)
- [Commits](https://github.com/facelessuser/soupsieve/compare/2.8...2.8.1)

---
updated-dependencies:
- dependency-name: soupsieve
  dependency-version: 2.8.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-19 13:06:51 +00:00
Jose Diaz-Gonzalez
3f93dd8cf1 Merge pull request #8226 from dokku/dependabot/docker/tests/apps/dockerfile-entrypoint/ruby-3.4.8
chore(deps): bump ruby from 3.4.7 to 3.4.8 in /tests/apps/dockerfile-entrypoint
2025-12-18 21:08:57 -05:00
Jose Diaz-Gonzalez
c91d56bab3 Merge pull request #8227 from dokku/dependabot/pip/docs/_build/mkdocs-material-9.7.1
chore(deps): bump mkdocs-material from 9.7.0 to 9.7.1 in /docs/_build
2025-12-18 21:08:43 -05:00
dependabot[bot]
f9fe916aaa chore(deps): bump mkdocs-material from 9.7.0 to 9.7.1 in /docs/_build
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.7.0 to 9.7.1.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.7.0...9.7.1)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-version: 9.7.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-18 13:06:09 +00:00
dependabot[bot]
de20a395f3 chore(deps): bump ruby in /tests/apps/dockerfile-entrypoint
Bumps ruby from 3.4.7 to 3.4.8.

---
updated-dependencies:
- dependency-name: ruby
  dependency-version: 3.4.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-18 13:04:57 +00:00
Jose Diaz-Gonzalez
0194c35055 Merge pull request #8224 from dokku/dependabot/docker/plugins/traefik-vhosts/traefik-3.6.5
chore(deps): bump traefik from 3.6.4 to 3.6.5 in /plugins/traefik-vhosts
2025-12-17 11:23:35 -05:00
Jose Diaz-Gonzalez
549dd64165 Merge pull request #8225 from dokku/dependabot/docker/plugins/logs/timberio/vector-0.52.0-debian
chore(deps): bump timberio/vector from 0.51.1-debian to 0.52.0-debian in /plugins/logs
2025-12-17 11:23:28 -05:00
dependabot[bot]
cb5d0cfb03 chore(deps): bump timberio/vector in /plugins/logs
Bumps timberio/vector from 0.51.1-debian to 0.52.0-debian.

---
updated-dependencies:
- dependency-name: timberio/vector
  dependency-version: 0.52.0-debian
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-17 13:08:42 +00:00
dependabot[bot]
430fdbe519 chore(deps): bump traefik from 3.6.4 to 3.6.5 in /plugins/traefik-vhosts
Bumps traefik from 3.6.4 to 3.6.5.

---
updated-dependencies:
- dependency-name: traefik
  dependency-version: 3.6.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-17 13:08:39 +00:00
Jose Diaz-Gonzalez
49d00cf0af Merge pull request #8220 from dokku/dependabot/docker/tests/apps/dockerfile-release/python-3.14.2-bookworm
chore(deps): bump python from 3.14.1-bookworm to 3.14.2-bookworm in /tests/apps/dockerfile-release
2025-12-16 10:20:34 -05:00
Jose Diaz-Gonzalez
88ee00e72b Merge pull request #8221 from dokku/dependabot/docker/docs/_build/python-3.14.2-alpine
chore(deps): bump python from 3.14.1-alpine to 3.14.2-alpine in /docs/_build
2025-12-16 10:20:28 -05:00
dependabot[bot]
88cfe2c3ca chore(deps): bump python in /docs/_build
Bumps python from 3.14.1-alpine to 3.14.2-alpine.

---
updated-dependencies:
- dependency-name: python
  dependency-version: 3.14.2-alpine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-16 13:05:17 +00:00
dependabot[bot]
9a35275c26 chore(deps): bump python in /tests/apps/dockerfile-release
Bumps python from 3.14.1-bookworm to 3.14.2-bookworm.

---
updated-dependencies:
- dependency-name: python
  dependency-version: 3.14.2-bookworm
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-16 13:05:13 +00:00
Jose Diaz-Gonzalez
714c722646 Merge pull request #8218 from dokku/dependabot/pip/docs/_build/pymdown-extensions-10.19.1
chore(deps): bump pymdown-extensions from 10.19 to 10.19.1 in /docs/_build
2025-12-15 16:59:33 -05:00
Jose Diaz-Gonzalez
1e268161e8 Merge pull request #8219 from deanmarano/patch-1
Add deanmarano to community plugins list
2025-12-15 16:43:30 -05:00
Dean Marano
fc90bb596a Add deanmarano to community plugins list
I added a link to my name when adding my DNS plugin, but I did not give that link a destination.
2025-12-15 14:50:14 -05:00
dependabot[bot]
18b4553a1f chore(deps): bump pymdown-extensions in /docs/_build
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.19 to 10.19.1.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.19...10.19.1)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-version: 10.19.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-15 13:07:27 +00:00
dependabot[bot]
90117e6aa0 chore(deps): bump actions/upload-artifact from 5 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-15 13:04:26 +00:00
dependabot[bot]
1127286c96 chore(deps): bump actions/download-artifact from 6 to 7
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-15 13:04:21 +00:00
Jose Diaz-Gonzalez
fb7d20ba41 Merge pull request #8215 from dokku/dependabot/pip/docs/_build/pymdown-extensions-10.19
chore(deps): bump pymdown-extensions from 10.18 to 10.19 in /docs/_build
2025-12-12 16:38:27 -05:00
dependabot[bot]
e9f2d3d78c chore(deps): bump pymdown-extensions from 10.18 to 10.19 in /docs/_build
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.18 to 10.19.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.18...10.19)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-version: '10.19'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-12 13:06:16 +00:00
dependabot[bot]
f0dfcb8c91 chore(deps): bump google.golang.org/protobuf in /tests/apps/gogrpc
Bumps google.golang.org/protobuf from 1.36.10 to 1.36.11.

---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
  dependency-version: 1.36.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-12 13:01:41 +00:00
Jose Diaz-Gonzalez
8892da1a7f chore: bump go modules and run go mod tidy 2025-12-12 05:59:05 -05:00
dependabot[bot]
078ba2e81f chore(deps): bump golang.org/x/sync in /plugins/common
Bumps [golang.org/x/sync](https://github.com/golang/sync) from 0.18.0 to 0.19.0.
- [Commits](https://github.com/golang/sync/compare/v0.18.0...v0.19.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sync
  dependency-version: 0.19.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-12 05:41:50 -05:00
Jose Diaz-Gonzalez
5cf4336d9c Merge pull request #8209 from dokku/dependabot/go_modules/plugins/config/github.com/onsi/gomega-1.38.3
chore(deps): bump github.com/onsi/gomega from 1.38.2 to 1.38.3 in /plugins/config
2025-12-10 10:20:43 -05:00
Jose Diaz-Gonzalez
7eb1c22d05 Merge pull request #8210 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/kedacore/keda/v2-2.18.2
chore(deps): bump github.com/kedacore/keda/v2 from 2.18.1 to 2.18.2 in /plugins/scheduler-k3s
2025-12-10 10:20:26 -05:00
Jose Diaz-Gonzalez
384ce8068f Merge pull request #8211 from dokku/dependabot/go_modules/plugins/scheduler-k3s/github.com/go-openapi/jsonpointer-0.22.4
chore(deps): bump github.com/go-openapi/jsonpointer from 0.22.3 to 0.22.4 in /plugins/scheduler-k3s
2025-12-10 10:20:17 -05:00
dependabot[bot]
eab02b8b06 chore(deps): bump github.com/go-openapi/jsonpointer
Bumps [github.com/go-openapi/jsonpointer](https://github.com/go-openapi/jsonpointer) from 0.22.3 to 0.22.4.
- [Release notes](https://github.com/go-openapi/jsonpointer/releases)
- [Commits](https://github.com/go-openapi/jsonpointer/compare/v0.22.3...v0.22.4)

---
updated-dependencies:
- dependency-name: github.com/go-openapi/jsonpointer
  dependency-version: 0.22.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-09 13:11:26 +00:00
dependabot[bot]
fa54600032 chore(deps): bump github.com/kedacore/keda/v2 in /plugins/scheduler-k3s
Bumps [github.com/kedacore/keda/v2](https://github.com/kedacore/keda) from 2.18.1 to 2.18.2.
- [Release notes](https://github.com/kedacore/keda/releases)
- [Changelog](https://github.com/kedacore/keda/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kedacore/keda/compare/v2.18.1...v2.18.2)

---
updated-dependencies:
- dependency-name: github.com/kedacore/keda/v2
  dependency-version: 2.18.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-09 13:11:17 +00:00
dependabot[bot]
0f78321dbe chore(deps): bump github.com/onsi/gomega in /plugins/config
Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.38.2 to 1.38.3.
- [Release notes](https://github.com/onsi/gomega/releases)
- [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/gomega/compare/v1.38.2...v1.38.3)

---
updated-dependencies:
- dependency-name: github.com/onsi/gomega
  dependency-version: 1.38.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-09 13:06:44 +00:00
Jose Diaz-Gonzalez
d8195ca29b Merge pull request #8200 from dokku/dependabot/pip/docs/_build/pymdown-extensions-10.18
chore(deps): bump pymdown-extensions from 10.17.2 to 10.18 in /docs/_build
2025-12-08 15:46:29 -05:00
Jose Diaz-Gonzalez
dc3a744a29 Merge pull request #8202 from dokku/dependabot/go_modules/plugins/scheduler-docker-local/golang.org/x/sync-0.19.0
chore(deps): bump golang.org/x/sync from 0.18.0 to 0.19.0 in /plugins/scheduler-docker-local
2025-12-08 15:46:15 -05:00
Jose Diaz-Gonzalez
75a331d9b2 Merge pull request #8203 from dokku/dependabot/docker/plugins/traefik-vhosts/traefik-3.6.4
chore(deps): bump traefik from 3.6.2 to 3.6.4 in /plugins/traefik-vhosts
2025-12-08 15:46:04 -05:00
Jose Diaz-Gonzalez
c41dc2b915 Merge pull request #8204 from dokku/dependabot/go_modules/plugins/scheduler-k3s/golang.org/x/sync-0.19.0
chore(deps): bump golang.org/x/sync from 0.18.0 to 0.19.0 in /plugins/scheduler-k3s
2025-12-08 15:45:58 -05:00
Jose Diaz-Gonzalez
b3478cb14e Merge pull request #8205 from deanmarano/patch-1
Add DNS plugin to community plugins list
2025-12-08 15:43:16 -05:00
Dean Marano
315e495694 Add DNS plugin to community plugins list 2025-12-08 12:57:57 -05:00
dependabot[bot]
9bc7b7ce8c chore(deps): bump golang.org/x/sync in /plugins/scheduler-k3s
Bumps [golang.org/x/sync](https://github.com/golang/sync) from 0.18.0 to 0.19.0.
- [Commits](https://github.com/golang/sync/compare/v0.18.0...v0.19.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sync
  dependency-version: 0.19.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-08 13:10:37 +00:00
dependabot[bot]
78c1ac5dbd chore(deps): bump traefik from 3.6.2 to 3.6.4 in /plugins/traefik-vhosts
Bumps traefik from 3.6.2 to 3.6.4.

---
updated-dependencies:
- dependency-name: traefik
  dependency-version: 3.6.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-08 13:09:43 +00:00
dependabot[bot]
24c4652b90 chore(deps): bump golang.org/x/sync in /plugins/scheduler-docker-local
Bumps [golang.org/x/sync](https://github.com/golang/sync) from 0.18.0 to 0.19.0.
- [Commits](https://github.com/golang/sync/compare/v0.18.0...v0.19.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sync
  dependency-version: 0.19.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-08 13:08:17 +00:00
dependabot[bot]
1f334b496f chore(deps): bump pymdown-extensions in /docs/_build
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.17.2 to 10.18.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.17.2...10.18)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-version: '10.18'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-08 13:06:17 +00:00
566 changed files with 26622 additions and 8731 deletions

View File

@@ -1,7 +1,8 @@
---
name: Bug Report
description: File a bug report
labels: ["needs: investigation", "type: bug"]
labels: ["needs: investigation"]
type: Bug
body:
- type: markdown
attributes:

View File

@@ -13,19 +13,25 @@ runs:
using: "composite"
steps:
- name: download packages
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
name: build
path: build
- name: set up docker buildx
id: buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
- name: build docker image
shell: bash
run: |
docker buildx build \
--load \
--progress plain \
--tag "dokku/dokku:latest" \
.
- name: smoke test image
shell: bash
run: |
make test-image-healthcheck IMAGE_TAG=dokku/dokku:latest

View File

@@ -189,140 +189,140 @@ updates:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: bundler
directory: "/tests/apps/multi"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: npm
directory: "/tests/apps/checks-root"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: npm
directory: "/tests/apps/config"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: npm
directory: "/tests/apps/dockerfile-app-json-formations"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: npm
directory: "/tests/apps/dockerfile-noexpose"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: npm
directory: "/tests/apps/dockerfile-procfile-bad"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: npm
directory: "/tests/apps/dockerfile-procfile"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: npm
directory: "/tests/apps/dockerfile"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: npm
directory: "/tests/apps/gitsubmodules"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: gomod
directory: "/tests/apps/gogrpc"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: pip
directory: "/tests/apps/multi"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: maven
directory: "/tests/apps/java"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: npm
directory: "/tests/apps/multi"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: npm
directory: "/tests/apps/nodejs-express"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: npm
directory: "/tests/apps/nodejs-worker"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: npm
directory: "/tests/apps/nodejs-express-noappjson"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: npm
directory: "/tests/apps/nodejs-express-noprocfile"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: composer
directory: "/tests/apps/php"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: pip
directory: "/tests/apps/python-flask"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: github-actions
directory: "/"
schedule:
@@ -343,91 +343,91 @@ updates:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: "docker"
directory: "/tests/apps/dockerfile"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: "docker"
directory: "/tests/apps/dockerfile-procfile"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: "docker"
directory: "/tests/apps/dockerfile-entrypoint"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: "docker"
directory: "/tests/apps/dockerfile-procfile-bad"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: "docker"
directory: "/tests/apps/go-fail-predeploy"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: "docker"
directory: "/tests/apps/zombies-dockerfile-no-tini"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: "docker"
directory: "/tests/apps/dockerfile-release"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: pip
directory: "/tests/apps/dockerfile-release"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: "docker"
directory: "/tests/apps/dockerfile-app-json-formations"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: "docker"
directory: "/tests/apps/gogrpc"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: "docker"
directory: "/tests/apps/zombies-dockerfile-tini"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: "docker"
directory: "/tests/apps/go-fail-postdeploy"
schedule:
interval: daily
open-pull-requests-limit: 10
labels:
- "type: dependencies"
- "type: tests"
- package-ecosystem: "docker"
directory: "/docs/_build"
schedule:

View File

@@ -56,11 +56,11 @@ jobs:
- uses: actions/checkout@v6
- name: set up qemu
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@v4
- name: set up docker buildx
id: buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
- name: build package
run: ./tests/ci/setup.sh build
@@ -75,7 +75,7 @@ jobs:
echo "matrix=$json" >> $GITHUB_OUTPUT
- name: upload packages
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: build
path: build
@@ -120,7 +120,7 @@ jobs:
- uses: actions/checkout@v6
- name: download packages
uses: actions/download-artifact@v6
uses: actions/download-artifact@v8
with:
name: build
path: build
@@ -143,7 +143,7 @@ jobs:
SYNC_GITHUB_PASSWORD: ${{ secrets.SYNC_GITHUB_PASSWORD }}
SYNC_GITHUB_USERNAME: ${{ secrets.SYNC_GITHUB_USERNAME }}
- uses: actions/upload-artifact@v5
- uses: actions/upload-artifact@v7
with:
name: test-results-${{ matrix.index }}
path: test-results
@@ -159,7 +159,7 @@ jobs:
- uses: actions/checkout@v6
- name: download packages
uses: actions/download-artifact@v6
uses: actions/download-artifact@v8
with:
name: build
path: build
@@ -193,7 +193,7 @@ jobs:
- uses: actions/checkout@v6
- name: download packages
uses: actions/download-artifact@v6
uses: actions/download-artifact@v8
with:
name: build
path: build
@@ -214,7 +214,7 @@ jobs:
2) sudo -E make -e deploy-test-multi ;;
3) sudo -E make -e deploy-test-go-fail-predeploy deploy-test-go-fail-postdeploy ;;
esac
- uses: actions/upload-artifact@v5
- uses: actions/upload-artifact@v7
with:
name: coverage.${{ matrix.index }}
path: test-results/coverage
@@ -230,7 +230,7 @@ jobs:
steps:
- name: download test-results
uses: actions/download-artifact@v6
uses: actions/download-artifact@v8
with:
path: test-results
@@ -239,5 +239,5 @@ jobs:
with:
check_name: Unit Test Results
github_token: ${{ secrets.GITHUB_TOKEN }}
junit_files: test-results/**/*.xml
files: test-results/**/*.xml
comment_mode: "off"

110
.github/workflows/dependency-updates.yml vendored Normal file
View File

@@ -0,0 +1,110 @@
---
name: 'dependency-updates'
# yamllint disable-line rule:truthy
on:
schedule:
- cron: '0 6 * * *'
workflow_dispatch:
permissions:
contents: write
pull-requests: write
jobs:
prepare:
name: prepare
runs-on: ubuntu-24.04
outputs:
matrix: ${{ steps.matrix.outputs.matrix }}
steps:
- name: Clone
uses: actions/checkout@v6
- name: Build dependency matrix
id: matrix
run: |
matrix=$(jq -c '
[
(.dependencies[] | {section: "dependencies", name, version, url: .urls.amd64}),
(.predependencies[] | {section: "predependencies", name, version, url: .urls.amd64}),
(.recommendations[] | {section: "recommendations", name, version, url: .urls.amd64})
]
| map(. + {repo: (.url | capture("https://github.com/(?<r>[^/]+/[^/]+)/releases").r)})
| map(del(.url))
| {include: .}
' contrib/dependencies.json)
echo "matrix=${matrix}" >> "$GITHUB_OUTPUT"
update:
name: 'update / ${{ matrix.name }}'
runs-on: ubuntu-24.04
needs: prepare
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.prepare.outputs.matrix) }}
concurrency:
group: dependency-updates-${{ matrix.name }}
cancel-in-progress: false
steps:
- name: Clone
uses: actions/checkout@v6
- name: Resolve latest release
id: latest
env:
GH_TOKEN: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }}
REPO: ${{ matrix.repo }}
CURRENT: ${{ matrix.version }}
run: |
tag=$(gh release view --repo "$REPO" --json tagName -q .tagName)
latest="${tag#v}"
echo "latest=${latest}" >> "$GITHUB_OUTPUT"
if dpkg --compare-versions "$latest" gt "$CURRENT"; then
echo "outdated=true" >> "$GITHUB_OUTPUT"
else
echo "outdated=false" >> "$GITHUB_OUTPUT"
fi
- name: Bump dependency entry
if: steps.latest.outputs.outdated == 'true'
env:
SECTION: ${{ matrix.section }}
NAME: ${{ matrix.name }}
OLD: ${{ matrix.version }}
NEW: ${{ steps.latest.outputs.latest }}
run: |
tmp=$(mktemp)
jq --arg section "$SECTION" \
--arg name "$NAME" \
--arg old "$OLD" \
--arg new "$NEW" '
($old) as $oldv |
($new) as $newv |
(.[$section]) |= map(
if .name == $name then
.version = $newv
| .urls.amd64 |= (gsub("v" + $oldv; "v" + $newv) | gsub($oldv; $newv))
| .urls.arm64 |= (gsub("v" + $oldv; "v" + $newv) | gsub($oldv; $newv))
else . end
)
' contrib/dependencies.json > "$tmp"
mv "$tmp" contrib/dependencies.json
- name: Open pull request
if: steps.latest.outputs.outdated == 'true'
uses: peter-evans/create-pull-request@v8
with:
token: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }}
branch: chore/bump-${{ matrix.name }}-${{ steps.latest.outputs.latest }}
base: ${{ github.ref_name }}
delete-branch: true
committer: 'Dokku Bot <no-reply@dokku.com>'
author: 'Dokku Bot <no-reply@dokku.com>'
commit-message: 'chore: bump ${{ matrix.name }} to ${{ steps.latest.outputs.latest }}'
title: 'chore: bump ${{ matrix.name }} to ${{ steps.latest.outputs.latest }}'
body: |
Bumps `${{ matrix.name }}` from `${{ matrix.version }}` to `${{ steps.latest.outputs.latest }}`.
Release notes: https://github.com/${{ matrix.repo }}/releases/tag/v${{ steps.latest.outputs.latest }}
labels: 'type: dependencies'

View File

@@ -45,6 +45,7 @@ jobs:
packer:
name: packer
runs-on: ubuntu-24.04
if: github.event.pull_request.user.login != 'dependabot[bot]'
steps:
- name: Checkout code
uses: actions/checkout@v6
@@ -78,7 +79,7 @@ jobs:
- name: Clone
uses: actions/checkout@v6
- name: Run shfmt
uses: luizm/action-sh-checker@17bd25a6ee188d2b91f677060038f4ba37ba14b2
uses: luizm/action-sh-checker@883217215b11c1fabbf00eb1a9a041f62d74c744
# v0.5.0 => edd0e45ecff35b05f162052b50df50976c1b74fc
env:
SHFMT_OPTS: -l -bn -ci -i 2 -d

View File

@@ -34,17 +34,17 @@ jobs:
ruby-version: 2.7
- name: login to docker hub
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: set up qemu
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@v4
- name: set up docker buildx
id: buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
- name: inspect builder
run: |
@@ -73,7 +73,7 @@ jobs:
run: echo "version=$(cat build/next-version)" >> $GITHUB_OUTPUT
- name: upload packages
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: build
path: build
@@ -109,7 +109,7 @@ jobs:
PKR_VAR_dokku_version="${VERSION:1}" make image/build/digitalocean
- name: upload packages
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: digitalocean-manifest.json
path: digitalocean-manifest.json

View File

@@ -1,4 +1,4 @@
FROM phusion/baseimage:noble-1.0.2
FROM phusion/baseimage:noble-1.0.3
CMD ["/sbin/my_init"]
@@ -15,6 +15,7 @@ RUN addgroup --gid $DOKKU_GID dokku \
COPY ./tests/dhparam.pem /tmp/dhparam.pem
COPY ./build/package/ /tmp
COPY ./contrib/dependencies.json /tmp/dependencies.json
ENV DOKKU_INIT_SYSTEM=sv
@@ -22,12 +23,15 @@ SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# hadolint ignore=DL3005,DL3008
RUN mkdir -p /etc/apt/keyrings \
&& mkdir -p /etc/apt/keyrings \
&& apt-get remove -y systemd && apt-get autoremove -y && apt-get update && apt-get -y --no-install-recommends install gpg lsb-release openssl openssh-server rsync software-properties-common \
&& apt-get remove -y systemd && apt-get autoremove -y && apt-get update && apt-get -y --no-install-recommends install gpg jq lsb-release openssl openssh-server rsync software-properties-common \
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
&& add-apt-repository ppa:cncf-buildpacks/pack-cli \
&& apt-get update \
&& apt-get -y --no-install-recommends install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin pack-cli \
&& apt-get -y --no-install-recommends install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \
&& PACK_URL="$(jq -r --arg arch "$(dpkg --print-architecture)" '.dependencies[] | select(.name == "pack") | .urls[$arch]' /tmp/dependencies.json)" \
&& curl -fsSL "$PACK_URL" | tar -C /usr/bin/ --no-same-owner -xzf - pack \
&& chmod +x /usr/bin/pack \
&& test -x /usr/bin/pack \
&& curl -o /tmp/nixpacks.bash -sSL https://nixpacks.com/install.sh \
&& chmod +x /tmp/nixpacks.bash \
&& NIXPACKS_BIN_DIR=/usr/bin BIN_DIR=/usr/bin /tmp/nixpacks.bash \
@@ -41,6 +45,7 @@ RUN mkdir -p /etc/apt/keyrings \
&& echo "dokku dokku/hostname string $DOKKU_HOSTNAME" | debconf-set-selections \
&& echo "dokku dokku/skip_key_file boolean $DOKKU_SKIP_KEY_FILE" | debconf-set-selections \
&& echo "dokku dokku/vhost_enable boolean $DOKKU_VHOST_ENABLE" | debconf-set-selections \
&& echo "dokku dokku/install_default_site boolean true" | debconf-set-selections \
&& curl -sSL https://packagecloud.io/dokku/dokku/gpgkey | apt-key add - \
&& echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ noble main" | tee /etc/apt/sources.list.d/dokku.list \
&& mkdir -p /etc/nginx/ \
@@ -77,3 +82,6 @@ RUN \
&& rm -f /usr/local/openresty/nginx/conf/sites-enabled/default /usr/share/openresty/html/index.html \
&& sed -i '/imklog/d' /etc/rsyslog.conf \
&& rm -f /var/log/btmp /var/log/wtmp /var/log/*log /var/log/apt/* /var/log/dokku/*.log /var/log/nginx/* /var/log/openresty/*
HEALTHCHECK --interval=30s --timeout=10s --start-period=5m --retries=3 \
CMD curl -fsS http://127.0.0.1:18080/_dokku/health || exit 1

View File

@@ -1,5 +1,594 @@
# History
## 0.38.4
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.38.4/bootstrap.sh
sudo DOKKU_TAG=v0.38.4 bash bootstrap.sh
```
### Bug Fixes
- #8615: @josegonzalez Reject per-app sets for openresty global-only properties
- #8613: @josegonzalez Expose raw deploy-branch and keep-git-dir in git:report
- #8549: @josegonzalez Route CNB images through launcher on scheduler-k3s
### New Features
- #8614: @josegonzalez Split scheduler-docker-local report into raw, computed, and global
### Documentation
- #8603: @cheif Add `dokku-http-oauth` to community plugins
### Tests
- #8618: @josegonzalez Isolate scheduler-k3s registry tags per bats file
- #8616: @josegonzalez Migrate from junit_files to files in EnricoMi/publish-unit-test-result-action
- #8617: @josegonzalez Upgrade actions in shared build-image compose action
- #8609: @josegonzalez Skip packer lint job on dependabot PRs
- #8604: @dependabot[bot] chore(deps): bump python from 3.14.3-bookworm to 3.15.0b1-bookworm in /tests/apps/dockerfile-release
### Dependencies
- #8606: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.50.0 to 0.51.0 in /plugins/common
- #8608: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.45 to 2.11.46 in /plugins/scheduler-k3s
- #8607: @dependabot[bot] chore(deps): bump dokku/openresty-docker-proxy from 0.10.0 to 0.11.0 in /plugins/openresty-vhosts
- #8605: @dependabot[bot] chore(deps): bump python from 3.14.3-alpine to 3.15.0b1-alpine in /docs/_build
## 0.38.3
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.38.3/bootstrap.sh
sudo DOKKU_TAG=v0.38.3 bash bootstrap.sh
```
### Bug Fixes
- #8602: @josegonzalez Reject per-app sets for global-only proxy properties
- #8601: @josegonzalez Rename app-json:report flags to match property
- #8600: @josegonzalez Report info-flag should not error when app undeployed
### New Features
- #8599: @josegonzalez Add docker healthcheck to dokku container
## 0.38.2
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.38.2/bootstrap.sh
sudo DOKKU_TAG=v0.38.2 bash bootstrap.sh
```
### Security
- #8590: @josegonzalez Restrict app names to prevent command injection
- #8591: @josegonzalez Harden archive extraction against symlink traversal
- #8589: @josegonzalez Enforce 0600 permissions on .netrc credentials file
- #8588: @josegonzalez Sanitize openresty include filenames to prevent eval injection
### Bug Fixes
- #8593: @josegonzalez Gate ssl_reject_handshake behind nginx 1.19.4
- #8578: @josegonzalez Reference SOURCECODE_WORK_DIR in builder core-post-extract
### Documentation
- #8592: @josegonzalez Add security section to release changelog
- #8587: @vixalien Correct buildkit builder code block syntax
- #8580: @othercorey Set issue type in bug report template
### Tests
- #8586: @josegonzalez Count assert_output_contains matches as fixed strings
- #8581: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/go-fail-predeploy
- #8582: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/gogrpc
- #8584: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/go-fail-postdeploy
- #8583: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/zombies-dockerfile-tini
- #8585: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/zombies-dockerfile-no-tini
- #8574: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-noexpose
- #8575: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-procfile-bad
- #8577: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-app-json-formations
- #8576: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile
- #8573: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-procfile
### Dependencies
- #8579: @josegonzalez Use type prefix for dokku-bot dependency label
## 0.38.1
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.38.1/bootstrap.sh
sudo DOKKU_TAG=v0.38.1 bash bootstrap.sh
```
### Bug Fixes
- #8563: @josegonzalez Source property-functions where fn-plugin-property-* helpers are used
- #8559: @josegonzalez Install cnb pack from github releases instead of ppa
- #8558: @josegonzalez Chown migrated legacy storage entries to dokku
- #8545: @josegonzalez Deflake haproxy bats tests
### Refactors
- #8546: @josegonzalez Consolidate nginx.conf.sigil server blocks
### Documentation
- #8548: @josegonzalez Use explicit type property in proxy:set examples
- #8547: @josegonzalez Document plugin properties migrated from env vars
- #8544: @josegonzalez Fix reference to when the build plugin was introduced
### Tests
- #8565: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.80.0 to 1.81.0 in /tests/apps/gogrpc
- #8568: @dependabot[bot] chore(deps): bump gunicorn from 25.3.0 to 26.0.0 in /tests/apps/multi
- #8572: @dependabot[bot] chore(deps): bump django from 5.2.13 to 5.2.14 in /tests/apps/dockerfile-release
- #8570: @dependabot[bot] chore(deps): bump gunicorn from 25.3.0 to 26.0.0 in /tests/apps/dockerfile-release
- #8567: @dependabot[bot] chore(deps): bump gunicorn from 25.3.0 to 26.0.0 in /tests/apps/python-flask
### Dependencies
- #8571: @dependabot[bot] chore(deps): bump traefik from v3.6.15 to v3.7.0 in /plugins/traefik-vhosts
- #8569: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.44 to 2.11.45 in /plugins/scheduler-k3s
- #8561: @dokku-bot chore: bump pack to 0.40.4
- #8555: @dependabot[bot] chore(deps): bump github.com/mattn/go-isatty from 0.0.20 to 0.0.22 in /plugins/app-json
- #8556: @dependabot[bot] chore(deps): bump github.com/Masterminds/semver/v3 from 3.4.0 to 3.5.0 in /plugins/scheduler-k3s
- #8550: @dokku-bot chore: bump docker-container-healthchecker to 0.15.2
- #8553: @dokku-bot chore: bump dokku-event-listener to 0.19.1
- #8552: @dokku-bot chore: bump lambda-builder to 0.9.3
- #8551: @dokku-bot chore: bump procfile-util to 0.20.7
- #8554: @dependabot[bot] chore(deps): bump peter-evans/create-pull-request from 7 to 8
## 0.38.0
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.38.0/bootstrap.sh
sudo DOKKU_TAG=v0.38.0 bash bootstrap.sh
```
See the [0.38.0 migration guide](/docs/appendices/0.38.0-migration-guide.md) for more information on migrating to 0.38.0.
### Bug Fixes
- #8533: @josegonzalez Split env config and image pull secret into separate helm releases
- #8530: @josegonzalez Split multi-flag input in docker-options
- #8528: @josegonzalez Skip retiring images still in use by app containers
- #8525: @josegonzalez Add launcher entrypoint for CNB images on dokku run and cron:run
- #8522: @josegonzalez Only emit keda fallback when a non-cpu/memory trigger exists
- #8515: @josegonzalez Fix vector mount directory config
- #8508: @josegonzalez Preserve all domains when renaming an app
- #8507: @josegonzalez Retire orphaned containers when scaling down
### New Features
- #8538: @josegonzalez Add scheduler-aware named storage entries
- #8527: @josegonzalez Accept --global on :report subcommands
- #8524: @josegonzalez Pre-validate custom nginx.conf.sigil during core-post-extract
- #8523: @josegonzalez Support resource limits on the build container
- #8517: @josegonzalez Send SIGTERM to old containers immediately on deploy
- #8516: @josegonzalez Scope docker-options to specific procfile processes
- #8509: @josegonzalez Ship default catch-all site on fresh apt install
- #8506: @josegonzalez Add --format json to git:report and nginx:report
- #8505: @josegonzalez Add git:auth-status to check netrc match
- #8493: @josegonzalez Generate 502 config for apps without web listeners
- #8404: @josegonzalez Upgrade vector chart from 0.42.0 to 0.52.0
- #8403: @josegonzalez Upgrade ingress-nginx chart from 4.10.0 to 4.15.1
- #8402: @josegonzalez Upgrade keda to 2.19.0 and keda-add-ons-http to 0.12.2
- #8259: @josegonzalez Add post-create support for env key in app.json
- #8157: @josegonzalez Add support for specifying buildpacks via app.json
- #8154: @josegonzalez Enable live-restore by default when installing Dokku
- #3697: @josegonzalez Migrate builds plugin to go and track per-build records
### Refactors
- #8514: @josegonzalez Migrate docker-options subcommands to go
- #6716: @josegonzalez Move app and global ENV files to consolidated config path
### Dependencies
- #8541: @dependabot[bot] chore(deps): bump traefik from v3.6.14 to v3.6.15 in /plugins/traefik-vhosts
- #8537: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.43 to 2.11.44 in /plugins/scheduler-k3s
- #8535: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.39.1 to 1.40.0 in /plugins/common
- #8529: @josegonzalez chore: bump dokku/netrc to v0.11.0
- #8520: @dependabot[bot] chore(deps): bump packaging from 26.1 to 26.2 in /docs/_build
- #8510: @dependabot[bot] chore(deps): bump packaging from 26.1 to 26.2 in /docs/_build
- #8503: @josegonzalez Bump dependency versions and add daily updater workflow
- #8502: @josegonzalez Bump go version to 1.26.2
- #8495: @dependabot[bot] chore(deps): bump k8s.io/apimachinery from 0.35.4 to 0.36.0 in /plugins/scheduler-k3s
- #8494: @dependabot[bot] chore(deps): bump dokku/openresty-docker-proxy from 0.9.3 to 0.10.0 in /plugins/openresty-vhosts
- #8490: @dependabot[bot] chore(deps): bump k8s.io/kubernetes from 1.35.4 to 1.36.0 in /plugins/scheduler-k3s
### Other
- #8498: @josegonzalez Migrate environment variables to plugin properties
## 0.37.10
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.37.10/bootstrap.sh
sudo DOKKU_TAG=v0.37.10 bash bootstrap.sh
```
### Tests
- #8491: @dependabot[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 285 to 287 in /tests/apps/php
- #8478: @josegonzalez chore: label test app dependency updates as type: tests
### Dependencies
- #8486: @dependabot[bot] chore(deps): bump click from 8.3.2 to 8.3.3 in /docs/_build
- #8492: @dependabot[bot] chore(deps): bump github.com/fluxcd/pkg/kustomize from 1.29.0 to 1.31.0 in /plugins/scheduler-k3s
- #8489: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.42 to 2.11.43 in /plugins/scheduler-k3s
- #8488: @dependabot[bot] chore(deps): bump timberio/vector from 0.54.0-debian to 0.55.0-debian in /plugins/logs
- #8487: @dependabot[bot] chore(deps): bump traefik from v3.6.13 to v3.6.14 in /plugins/traefik-vhosts
- #8483: @dependabot[bot] chore(deps): update markdown requirement from <3.11,>=3.2.1 to >=3.10.2,<3.11 in /docs/_build
- #8485: @dependabot[bot] chore(deps): bump k8s.io/kubectl from 0.35.2 to 0.35.4 in /plugins/scheduler-k3s
- #8484: @dependabot[bot] chore(deps): bump k8s.io/client-go from 0.35.2 to 0.35.4 in /plugins/scheduler-k3s
- #8482: @dependabot[bot] chore(deps): bump ruby from 4.0.2 to 4.0.3 in /tests/apps/dockerfile-entrypoint
- #8481: @dependabot[bot] chore(deps): bump psycopg2-binary from 2.9.11 to 2.9.12 in /tests/apps/dockerfile-release
- #8479: @dependabot[bot] chore(deps): bump github.com/go-openapi/jsonpointer from 0.23.0 to 0.23.1 in /plugins/scheduler-k3s
- #8480: @dependabot[bot] chore(deps): bump k8s.io/kubernetes from 1.35.3 to 1.35.4 in /plugins/scheduler-k3s
## 0.37.9
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.37.9/bootstrap.sh
sudo DOKKU_TAG=v0.37.9 bash bootstrap.sh
```
### Dependencies
- #8473: @dependabot[bot] chore(deps): bump k8s.io/api from 0.35.2 to 0.35.4 in /plugins/scheduler-k3s
- #8474: @dependabot[bot] chore(deps): bump github.com/go-openapi/jsonpointer from 0.22.5 to 0.23.0 in /plugins/scheduler-k3s
- #8476: @dependabot[bot] chore(deps): bump github.com/go-acme/lego/v4 from 4.25.2 to 4.34.0 in /plugins/scheduler-k3s
- #8475: @dependabot[bot] chore(deps): bump github.com/moby/spdystream from 0.5.0 to 0.5.1 in /plugins/scheduler-k3s
## 0.37.8
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.37.8/bootstrap.sh
sudo DOKKU_TAG=v0.37.8 bash bootstrap.sh
```
### Bug Fixes
- #8451: @mykolasolodukha Fix client prepending `--app` for non-app commands
### New Features
- #8443: @chemicalkosek Add application/graphql-response+json to nginx gzip_types
### Dependencies
- #8470: @dependabot[bot] chore(deps): bump packaging from 26.0 to 26.1 in /docs/_build
- #8471: @dependabot[bot] chore(deps): bump k8s.io/kubernetes from 1.35.0 to 1.35.3 in /plugins/scheduler-k3s
- #8472: @dependabot[bot] chore(deps): bump k8s.io/apimachinery from 0.35.2 to 0.35.3 in /plugins/scheduler-k3s
- #8413: @dependabot[bot] chore(deps): bump github.com/fluxcd/pkg/kustomize from 1.24.0 to 1.28.0 in /plugins/scheduler-k3s
- #8425: @dependabot[bot] chore(deps): bump github.com/cert-manager/cert-manager from 1.19.3 to 1.20.0 in /plugins/scheduler-k3s
- #8469: @dependabot[bot] chore(deps): bump zipp from 3.23.0 to 3.23.1 in /docs/_build
- #8450: @dependabot[bot] chore(deps): bump mvdan.cc/sh/v3 from 3.13.0 to 3.13.1 in /plugins/cron
- #8465: @dependabot[bot] chore(deps): bump github.com/joho/godotenv from 1.2.0 to 1.5.1 in /plugins/config
- #8463: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.49.0 to 0.50.0 in /plugins/common
- #8449: @dependabot[bot] chore(deps): bump click from 8.3.1 to 8.3.2 in /docs/_build
- #8464: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.20.1 to 3.20.2 in /plugins/scheduler-k3s
- #8458: @dependabot[bot] chore(deps): bump traefik from v3.6.12 to v3.6.13 in /plugins/traefik-vhosts
- #8457: @dependabot[bot] chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/zombies-dockerfile-no-tini
- #8456: @dependabot[bot] chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/go-fail-postdeploy
- #8455: @dependabot[bot] chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/gogrpc
- #8454: @dependabot[bot] chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/zombies-dockerfile-tini
- #8453: @dependabot[bot] chore(deps): bump golang from 1.26.1 to 1.26.2 in /tests/apps/go-fail-predeploy
- #8452: @dependabot[bot] chore(deps): bump rack-session from 2.1.1 to 2.1.2 in /tests/apps/ruby
- #8459: @dependabot[bot] chore(deps): bump django from 5.2.12 to 5.2.13 in /tests/apps/dockerfile-release
- #8444: @dependabot[bot] chore(deps): bump rack from 3.2.5 to 3.2.6 in /tests/apps/ruby
- #8445: @dependabot[bot] chore(deps): bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 in /plugins/scheduler-k3s
- #8447: @dependabot[bot] chore(deps): bump werkzeug from 3.1.7 to 3.1.8 in /tests/apps/python-flask
- #8440: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.21 to 10.21.2 in /docs/_build
- #8441: @dependabot[bot] chore(deps): bump pygments from 2.19.2 to 2.20.0 in /docs/_build
- #8442: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.79.3 to 1.80.0 in /tests/apps/gogrpc
- #8410: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.48.0 to 0.49.0 in /plugins/common
- #8422: @dependabot[bot] chore(deps): bump github.com/fatih/color from 1.18.0 to 1.19.0 in /plugins/common
- #8434: @dependabot[bot] chore(deps): bump gunicorn from 25.2.0 to 25.3.0 in /tests/apps/python-flask
- #8439: @dependabot[bot] chore(deps): bump brace-expansion from 1.1.12 to 1.1.13 in /tests/apps/multi
- #8438: @dependabot[bot] chore(deps): bump path-to-regexp from 8.2.0 to 8.4.0 in /tests/apps/checks-root
- #8437: @dependabot[bot] chore(deps): bump gunicorn from 25.2.0 to 25.3.0 in /tests/apps/dockerfile-release
- #8436: @dependabot[bot] chore(deps): bump traefik from v3.6.11 to v3.6.12 in /plugins/traefik-vhosts
- #8435: @dependabot[bot] chore(deps): bump gunicorn from 25.2.0 to 25.3.0 in /tests/apps/multi
- #8427: @dependabot[bot] chore(deps): bump werkzeug from 3.1.6 to 3.1.7 in /tests/apps/python-flask
- #8428: @dependabot[bot] chore(deps): bump gunicorn from 25.1.0 to 25.2.0 in /tests/apps/multi
- #8429: @dependabot[bot] chore(deps): bump gunicorn from 25.1.0 to 25.2.0 in /tests/apps/python-flask
- #8430: @dependabot[bot] chore(deps): bump djangorestframework from 3.17.0 to 3.17.1 in /tests/apps/dockerfile-release
- #8431: @dependabot[bot] chore(deps): bump gunicorn from 25.1.0 to 25.2.0 in /tests/apps/dockerfile-release
- #8432: @dependabot[bot] chore(deps): bump picomatch from 2.3.1 to 2.3.2 in /tests/apps/multi
- #8423: @dependabot[bot] chore(deps): bump traefik from v3.6.10 to v3.6.11 in /plugins/traefik-vhosts
- #8420: @dependabot[bot] chore(deps): bump mkdocs-material from 9.7.5 to 9.7.6 in /docs/_build
- #8421: @dependabot[bot] chore(deps): bump importlib-metadata from 8.8.0 to 9.0.0 in /docs/_build
- #8424: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.40 to 2.11.41 in /plugins/scheduler-k3s
- #8411: @dependabot[bot] chore(deps): bump lucaslorentz/caddy-docker-proxy from 2.11 to 2.12 in /plugins/caddy-vhosts
- #8412: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.20.0 to 3.20.1 in /plugins/scheduler-k3s
- #8419: @dependabot[bot] chore(deps): bump djangorestframework from 3.16.1 to 3.17.0 in /tests/apps/dockerfile-release
- #8418: @dependabot[bot] chore(deps): bump importlib-metadata from 8.7.1 to 8.8.0 in /docs/_build
- #8417: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.77.0-dev to 1.79.3 in /plugins/scheduler-k3s
- #8416: @dependabot[bot] chore(deps): bump ruby from 4.0.1 to 4.0.2 in /tests/apps/dockerfile-entrypoint
- #8415: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.79.2 to 1.79.3 in /tests/apps/gogrpc
- #8409: @dependabot[bot] chore(deps): bump github.com/go-openapi/jsonpointer from 0.22.4 to 0.22.5 in /plugins/scheduler-k3s
- #8408: @dependabot[bot] chore(deps): bump github.com/go-resty/resty/v2 from 2.17.1 to 2.17.2 in /plugins/scheduler-k3s
- #8407: @dependabot[bot] chore(deps): bump mkdocs-material from 9.7.4 to 9.7.5 in /docs/_build
- #8406: @dependabot[bot] chore(deps): bump timberio/vector from 0.53.0-debian to 0.54.0-debian in /plugins/logs
### Other
- #8468: @josegonzalez chore: bump dependencies in tests/apps/php
- #8467: @josegonzalez chore: upgrade traefik from v2.11.41 to v2.11.42
- #8466: @josegonzalez chore: bump dependencies in tests/apps/multi
## 0.37.7
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.37.7/bootstrap.sh
sudo DOKKU_TAG=v0.37.7 bash bootstrap.sh
```
### Bug Fixes
- #8379: @josegonzalez Call correct function for limiting letsencrypt to certain domains
### New Features
- #8405: @josegonzalez Add Debian 13 versions of docker plugin packages
- #8261: @josegonzalez Configure Traefik readiness healthchecks based on app.json config
- #8378: @farmdawgnation Support custom entrypoint for api and dashboard
### Dependencies
- #8395: @dependabot[bot] chore(deps): bump mvdan.cc/sh/v3 from 3.12.0 to 3.13.0 in /plugins/cron
- #8401: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.38 to 2.11.40 in /plugins/scheduler-k3s
- #8400: @dependabot[bot] chore(deps): bump github.com/melbahja/goph from 1.4.0 to 1.5.0 in /plugins/common
- #8394: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.47.0 to 0.48.0 in /plugins/common
- #8396: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.19.0 to 0.20.0 in /plugins/common
- #8399: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.19.0 to 0.20.0 in /plugins/scheduler-k3s
- #8398: @dependabot[bot] chore(deps): bump traefik from 3.6.9 to v3.6.10 in /plugins/traefik-vhosts
- #8397: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.19.0 to 0.20.0 in /plugins/scheduler-docker-local
- #8314: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.39.0 to 1.39.1 in /plugins/common
- #8380: @dependabot[bot] chore(deps): bump lucaslorentz/caddy-docker-proxy from 2.10 to 2.11 in /plugins/caddy-vhosts
- #8381: @dependabot[bot] chore(deps): bump k8s.io/kubectl from 0.35.0 to 0.35.2 in /plugins/scheduler-k3s
- #8382: @dependabot[bot] chore(deps): bump docker/login-action from 3 to 4
- #8383: @dependabot[bot] chore(deps): bump docker/setup-qemu-action from 3 to 4
- #8384: @dependabot[bot] chore(deps): bump mkdocs-material from 9.7.3 to 9.7.4 in /docs/_build
- #8385: @dependabot[bot] chore(deps): bump django from 5.2.11 to 5.2.12 in /tests/apps/dockerfile-release
- #8387: @dependabot[bot] chore(deps): bump docker/setup-buildx-action from 3 to 4
- #8388: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.79.1 to 1.79.2 in /tests/apps/gogrpc
- #8389: @dependabot[bot] chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/go-fail-postdeploy
- #8390: @dependabot[bot] chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/gogrpc
- #8391: @dependabot[bot] chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/go-fail-predeploy
- #8392: @dependabot[bot] chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/zombies-dockerfile-tini
- #8393: @dependabot[bot] chore(deps): bump golang from 1.26.0 to 1.26.1 in /tests/apps/zombies-dockerfile-no-tini
- #8354: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.78.0 to 1.79.1 in /tests/apps/gogrpc
- #8340: @dependabot[bot] chore(deps): bump python from 3.14.2-alpine to 3.14.3-alpine in /docs/_build
- #8353: @dependabot[bot] chore(deps): bump gunicorn from 25.0.2 to 25.1.0 in /tests/apps/multi
- #8357: @dependabot[bot] chore(deps): bump qs from 6.14.1 to 6.14.2 in /tests/apps/checks-root
- #8361: @dependabot[bot] chore(deps): bump flask from 3.1.2 to 3.1.3 in /tests/apps/multi
- #8360: @dependabot[bot] chore(deps): bump rack from 3.2.4 to 3.2.5 in /tests/apps/ruby
- #8332: @dependabot[bot] chore(deps-dev): bump org.apache.maven.plugins:maven-dependency-plugin from 3.9.0 to 3.10.0 in /tests/apps/java
- #8336: @dependabot[bot] chore(deps): bump python from 3.14.2-bookworm to 3.14.3-bookworm in /tests/apps/dockerfile-release
- #8355: @dependabot[bot] chore(deps): bump gunicorn from 25.0.2 to 25.1.0 in /tests/apps/python-flask
- #8356: @dependabot[bot] chore(deps): bump gunicorn from 25.0.2 to 25.1.0 in /tests/apps/dockerfile-release
- #8358: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.20.1 to 10.21 in /docs/_build
- #8371: @dependabot[bot] chore(deps): bump byjg/easy-haproxy from 5.0.0 to 6.0.1 in /plugins/haproxy-vhosts
- #8362: @dependabot[bot] chore(deps): bump flask from 3.1.2 to 3.1.3 in /tests/apps/python-flask
- #8374: @dependabot[bot] chore(deps): bump actions/download-artifact from 7 to 8
- #8375: @dependabot[bot] chore(deps): bump actions/upload-artifact from 6 to 7
- #8376: @dependabot[bot] chore(deps): bump phusion/baseimage from noble-1.0.2 to noble-1.0.3
- #8377: @dependabot[bot] chore(deps): bump whitenoise from 6.11.0 to 6.12.0 in /tests/apps/dockerfile-release
- #8365: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.36 to 2.11.37 in /plugins/scheduler-k3s
- #8367: @dependabot[bot] chore(deps): bump werkzeug from 3.1.5 to 3.1.6 in /tests/apps/python-flask
- #8368: @dependabot[bot] chore(deps): bump dj-database-url from 3.1.0 to 3.1.2 in /tests/apps/dockerfile-release
- #8372: @dependabot[bot] chore(deps): bump mkdocs-material from 9.7.1 to 9.7.3 in /docs/_build
- #8373: @dependabot[bot] chore(deps): bump traefik from 3.6.7 to 3.6.9 in /plugins/traefik-vhosts
- #8351: @dependabot[bot] chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/zombies-dockerfile-tini
- #8350: @dependabot[bot] chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/zombies-dockerfile-no-tini
- #8349: @dependabot[bot] chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/go-fail-postdeploy
- #8348: @dependabot[bot] chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/gogrpc
- #8347: @dependabot[bot] chore(deps): bump golang from 1.25.6 to 1.26.0 in /tests/apps/go-fail-predeploy
- #8344: @dependabot[bot] chore(deps): bump sigs.k8s.io/kustomize/api from 0.21.0 to 0.21.1 in /plugins/scheduler-k3s
- #8329: @dependabot[bot] chore(deps): bump gunicorn from 25.0.1 to 25.0.2 in /tests/apps/multi
- #8330: @dependabot[bot] chore(deps): bump gunicorn from 25.0.1 to 25.0.2 in /tests/apps/python-flask
- #8331: @dependabot[bot] chore(deps): bump gunicorn from 25.0.1 to 25.0.2 in /tests/apps/dockerfile-release
- #8320: @dependabot[bot] chore(deps): bump django from 5.2.10 to 5.2.11 in /tests/apps/dockerfile-release
- #8321: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.35 to 2.11.36 in /plugins/scheduler-k3s
- #8319: @dependabot[bot] chore(deps): bump gunicorn from 24.1.1 to 25.0.1 in /tests/apps/dockerfile-release
- #8318: @dependabot[bot] chore(deps): bump github.com/cert-manager/cert-manager from 1.19.2 to 1.19.3 in /plugins/scheduler-k3s
- #8317: @dependabot[bot] chore(deps): bump gunicorn from 24.1.1 to 25.0.1 in /tests/apps/multi
- #8316: @dependabot[bot] chore(deps): bump gunicorn from 24.1.1 to 25.0.1 in /tests/apps/python-flask
## 0.37.6
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.37.6/bootstrap.sh
sudo DOKKU_TAG=v0.37.6 bash bootstrap.sh
```
### Bug Fixes
- #8306: @josegonzalez Ensure we can call storage:report properly
### Documentation
- #8289: @josegonzalez Add an architecture document for dokku
- #8288: @josegonzalez Add a readme for the docs folder
### Dependencies
- #8312: @dependabot[bot] chore(deps): bump timberio/vector from 0.52.0-debian to 0.53.0-debian in /plugins/logs
- #8311: @dependabot[bot] chore(deps): bump gunicorn from 24.0.0 to 24.1.1 in /tests/apps/dockerfile-release
- #8308: @dependabot[bot] chore(deps): bump gunicorn from 24.0.0 to 24.1.1 in /tests/apps/multi
- #8309: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.20 to 10.20.1 in /docs/_build
- #8307: @dependabot[bot] chore(deps): bump gunicorn from 24.0.0 to 24.1.1 in /tests/apps/python-flask
- #8301: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.19.5 to 3.20.0 in /plugins/scheduler-k3s
- #8299: @dependabot[bot] chore(deps): bump ruby from 4.0.0 to 4.0.1 in /tests/apps/dockerfile-entrypoint
- #8293: @dependabot[bot] chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/zombies-dockerfile-no-tini
- #8296: @dependabot[bot] chore(deps): bump soupsieve from 2.8.1 to 2.8.3 in /docs/_build
- #8295: @dependabot[bot] chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/go-fail-postdeploy
- #8294: @dependabot[bot] chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/gogrpc
- #8291: @dependabot[bot] chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/zombies-dockerfile-tini
- #8292: @dependabot[bot] chore(deps): bump golang from 1.25.5 to 1.25.6 in /tests/apps/go-fail-predeploy
- #8277: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.34 to 2.11.35 in /plugins/scheduler-k3s
- #8297: @dependabot[bot] chore(deps): bump pyparsing from 3.3.1 to 3.3.2 in /docs/_build
- #8298: @dependabot[bot] chore(deps): bump lodash from 4.17.21 to 4.17.23 in /tests/apps/multi
- #8300: @dependabot[bot] chore(deps): bump packaging from 25.0 to 26.0 in /docs/_build
- #8303: @dependabot[bot] chore(deps): bump gunicorn from 23.0.0 to 24.0.0 in /tests/apps/python-flask
- #8305: @dependabot[bot] chore(deps): bump gunicorn from 23.0.0 to 24.0.0 in /tests/apps/dockerfile-release
- #8304: @dependabot[bot] chore(deps): bump gunicorn from 23.0.0 to 24.0.0 in /tests/apps/multi
- #8280: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.19.4 to 3.19.5 in /plugins/scheduler-k3s
- #8279: @dependabot[bot] chore(deps): bump traefik from 3.6.6 to 3.6.7 in /plugins/traefik-vhosts
## 0.37.5
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.37.5/bootstrap.sh
sudo DOKKU_TAG=v0.37.5 bash bootstrap.sh
```
### Bug Fixes
- #8274: @josegonzalez Delete the tls app chart when the app is deleted
- #8273: @josegonzalez Ensure the destination directory exists when extracting files from a repository
- #8263: @josegonzalez Set correct version for builder-railpack plugin
### New Features
- #8268: @josegonzalez Add the ability to log into a registry on a per-app basis
- #8258: @josegonzalez Add support for dns-01 challenge mode when using traefik
- #8262: @josegonzalez Use certificates imported by certs plugin when deploying via scheduler-k3s
- #8266: @josegonzalez Add a method to force build when re-using an image with git:from-image
- #8265: @josegonzalez Add the ability to skip setting the deploy-branch when running git:sync
### Refactors
- #8264: @josegonzalez Rewrite the storage plugin in golang
### Dependencies
- #8270: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.38.3 to 1.39.0 in /plugins/common
- #8267: @dependabot[bot] chore(deps): bump werkzeug from 3.1.4 to 3.1.5 in /tests/apps/python-flask
- #8260: @dependabot[bot] chore(deps): bump django from 5.2.9 to 5.2.10 in /tests/apps/dockerfile-release
- #8256: @dependabot[bot] chore(deps): bump luizm/action-sh-checker from 0.9.0 to 0.10.0
- #8257: @dependabot[bot] chore(deps): bump dj-database-url from 3.0.1 to 3.1.0 in /tests/apps/dockerfile-release
## 0.37.4
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.37.4/bootstrap.sh
sudo DOKKU_TAG=v0.37.4 bash bootstrap.sh
```
### Bug Fixes
- #8168: @josegonzalez Install logrotate in the container
### Tests
- #8254: @josegonzalez Add a test to prove cron:run commands work as expected
- #8255: @josegonzalez Update test ruby app
### Dependencies
- #8252: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.19.1 to 10.20 in /docs/_build
- #8253: @dependabot[bot] chore(deps): bump qs from 6.14.0 to 6.14.1 in /tests/apps/checks-root
- #8249: @dependabot[bot] chore(deps): bump traefik from 3.6.5 to 3.6.6 in /plugins/traefik-vhosts
- #8250: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.33 to 2.11.34 in /plugins/scheduler-k3s
- #8247: @dependabot[bot] chore(deps): bump ruby from 3.4.8 to 4.0.0 in /tests/apps/dockerfile-entrypoint
### Other
- #8248: @osbre Add `proxy-keepalive` to Nginx properties
## 0.37.3
Install/update via the bootstrap script:
```shell
wget -NP . https://dokku.com/install/v0.37.3/bootstrap.sh
sudo DOKKU_TAG=v0.37.3 bash bootstrap.sh
```
### Bug Fixes
- #8199: @josegonzalez Pass global build args as array when building nixpacks apps
- #8236: @josegonzalez Ensure the /etc/docker exists when interacting with it via postinst
### Documentation
- #8229: @kleutzinger Fix command syntax for removing docker options
- #8219: @deanmarano Add deanmarano to community plugins list
- #8205: @deanmarano Add DNS plugin to community plugins list
### Tests
- #8246: @josegonzalez Add tests to prove that Procfile tasks all work for every builder
### Dependencies
- #8243: @dependabot[bot] chore(deps): bump k8s.io/kubectl from 0.34.2 to 0.35.0 in /plugins/scheduler-k3s
- #8245: @dependabot[bot] chore(deps): bump github.com/go-resty/resty/v2 from 2.17.0 to 2.17.1 in /plugins/scheduler-k3s
- #8244: @dependabot[bot] chore(deps): bump k8s.io/kubernetes from 1.34.2 to 1.35.0 in /plugins/scheduler-k3s
- #8233: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.38.2 to 1.38.3 in /plugins/common
- #8241: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.32 to 2.11.33 in /plugins/scheduler-k3s
- #8240: @dependabot[bot] chore(deps): bump github.com/cert-manager/cert-manager from 1.19.1 to 1.19.2 in /plugins/scheduler-k3s
- #8239: @dependabot[bot] chore(deps): bump pyparsing from 3.2.5 to 3.3.1 in /docs/_build
- #8238: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.77.0 to 1.78.0 in /tests/apps/gogrpc
- #8237: @dependabot[bot] chore(deps): bump github.com/kedacore/keda/v2 from 2.18.2 to 2.18.3 in /plugins/scheduler-k3s
- #8235: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.19.2 to 3.19.4 in /plugins/scheduler-k3s
- #8232: @dependabot[bot] chore(deps): bump importlib-metadata from 8.7.0 to 8.7.1 in /docs/_build
- #8234: @dependabot[bot] chore(deps): bump k8s.io/client-go from 0.34.2 to 0.35.0 in /plugins/scheduler-k3s
- #8231: @dependabot[bot] chore(deps): bump github.com/expr-lang/expr from 1.17.6 to 1.17.7 in /plugins/scheduler-k3s
- #8208: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.45.0 to 0.46.0 in /plugins/common
- #8201: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.18.0 to 0.19.0 in /plugins/common
- #8214: @dependabot[bot] chore(deps): bump google.golang.org/protobuf from 1.36.10 to 1.36.11 in /tests/apps/gogrpc
- #8216: @dependabot[bot] chore(deps): bump actions/download-artifact from 6 to 7
- #8217: @dependabot[bot] chore(deps): bump actions/upload-artifact from 5 to 6
- #8228: @dependabot[bot] chore(deps): bump soupsieve from 2.8 to 2.8.1 in /docs/_build
- #8226: @dependabot[bot] chore(deps): bump ruby from 3.4.7 to 3.4.8 in /tests/apps/dockerfile-entrypoint
- #8227: @dependabot[bot] chore(deps): bump mkdocs-material from 9.7.0 to 9.7.1 in /docs/_build
- #8224: @dependabot[bot] chore(deps): bump traefik from 3.6.4 to 3.6.5 in /plugins/traefik-vhosts
- #8225: @dependabot[bot] chore(deps): bump timberio/vector from 0.51.1-debian to 0.52.0-debian in /plugins/logs
- #8220: @dependabot[bot] chore(deps): bump python from 3.14.1-bookworm to 3.14.2-bookworm in /tests/apps/dockerfile-release
- #8221: @dependabot[bot] chore(deps): bump python from 3.14.1-alpine to 3.14.2-alpine in /docs/_build
- #8218: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.19 to 10.19.1 in /docs/_build
- #8215: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.18 to 10.19 in /docs/_build
- #8209: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.38.2 to 1.38.3 in /plugins/config
- #8210: @dependabot[bot] chore(deps): bump github.com/kedacore/keda/v2 from 2.18.1 to 2.18.2 in /plugins/scheduler-k3s
- #8211: @dependabot[bot] chore(deps): bump github.com/go-openapi/jsonpointer from 0.22.3 to 0.22.4 in /plugins/scheduler-k3s
- #8200: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.17.2 to 10.18 in /docs/_build
- #8202: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.18.0 to 0.19.0 in /plugins/scheduler-docker-local
- #8203: @dependabot[bot] chore(deps): bump traefik from 3.6.2 to 3.6.4 in /plugins/traefik-vhosts
- #8204: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.18.0 to 0.19.0 in /plugins/scheduler-k3s
## 0.37.2
Install/update via the bootstrap script:

View File

@@ -226,3 +226,8 @@ vagrant-acl-add:
vagrant-dokku:
vagrant ssh -- "sudo -H -u root bash -c 'dokku $(RUN_ARGS)'"
IMAGE_TAG ?= dokku/dokku:latest
test-image-healthcheck:
IMAGE_TAG=$(IMAGE_TAG) ./tests/image/healthcheck.sh

View File

@@ -85,8 +85,8 @@ Otherwise, you will need to import the keypair manually after installation using
To install the latest stable release, run the following commands as a user who has access to `sudo`:
```shell
wget -NP . https://dokku.com/install/v0.37.2/bootstrap.sh
sudo DOKKU_TAG=v0.37.2 bash bootstrap.sh
wget -NP . https://dokku.com/install/v0.38.4/bootstrap.sh
sudo DOKKU_TAG=v0.38.4 bash bootstrap.sh
```
You can then proceed to configure your server domain (via `dokku domains:set-global`) and user access (via `dokku ssh-keys:add`) to complete the installation.

View File

@@ -1,7 +1,7 @@
GO_ARGS ?=
GO_PLUGIN_MAKE_TARGET ?= build
GO_REPO_ROOT := /go/src/github.com/dokku/dokku
BUILD_IMAGE := golang:1.25.1
BUILD_IMAGE := golang:1.26.2
GO_BUILD_CACHE ?= /tmp/dokku-go-build-cache
GO_MOD_CACHE ?= /tmp/dokku-go-mod-mod
GO_ROOT_MOUNT ?= $$PWD/../..:$(GO_REPO_ROOT)

View File

@@ -2,94 +2,102 @@
"dependencies": [
{
"name": "docker-container-healthchecker",
"version": "0.14.0",
"version": "0.15.2",
"urls": {
"amd64": "https://github.com/dokku/docker-container-healthchecker/releases/download/v0.14.0/docker-container-healthchecker-linux-amd64",
"arm64": "https://github.com/dokku/docker-container-healthchecker/releases/download/v0.14.0/docker-container-healthchecker-linux-arm64"
"amd64": "https://github.com/dokku/docker-container-healthchecker/releases/download/v0.15.2/docker-container-healthchecker-linux-amd64",
"arm64": "https://github.com/dokku/docker-container-healthchecker/releases/download/v0.15.2/docker-container-healthchecker-linux-arm64"
}
},
{
"name": "docker-image-labeler",
"version": "0.8.1",
"version": "0.9.0",
"urls": {
"amd64": "https://github.com/dokku/docker-image-labeler/releases/download/v0.8.1/docker-image-labeler-linux-amd64",
"arm64": "https://github.com/dokku/docker-image-labeler/releases/download/v0.8.1/docker-image-labeler-linux-arm64"
"amd64": "https://github.com/dokku/docker-image-labeler/releases/download/v0.9.0/docker-image-labeler-linux-amd64",
"arm64": "https://github.com/dokku/docker-image-labeler/releases/download/v0.9.0/docker-image-labeler-linux-arm64"
}
},
{
"name": "lambda-builder",
"version": "0.9.1",
"version": "0.9.3",
"urls": {
"amd64": "https://github.com/dokku/lambda-builder/releases/download/v0.9.1/lambda-builder-linux-amd64",
"arm64": "https://github.com/dokku/lambda-builder/releases/download/v0.9.1/lambda-builder-linux-arm64"
"amd64": "https://github.com/dokku/lambda-builder/releases/download/v0.9.3/lambda-builder-linux-amd64",
"arm64": "https://github.com/dokku/lambda-builder/releases/download/v0.9.3/lambda-builder-linux-arm64"
}
},
{
"name": "netrc",
"version": "0.10.2",
"version": "0.11.0",
"urls": {
"amd64": "https://github.com/dokku/netrc/releases/download/v0.10.2/netrc-linux-amd64",
"arm64": "https://github.com/dokku/netrc/releases/download/v0.10.2/netrc-linux-arm64"
"amd64": "https://github.com/dokku/netrc/releases/download/v0.11.0/netrc-linux-amd64",
"arm64": "https://github.com/dokku/netrc/releases/download/v0.11.0/netrc-linux-arm64"
}
},
{
"name": "pack",
"version": "0.40.4",
"urls": {
"amd64": "https://github.com/buildpacks/pack/releases/download/v0.40.4/pack-v0.40.4-linux.tgz",
"arm64": "https://github.com/buildpacks/pack/releases/download/v0.40.4/pack-v0.40.4-linux-arm64.tgz"
}
},
{
"name": "procfile-util",
"version": "0.20.3",
"version": "0.20.7",
"urls": {
"amd64": "https://github.com/dokku/procfile-util/releases/download/v0.20.3/procfile-util-linux-amd64",
"arm64": "https://github.com/dokku/procfile-util/releases/download/v0.20.3/procfile-util-linux-arm64"
"amd64": "https://github.com/dokku/procfile-util/releases/download/v0.20.7/procfile-util-linux-amd64",
"arm64": "https://github.com/dokku/procfile-util/releases/download/v0.20.7/procfile-util-linux-arm64"
}
},
{
"name": "sshcommand",
"version": "0.20.0",
"version": "0.20.1",
"urls": {
"amd64": "https://github.com/dokku/sshcommand/releases/download/v0.20.0/sshcommand",
"arm64": "https://github.com/dokku/sshcommand/releases/download/v0.20.0/sshcommand"
"amd64": "https://github.com/dokku/sshcommand/releases/download/v0.20.1/sshcommand",
"arm64": "https://github.com/dokku/sshcommand/releases/download/v0.20.1/sshcommand"
}
}
],
"predependencies": [
{
"name": "gliderlabs-sigil",
"version": "0.11.4",
"version": "0.12.0",
"urls": {
"amd64": "https://github.com/gliderlabs/sigil/releases/download/v0.11.4/sigil-linux-amd64",
"arm64": "https://github.com/gliderlabs/sigil/releases/download/v0.11.4/sigil-linux-arm64"
"amd64": "https://github.com/gliderlabs/sigil/releases/download/v0.12.0/sigil-linux-amd64",
"arm64": "https://github.com/gliderlabs/sigil/releases/download/v0.12.0/sigil-linux-arm64"
}
},
{
"name": "plugn",
"version": "0.16.0",
"version": "0.17.0",
"urls": {
"amd64": "https://github.com/dokku/plugn/releases/download/v0.16.0/plugn-linux-amd64",
"arm64": "https://github.com/dokku/plugn/releases/download/v0.16.0/plugn-linux-arm64"
"amd64": "https://github.com/dokku/plugn/releases/download/v0.17.0/plugn-linux-amd64",
"arm64": "https://github.com/dokku/plugn/releases/download/v0.17.0/plugn-linux-arm64"
}
}
],
"recommendations": [
{
"name": "dokku-event-listener",
"version": "0.17.2",
"version": "0.19.1",
"urls": {
"amd64": "https://github.com/dokku/dokku-event-listener/releases/download/v0.17.2/dokku-event-listener-linux-amd64",
"arm64": "https://github.com/dokku/dokku-event-listener/releases/download/v0.17.2/dokku-event-listener-linux-arm64"
"amd64": "https://github.com/dokku/dokku-event-listener/releases/download/v0.19.1/dokku-event-listener-linux-amd64",
"arm64": "https://github.com/dokku/dokku-event-listener/releases/download/v0.19.1/dokku-event-listener-linux-arm64"
}
},
{
"name": "dokku-update",
"version": "0.9.6",
"version": "0.9.8",
"urls": {
"amd64": "https://github.com/dokku/dokku-update/releases/download/v0.9.6/dokku-update",
"arm64": "https://github.com/dokku/dokku-update/releases/download/v0.9.6/dokku-update"
"amd64": "https://github.com/dokku/dokku-update/releases/download/v0.9.8/dokku-update",
"arm64": "https://github.com/dokku/dokku-update/releases/download/v0.9.8/dokku-update"
}
},
{
"name": "herokuish",
"version": "0.11.5",
"version": "0.11.11",
"urls": {
"amd64": "https://github.com/gliderlabs/herokuish/releases/download/v0.11.5/herokuish_0.11.5_linux_x86_64.tgz",
"arm64": "https://github.com/gliderlabs/herokuish/releases/download/v0.11.5/herokuish_0.11.5_linux_x86_64.tgz"
"amd64": "https://github.com/gliderlabs/herokuish/releases/download/v0.11.11/herokuish_0.11.11_linux_x86_64.tgz",
"arm64": "https://github.com/gliderlabs/herokuish/releases/download/v0.11.11/herokuish_0.11.11_linux_x86_64.tgz"
}
}
]

View File

@@ -183,7 +183,7 @@ main() {
ssh -p "$DOKKU_PORT" "dokku@$DOKKU_REMOTE_HOST" apps
exit 1
else
APP=$(random_name)
APP=$(fn-random-name)
counter=$((counter + 1))
fi
done
@@ -238,8 +238,13 @@ main() {
esac
[[ " apps certs help ls nginx shell storage trace version " == *" $CMD "* ]] && unset APP
[[ " certs:chain domains:add-global domains:remove-global domains:set-global ps:restore " == *" $CMD "* ]] && unset APP
[[ " certs:chain domains:add-global domains:clear-global domains:remove-global domains:set-global ps:restore " == *" $CMD "* ]] && unset APP
[[ " storage:ensure-directory " == *" $CMD "* ]] && unset APP
[[ " network:create network:destroy network:exists network:info network:list network:rebuildall " == *" $CMD "* ]] && unset APP
[[ " logs:vector-logs logs:vector-start logs:vector-stop " == *" $CMD "* ]] && unset APP
[[ " scheduler-k3s:cluster:add scheduler-k3s:cluster:list scheduler-k3s:cluster:remove " == *" $CMD "* ]] && unset APP
[[ " scheduler-k3s:ensure-charts scheduler-k3s:initialize scheduler-k3s:show-kubeconfig scheduler-k3s:uninstall " == *" $CMD "* ]] && unset APP
[[ " scheduler-k3s:profiles:add scheduler-k3s:profiles:list scheduler-k3s:profiles:remove " == *" $CMD "* ]] && unset APP
[[ "$CMD" =~ events*|plugin*|ssh-keys* ]] && unset APP
[[ -n "$APP_ARG" ]] && [[ "$APP_ARG" == "--global" ]] && unset APP
if [[ -n "$@" ]] && [[ -n "$APP" ]]; then

View File

@@ -250,7 +250,7 @@ fn-repo-update-history-and-commit() {
declare desc="Updates the history file and commits the changes"
declare CURRENT_VERSION="$1" NEXT_VERSION="$2" IS_PATCH="$3"
local PULL_REQUEST_ID TITLE AUTHOR TYPE CHANGELOG_TEXT
local COMMIT_MESSAGE HISTORY HISTORY_CONTENTS HISTORY_BUG HISTORY_DEPENDENCY HISTORY_DEPRECATION HISTORY_DOCUMENTATION HISTORY_ENHANCEMENT HISTORY_BC_BREAK HISTORY_REFACTOR HISTORY_REMOVAL HISTORY_OTHER HISTORY_TESTS ISSUE_FILE
local COMMIT_MESSAGE HISTORY HISTORY_CONTENTS HISTORY_BUG HISTORY_DEPENDENCY HISTORY_DEPRECATION HISTORY_DOCUMENTATION HISTORY_ENHANCEMENT HISTORY_BC_BREAK HISTORY_REFACTOR HISTORY_REMOVAL HISTORY_SECURITY HISTORY_OTHER HISTORY_TESTS ISSUE_FILE
pushd "$ROOT_DIR" >/dev/null
@@ -295,6 +295,8 @@ fn-repo-update-history-and-commit() {
HISTORY_REFACTOR="${HISTORY_REFACTOR}"$'\n'"$CHANGELOG_TEXT"
elif [[ "$TYPE" == "removal" ]]; then
HISTORY_REMOVAL="${HISTORY_REMOVAL}"$'\n'"$CHANGELOG_TEXT"
elif [[ "$TYPE" == "security" ]]; then
HISTORY_SECURITY="${HISTORY_SECURITY}"$'\n'"$CHANGELOG_TEXT"
elif [[ "$TYPE" == "tests" ]]; then
HISTORY_TESTS="${HISTORY_TESTS}"$'\n'"$CHANGELOG_TEXT"
else
@@ -314,6 +316,11 @@ fn-repo-update-history-and-commit() {
HISTORY="${HISTORY}"$'\n\n'"See the [${NEXT_VERSION} migration guide](/docs/appendices/${NEXT_VERSION}-migration-guide.md) for more information on migrating to ${NEXT_VERSION}."
fi
if [[ "$HISTORY_SECURITY" ]]; then
HISTORY="${HISTORY}"$'\n\n'"### Security"
HISTORY="${HISTORY}"$'\n'"$HISTORY_SECURITY"
fi
if [[ "$HISTORY_BC_BREAK" ]]; then
HISTORY="${HISTORY}"$'\n\n'"### Backwards Compatibility Breaks"
HISTORY="${HISTORY}"$'\n'"$HISTORY_BC_BREAK"

View File

@@ -1,5 +1,6 @@
#!/usr/bin/env python3
import json
import re
def main():
@@ -18,11 +19,9 @@ def main():
for dependency in deps[key]:
name = dependency["name"]
version = dependency["version"]
pattern = re.compile(rf"(?<![\w-]){re.escape(name)}(?![\w-])")
for i, line in enumerate(control_lines):
if name in line:
control_lines[i] = control_lines[i].replace(
name, f"{name} (>= {version})"
)
control_lines[i] = pattern.sub(f"{name} (>= {version})", line)
with open("debian/control", mode="w", encoding="utf-8") as handle:
handle.writelines(control_lines)

1
debian/config vendored
View File

@@ -14,5 +14,6 @@ db_input "high" "dokku/hostname" || true
db_input "high" "dokku/vhost_enable" || true
if [ "$ACTION" != "reconfigure" ]; then
db_input "high" "dokku/key_file" || true
db_input "high" "dokku/install_default_site" || true
fi
db_go || true

4
debian/control vendored
View File

@@ -1,9 +1,9 @@
Package: dokku
Version: 0.37.2
Version: 0.38.4
Section: web
Priority: optional
Architecture: amd64
Depends: apache2-utils, locales, git, cpio, cron, curl, man-db, netcat, sshcommand, docker-engine-cs (>= 19.03.0) | docker-engine (>= 19.03.0) | docker-io (>= 19.03.0) | docker.io (>= 19.03.0) | docker-ce (>= 19.03.0) | docker-ee (>= 19.03.0) | moby-engine, docker-compose-plugin | moby-compose, docker-buildx-plugin | moby-buildx, docker-container-healthchecker, docker-image-labeler, lambda-builder, net-tools, netrc, parallel, procfile-util, rsync, dos2unix, unzip, util-linux
Depends: apache2-utils, locales, git, cpio, cron, curl, logrotate, man-db, netcat, sshcommand, docker-engine-cs (>= 19.03.0) | docker-engine (>= 19.03.0) | docker-io (>= 19.03.0) | docker.io (>= 19.03.0) | docker-ce (>= 19.03.0) | docker-ee (>= 19.03.0) | moby-engine, docker-compose-plugin | moby-compose | docker-compose, docker-buildx-plugin | moby-buildx | docker-buildx, docker-container-healthchecker, docker-image-labeler, lambda-builder, net-tools, netrc, parallel, procfile-util, rsync, dos2unix, unzip, util-linux
Recommends: herokuish, bash-completion, dokku-update, dokku-event-listener
Pre-Depends: gliderlabs-sigil, jq, nginx (>= 1.8.0) | openresty, bind9-dnsutils, debconf, plugn, sudo, python3, rsyslog
Maintainer: Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>

83
debian/postinst vendored
View File

@@ -43,6 +43,7 @@ setup-docker-live-restore() {
echo "Enabling docker live-restore"
if [[ ! -f /etc/docker/daemon.json ]]; then
mkdir -p /etc/docker
echo "{}" >/etc/docker/daemon.json
fi
@@ -134,6 +135,85 @@ setup-sshcommand() {
fi
}
disable-default-vhost-path() {
local path="$1"
local backup_path="${path}.dokku-disabled"
if [ ! -e "$path" ] && [ ! -L "$path" ]; then
return
fi
if [ -e "$backup_path" ] || [ -L "$backup_path" ]; then
return
fi
case "$path" in
/etc/nginx/sites-enabled/*)
rm -f "$path"
echo "Removed conflicting nginx default at $path" 1>&2
return
;;
esac
if [ -L "$path" ]; then
rm -f "$path"
echo "Removed conflicting nginx default symlink at $path" 1>&2
return
fi
mv -n "$path" "$backup_path"
echo "Disabled $path (renamed to $backup_path)" 1>&2
}
setup-default-site() {
db_get "dokku/install_default_site"
if [ "$RET" != "true" ]; then
return
fi
local nginx_bin nginx_version major minor patch
nginx_bin="$(command -v nginx || true)"
if [ -z "$nginx_bin" ]; then
return
fi
nginx_version="$("$nginx_bin" -v 2>&1 | cut -d'/' -f 2 | awk '{print $1}')"
major="$(echo "$nginx_version" | awk -F. '{print $1}')"
minor="$(echo "$nginx_version" | awk -F. '{print $2}')"
patch="$(echo "$nginx_version" | awk -F. '{print $3}')"
# ssl_reject_handshake requires nginx >= 1.19.4; older nginx gets the
# HTTP-only catch-all so the SSL listen lines do not require a cert.
local default_vhost_basename="default-site.conf"
if [ "${major:-0}" -lt 2 ]; then
if [ "${major:-0}" -lt 1 ] || [ "${minor:-0}" -lt 19 ] || { [ "${minor:-0}" -eq 19 ] && [ "${patch:-0}" -lt 4 ]; }; then
default_vhost_basename="default-site-legacy.conf"
fi
fi
local default_vhost_target="/etc/nginx/conf.d/00-default-vhost.conf"
local default_vhost_source="${DOKKU_LIB_ROOT}/core-plugins/available/nginx-vhosts/templates/${default_vhost_basename}"
if [ -e "$default_vhost_target" ]; then
return
fi
if [ ! -f "$default_vhost_source" ]; then
return
fi
for path in /etc/nginx/sites-enabled/default /etc/nginx/sites-available/default /etc/nginx/conf.d/default.conf; do
disable-default-vhost-path "$path"
done
echo "Installing nginx default catch-all site at $default_vhost_target"
install -m 0644 -o root -g root "$default_vhost_source" "$default_vhost_target"
if command -v dokku &>/dev/null; then
dokku nginx:reload || true
fi
}
dpkg-handling() {
if [ -f "${DOKKU_ROOT}/VHOST" ]; then
echo "VHOST file detected, skipping modification"
@@ -169,6 +249,9 @@ case "$1" in
setup-plugins
setup-sshcommand
setup-docker-live-restore
if [ -z "$2" ]; then
setup-default-site
fi
;;
*)

5
debian/templates vendored
View File

@@ -22,3 +22,8 @@ Template: dokku/nginx_enable
Description: Enable nginx-vhosts plugin?
Type: boolean
Default: true
Template: dokku/install_default_site
Description: Install a catch-all nginx default site on fresh install?
Type: boolean
Default: true

View File

@@ -35,6 +35,9 @@ main() {
support-userns
rm -f /var/run/dokku/ready
mkdir -p /var/run/dokku
if [[ ! -d /mnt/dokku ]]; then
log-info "Creating missing /mnt/dokku"
mkdir -p /mnt/dokku

View File

@@ -0,0 +1,16 @@
# Internal health endpoint for the official dokku/dokku Docker image.
# Bound to loopback so it is reachable only from inside the container
# and never conflicts with user app vhosts on 80/443.
server {
listen 127.0.0.1:18080;
server_name _;
access_log off;
default_type text/plain;
location = /_dokku/health {
if (-f /var/run/dokku/ready) {
return 200 "ok\n";
}
return 503 "not ready\n";
}
}

View File

@@ -10,6 +10,10 @@ if [[ "$1" -ne 0 ]]; then
fi
echo "Done restoring dokku apps."
exec sleep infinity
exit 0
while ! (echo >/dev/tcp/127.0.0.1/22) >/dev/null 2>&1; do sleep 1; done
while ! (echo >/dev/tcp/127.0.0.1/80) >/dev/null 2>&1; do sleep 1; done
touch /var/run/dokku/ready
echo "Dokku is ready."
exec sleep infinity

161
docs/README.md Normal file
View File

@@ -0,0 +1,161 @@
# Dokku Documentation
This documentation covers the installation, configuration, and usage of Dokku - a Docker-powered PaaS that provides a Heroku-like experience.
## Getting Started
- [Installation](getting-started/installation/index.md) - Install Dokku on your server
- [Debian](getting-started/install/debian.md)
- [Docker](getting-started/install/docker.md)
- [DigitalOcean](getting-started/install/digitalocean.md)
- [Azure](getting-started/install/azure.md)
- [DreamHost](getting-started/install/dreamhost.md)
- [Vagrant](getting-started/install/vagrant.md)
- [Advanced Installation](getting-started/advanced-installation.md) - Custom installation options
- [Upgrading](getting-started/upgrading/index.md) - Upgrade to newer Dokku versions
- [Uninstalling](getting-started/uninstalling.md) - Remove Dokku from your server
- [Troubleshooting](getting-started/troubleshooting.md) - Common issues and solutions
- [Where to Get Help](getting-started/where-to-get-help.md) - Support resources
## Deployment
- [Application Deployment](deployment/application-deployment.md) - Deploy your first app
- [Application Management](deployment/application-management.md) - Manage deployed applications
- [Logs](deployment/logs.md) - View application logs
- [Remote Commands](deployment/remote-commands.md) - Run commands remotely
- [User Management](deployment/user-management.md) - Manage SSH access
- [Zero Downtime Deploys](deployment/zero-downtime-deploys.md) - Deploy without interruption
### Deployment Methods
- [Git](deployment/methods/git.md) - Deploy via git push
- [Archive](deployment/methods/archive.md) - Deploy from tar/zip archives
- [Image](deployment/methods/image.md) - Deploy from Docker images
### Builders
- [Builder Management](deployment/builders/builder-management.md) - Configure build systems
- [Buildpack Management](deployment/builders/buildpack-management.md) - Manage buildpack settings
- [Herokuish Buildpacks](deployment/builders/herokuish-buildpacks.md) - Heroku-compatible buildpacks
- [Cloud Native Buildpacks](deployment/builders/cloud-native-buildpacks.md) - CNB support
- [Dockerfiles](deployment/builders/dockerfiles.md) - Build from Dockerfile
- [Nixpacks](deployment/builders/nixpacks.md) - Nixpacks builder
- [Railpack](deployment/builders/railpack.md) - Railpack builder
- [Lambda](deployment/builders/lambda.md) - Lambda-style functions
- [Null Builder](deployment/builders/null.md) - Skip the build phase
### Schedulers
- [Scheduler Management](deployment/schedulers/scheduler-management.md) - Configure schedulers
- [Docker Local](deployment/schedulers/docker-local.md) - Default Docker scheduler
- [K3s](deployment/schedulers/k3s.md) - Lightweight Kubernetes
- [Kubernetes](deployment/schedulers/kubernetes.md) - External Kubernetes clusters
- [Nomad](deployment/schedulers/nomad.md) - HashiCorp Nomad
- [Null Scheduler](deployment/schedulers/null.md) - Skip scheduling
### Continuous Integration
- [Generic CI](deployment/continuous-integration/generic.md) - General CI/CD setup
- [GitHub Actions](deployment/continuous-integration/github-actions.md)
- [GitLab CI](deployment/continuous-integration/gitlab-ci.md)
- [Woodpecker CI](deployment/continuous-integration/woodpecker-ci.md)
## Configuration
- [Environment Variables](configuration/environment-variables.md) - Configure app environment
- [Domains](configuration/domains.md) - Custom domain management
- [SSL/TLS](configuration/ssl.md) - HTTPS and certificates
## Networking
- [Proxy Management](networking/proxy-management.md) - Reverse proxy configuration
- [Port Management](networking/port-management.md) - Port mapping and exposure
- [DNS](networking/dns.md) - DNS configuration
- [Network](networking/network.md) - Docker network management
### Proxies
- [Nginx](networking/proxies/nginx.md) - Default proxy
- [Caddy](networking/proxies/caddy.md)
- [HAProxy](networking/proxies/haproxy.md)
- [Traefik](networking/proxies/traefik.md)
- [OpenResty](networking/proxies/openresty.md)
## Processes
- [Process Management](processes/process-management.md) - Scale and manage processes
- [Scheduled Cron Tasks](processes/scheduled-cron-tasks.md) - Scheduled jobs
- [One-off Tasks](processes/one-off-tasks.md) - Run one-time commands
- [Entering Containers](processes/entering-containers.md) - Access running containers
## Advanced Usage
- [Persistent Storage](advanced-usage/persistent-storage.md) - Mount volumes
- [Docker Options](advanced-usage/docker-options.md) - Custom Docker run arguments
- [Resource Management](advanced-usage/resource-management.md) - CPU and memory limits
- [Plugin Management](advanced-usage/plugin-management.md) - Install and manage plugins
- [Registry Management](advanced-usage/registry-management.md) - Docker registry integration
- [Repository Management](advanced-usage/repository-management.md) - Git repository settings
- [Build Tracking](advanced-usage/builds.md) - Inspect, cancel, and manage builds
- [Deployment Tasks](advanced-usage/deployment-tasks.md) - Pre/post deploy hooks
- [Event Logs](advanced-usage/event-logs.md) - Dokku event history
- [Backup and Recovery](advanced-usage/backup-recovery.md) - Data backup strategies
## Development
- [Architecture](development/architecture.md) - Internal architecture overview for contributors
- [Plugin Creation](development/plugin-creation.md) - Build custom plugins
- [Plugin Triggers](development/plugin-triggers.md) - Available plugin hooks
- [Testing](development/testing.md) - Test Dokku and plugins
- [Release Process](development/release-process.md) - How Dokku releases work
## Community
- [Plugins](community/plugins.md) - Community-maintained plugins
- [Clients](community/clients.md) - API clients and tools
## Enterprise
- [Dokku Pro](enterprise/pro.md) - Commercial features and support
## Appendices
### Migration Guides
- [0.38.0](appendices/0.38.0-migration-guide.md)
- [0.37.0](appendices/0.37.0-migration-guide.md)
- [0.36.0](appendices/0.36.0-migration-guide.md)
- [0.35.0](appendices/0.35.0-migration-guide.md)
- [0.34.0](appendices/0.34.0-migration-guide.md)
- [0.33.0](appendices/0.33.0-migration-guide.md)
- [0.32.0](appendices/0.32.0-migration-guide.md)
- [0.31.0](appendices/0.31.0-migration-guide.md)
- [0.30.0](appendices/0.30.0-migration-guide.md)
- [0.29.0](appendices/0.29.0-migration-guide.md)
- [0.28.0](appendices/0.28.0-migration-guide.md)
- [0.27.0](appendices/0.27.0-migration-guide.md)
- [0.26.0](appendices/0.26.0-migration-guide.md)
- [0.25.0](appendices/0.25.0-migration-guide.md)
- [0.24.0](appendices/0.24.0-migration-guide.md)
- [0.23.0](appendices/0.23.0-migration-guide.md)
- [0.22.0](appendices/0.22.0-migration-guide.md)
- [0.21.0](appendices/0.21.0-migration-guide.md)
- [0.20.0](appendices/0.20.0-migration-guide.md)
- [0.10.0](appendices/0.10.0-migration-guide.md)
- [0.9.0](appendices/0.9.0-migration-guide.md)
- [0.8.0](appendices/0.8.0-migration-guide.md)
- [0.7.0](appendices/0.7.0-migration-guide.md)
- [0.6.0](appendices/0.6.0-migration-guide.md)
- [0.5.0](appendices/0.5.0-migration-guide.md)
### File Formats
- [app.json](appendices/file-formats/app-json.md) - Application configuration
- [Procfile](appendices/file-formats/procfile.md) - Process definitions
- [Dockerfile](appendices/file-formats/dockerfile.md) - Docker build instructions
- [.buildpacks](appendices/file-formats/buildpacks-file.md) - Buildpack configuration
- [project.toml](appendices/file-formats/project-toml.md) - CNB configuration
- [nixpacks.toml](appendices/file-formats/nixpacks-toml.md) - Nixpacks configuration
- [railpack.json](appendices/file-formats/railpack-json.md) - Railpack configuration
- [lambda.yml](appendices/file-formats/lambda-yml.md) - Lambda configuration
- [nginx.conf.sigil](appendices/file-formats/nginx-conf-sigil.md) - Nginx template customization

View File

@@ -1,4 +1,4 @@
FROM python:3.14.1-alpine
FROM python:3.15.0b1-alpine
WORKDIR /usr/src/app

View File

@@ -1,23 +1,23 @@
beautifulsoup4==4.14.3
click==8.3.1
click==8.3.3
ghp-import==2.1.0
importlib-metadata==8.7.0
importlib-metadata==9.0.0
Jinja2==3.1.6
Markdown>=3.2.1,<3.11
Markdown>=3.10.2,<3.11
MarkupSafe==3.0.3
mergedeep==1.3.4
mkdocs==1.6.1
mkdocs-exclude==1.0.2
mkdocs-material==9.7.0
mkdocs-material==9.7.6
mkdocs-material-extensions==1.3.1
packaging==25.0
Pygments==2.19.2
pymdown-extensions==10.17.2
pyparsing==3.2.5
packaging==26.2
Pygments==2.20.0
pymdown-extensions==10.21.2
pyparsing==3.3.2
python-dateutil==2.9.0.post0
PyYAML==6.0.3
pyyaml_env_tag==1.1
six==1.17.0
soupsieve==2.8
soupsieve==2.8.3
watchdog==6.0.0
zipp==3.23.0
zipp==3.23.1

View File

@@ -0,0 +1,171 @@
# Build Tracking
> [!IMPORTANT]
> New as of 0.38.0
Every deploy that flows through Dokku - whether triggered by `git push`, `ps:rebuild`, `ps:restart`, `config:set`, or `git:from-archive` / `git:from-image` / `git:sync` / `git:load-image` - is recorded as a structured build record on disk. The `builds` plugin lets operators inspect what is currently deploying, look up the result of an old deploy, and stream the captured build log without depending on `journalctl`.
```
builds:cancel <app> # Cancel a running build for an app
builds:info <app> <build-id> [--format json] # Show details for a single build
builds:list [<app>] [--format json] [--kind ...] [--status ...]
# List builds (running across all apps, or running + history for one)
builds:output <app> [<build-id>|current] # Show build output (tail for live, cat for finished)
builds:prune <app> [--all-apps] # Reap abandoned records and apply retention
builds:report [<app>] [<flag>] # Display a build report
builds:set [--global|<app>] <key> [<value>] # Set or clear a builds property
```
## Build records
Every build is identified by a sortable base36 ULID-style id (`DOKKU_BUILD_ID`) generated at deploy start. For each build, Dokku writes:
- `$DOKKU_LIB_ROOT/data/builds/<app>/<build-id>.json` - the structured record
- `$DOKKU_LIB_ROOT/data/builds/<app>/<build-id>.log` - the captured stdout/stderr of the deploy
Output is also tagged into syslog as `dokku-<build-id>` so `journalctl -t dokku-<build-id>` continues to work. The on-disk log file is the durable source of truth and is read for `builds:output` even when journald has rotated old entries away.
### Record schema
```json
{
"id": "01j8c4xv7bk5w3",
"app": "myapp",
"kind": "build",
"pid": 12345,
"started_at": "2026-04-30T13:50:00Z",
"finished_at": "2026-04-30T13:51:14Z",
"status": "succeeded",
"source": "git-hook",
"exit_code": 0
}
```
- **kind** - `build` for paths that produce a new image (`git push`, `git:*`, `ps:rebuild`); `deploy` for paths that re-deploy an existing image (`ps:restart`, `ps:start`, `dokku deploy`, `config:set`).
- **status** - on-disk values are `running | succeeded | failed | canceled`. `abandoned` is a fifth display-only value computed at read time for `running` records whose PID is no longer alive; it is never persisted to the record.
- **source** - the user-typed command that originated the deploy (e.g. `git-hook`, `ps:restart`, `config-redeploy`, `git:sync`).
## Listing builds
Without an app argument, `builds:list` shows currently-running builds across every app on the host:
```shell
dokku builds:list
```
```
=====> Currently running builds
App Build ID Kind PID Source Started
myapp 01j8c4xv7bk5w3 build 12345 git-hook 2026-04-30T13:50:00Z
```
With an app, `builds:list` returns running builds plus the most recent finalized records up to the configured retention:
```shell
dokku builds:list myapp
```
Filter by kind or status:
```shell
dokku builds:list myapp --kind build
dokku builds:list myapp --status running
dokku builds:list --format json
```
## Inspecting a single build
```shell
dokku builds:info myapp 01j8c4xv7bk5w3
```
```
=====> Build 01j8c4xv7bk5w3
Build ID: 01j8c4xv7bk5w3
App: myapp
Kind: build
Status: succeeded
PID: 12345
Source: git-hook
Started: 2026-04-30T13:50:00Z
Finished: 2026-04-30T13:51:14Z
Duration: 1m14s
Exit Code: 0
Log: /var/lib/dokku/data/builds/myapp/01j8c4xv7bk5w3.log
```
JSON output includes the same fields plus a computed `log_path`:
```shell
dokku builds:info myapp 01j8c4xv7bk5w3 --format json | jq .
```
## Streaming build output
```shell
# tail -f the live build, or cat the log for a finished one
dokku builds:output myapp 01j8c4xv7bk5w3
# resolve "current" from the in-flight deploy
dokku builds:output myapp current
```
If the on-disk log file is missing (for example, a build from before this plugin was installed), `builds:output` falls back to `journalctl -t dokku-<build-id>`.
## Cancelling a build
`builds:cancel` reads the active `.deploy.lock` for an app, looks up the matching build record, and sends `SIGQUIT` to the deploy's process group. The record is finalized as `canceled` (or `failed` if the process had already exited without finalizing - in that case Dokku marks the record so it doesn't sit in `running` forever).
```shell
dokku builds:cancel myapp
```
If the record is already finalized when cancel runs, no signal is sent and the record is left untouched.
## Retention
Build records are pruned by count, not by age. The default retention is **20** records per app. Live in-flight deploys are never pruned regardless of count.
Set a per-app retention:
```shell
dokku builds:set myapp retention 50
```
Set the global default:
```shell
dokku builds:set --global retention 10
```
Clear an override (falls back to the global value, then the default):
```shell
dokku builds:set myapp retention
```
## Manual pruning
`builds:prune` invokes the same logic that runs at the end of every deploy - it reaps abandoned records (status=running with a dead PID, finalized as `failed`) and trims the directory to the configured retention. Useful after lowering retention via `builds:set` or to clean up after a host reboot:
```shell
dokku builds:prune myapp
dokku builds:prune --all-apps
```
## Reports
```shell
dokku builds:report
dokku builds:report myapp
dokku builds:report myapp --build-status
```
Available flags:
- `--build-id`, `--build-kind`, `--build-status`, `--build-pid`, `--build-source`, `--build-started-at`, `--build-finished-at`, `--build-exit-code`: details of the most recent build for the app
- `--builds-retention`: per-app retention override (empty if none)
- `--builds-global-retention`: global retention override (empty if none)
- `--builds-computed-retention`: the resolved retention applied to this app
`--build-status` returns the **display** status, so an abandoned in-flight build shows `abandoned` rather than `running`. The raw on-disk status is only visible by reading the JSON record directly.

View File

@@ -4,10 +4,11 @@
> New as of 0.3.17
```
docker-options:add <app> <phase(s)> OPTION # Add Docker option to app for phase (comma-separated phase list)
docker-options:clear <app> [<phase(s)>...] # Clear a docker options from app
docker-options:remove <app> <phase(s)> OPTION # Remove Docker option from app for phase (comma-separated phase list)
docker-options:report [<app>] [<flag>] # Displays a docker options report for one or more apps
docker-options:add [--process PROC...] <app> <phase(s)> OPTION # Add Docker option to app for phase
docker-options:clear [--process PROC...] <app> [<phase(s)>...] # Clear docker options from app
docker-options:list <app> [--process PROC] --phase PHASE # List docker options for one process+phase pair
docker-options:remove [--process PROC...] <app> <phase(s)> OPTION # Remove Docker option from app for phase
docker-options:report [<app>] [<flag>] [--format json|stdout] # Displays a docker options report for one or more apps
```
The `docker-options` plugin allows users to specify custom [container options](https://docs.docker.com/engine/reference/run/) for containers created by Dokku at various phases.
@@ -57,11 +58,17 @@ Multiple phases can be specified by using a comma when specifying phases:
dokku docker-options:add node-js-app deploy,run "--ulimit nofile=12"
```
The `docker-options:add` does not support setting multiple options in a single call. To specify multiple options, call `docker-options:add` multiple times.
Multiple docker options can also be specified in a single call. Each `--flag [value]` group is detected on flag boundaries, shell-tokenized for quoting safety, and stored as its own entry so it round-trips through `docker-options:report` and `docker-options:list`:
```shell
dokku docker-options:add node-js-app deploy "--ulimit nofile=12"
dokku docker-options:add node-js-app deploy "--shm-size 256m"
dokku docker-options:add node-js-app deploy "--ulimit nofile=12" "--shm-size 256m"
```
A misplaced `--process PROC` (i.e. one specified after the app name instead of before it) is honored as a subcommand flag rather than stored as a docker option, so the example above and the equivalent process-scoped form below behave identically:
```shell
dokku docker-options:add --process web node-js-app deploy "--ulimit nofile=12" "--shm-size 256m"
dokku docker-options:add node-js-app deploy "--ulimit nofile=12" "--shm-size 256m" --process web
```
#### Remove a Docker option
@@ -69,7 +76,7 @@ dokku docker-options:add node-js-app deploy "--shm-size 256m"
To remove docker options from an app, use the `docker-options:remove` command. This takes an app name, a comma-separated list of phases, and the docker-option to remove.
```shell
dokku docker-options:remove node-js-app run ""--ulimit nofile=12"
dokku docker-options:remove node-js-app run "--ulimit nofile=12"
```
Multiple phases can be specified by using a comma when specifying phases:
@@ -78,11 +85,10 @@ Multiple phases can be specified by using a comma when specifying phases:
dokku docker-options:remove node-js-app deploy,run "--ulimit nofile=12"
```
The `docker-options:remove` does not support setting multiple options in a single call. To specify multiple options, call `docker-options:remove` multiple times.
Multiple docker options can also be removed in a single call, mirroring the splitting that `docker-options:add` performs:
```shell
dokku docker-options:remove node-js-app deploy "--ulimit nofile=12"
dokku docker-options:remove node-js-app deploy "--shm-size 256m"
dokku docker-options:remove node-js-app deploy "--ulimit nofile=12" "--shm-size 256m"
```
#### Clear all Docker options for an app
@@ -160,3 +166,67 @@ You can pass flags which will output only the value of the specific information
```shell
dokku docker-options:report node-js-app --docker-options-build
```
When process-specific options are configured (see below), the report exposes one additional dynamic flag per configured `process.deploy` pair, named `--docker-options-deploy.<process>`:
```shell
dokku docker-options:report node-js-app --docker-options-deploy.web
```
A machine-readable JSON view is available via `--format json`:
```shell
dokku docker-options:report node-js-app --format json
```
### Process-Specific Options
> [!IMPORTANT]
> New as of 0.38.0
Docker options can be scoped to specific process types declared in the app's `Procfile` by passing one or more `--process` flags. This is useful when a deploy-phase option (for example a port mapping) makes sense for one process type but would conflict with another - the canonical case being a `web` process that needs `-p 6789:5000` published while the `worker` process must not bind that port.
Process scoping is supported only for the `deploy` phase. The `build` phase runs once per app and the `run` phase covers ad-hoc commands and cron tasks where no Procfile process type is in play; both reject `--process`.
There is no `--global` flag. Omitting `--process` keeps the historical behavior of applying the option to every container in the app. Avoiding a `--global` flag here is intentional: elsewhere in Dokku `--global` means "across all apps" (e.g. `dokku config:set --global`), which would be misleading in this plugin where the scope is always one app.
#### Setting process-specific options
```shell
# Add a port mapping only to the web process
dokku docker-options:add --process web node-js-app deploy "-p 6789:5000"
# Add a GPU mount only to the worker process
dokku docker-options:add --process worker node-js-app deploy "--gpus all"
```
Multiple `--process` flags can be combined to apply the same option to several process types in one call:
```shell
dokku docker-options:add --process web --process api node-js-app deploy "-v /shared:/shared"
```
If `--process` names a process type that is not currently declared in the app's `Procfile`, the command succeeds but emits a warning. This allows configuring options ahead of a deploy that adds the new process type.
The `_default_` value is reserved internally and cannot be passed to `--process`.
#### Removing and clearing process-specific options
```shell
# Remove a single option from one process
dokku docker-options:remove --process web node-js-app deploy "-p 6789:5000"
# Clear every option for a process+phase
dokku docker-options:clear --process worker node-js-app deploy
```
Without `--process`, `:remove` and `:clear` operate on the default scope only - per-process lists are left untouched.
#### Listing options for a process and phase
The `docker-options:list` command prints the options stored for a single process+phase pair, one option per line. Omitting `--process` lists the default scope.
```shell
dokku docker-options:list node-js-app --process web --phase deploy
dokku docker-options:list node-js-app --phase deploy
```

View File

@@ -1,24 +1,37 @@
# Persistent Storage
> [!IMPORTANT]
> New as of 0.5.0
> New as of 0.5.0. Named storage entries new as of 0.38.0.
The preferred method to mount external containers to a Dokku managed container, is to use the Dokku storage plugin.
The preferred method to attach persistent storage to a Dokku-managed container is the Dokku storage plugin.
```
storage:ensure-directory [--chown option] <directory> # Creates a persistent storage directory in the recommended storage path
storage:list <app> [--format text|json] # List bind mounts for app's container(s) (host:container)
storage:mount <app> <host-dir:container-dir> # Create a new bind mount
storage:report [<app>] [<flag>] # Displays a checks report for one or more apps
storage:unmount <app> <host-dir:container-dir> # Remove an existing bind mount
storage:create <name> [<path>] [flags] # Register a named storage entry
storage:destroy <name> # Remove a named storage entry (must be unmounted from every app first)
storage:ensure-directory [--chown option] <directory> # [DEPRECATED] use storage:create instead
storage:exec <name> [-- <cmd>...] # Run a command (or shell) in a temporary container that mounts the entry
storage:info <name> [--format text|json] # Show details for one storage entry
storage:list <app> [--format text|json] # List bind mounts for an app's container(s) (legacy host:container view)
storage:list-entries [--scheduler s] [--format text|json] # List registered storage entries
storage:mount <app> <name> --container-dir <path> [flags] # Mount a named entry into an app
storage:mount <app> <host-dir:container-dir> # [LEGACY] colon-form mount, docker-local only
storage:report [<app>] [<flag>] # Display a storage report for one or more apps
storage:report --global # Display a cluster-wide entry inventory
storage:set <name> [flags] # Update a storage entry in place
storage:unmount <app> <name> [--container-dir <path>] # Remove an attachment
storage:wait <name> # Block until a k3s entry's PVC is bound
```
> The storage plugin is compatible with storage mounts created with the docker-options. The storage plugin will only list mounts from the deploy/run phase.
A storage entry is the source of truth for the underlying volume - a host directory on docker-local, or a PersistentVolumeClaim on k3s. Multiple apps can mount the same entry, and an attachment carries the per-app details (container path, phases, subpath, readonly, process type). Names are globally unique across the install and must be DNS-1123 labels (lowercase letters, digits, dashes) of 45 characters or less so they can be used verbatim as Helm release and PVC names.
The legacy `storage:mount <app> <host>:<container>` form continues to work on docker-local. On a k3s app it is rejected; create a named entry with `storage:create --scheduler k3s` and mount it instead. Existing colon-form mounts are migrated automatically the first time the new code runs - they show up as `legacy-<hash>` entries in `storage:list-entries`.
The storage plugin supports the following mount points:
- explicit paths that exist on the host
- docker volumes
- explicit paths that exist on the host (docker-local)
- docker volumes (docker-local)
- PersistentVolumeClaims provisioned via a StorageClass (k3s)
- hostPath-backed PVs (k3s)
## Usage

View File

@@ -36,35 +36,35 @@ dokku plugin:list
```
plugn: dev
00_dokku-standard 0.37.2 enabled dokku core standard plugin
20_events 0.37.2 enabled dokku core events logging plugin
app-json 0.37.2 enabled dokku core app-json plugin
apps 0.37.2 enabled dokku core apps plugin
build-env 0.37.2 enabled dokku core build-env plugin
buildpacks 0.37.2 enabled dokku core buildpacks plugin
certs 0.37.2 enabled dokku core certificate management plugin
checks 0.37.2 enabled dokku core checks plugin
common 0.37.2 enabled dokku core common plugin
config 0.37.2 enabled dokku core config plugin
docker-options 0.37.2 enabled dokku core docker-options plugin
domains 0.37.2 enabled dokku core domains plugin
enter 0.37.2 enabled dokku core enter plugin
git 0.37.2 enabled dokku core git plugin
logs 0.37.2 enabled dokku core logs plugin
network 0.37.2 enabled dokku core network plugin
nginx-vhosts 0.37.2 enabled dokku core nginx-vhosts plugin
plugin 0.37.2 enabled dokku core plugin plugin
proxy 0.37.2 enabled dokku core proxy plugin
ps 0.37.2 enabled dokku core ps plugin
repo 0.37.2 enabled dokku core repo plugin
resource 0.37.2 enabled dokku core resource plugin
scheduler-docker-local 0.37.2 enabled dokku core scheduler-docker-local plugin
shell 0.37.2 enabled dokku core shell plugin
ssh-keys 0.37.2 enabled dokku core ssh-keys plugin
storage 0.37.2 enabled dokku core storage plugin
tags 0.37.2 enabled dokku core tags plugin
tar 0.37.2 enabled dokku core tar plugin
trace 0.37.2 enabled dokku core trace plugin
00_dokku-standard 0.38.4 enabled dokku core standard plugin
20_events 0.38.4 enabled dokku core events logging plugin
app-json 0.38.4 enabled dokku core app-json plugin
apps 0.38.4 enabled dokku core apps plugin
build-env 0.38.4 enabled dokku core build-env plugin
buildpacks 0.38.4 enabled dokku core buildpacks plugin
certs 0.38.4 enabled dokku core certificate management plugin
checks 0.38.4 enabled dokku core checks plugin
common 0.38.4 enabled dokku core common plugin
config 0.38.4 enabled dokku core config plugin
docker-options 0.38.4 enabled dokku core docker-options plugin
domains 0.38.4 enabled dokku core domains plugin
enter 0.38.4 enabled dokku core enter plugin
git 0.38.4 enabled dokku core git plugin
logs 0.38.4 enabled dokku core logs plugin
network 0.38.4 enabled dokku core network plugin
nginx-vhosts 0.38.4 enabled dokku core nginx-vhosts plugin
plugin 0.38.4 enabled dokku core plugin plugin
proxy 0.38.4 enabled dokku core proxy plugin
ps 0.38.4 enabled dokku core ps plugin
repo 0.38.4 enabled dokku core repo plugin
resource 0.38.4 enabled dokku core resource plugin
scheduler-docker-local 0.38.4 enabled dokku core scheduler-docker-local plugin
shell 0.38.4 enabled dokku core shell plugin
ssh-keys 0.38.4 enabled dokku core ssh-keys plugin
storage 0.38.4 enabled dokku core storage plugin
tags 0.38.4 enabled dokku core tags plugin
tar 0.38.4 enabled dokku core tar plugin
trace 0.38.4 enabled dokku core trace plugin
```
> [!WARNING]

View File

@@ -4,9 +4,10 @@
> New as of 0.25.0
```
registry:login [--password-stdin] <server> <username> [<password>] # Login to a docker registry
registry:report [<app>] [<flag>] # Displays a registry report for one or more apps
registry:set <app> <key> (<value>) # Set or clear a registry property for an app
registry:login [--global|--password-stdin] [<app>] <server> <username> [<password>] # Login to a docker registry
registry:logout [--global] [<app>] <server> # Logout from a docker registry
registry:report [<app>] [<flag>] # Displays a registry report for one or more apps
registry:set <app>|--global <key> (<value>) # Set or clear a registry property for an app
```
The registry plugin enables interacting with remote registries, which is useful when either deploying images via `git:from-image` or when interacting with custom schedulers to deploy built image artifacts.
@@ -15,34 +16,75 @@ The registry plugin enables interacting with remote registries, which is useful
### Logging into a registry
The `registry:login` command can be used to log into a docker registry. The following are examples for logging into various common registries:
The `registry:login` command can be used to log into a docker registry. Credentials can be stored globally (for all apps) or on a per-app basis.
#### Global login
To log in globally (credentials shared by all apps), use the `--global` flag:
```shell
# hub.docker.com
dokku registry:login docker.io $USERNAME $PASSWORD
dokku registry:login --global docker.io $USERNAME $PASSWORD
# digitalocean
# the username and password are both defined as the same api token
dokku registry:login registry.digitalocean.com $DIGITALOCEAN_API_TOKEN $DIGITALOCEAN_API_TOKEN
dokku registry:login --global registry.digitalocean.com $DIGITALOCEAN_API_TOKEN $DIGITALOCEAN_API_TOKEN
# github container registry
# see the following link for information on retrieving a personal access token
# https://docs.github.com/en/packages/guides/pushing-and-pulling-docker-images#authenticating-to-github-container-registry
dokku registry:login ghcr.io $USERNAME $REGISTRY_PAT_TOKEN
dokku registry:login --global ghcr.io $USERNAME $REGISTRY_PAT_TOKEN
# quay
# a robot user may be used to login
dokku registry:login quay.io $USERNAME $PASSWORD
dokku registry:login --global quay.io $USERNAME $PASSWORD
```
For security reasons, the password may also be specified as stdin by specifying the `--password-stdin` flag. This is supported regardless of the registry being logged into.
> [!NOTE]
> For backwards compatibility, if the `--global` flag is omitted and only three arguments are provided (server, username, password), the command will behave as a global login but will show a deprecation warning.
#### Per-app login
To log in for a specific app, specify the app name as the first argument:
```shell
echo "$PASSWORD" | dokku registry:login --password-stdin docker.io $USERNAME
# log into docker.io for a specific app
dokku registry:login node-js-app docker.io $USERNAME $PASSWORD
# log into ghcr.io for a specific app
dokku registry:login node-js-app ghcr.io $USERNAME $REGISTRY_PAT_TOKEN
```
Per-app credentials are stored in `/var/lib/dokku/config/registry/$APP/config.json` and are automatically used for docker operations (build, push, pull) for that specific app.
#### Password via stdin
For security reasons, the password may also be specified as stdin by specifying the `--password-stdin` flag. This is supported for both global and per-app logins:
```shell
# global login via stdin
echo "$PASSWORD" | dokku registry:login --global --password-stdin docker.io $USERNAME
# per-app login via stdin
echo "$PASSWORD" | dokku registry:login node-js-app --password-stdin docker.io $USERNAME
```
For certain Docker registries - such as Amazon ECR or Google's GCR registries - users may instead wish to use a docker credential helper to automatically authenticate against a server; please see the documentation regarding the credential helper in question for further setup instructions.
### Logging out from a registry
The `registry:logout` command can be used to log out from a docker registry:
```shell
# global logout
dokku registry:logout --global docker.io
# per-app logout
dokku registry:logout node-js-app docker.io
```
When an app is destroyed, any per-app registry credentials are automatically removed.
### Setting a remote server
To specify a remote server registry for pushes, set the `server` property via the `registry:set` command. The default value for this property is empty string. Setting the value to `docker.io` or `hub.docker.com` will result in the computed value being empty string (as that is the default, implicit registry), while any non-zero length value will have a `/` appended to it if there is not one already.

View File

@@ -32,7 +32,7 @@ Valid resource options include:
See the [Supported Resource Management Properties](/docs/deployment/schedulers/docker-local.md#supported-resource-management-properties) section of the docker local scheduler documentation for more information on how each resource limit maps to Docker.
Resource limits and reservations are applied only during the `run` and `deploy` phases of an application, and will not impact the `build` phase of an application.
Resource reservations are applied only during the `run` and `deploy` phases of an application. Resource limits also apply during the `build` phase when explicitly configured against the `build` process type - see [Build-time Resource Limits](#build-time-resource-limits) below.
### Resource Limits
@@ -120,6 +120,40 @@ dokku resource:limit --process-type web node-js-app
nvidia-gpu:
```
#### Build-time Resource Limits
> [!IMPORTANT]
> New as of 0.38.0
Resource limits may be applied to the build container by using the special `build` process type. This allows constraining memory and CPU usage during the `build` phase, which is otherwise unconstrained.
```shell
dokku resource:limit --memory 4g --process-type build node-js-app
```
```
=====> Setting resource limits for node-js-app (build)
memory: 4g
```
Build-time limits are applied via the `docker-args-process-build` plugin trigger. They do not inherit from default (`_default_`) limits - only limits explicitly set against the `build` process type are applied at build time. This is intentional: build phases often require more memory than the runtime process, and silently inheriting a small runtime limit would cause confusing OOM failures.
> [!WARNING]
> Do not use `build` as a runtime process type in your `Procfile`. The `build` name is reserved by the resource plugin to scope limits to the build container, and using it as a Procfile entry will cause those limits to be applied to that runtime container as well.
Supported limits per builder:
| Builder | `--cpu` | `--memory` | `--memory-swap` | `--nvidia-gpu` |
|------------|---------|------------|-----------------|----------------|
| herokuish | yes | yes | yes | yes |
| dockerfile | no | yes | yes | no |
| pack | no | no | no | no |
| nixpacks | no | no | no | no |
| railpack | no | no | no | no |
| lambda | no | no | no | no |
Resource keys outside the supported set for a builder are silently ignored. Reservations (`resource:reserve`) are never applied at build time - only limits.
#### Clearing Resource Limits
In cases where the values are incorrect - or there is no desire to limit resources - resource limits may be cleared using the `resource:limit-clear` command.

View File

@@ -0,0 +1,64 @@
# 0.38.0 Migration Guide
## Changes
- Dokku now generates a minimal nginx configuration for apps without running `web` processes (undeployed apps, apps with no `web` process type, or apps with stopped web processes). This configuration returns `502 Bad Gateway` responses, ensuring the app's domain resolves and monitoring tools can detect non-200 status codes. The configuration is automatically replaced with the full proxy configuration once the app is deployed with running `web` processes. See the [nginx documentation](/docs/networking/proxies/nginx.md#nginx-configuration-for-undeployed-apps) for more details.
- Users with custom `nginx.conf.sigil` templates that reference `DOKKU_APP_WEB_LISTENERS` should be aware that this variable may now be empty when the template is rendered for apps without running web processes. Custom templates should handle this case gracefully, for example by using a conditional to serve an error page instead of proxying:
```
location / {
{{ if $.DOKKU_APP_WEB_LISTENERS }}
proxy_pass http://{{ $.APP }}-{{ $upstream_port }};
{{ else }}
return 502;
{{ end }}
}
```
- The path on disk to both the global `ENV` file and app `ENV` files have been moved. Users should reference environment variables via the provided plugin triggers rather than directly sourcing the ENV files. Existing ENV files are left untouched and will be removed on the subsequent Dokku install.
- During a fresh apt install, the upstream nginx default vhost files (`/etc/nginx/sites-enabled/default`, `/etc/nginx/sites-available/default`, and `/etc/nginx/conf.d/default.conf`) are renamed to `${path}.dokku-disabled` (not deleted) to avoid a `duplicate default server for 0.0.0.0:80` error. Operators with local customizations can recover them by inspecting the `.dokku-disabled` siblings. Upgrade-in-place installs do not touch any existing nginx files.
- Fresh apt installs now ship a catch-all default site at `/etc/nginx/conf.d/00-default-vhost.conf` that rejects requests with unknown Host headers using `ssl_reject_handshake on` (HTTPS) and `return 444` (HTTP). This replaces the manual workaround previously documented in the nginx docs. The behavior can be opted out at install time via the `dokku/install_default_site` debconf prompt. On nginx older than 1.19.4 (e.g., Debian Bullseye's nginx 1.18.0), the postinst installs an HTTP-only variant of the catch-all that omits the SSL listener and `ssl_reject_handshake`, since that directive is unsupported on those versions. See the [Default site documentation](/docs/networking/proxies/nginx.md#default-site).
- The `docker-local` scheduler now sends `SIGTERM` to old containers immediately after a successful deploy, rather than waiting `wait-to-retire` seconds before signaling. This matches Heroku's graceful-shutdown contract and lets applications begin draining in-flight work as soon as proxy traffic switches. The `wait-to-retire` grace period and `stop-timeout-seconds` hard-stop continue to apply as before. See the [zero downtime deploys documentation](/docs/deployment/zero-downtime-deploys.md#wait-to-retire) for more details.
- The `docker-local` scheduler no longer queues an image for retirement when another running container of the same app still uses it. This fixes the case where a `ps:rebuild` against an image-based deploy (`git:from-image`) produced an identical-SHA image and the `dokku-retire` cron timer would log `Image ... has running containers, skipping rm` on every run. Stuck entries from prior versions are pruned automatically on the next `ps:retire` run.
- All `:report` subcommands now accept the `--global` flag, which scopes the report to globally-configured properties. The flag composes with `--format json`, so a JSON report of global properties can be obtained via, for example, `dokku scheduler:report --global --format json`. Previously, combining `--global` with `--format json` was rejected with an "info flag" error, and `--global` on its own was treated as an unknown flag.
- The `scheduler-k3s` plugin now manages env config and the dokku-generated image pull Secret as their own helm releases with stable names (`config-{app}` and `pull-secret-{app}`) rather than bundling them into the app helm chart with a per-deploy timestamp suffix (`env-{app}.{ts}` / `ims-{app}.{ts}`). This fixes two bugs: a helm rollback of the app chart no longer deletes Secrets that older ReplicaSets still reference, and the Deployment's `imagePullSecrets` list no longer accumulates references to nonexistent Secrets across deploys. The next deploy of an app switches the Deployment's `envFrom` and `imagePullSecrets` references to the stable names and prunes any leaked entries; existing live Deployments do not need to be patched manually. App rename now also uninstalls the old `tls-{app}`, `config-{app}`, and `pull-secret-{app}` releases under the previous app name; the new name's releases are recreated on the next deploy or certs sync.
- The storage plugin now treats persistent volumes as named, scheduler-aware first-class resources via `storage:create`, `storage:mount`, `storage:set`, and `storage:destroy`. The legacy `storage:mount <app> <host>:<container>` colon form continues to work on docker-local apps but is deprecated; on k3s apps it is rejected. Existing colon-form mounts are migrated automatically the first time the new storage plugin runs (during the install trigger) - they appear as `legacy-<hash>` entries in `storage:list-entries`. The migration is idempotent and tied to a per-app flag file at `$DOKKU_LIB_ROOT/config/storage/.migrated/<app>`; deleting that file forces a re-scan on the next install. The `storage:ensure-directory` command keeps working but now emits a deprecation warning - prefer `storage:create <name> [<path>]` (the path defaults to the same `$DOKKU_LIB_ROOT/data/storage/<name>` location). Storage entry names must now be DNS-1123 labels of 45 characters or less so they can be used verbatim as Helm release and Kubernetes resource names; underscores and uppercase characters that the older `ensure-directory` validator accepted are rejected for new names. The migration synthesizer always uses lowercase hex hashes so existing data is never locked out.
### TLS handshake behavior change
With the new catch-all installed on nginx 1.19.4+, an HTTPS request to a hostname that matches a configured dokku app but where the app has no TLS certificate configured will have its TLS handshake rejected by the catch-all (via `ssl_reject_handshake on`). Previously, nginx fell through to the lexicographically first port-443 server block and presented that block's certificate, producing a cert-mismatch error on the client. The new behavior is a correctness improvement, but operators who deliberately relied on the old fall-through certificate (for monitoring probes, for example) need to either configure a certificate for the target app or remove the catch-all on that host. Existing apps that already have certificates configured are unaffected: nginx selects the right server block via SNI before TLS completion, so the catch-all is never consulted for legitimate requests.
This change does not apply to nginx older than 1.19.4 (e.g., Debian Bullseye's nginx 1.18.0), where the catch-all is installed as an HTTP-only variant. On those systems, HTTPS handshakes to unknown hosts continue to fall through to the first port-443 server block as before.
### Environment variables migrated to plugin properties
A number of `DOKKU_*` config environment variables have been replaced with properly-namespaced plugin properties. Existing values are migrated automatically the first time `dokku` runs after the upgrade, and the original config variable is unset. No manual action is required.
Going forward, configure these settings using the property commands listed below. Setting the deprecated env vars via `dokku config:set` will no longer have any effect.
| Deprecated Env Var | Replacement Command |
|---|---|
| `DOKKU_APP_PROXY_TYPE` | `dokku proxy:set <app> type <value>` |
| `DOKKU_APP_RESTORE` | `dokku ps:set <app> restore <true\|false>` |
| `DOKKU_APP_SHELL` | `dokku scheduler:set <app> shell <value>` |
| `DOKKU_CHECKS_DISABLED` | `dokku checks:disable <app> [proctypes]` |
| `DOKKU_CHECKS_ENABLED` | `dokku checks:enable <app> [proctypes]` |
| `DOKKU_CHECKS_SKIPPED` | `dokku checks:skip <app> [proctypes]` |
| `DOKKU_CHECKS_WAIT` | `dokku checks:set <app> wait <value>` |
| `DOKKU_CHECKS_TIMEOUT` | `dokku checks:set <app> timeout <value>` |
| `DOKKU_CHECKS_ATTEMPTS` | `dokku checks:set <app> attempts <value>` |
| `DOKKU_DEFAULT_CHECKS_WAIT` | `dokku checks:set --global default-wait <value>` |
| `DOKKU_DISABLE_APP_AUTOCREATION` | `dokku apps:set --global disable-autocreation <true\|false>` |
| `DOKKU_DISABLE_PROXY` | `dokku proxy:disable <app>` / `dokku proxy:enable <app>` |
| `DOKKU_DOCKERFILE_START_CMD` | `dokku ps:set <app> dockerfile-start-cmd <value>` |
| `DOKKU_PROXY_PORT` | `dokku proxy:set <app> proxy-port <value>` |
| `DOKKU_PROXY_SSL_PORT` | `dokku proxy:set <app> proxy-ssl-port <value>` |
| `DOKKU_SKIP_ALL_CHECKS` | `dokku checks:disable <app>` |
| `DOKKU_SKIP_CLEANUP` | `dokku builder:set <app> skip-cleanup <true\|false>` |
| `DOKKU_SKIP_DEFAULT_CHECKS` | `dokku checks:skip <app>` |
| `DOKKU_SKIP_DEPLOY` | `dokku ps:set <app> skip-deploy <true\|false>` |
| `DOKKU_START_CMD` | `dokku ps:set <app> start-cmd <value>` |
`DOKKU_PARALLEL_ARGUMENTS` is removed entirely; it has no replacement.
`DOKKU_SKIP_CLEANUP` continues to be honored when set in `/etc/environment` or `~dokku/.dokkurc/*` so that bootstrap-time configuration keeps working, but the `builder skip-cleanup` property is the canonical interface and takes precedence when set.

View File

@@ -5,6 +5,25 @@
> [!IMPORTANT]
> While the `app.json` format used by Dokku is based on the one [supported by Heroku](https://devcenter.heroku.com/articles/app-json-schema), not all Heroku functionality is supported by Dokku.
## Buildpacks
```json
{
"buildpacks": [
{
"url": "heroku/python"
},
{
"url": "https://github.com/heroku/heroku-buildpack-nodejs.git"
}
]
}
```
(list, optional) A list of buildpacks to use when deploying the app. Each entry is an object with a `url` property. Buildpacks specified via the `buildpacks:add` or `buildpacks:set` commands take precedence over those specified in `app.json`. Buildpack URLs may use the shorthand format (e.g., `heroku/python`) which will be expanded to the full GitHub URL.
- `url`: (string, required) The URL or shorthand reference of the buildpack.
## Cron
```json
@@ -25,6 +44,103 @@
- `schedule`: (string, required)
- `concurrency_policy`: (string, optional, default: `allow`, options: `allow`, `forbid`, `replace`)
## Env
```json
{
"env": {
"SIMPLE_VAR": "default_value",
"SECRET_KEY": {
"description": "A secret key for signing tokens",
"generator": "secret"
},
"DATABASE_URL": {
"description": "PostgreSQL connection string",
"required": true
},
"OPTIONAL_VAR": {
"description": "An optional configuration value",
"value": "default",
"required": false
},
"SYNC_VAR": {
"description": "A variable that updates on every deploy",
"value": "synced_value",
"sync": true
}
}
}
```
(object, optional) A key-value object for environment variable configuration. Keys are the variable names. Values can be either a string (used as the default value) or an object with the following properties:
- `description`: (string, optional) Human-readable explanation of the variable's purpose
- `value`: (string, optional) Default value for the variable
- `required`: (boolean, optional, default: `true`) Whether the variable must have a value
- `generator`: (string, optional) Function to generate the value. Currently only `"secret"` is supported, which generates a 64-character cryptographically secure hex string
- `sync`: (boolean, optional, default: `false`) If `true`, the value will be set on every deploy, overwriting any existing value
### Behavior
Environment variables from `app.json` are processed during the first deploy, before the predeploy script runs. The behavior depends on the variable configuration:
1. **Variables with `value` or simple string**: The default value is set if the variable doesn't already exist
2. **Variables with `generator: "secret"`**: A random 64-character hex string is generated if the variable doesn't exist
3. **Required variables without a value or generator**: If a TTY is available, the user is prompted for a value. Otherwise, the deploy fails with an error
4. **Optional variables without a value**: Skipped silently if no TTY is available
On subsequent deploys:
- Variables are NOT re-set unless `sync: true` is specified
- Variables with `sync: true` are always set to their configured value, overwriting any manual changes
- Variables that already have values are not modified
### Examples
**Simple default value:**
```json
{
"env": {
"WEB_CONCURRENCY": "5"
}
}
```
**Generated secret (recommended for API keys, tokens, etc.):**
```json
{
"env": {
"SECRET_KEY_BASE": {
"description": "Base secret for session encryption",
"generator": "secret"
}
}
}
```
**Required variable that must be provided:**
```json
{
"env": {
"DATABASE_URL": {
"description": "PostgreSQL connection URL",
"required": true
}
}
}
```
**Variable that stays in sync with app.json:**
```json
{
"env": {
"FEATURE_FLAGS": {
"value": "new_ui,dark_mode",
"sync": true
}
}
}
```
## Formation
```json

View File

@@ -1,3 +1,9 @@
# nginx.conf.sigil
The `nginx.conf.sigil` file is used to configure the nginx server for an application. The default template can be found [here](https://github.com/dokku/dokku/blob/master/plugins/nginx-vhosts/templates/nginx.conf.sigil). Dokku uses a tool named [sigil](https://github.com/gliderlabs/sigil) to generate the nginx configuration based on the template provided.
## Validation
A custom `nginx.conf.sigil` is pre-validated at the start of every deploy, immediately after it is extracted from the source tree and before the build phase runs. Pre-validation renders the template via sigil with the same parameters used at deploy time, wraps the rendered config in a minimal `events`/`http` scaffold, and runs `nginx -t` against the result. The deploy is aborted if either the sigil render or the `nginx -t` check fails, so build work is not wasted on a syntactically invalid template. When no app listeners exist yet (typical for first deploys), pre-validation injects a placeholder `127.0.0.1:5000` listener for `DOKKU_APP_WEB_LISTENERS` so that the rendered upstream block has a static server entry and `nginx -t` does not bail out on "host not found in upstream".
Pre-validation is skipped when the proxy type is not `nginx` or when `disable-custom-config` is set to `true` for the app.

View File

@@ -2,10 +2,10 @@
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/mstile-70x70.png"/>
<square150x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/mstile-150x150.png"/>
<square310x310logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/mstile-310x310.png"/>
<wide310x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/mstile-310x150.png"/>
<square70x70logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/mstile-70x70.png"/>
<square150x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/mstile-150x150.png"/>
<square310x310logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/mstile-310x310.png"/>
<wide310x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/mstile-310x150.png"/>
<TileColor>#da532c</TileColor>
</tile>
</msapplication>

View File

@@ -2,37 +2,37 @@
"name": "Dokku",
"icons": [
{
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.37.2\/docs\/assets\/favicons\/android-chrome-36x36.png",
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.38.4\/docs\/assets\/favicons\/android-chrome-36x36.png",
"sizes": "36x36",
"type": "image\/png",
"density": "0.75"
},
{
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.37.2\/docs\/assets\/favicons\/android-chrome-48x48.png",
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.38.4\/docs\/assets\/favicons\/android-chrome-48x48.png",
"sizes": "48x48",
"type": "image\/png",
"density": "1.0"
},
{
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.37.2\/docs\/assets\/favicons\/android-chrome-72x72.png",
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.38.4\/docs\/assets\/favicons\/android-chrome-72x72.png",
"sizes": "72x72",
"type": "image\/png",
"density": "1.5"
},
{
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.37.2\/docs\/assets\/favicons\/android-chrome-96x96.png",
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.38.4\/docs\/assets\/favicons\/android-chrome-96x96.png",
"sizes": "96x96",
"type": "image\/png",
"density": "2.0"
},
{
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.37.2\/docs\/assets\/favicons\/android-chrome-144x144.png",
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.38.4\/docs\/assets\/favicons\/android-chrome-144x144.png",
"sizes": "144x144",
"type": "image\/png",
"density": "3.0"
},
{
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.37.2\/docs\/assets\/favicons\/android-chrome-192x192.png",
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.38.4\/docs\/assets\/favicons\/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image\/png",
"density": "4.0"

View File

@@ -25,9 +25,9 @@
/* Avatar section darkmode fade */
--avatar-before-gradient: rgba(0, 0, 0, 0) linear-gradient(90deg, white 2.52%, rgba(255, 255, 255, 0) 100%) repeat scroll 0% 0%;
--avatar-darkmode-before-gradient: rgba(0, 0, 0, 0) linear-gradient(90deg, #0.37.2 2.52%, rgba(255, 255, 255, 0) 100%) repeat scroll 0% 0%;
--avatar-darkmode-before-gradient: rgba(0, 0, 0, 0) linear-gradient(90deg, #0.38.4 2.52%, rgba(255, 255, 255, 0) 100%) repeat scroll 0% 0%;
--avatar-after-gradient: rgba(0, 0, 0, 0) linear-gradient(270deg, white 2.52%, rgba(255, 255, 255, 0) 100%) repeat scroll 0% 0%;
--avatar-darkmode-after-gradient: rgba(0, 0, 0, 0) linear-gradient(270deg, #0.37.2 2.52%, rgba(255, 255, 255, 0) 100%) repeat scroll 0% 0%;
--avatar-darkmode-after-gradient: rgba(0, 0, 0, 0) linear-gradient(270deg, #0.38.4 2.52%, rgba(255, 255, 255, 0) 100%) repeat scroll 0% 0%;
}
body {
@@ -1191,15 +1191,15 @@ ul.fas li .fa-large:before {
.getting-started::after {
background: linear-gradient(0deg, rgba(52, 52, 87, 0.2) -40.97%, rgba(0, 0, 0, 0) 103.19%),
#0.37.2;
#0.38.4;
}
.tab-content {
background: #0.37.2;
background: #0.38.4;
}
.nav-tabs {
background: #0.37.2;
background: #0.38.4;
}
.powered-by_brands {

View File

@@ -34,6 +34,7 @@
"0.34.9",
"0.35.20",
"0.36.11",
"0.37.2"
"0.37.10",
"0.38.4"
]
}

View File

@@ -104,6 +104,7 @@ The following plugins are available and provided by Dokku maintainers. Please f
| [InfluxDB](https://github.com/basgys/dokku-influxdb) | [basgys][] | 0.4.x |
| [RethinkDB](https://github.com/stuartpb/dokku-rethinkdb-plugin) | [stuartpb][] | 0.3.x |
| [Headless Chrome](https://github.com/lazyatom/dokku-chrome) | [lazyatom][] | 0.8.1+ |
| [HTTP OAuth](https://github.com/cheif/dokku-http-oauth) | [cheif][] | 0.4.0+ |
### Plugins Implementing New Dokku Functionality
@@ -113,6 +114,7 @@ The following plugins are available and provided by Dokku maintainers. Please f
| [APT](https://github.com/dokku-community/dokku-apt) | [dokku-community][] | 0.18.x+ |
| [Auto Sync](https://github.com/IdeaSynthesis/dokku-autosync)<sup>1</sup> | [fomojola][] | 0.8.1+ |
| [Deploy Webhook](https://github.com/IdeaSynthesis/dokku-deploy-webhook)<sup>2</sup> | [fomojola][] | 0.8.1+ |
| [DNS](https://github.com/deanmarano/dokku-dns) | [deanmarano][] | 0.31.0+ |
| [Docker auto persist volumes](https://github.com/Flink/dokku-docker-auto-volumes) | [flink][] | 0.4.0+ |
| [Docker Direct](https://github.com/dokku-community/dokku-docker-direct) | [josegonzalez][] | 0.4.0+ |
| [Dokku Clone](https://github.com/crisward/dokku-clone) | [crisward][] | 0.4.0+ |
@@ -266,10 +268,12 @@ The following plugins are no longer maintained by their developers.
[candlewaster]: https://notabug.org/candlewaster
[cedricziel]: https://github.com/cedricziel
[cef]: https://github.com/cef
[cheif]: https://github.com/cheif
[cjblomqvist]: https://github.com/cjblomqvist
[crisward]: https://github.com/crisward
[cu12]: https://github.com/cu12
[darkpixel]: https://github.com/darkpixel
[deanmarano]: https://github.com/deanmarano
[dokku]: https://github.com/dokku
[dokku-community]: https://github.com/dokku-community
[dyson]: https://github.com/dyson

View File

@@ -48,7 +48,7 @@ Vhosts can also be disabled for all apps:
dokku domains:disable --all
```
On subsequent deploys, the nginx virtualhost will be discarded. This is useful when deploying internal-facing services that should not be publicly routeable. As of 0.4.0, nginx will still be configured to proxy your app on some random high port. This allows internal services to maintain the same port between deployments. You may change this port by setting `DOKKU_PROXY_PORT` and/or `DOKKU_PROXY_SSL_PORT` (for services configured to use SSL.)
On subsequent deploys, the nginx virtualhost will be discarded. This is useful when deploying internal-facing services that should not be publicly routeable. As of 0.4.0, nginx will still be configured to proxy your app on some random high port. This allows internal services to maintain the same port between deployments. The non-SSL and SSL ports used can be customized via `dokku proxy:set <app> proxy-port <value>` and `dokku proxy:set <app> proxy-ssl-port <value>` - see the [proxy management documentation](/docs/networking/proxy-management.md#setting-proxy-ports) for details.
To re-enable, run the `domains:enable` subcommand:

View File

@@ -22,12 +22,12 @@ Environment variables are available both at run time and during the application
For buildpack deploys, Dokku will create a `/app/.env` file that can be used for legacy buildpacks. Note that this is _not_ updated when `config:set` or `config:unset` is called, and is only written during a `deploy` or `ps:rebuild`. Developers are encouraged to instead read from the application environment directly, as the proper values will be available then.
> [!NOTE]
> Global `ENV` files are sourced before app-specific `ENV` files. This means that app-specific variables will take precedence over global variables. Configuring your global `ENV` file is manual, and should be considered potentially dangerous as configuration applies to all applications.
> Global environment variables are sourced before app-specific environment variables. This means that app-specific variables will take precedence over global variables. Configuring global environment variables should be considered potentially dangerous as configuration applies to all applications.
You can set multiple environment variables at once:
```shell
dokku config:set node-js-app ENV=prod COMPILE_ASSETS=1
dokku config:set node-js-app APP_ENV=prod COMPILE_ASSETS=1
```
Whitespace and special characters get tricky. If you are using dokku locally you don't need to do any special escaping. If you are using dokku over ssh you will need to backslash-escape spaces:
@@ -45,7 +45,7 @@ dokku config:set --encoded node-js-app KEY="$(base64 -w 0 ~/.ssh/id_rsa)"
When setting or unsetting environment variables, you may wish to avoid an application restart. This is useful when developing plugins or when setting multiple environment variables in a scripted manner. To do so, use the `--no-restart` flag:
```shell
dokku config:set --no-restart node-js-app ENV=prod
dokku config:set --no-restart node-js-app APP_ENV=prod
```
If you wish to have the variables output in an `eval`-compatible form, you can use the `config:export` command
@@ -54,7 +54,7 @@ If you wish to have the variables output in an `eval`-compatible form, you can u
dokku config:export node-js-app
# outputs variables in the form:
#
# export ENV='prod'
# export APP_ENV='prod'
# export COMPILE_ASSETS='1'
# source in all the node-js-app app environment variables
@@ -68,9 +68,38 @@ dokku config:export --format shell node-js-app
# outputs variables in the form:
#
# ENV='prod' COMPILE_ASSETS='1'
# APP_ENV='prod' COMPILE_ASSETS='1'
```
## Setting Environment Variables via app.json
Environment variables can also be declared in an `app.json` file in your repository root. This is useful for setting default values, generating secrets, or requiring certain variables to be set before deployment.
```json
{
"env": {
"SIMPLE_VAR": "default_value",
"SECRET_KEY": {
"description": "A secret key for signing tokens",
"generator": "secret"
},
"DATABASE_URL": {
"description": "PostgreSQL connection string",
"required": true
}
}
}
```
Environment variables from `app.json` are processed during the first deploy, before the predeploy script runs. Variables can be configured as:
- **Simple string values**: Set as defaults if not already configured
- **Generated secrets**: Use `"generator": "secret"` to auto-generate a 64-character hex string
- **Required variables**: Use `"required": true` to prompt for or require a value
- **Synced variables**: Use `"sync": true` to update the value on every deploy
For full details on the `env` schema and behavior, see the [app.json documentation](/docs/appendices/file-formats/app-json.md#env).
## Special Config Variables
The following config variables have special meanings and can be set in a variety of ways. Unless specified via global app config, the values may not be passed into applications. Usage of these values within applications should be considered unsafe, as they are an internal configuration values that may be moved to the internal properties system in the future.
@@ -98,26 +127,5 @@ The following config variables have special meanings and can be set in a variety
| `DOKKU_QUIET_OUTPUT` | none | `--quiet` flag | Silences certain header output for `dokku` commands. |
| `DOKKU_RM_CONTAINER` | none | `dokku config:set` <br /> | Deprecated: Whether to keep `dokku run` containers around or not. |
| `DOKKU_TRACE` | none | `dokku trace:on` <br /> `dokku trace:off` <br /> `--trace` flag | Turn on very verbose debugging. |
| `DOKKU_APP_PROXY_TYPE` | `nginx` | `dokku proxy:set` | |
| `DOKKU_APP_RESTORE` | `1` | `dokku config:set` <br /> `dokku ps:stop` | |
| `DOKKU_APP_SHELL` | `/bin/bash` | `dokku config:set` | Allows users to change the default shell used by Dokku for `dokku enter` and execution of deployment tasks. |
| `DOKKU_CHECKS_DISABLED` | none | `dokku checks:disable` | |
| `DOKKU_CHECKS_ENABLED` | none | `dokku checks:enable` | |
| `DOKKU_CHECKS_SKIPPED` | none | `dokku checks:skip` | |
| `DOKKU_CHECKS_WAIT` | `5` | `dokku config:set` | Wait this many seconds for the container to start before running checks.
| `DOKKU_CHECKS_TIMEOUT` | `30` | `dokku config:set` | Wait this many seconds for each response before marking it as a failure.
| `DOKKU_CHECKS_ATTEMPTS` | `5` | `dokku config:set` | Number of retries for to run for a specific check before marking it as a failure
| `DOKKU_DEFAULT_CHECKS_WAIT` | `10` | `dokku config:set` | If no user-defined checks are specified - or if the process being checked is not a `web` process - this is the period of time Dokku will wait before checking that a container is still running. |
| `DOKKU_DISABLE_PROXY` | none | `dokku proxy:disable` <br /> `dokku proxy:enable` | Disables the proxy in front of your application, resulting in publicly routing the docker container. |
| `DOKKU_DISABLE_APP_AUTOCREATION` | none | `dokku config:set` | Disables automatic creation of a non-existent app on deploy. |
| `DOKKU_DOCKERFILE_START_CMD` | none | `dokku config:set` | |
| `DOKKU_PARALLEL_ARGUMENTS`. | none | `dokku config:set` | Allows passing custom arguments to parallel for `ps:*all` commands |
| `DOKKU_PROXY_PORT` | automatically assigned | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` <br /> `dokku config:set` | |
| `DOKKU_PROXY_SSL_PORT` | automatically assigned | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` <br /> `dokku config:set` | |
| `DOKKU_SKIP_ALL_CHECKS` | none | `dokku config:set` | |
| `DOKKU_SKIP_CLEANUP` | | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | When a deploy is triggered, if this is set to a non-empty value, then old docker containers and images will not be removed. |
| `DOKKU_SKIP_DEFAULT_CHECKS` | | `dokku config:set` | |
| `DOKKU_SKIP_DEPLOY` | | `dokku config:set` | |
| `DOKKU_START_CMD` | none | `dokku config:set` | Command to run instead of `/start $PROC_TYPE` |
| `DOKKU_SYSTEM_GROUP` | `dokku` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | System group to chown files as. |
| `DOKKU_SYSTEM_USER` | `dokku` | `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | System user to chown files as. |

View File

@@ -41,6 +41,9 @@ dokku certs:add node-js-app < cert-key.tar
cat yourdomain_com.crt yourdomain_com.ca-bundle > server.crt
```
> [!NOTE]
> Archives passed to `certs:add` are validated before extraction to prevent path traversal and symlink escape attacks. Archives containing absolute paths, parent directory traversal entries, or symlinks pointing outside the extraction directory will be rejected.
#### SSL and Multiple Domains
When an SSL certificate is associated to an application, the certificate will be associated with _all_ domains currently associated with said application. Your certificate _should_ be associated with all of those domains, otherwise accessing the application will result in SSL errors. If you wish to remove one of the domains from the application, refer to the [domain configuration documentation](/docs/configuration/domains.md).

View File

@@ -143,11 +143,11 @@ dokku letsencrypt:cron-job --add
### Skipping deployment
If you only want to rebuild and tag a container, you can skip the deployment phase by setting `$DOKKU_SKIP_DEPLOY` to `true` by running:
If you only want to rebuild and tag a container, you can skip the deployment phase by setting the `skip-deploy` property to `true`:
``` shell
# on the Dokku host
dokku config:set ruby-getting-started DOKKU_SKIP_DEPLOY=true
dokku ps:set ruby-getting-started skip-deploy true
```
### Redeploying or restarting

View File

@@ -13,6 +13,7 @@ apps:lock <app> # Locks an app for deployment
apps:locked <app> # Checks if an app is locked for deployment
apps:rename <old-app> <new-app> # Rename an app
apps:report [<app>] [<flag>] # Display report about an app
apps:set [--global] <app> <key> (<value>) # Set or clear an apps property for an app
apps:unlock <app> # Unlocks an app for deployment
```
@@ -78,6 +79,20 @@ Once created, you can configure the application as normal, and deploy the applic
- Create and link datastores.
- Set environment variables.
### Disabling automatic app creation
By default, pushing to a git remote for an app that does not yet exist on the Dokku host will cause the app to be created automatically. On shared or production hosts this may be undesirable - operators may prefer that an explicit `apps:create` is required first. The `disable-autocreation` global property controls this behavior:
```shell
dokku apps:set --global disable-autocreation true
```
While set, pushes targeting an app that does not exist will be rejected. The default behavior may be restored by passing an empty value:
```shell
dokku apps:set --global disable-autocreation
```
### Removing a deployed app
In some cases, you may need to destroy an application, whether it is because the application is temporary or because it was misconfigured. In these cases, you can use the `apps:destroy` command. Performing any destructive actions in Dokku requires confirmation, and this command will ask for the name of the application being deleted before doing so.

View File

@@ -82,6 +82,28 @@ The default value may be set by passing an empty value for the option.
dokku builder:set --global build-dir
```
#### Skipping container and image cleanup
After a successful deploy, Dokku removes old containers and images that are no longer referenced by the app. On hosts where image rebuilds are expensive or where operators want to retain prior images for manual rollback, this cleanup can be disabled per-app or globally via the `skip-cleanup` property:
```shell
dokku builder:set node-js-app skip-cleanup true
```
The property can also be set globally:
```shell
dokku builder:set --global skip-cleanup true
```
The default behavior (cleanup enabled) may be restored by passing an empty value:
```shell
dokku builder:set node-js-app skip-cleanup
```
For backwards compatibility with bootstrap-time configuration, the `DOKKU_SKIP_CLEANUP` environment variable in `/etc/environment` or `~dokku/.dokkurc/*` is still honored when the `skip-cleanup` property is unset. The property is the canonical interface and takes precedence when set.
### Displaying builder reports for an app
You can get a report about the app's builder status using the `builder:report` command:

View File

@@ -130,6 +130,24 @@ This will use the latest commit on the `master` branch of the specified buildpac
dokku buildpacks:set node-js-app https://github.com/heroku/heroku-buildpack-nodejs#v87
```
### Specifying buildpacks via app.json
Buildpacks can also be specified in the `app.json` file at the root of your repository:
```json
{
"buildpacks": [
{
"url": "heroku/python"
}
]
}
```
Buildpacks configured via `buildpacks:add` or `buildpacks:set` commands take precedence over those specified in `app.json`. If no buildpacks are configured via commands and `app.json` contains a `buildpacks` entry, those buildpacks will be used.
Shorthand buildpack references (e.g., `heroku/python`) are expanded to full GitHub URLs automatically.
### Displaying buildpack reports for an app
You can get a report about the app's buildpacks status using the `buildpacks:report` command:

View File

@@ -185,7 +185,7 @@ You would adjust the cache directory for whatever application cache you have, e.
### Customizing the run command
By default no arguments are passed to `docker run` when deploying the container and the `CMD` or `ENTRYPOINT` defined in the `Dockerfile` are executed. You can take advantage of docker ability of overriding the `CMD` or passing parameters to your `ENTRYPOINT` setting `$DOKKU_DOCKERFILE_START_CMD`. Let's say for example you are deploying a base Node.js image, with the following `ENTRYPOINT`:
By default no arguments are passed to `docker run` when deploying the container and the `CMD` or `ENTRYPOINT` defined in the `Dockerfile` are executed. You can take advantage of docker's ability to override the `CMD` or pass parameters to your `ENTRYPOINT` by setting the `dockerfile-start-cmd` property on the `ps` plugin. Let's say for example you are deploying a base Node.js image, with the following `ENTRYPOINT`:
```Dockerfile
ENTRYPOINT ["node"]
@@ -194,10 +194,14 @@ ENTRYPOINT ["node"]
You can do:
```shell
dokku config:set node-js-app DOKKU_DOCKERFILE_START_CMD="--harmony server.js"
dokku ps:set node-js-app dockerfile-start-cmd "--harmony server.js"
```
To tell Docker what to run.
To tell Docker what to run. Pass an empty value to clear the override:
```shell
dokku ps:set node-js-app dockerfile-start-cmd
```
### Procfiles and multiple processes

View File

@@ -20,7 +20,7 @@ Before using Railpacks, the following steps must be taken:
```shell
touch /etc/default/dokku
echo "export BUILDKIT_HOST='docker-container://buildkit'" >> /etc/default/dokku
````
```
### Detection

View File

@@ -32,3 +32,29 @@ Finally, if the archive url is specified as `--`, the archive will be fetched fr
```shell
curl -sSL https://github.com/dokku/smoke-test-app/releases/download/2.0.0/smoke-test-app.tar | dokku git:from-archive node-js-app --
```
## Archive Safety
Archive contents are validated before extraction to prevent path traversal and symlink escape attacks. Archives containing absolute paths, parent directory traversal entries (`..`), or symlinks pointing outside the extraction directory are rejected.
The following limits can be configured via global git properties:
- `archive-max-size` - maximum archive size in bytes (default: `1073741824`, 1 GiB)
- `archive-max-files` - maximum number of entries in an archive (default: `10000`)
```shell
dokku git:set --global archive-max-size 2147483648
dokku git:set --global archive-max-files 20000
```
Unset a property to restore the default:
```shell
dokku git:set --global archive-max-size
```
The current values can be inspected via the global git report:
```shell
dokku git:report --global
```

View File

@@ -6,14 +6,15 @@
```
git:allow-host <host> # Adds a host to known_hosts
git:auth <host> [<username> <password>] # Configures netrc authentication for a given git server
git:auth-status <host> [<username> <password>] # Reports whether the netrc entry matches the requested state
git:from-archive [--archive-type ARCHIVE_TYPE] <app> <archive-url> [<git-username> <git-email>] # Updates an app's git repository with a given archive file
git:from-image [--build-dir DIRECTORY] <app> <docker-image> [<git-username> <git-email>] # Updates an app's git repository with a given docker image
git:generate-deploy-key # Generates a deploy ssh key
git:load-image [--build-dir DIRECTORY] <app> <docker-image> [<git-username> <git-email>] # Updates an app's git repository with a docker image loaded from stdin
git:sync [--build|build-if-changes] <app> <repository> [<git-ref>] # Clone or fetch an app from remote git repo
git:sync [--build|--build-if-changes] [--skip-deploy-branch] <app> <repository> [<git-ref>] # Clone or fetch an app from remote git repo
git:initialize <app> # Initialize a git repository for an app
git:public-key # Outputs the dokku public deploy key
git:report [<app>] [<flag>] # Displays a git report for one or more apps
git:report [<app>] [<flag>|--format json] # Displays a git report for one or more apps
git:set <app> <key> (<value>) # Set or clear a git property for an app
git:status <app> # Show the working tree status for an app
```
@@ -163,6 +164,12 @@ When running `git:sync` without a reference, it may be useful to only build when
dokku git:sync --build-if-changes node-js-app https://github.com/heroku/node-js-getting-started.git
```
By default, when running `git:sync` with a git branch reference, Dokku will automatically set the `deploy-branch` property to the specified branch. To skip setting the deploy branch, specify the `--skip-deploy-branch` flag.
```shell
dokku git:sync --skip-deploy-branch node-js-app https://github.com/heroku/node-js-getting-started.git main
```
### Initializing from private repositories
> [!IMPORTANT]
@@ -185,6 +192,34 @@ dokku git:auth github.com
For syncing to a private repository stored on a remote Git product such as GitHub or GitLab, Dokku's recommendation is to use a personal access token on a bot user where possible. Please see your service's documentation for information regarding the recommended best practices.
The password for `git:auth` may also be provided over `STDIN` to avoid placing it on the command line:
```shell
# pipe the password into git:auth
echo "personal-access-token" | dokku git:auth github.com username
```
#### Checking the configured auth state
> [!IMPORTANT]
> New as of 0.38.0
The `git:auth-status` command reports whether the configured `netrc` entry matches a desired state without exposing the underlying file. It exits `0` when the configured state matches and `1` otherwise. This allows external tooling such as configuration management systems to perform idempotent updates without reading `$DOKKU_ROOT/.netrc` directly.
```shell
# check whether github.com is configured with the expected credentials
dokku git:auth-status github.com username personal-access-token
# check whether no credentials are configured for github.com
dokku git:auth-status github.com
```
As with `git:auth`, the password may be provided via `STDIN`:
```shell
echo "personal-access-token" | dokku git:auth-status github.com username
```
### Allowing remote repository hosts
By default, the Dokku host may not have access to a server containing the remote repository. This can be initialized via the `git:allow-host` command.
@@ -235,3 +270,48 @@ dokku git:public-key
```
If there is no key, an error message is shown that displays the command that can be run on the Dokku server to generate a new public/private ssh key pair.
### Displaying git reports for an app
You can get a report about the app's git configuration using the `git:report` command:
```shell
dokku git:report
```
```
=====> node-js-app git information
Git computed deploy branch: master
Git computed keep git dir: false
Git deploy branch:
Git global archive max files: 10000
Git global archive max size: 1073741824
Git global deploy branch: master
Git keep git dir:
Git rev env var: GIT_REV
Git sha: a1b2c3d
Git source image:
Git last updated at: 1700000000
```
The `deploy-branch` and `keep-git-dir` keys hold the raw per-app value and are empty when nothing has been set on the app. The `computed-deploy-branch` and `computed-keep-git-dir` keys hold the effective value used at deploy time, falling back to the corresponding global value (where one exists) and then to the built-in default.
You can run the command for a specific app also.
```shell
dokku git:report node-js-app
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku git:report node-js-app --git-deploy-branch
```
The `git:report` command also takes a `--format` flag, with the valid options including `stdout` (default) and `json`. The `json` output format can be used for automation purposes:
```shell
dokku git:report node-js-app --format json
```
The `--format` flag cannot be combined with an info flag.

View File

@@ -17,7 +17,13 @@ In the above example, Dokku will build the app as if the repository contained _o
FROM my-registry/node-js-getting-started:latest
```
If the specified image already exists on the Dokku host, it will not be pulled again, though this behavior may be changed using [build phase docker-options](/docs/advanced-usage/docker-options.md).
If the specified image already exists on the Dokku host, it will not be pulled again. To force a pull even when the image exists locally, use the `--force` flag:
```shell
dokku git:from-image --force node-js-app my-registry/node-js-getting-started:latest
```
This is useful when the remote image has been updated but the tag remains the same.
Triggering a build with the same arguments multiple times will result in Dokku exiting `0` early as there will be no changes detected. If the image tag is reused but the underlying image is different, it is recommended to use the image digest instead of the tag. This can be retrieved via the following command:

View File

@@ -5,7 +5,7 @@
```
scheduler-docker-local:report [<app>] [<flag>] # Displays a scheduler-docker-local report for one or more apps
scheduler-docker-local:set <app> <key> (<value>) # Set or clear a scheduler-docker-local property for an app
scheduler-docker-local:set [<app>|--global] <key> (<value>) # Set or clear a scheduler-docker-local property for an app or globally
```
> [!IMPORTANT]
@@ -46,7 +46,19 @@ Once set, you may re-enable it by setting a blank value for `init-process`:
dokku scheduler-docker-local:set node-js-app init-process
```
All image containers with the label `org.opencontainers.image.vendor=linuxserver.io` will have the automatic init process injection force-disabled without further intervention.
The default value may also be configured globally with the `--global` flag. Per-app values take precedence over the global value when set.
```shell
dokku scheduler-docker-local:set --global init-process false
```
The global value may also be unset by setting a blank value.
```shell
dokku scheduler-docker-local:set --global init-process
```
All image containers with the label `org.opencontainers.image.vendor=linuxserver.io` will have the automatic init process injection force-disabled without further intervention when neither an app-level nor a global value is set.
### Deploying Process Types in Parallel
@@ -66,6 +78,18 @@ Once set, you may reset it by setting a blank value for `parallel-schedule-count
dokku scheduler-docker-local:set node-js-app parallel-schedule-count
```
The default value may also be configured globally with the `--global` flag. Per-app values take precedence over the global value when set.
```shell
dokku scheduler-docker-local:set --global parallel-schedule-count 4
```
The global value may also be unset by setting a blank value.
```shell
dokku scheduler-docker-local:set --global parallel-schedule-count
```
If the value of `parallel-schedule-count` is increased and a given process type fails to schedule successfully, then any in-flight process types will continue to be processed, while all process types that have not been scheduled will be skipped before the deployment finally fails.
Container scheduling output is shown in the order it is received, and thus may be out of order in case of output to stderr.
@@ -100,6 +124,57 @@ Note that increasing the value of `max_parallel` may significantly impact CPU ut
See the [app.json location documentation](/docs/advanced-usage/deployment-tasks.md#changing-the-appjson-location) for more information on where to place your `app.json` file.
### Displaying scheduler-docker-local reports for an app
You can get a report about the app's scheduler-docker-local configuration using the `scheduler-docker-local:report` command:
```shell
dokku scheduler-docker-local:report
```
```
=====> node-js-app scheduler-docker-local information
Scheduler docker local computed init process: true
Scheduler docker local computed parallel schedule count:1
Scheduler docker local global init process: true
Scheduler docker local global parallel schedule count: 1
Scheduler docker local init process:
Scheduler docker local parallel schedule count:
```
You can run the command for a specific app also.
```shell
dokku scheduler-docker-local:report node-js-app
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku scheduler-docker-local:report node-js-app --scheduler-docker-local-computed-init-process
```
When run against `--global`, only the global keys are reported.
```shell
dokku scheduler-docker-local:report --global
```
The available keys are:
- `--scheduler-docker-local-init-process`: the raw per-app init-process value (empty when unset).
- `--scheduler-docker-local-computed-init-process`: the effective init-process value, computed as the per-app value if set, otherwise the global value, otherwise `true`.
- `--scheduler-docker-local-global-init-process`: the global init-process value (defaults to `true`).
- `--scheduler-docker-local-parallel-schedule-count`: the raw per-app parallel-schedule-count value (empty when unset).
- `--scheduler-docker-local-computed-parallel-schedule-count`: the effective parallel-schedule-count value, computed as the per-app value if set, otherwise the global value, otherwise `1`.
- `--scheduler-docker-local-global-parallel-schedule-count`: the global parallel-schedule-count value (defaults to `1`).
The report may also be emitted as JSON using `--format json`, which is useful for external tooling that needs to distinguish a value set on the app from one that is defaulting.
```shell
dokku scheduler-docker-local:report node-js-app --format json
```
## Scheduler Interface
The following sections describe implemented scheduler functionality for the `docker-local` scheduler.

View File

@@ -307,6 +307,38 @@ The server can also be disabled globally, and then conditionally enabled on a pe
dokku scheduler-k3s:set --global letsencrypt-server false
```
#### Using imported SSL certificates
SSL certificates imported via the `certs` plugin can be used with the k3s scheduler. When a certificate is imported, it is automatically synced to Kubernetes as a TLS secret and will be used for the app's ingress configuration.
To import a certificate:
```shell
dokku certs:add node-js-app server.crt server.key
```
When a certificate is imported:
- A Kubernetes TLS secret named `tls-<app-name>` is created in the app's namespace
- The ingress configuration is updated to use the imported certificate
- Automatic Let's Encrypt certificate generation is disabled for the app
Imported certificates take precedence over Let's Encrypt certificates. If you have both an imported certificate and Let's Encrypt configured, the imported certificate will be used.
To remove an imported certificate:
```shell
dokku certs:remove node-js-app
```
When a certificate is removed:
- The TLS secret is deleted from Kubernetes
- The app is automatically redeployed to update the ingress configuration
- If Let's Encrypt is configured, automatic certificate generation will resume
When an app is destroyed, any associated TLS secret is automatically cleaned up.
### Customizing Annotations and Labels
> [!NOTE]
@@ -412,7 +444,7 @@ To enable autoscaling, use the `app.json` `formation.$PROCESS_TYPE.autoscaling`
- `cooldown_seconds`: (default: 300) The number of seconds to wait in between each scaling event
- `triggers`: A list of autoscaling triggers.
Autoscaling triggers are passed as is to Keda, and should match the configuration keda uses for a given [scaler](https://keda.sh/docs/2.13/scalers/). Below is an example for [datadog](https://keda.sh/docs/2.13/scalers/datadog/#example-2---driving-scale-directly):
Autoscaling triggers are passed as is to Keda, and should match the configuration keda uses for a given [scaler](https://keda.sh/docs/2.19/scalers/). Below is an example for [datadog](https://keda.sh/docs/2.19/scalers/datadog/#example-2---driving-scale-directly):
```json
{
@@ -444,6 +476,8 @@ Each value in the `metadata` stanza can use the following interpolated strings:
- `DOKKU_PROCESS_TYPE`: The name of the process being scaled
- `DOKKU_APP_NAME`: The name of the app being scaled
Dokku configures a Keda `fallback` (with a failure threshold of `3` and the configured replica count) on the generated `ScaledObject` so that scaling falls back to the configured replica count when a scaler's metric source becomes unavailable. Keda only allows `fallback` when at least one trigger is something other than `cpu` or `memory`, so Dokku omits the `fallback` block when every configured trigger is a `cpu` or `memory` scaler.
##### HTTP Autoscaling
In addition to the built-in scalers that Keda provides, Dokku also supports Keda's HTTP Add On. This requires that the addon be properly installed and configured. For existing k3s clusters, this can be performed by the `scheduler-k3s:ensure-charts` command:
@@ -651,6 +685,35 @@ Alternatively, a comma separated list of chart names can be specified to only fo
dokku scheduler-k3s:ensure-charts --charts cert-manager
```
### Persistent storage
K3s apps mount persistent volumes through the Dokku storage plugin. A `storage:create --scheduler k3s` call provisions a PersistentVolumeClaim through a small per-entry helm release; `storage:mount <app> <name> --container-dir <path>` then attaches it to an app. Because storage entries are global, the same PVC can be mounted into multiple apps (for `ReadWriteMany` workloads) or into the same app at multiple subpaths.
```shell
# dynamically-provisioned PVC backed by Longhorn
dokku storage:create demo-data \
--scheduler k3s \
--size 2Gi \
--access-mode ReadWriteOnce \
--storage-class-name longhorn
dokku storage:mount demo demo-data --container-dir /data
dokku storage:wait demo-data
git push dokku master
```
For a hostPath-backed PV (no StorageClass), pass `<path>` as the second positional argument and omit `--storage-class-name`. The plugin renders both the PV and the PVC into the entry's helm release. The `--reclaim-policy` flag (`Retain` or `Delete`) controls whether the underlying PV survives `storage:destroy`. Annotations and labels on `storage:create` / `storage:set` propagate to both the PVC and the PV so backup tools (Velero, Longhorn snapshots) can find them.
The legacy `storage:mount <app> <host>:<container>` colon form is rejected on k3s apps; create a named entry instead. See [Persistent Storage](/docs/advanced-usage/persistent-storage.md) for the full command reference.
### Chart upgrade callbacks
Some chart version transitions require side-effects that a plain `helm upgrade` cannot perform. For example, the upgrade of `keda-add-ons-http` to `0.12.2` introduces breaking changes to deployment selectors, which are immutable in Kubernetes; the chart-managed deployments must be deleted before the upgrade can proceed.
Dokku handles these cases internally by registering version-targeted pre-upgrade and post-upgrade callbacks against affected charts. When `scheduler-k3s:ensure-charts` runs, the installed chart version is compared against the registered callbacks: any whose target version is greater than the currently installed version and at most the configured chart version are executed in ascending semver order, each bracketed around an upgrade to that intermediate version. A final upgrade to the configured chart version then completes the run.
These callbacks are not user-configurable. Failures during a callback or its surrounding upgrade abort the run, and a subsequent `scheduler-k3s:ensure-charts` resumes from the current state.
## Scheduler Interface
The following sections describe implemented and unimplemented scheduler functionality for the `k3s` scheduler.
@@ -710,6 +773,7 @@ Next, run the `scheduler-k3s:ensure-charts` command with the `vector` chart to f
```shell
dokku scheduler-k3s:ensure-charts --charts vector
```
Please see the [vector logs documentation](/docs/deployment/logs.md#configuring-a-log-sink) for more information on specifying vector sinks.
### Supported Resource Management Properties

View File

@@ -45,6 +45,26 @@ The default value may be set by passing an empty value for the option.
dokku scheduler:set --global selected
```
### Setting the app shell
The shell used for `dokku run` and `dokku enter` invocations against an app can be customized via the `shell` property. This is useful for images that ship with a non-default shell - for example, alpine-based images that only have `/bin/sh`.
```shell
dokku scheduler:set node-js-app shell sh
```
The `shell` property can also be set globally:
```shell
dokku scheduler:set --global shell sh
```
The default value (an empty string, which lets the scheduler pick its own default) may be restored by passing an empty value:
```shell
dokku scheduler:set node-js-app shell
```
### Displaying scheduler reports for an app
You can get a report about the app's scheduler status using the `scheduler:report` command:

View File

@@ -28,7 +28,9 @@ You may both create user-defined checks for web processes using the `healthcheck
### wait-to-retire
After a successful deploy, the grace period given to old containers before they are stopped/terminated is determined by the value of `wait-to-retire`. This is useful for ensuring completion of long-running HTTP connections.
After a successful deploy, Dokku immediately sends `SIGTERM` to old containers so the application can begin a graceful shutdown (draining in-flight connections, flushing buffers, and so on) the moment proxy traffic switches to the new containers. The old containers are then left running for the `wait-to-retire` grace period before being stopped, which sends `SIGTERM` again and ultimately `SIGKILL` after `stop-timeout-seconds`. This mirrors Heroku's [dyno shutdown behavior](https://devcenter.heroku.com/articles/dyno-shutdown-behavior).
The `wait-to-retire` value controls the grace period and is useful for ensuring completion of long-running HTTP connections.
```shell
dokku checks:set node-js-app wait-to-retire 30
@@ -40,17 +42,17 @@ Defaults to `60`.
You can set the `stop-timeout-seconds` property on the `ps` plugin to change this value (default: `30`). See the [process management documentation](/docs/processes/process-management.md#changing-process-management-settings) for more information.
## Configuring check settings using the `config` plugin
## Configuring check settings
There are certain settings that can be configured via environment variables:
There are certain settings that can be configured via the `checks` plugin properties:
- `DOKKU_DEFAULT_CHECKS_WAIT`: (default: `10`) If no user-defined checks are specified - or if the process being checked is not a `web` process - this is the period of time Dokku will wait before checking that a container is still running.
- `default-wait`: (default: `10`) If no user-defined checks are specified - or if the process being checked is not a `web` process - this is the period of time Dokku will wait before checking that a container is still running. Set globally via `dokku checks:set --global default-wait <value>`.
The following settings may also be specified in the `app.json` file, though are available as environment variables in order to ease application reuse.
The following settings may also be specified in the `app.json` file, though are available as properties in order to ease application reuse.
- `DOKKU_CHECKS_WAIT`: (default: `5`) Wait this many seconds for the container to start before running checks.
- `DOKKU_CHECKS_TIMEOUT`: (default: `30`) Wait this many seconds for each response before marking it as a failure.
- `DOKKU_CHECKS_ATTEMPTS`: (default: `5`) Number of retries for to run for a specific check before marking it as a failure
- `wait`: (default: `5`) Wait this many seconds for the container to start before running checks. Set via `dokku checks:set <app> wait <value>`.
- `timeout`: (default: `30`) Wait this many seconds for each response before marking it as a failure. Set via `dokku checks:set <app> timeout <value>`.
- `attempts`: (default: `5`) Number of retries for to run for a specific check before marking it as a failure. Set via `dokku checks:set <app> attempts <value>`.
## Skipping and Disabling Checks
@@ -65,10 +67,6 @@ dokku checks:skip node-js-app worker,web
```
-----> Skipping zero downtime for app's (node-js-app) proctypes (worker,web)
-----> Unsetting node-js-app
-----> Unsetting DOKKU_CHECKS_DISABLED
-----> Setting config vars
DOKKU_CHECKS_SKIPPED: worker,web
```
Zero downtime checks can also be disabled completely. This will stop old containers *before* new ones start, which may result in broken connections and downtime if your application fails to boot properly.
@@ -79,10 +77,6 @@ dokku checks:disable node-js-app worker
```
-----> Disabling zero downtime for app's (node-js-app) proctypes (worker)
-----> Setting config vars
DOKKU_CHECKS_DISABLED: worker
-----> Setting config vars
DOKKU_CHECKS_SKIPPED: web
```
### Displaying checks reports for an app

View File

@@ -0,0 +1,316 @@
# Dokku Architecture
This document provides a developer-focused overview of Dokku's internal architecture. It is intended for contributors who want to understand how Dokku works under the hood before diving into the codebase.
## High-Level Architecture
Dokku is a Docker-powered Platform as a Service (PaaS) that provides a Heroku-like deployment experience. The following diagram shows the main components and their interactions:
```
+------------------+
| User/Client |
+--------+---------+
|
| SSH / git push
v
+--------+---------+
| dokku binary |
| (bash script) |
+--------+---------+
|
| parse_args / execute_dokku_cmd
v
+--------+---------+
| Plugin System |
| (plugn) |
+--------+---------+
|
| triggers / subcommands
v
+--------+---------+ +------------------+
| Core Plugins |---->| Docker / K8s |
| (apps, git, | | Runtime |
| config, etc.) | +------------------+
+------------------+
```
**Key components:**
- **dokku binary**: The main entry point (`/dokku`), a bash script that handles authentication, argument parsing, and routes commands to plugins
- **Plugin System**: Uses [plugn](https://github.com/dokku/plugn) to execute triggers and discover commands
- **Core Plugins**: Implement all Dokku functionality (apps, git, config, builders, schedulers, proxies, etc.)
- **Runtime**: Docker (default via `scheduler-docker-local`) or Kubernetes (via `scheduler-k3s`)
## Directory Structure
### Source Tree
```
dokku/
├── dokku # Main CLI entry point (bash script)
├── plugins/ # All plugin source code
│ ├── apps/ # App management
│ ├── git/ # Git push handling
│ ├── config/ # Environment variables
│ ├── builder-*/ # Build backends (herokuish, pack, dockerfile, etc.)
│ ├── scheduler-*/ # Deployment schedulers (docker-local, k3s)
│ ├── *-vhosts/ # Proxy implementations (nginx, traefik, caddy, etc.)
│ └── common/ # Shared functions and utilities
├── docs/ # Documentation (markdown)
├── debian/ # Debian packaging files
├── contrib/ # Installation scripts and helpers
└── tests/ # Integration tests (bats)
```
### Runtime Directories
When Dokku is installed, it creates the following directory structure:
```
/var/lib/dokku/
├── core-plugins/ # Core plugin binaries (installed from source)
│ ├── available/ # All available core plugins
│ └── enabled/ # Symlinks to enabled plugins
├── plugins/ # Community plugins
│ ├── available/
│ └── enabled/
└── data/ # Plugin data storage
└── <plugin>/ # Per-plugin data
└── <app>/ # Per-app properties
$DOKKU_ROOT (~dokku by default)
├── <app>/ # Per-app data
│ ├── refs/ # Git refs
│ ├── HEAD # Current git HEAD
│ ├── tls/ # SSL certificates
│ └── ... # Other app-specific files
└── .dokkurc/ # Global configuration overrides
```
### Plugin Directory Layout
Each plugin follows a consistent structure:
```
plugins/<plugin-name>/
├── plugin.toml # Plugin metadata (description, version)
├── commands # Help output and catch-all command handler
├── subcommands/ # Individual command implementations
│ ├── default # Default command (e.g., `dokku apps`)
│ └── <command> # Named commands (e.g., `dokku apps:create`)
├── functions # Public functions for other plugins to source
├── internal-functions # Private functions
├── triggers.go # Go-based trigger implementations
├── *.go # Additional Go code
└── Makefile # Build configuration
```
## Plugin System Architecture
Dokku's functionality is entirely implemented through plugins. This architecture provides:
- **Extensibility**: Add new features without modifying core code
- **Loose coupling**: Plugins communicate via well-defined triggers
- **Composability**: Mix and match builders, schedulers, and proxies
### Plugin Communication via Triggers
Plugins communicate through the **trigger system** powered by [plugn](https://github.com/dokku/plugn). When a trigger is fired, plugn executes matching scripts from all enabled plugins:
```
+---------------+ plugn trigger +---------------+
| Plugin A | -------------------> | Plugin B |
| (fires event) | "post-deploy" | (listens for |
+---------------+ | event) |
+---------------+
|
v
+---------------+
| Plugin C |
| (also listens)|
+---------------+
```
**Trigger execution flow:**
1. A plugin calls `plugn trigger <trigger-name> [args...]`
2. plugn searches `$PLUGIN_ENABLED_PATH/*/` for files named `<trigger-name>`
3. Each matching executable is run with the provided arguments
4. Triggers can return data via stdout or signal errors via exit codes
**Key trigger categories:**
| Category | Examples | Purpose |
|----------|----------|---------|
| App lifecycle | `post-create`, `pre-delete`, `post-deploy` | React to app events |
| Build | `builder-detect`, `pre-build`, `builder-build` | Control build process |
| Deploy | `scheduler-deploy`, `check-deploy` | Manage deployments |
| Proxy | `proxy-build-config`, `nginx-pre-reload` | Configure reverse proxy |
| Git | `git-pre-pull`, `receive-app` | Handle git operations |
For the complete list of triggers, see [Plugin Triggers](/docs/development/plugin-triggers.md).
### Calling Triggers from Go Code
Go-based plugins use the `common.CallPlugnTrigger` function:
```go
result, err := common.CallPlugnTrigger(common.PlugnTriggerInput{
Trigger: "post-deploy",
Args: []string{appName, port, ip, imageTag},
})
```
## Command Flow
When a user runs a command like `dokku apps:list`, here's what happens:
```
User runs: ssh dokku@host apps:list
|
v
+-------------------+-------------------+
| dokku bash script |
| 1. Source /etc/default/dokku |
| 2. Set DOKKU_ROOT, PLUGIN_PATH |
| 3. Source common/functions |
| 4. Call parse_args() |
| 5. Check user permissions |
+-------------------+-------------------+
|
v
+-------------------+-------------------+
| execute_dokku_cmd() |
| 1. Handle plugin aliases |
| 2. Check for subcommands/default |
| 3. Check for subcommands/<cmd> |
| 4. Fall back to commands scripts |
+-------------------+-------------------+
|
v
+-------------------+-------------------+
| plugins/apps/subcommands/list |
| (executes the actual command) |
+-------------------+-------------------+
```
**Command resolution order:**
1. Check `$PLUGIN_ENABLED_PATH/<plugin>/subcommands/default` for the default command
2. Check `$PLUGIN_ENABLED_PATH/<plugin>/subcommands/<command>` for named commands
3. Iterate through all `$PLUGIN_ENABLED_PATH/*/commands` scripts as fallback
## Deployment Pipeline
When code is pushed via `git push dokku@host:myapp`, Dokku executes a multi-stage pipeline:
```
+-------------+ +-------------+ +-------------+ +-------------+
| Receive |--->| Build |--->| Release |--->| Deploy |
+-------------+ +-------------+ +-------------+ +-------------+
| | | |
v v v v
git-hook builder-detect builder-release scheduler-deploy
receive-app pre-build core-post-deploy
post-extract builder-build post-deploy
```
### Stage 1: Receive
The git receive stage handles the incoming push and prepares the source code:
1. `git-hook` receives the push and validates the branch
2. `receive-app` trigger is fired
3. Source code is extracted to a temporary directory
4. `post-extract` trigger allows modification of source
### Stage 2: Build
The build stage creates a Docker image from the source:
1. `builder-detect` determines the builder type (herokuish, pack, dockerfile, etc.)
2. `pre-build` trigger runs pre-build hooks
3. `builder-build` creates the Docker image
4. `post-build` trigger runs post-build hooks
### Stage 3: Release
The release stage prepares the image for deployment:
1. `pre-release-builder` allows image modifications
2. `builder-release` sets environment variables in the image
3. `post-release-builder` runs final release hooks
### Stage 4: Deploy
The deploy stage starts containers and configures networking:
1. `scheduler-deploy` starts new containers
2. `check-deploy` runs health checks
3. `core-post-deploy` switches traffic to new containers
4. `post-deploy` runs deployment tasks
5. Old containers are retired
## State Management
Dokku uses a file-based state system for simplicity and transparency.
### Property System
Plugin-specific configuration is stored in the property system:
```
/var/lib/dokku/data/<plugin>/<app>/<property>
```
Properties are managed via helper functions:
```bash
# Shell
fn-plugin-property-write "git" "$APP" "deploy-branch" "main"
fn-plugin-property-get "git" "$APP" "deploy-branch"
```
```go
// Go
common.PropertyWrite("git", appName, "deploy-branch", "main")
common.PropertyGet("git", appName, "deploy-branch")
```
### Per-App Data
Application-specific data sometimes lives in `$DOKKU_ROOT/<app>/`:
- `refs/` - Git references
- `tls/` - SSL certificates
- `ENV` - Environment file
- Container IDs, port mappings, etc.
All non-git code is being migrated to the property system.
### Global Configuration
Global settings can be configured via:
- `/etc/default/dokku` - System-level defaults
- `$DOKKU_ROOT/dokkurc` - User-level configuration
- `$DOKKU_ROOT/.dokkurc/*` - Additional configuration files
## Key Design Decisions
| Decision | Rationale |
|----------|-----------|
| **Plugin-based architecture** | Enables extensibility without modifying core code. Community plugins can add databases, caching, and other services. |
| **Bash + Go hybrid** | Bash for orchestration and simple commands; Go for performance-critical operations and complex logic. |
| **Trigger system** | Loose coupling between plugins. Plugins don't need to know about each other; they just fire and respond to events. |
| **File-based state** | Simple, transparent, and easy to debug. No database dependency. State can be inspected with standard Unix tools. |
| **Docker as foundation** | Leverages Docker's container runtime, networking, and image management. Allows multiple scheduler backends. |
## Further Reading
- [Plugin Creation](/docs/development/plugin-creation.md) - How to create custom plugins
- [Plugin Triggers](/docs/development/plugin-triggers.md) - Complete list of available triggers
- [Testing](/docs/development/testing.md) - How to test Dokku and plugins
- [Application Deployment](/docs/deployment/application-deployment.md) - User-facing deployment guide
- [Builder Management](/docs/deployment/builders/builder-management.md) - Available build backends
- [Scheduler Management](/docs/deployment/schedulers/scheduler-management.md) - Available scheduler backends

View File

@@ -387,6 +387,30 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `certs-get`
- Description: Returns the certificate or key content for an app
- Invoked by: `scheduler-k3s`
- Arguments: `$APP $KEY_TYPE`
- Example:
```shell
#!/usr/bin/env bash
# Returns the certificate or key content for an app
# KEY_TYPE should be "crt" or "key"
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
APP="$1"; KEY_TYPE="$2"
APP_SSL_PATH="$DOKKU_ROOT/$APP/tls"
if [[ "$KEY_TYPE" == "crt" ]]; then
cat "$APP_SSL_PATH/server.crt"
elif [[ "$KEY_TYPE" == "key" ]]; then
cat "$APP_SSL_PATH/server.key"
fi
```
### `check-deploy`
- Description: Allows you to run checks on a deploy before Dokku allows the container to handle requests.
@@ -521,6 +545,21 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `config-set`
- Description: Sets one or more config values for an app without restarting (when --no-restart flag is specified)
- Invoked by: app-json plugin
- Arguments: `[--no-restart] $APP $KEY1=VALUE1 [$KEY2=VALUE2 ...]`
- Example:
```shell
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```
### `core-post-deploy`
> To avoid issues with community plugins, this plugin trigger should be used _only_ for core plugins. Please avoid using this trigger in your own plugins.
@@ -770,7 +809,7 @@ APP="$1"; IMAGE_SOURCE_TYPE="$2"
### `docker-args-process-deploy`
- Description: `$PROC_TYPE` may be set to magic `_all_` process type to signify global docker deploy options.
- Description: emits docker arguments scoped to a specific Procfile process type. The `docker-options` plugin implements this trigger to surface options registered via `docker-options:add --process <PROC>`. `$PROC_TYPE` may be empty (or set to the magic `_default_` value) to signify default-scope docker deploy options.
- Invoked by: `dokku deploy`
- Arguments: `$APP $IMAGE_SOURCE_TYPE $IMAGE_TAG [$PROC_TYPE $CONTAINER_INDEX]`
- Example:
@@ -2865,21 +2904,52 @@ DOKKU_SCHEDULER="$1"; APP="$2"; REMOVE_CONTAINERS="$3";
# TODO
```
### `storage-list`
### `storage-list` (deprecated)
- Description: Returns a list of storage mounts
- Invoked by: `dokku storage:list` and `dokku deploy`
> [!WARNING]
> Deprecated as of 0.38.0. The trigger handler still functions for back-compat
> with external plugins but emits a deprecation warning on every invocation.
> In-process callers should use the `storage-app-mounts` trigger instead, or
> the `storage` Go package directly.
- Description: Returns a list of storage mounts for an app
- Invoked by: external plugins (the core `storage:list` subcommand no longer uses it)
- Arguments: `$APP $PHASE $FORMAT`
- Example:
```shell
#!/usr/bin/env bash
### `storage-app-mounts`
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
APP="$1"
- Description: Returns the (entry, attachment) pairs an app has for the given phase, in JSON. Schedulers consume this to render volume mounts.
- Invoked by: scheduler plugins during deploy
- Arguments: `$APP $PHASE`
- Output: a JSON array of objects shaped `{"entry": Entry, "attachment": Attachment}`
# TODO
```
### `storage-create`
- Description: Provisions or updates the underlying volume for a k3s storage entry. Called when `storage:create` or `storage:set` runs against a k3s entry. Receives the JSON-encoded entry on stdin.
- Invoked by: `dokku storage:create`, `dokku storage:set`
- Arguments: `$ENTRY_NAME`
- Stdin: JSON-encoded `Entry` payload
### `storage-destroy`
- Description: Releases the underlying volume for a k3s storage entry. Called when `storage:destroy` runs against a k3s entry. Receives the JSON-encoded entry on stdin.
- Invoked by: `dokku storage:destroy`
- Arguments: `$ENTRY_NAME`
- Stdin: JSON-encoded `Entry` payload
### `storage-status`
- Description: Returns the current status of a storage entry's underlying volume. Used by `storage:wait` to poll the cluster. The handler should print one line: `Bound`, `Pending`, or `Lost` for k3s entries.
- Invoked by: `dokku storage:wait`
- Arguments: `$ENTRY_NAME`
- Stdin: JSON-encoded `Entry` payload
### `scheduler-storage-exec`
- Description: Runs an interactive or non-interactive command against a storage entry. The storage plugin fires this with `<scheduler>` as the first arg; each scheduler plugin's handler matches against its own scheduler name and either handles or no-ops, mirroring `scheduler-deploy` / `scheduler-app-status`. Plugn forwards stdin/stdout/stderr to the handler subprocess so an interactive shell streams cleanly. The handler exits with the underlying tool's status code so `dokku storage:exec` propagates exit codes verbatim.
- Invoked by: `dokku storage:exec`
- Arguments: `$SCHEDULER $ENTRY_NAME $IMAGE [-- $cmd...]`
- Flags: `--interactive` (stdin is open), `--tty` (stdin is a terminal), `--as-user <uid>` (override `entry.Chown`).
### `traefik-template-source`

View File

@@ -29,7 +29,7 @@ The workflow looks like this:
```shell
# having dokku-arch in ../dokku-arch
vagrant up build-arch
# wait for "==> build-arch: ==> Finished making: dokku 0.37.2-2 (Mon Feb 22 23:20:37 CET 2016)"
# wait for "==> build-arch: ==> Finished making: dokku 0.38.4-2 (Mon Feb 22 23:20:37 CET 2016)"
cd ../dokku-arch
git add PKGBUILD .SRCINFO
git commit -m 'Update to dokku 0.9.9'

View File

@@ -3,7 +3,7 @@
Pull the dokku/dokku image:
```shell
docker pull dokku/dokku:0.37.2
docker pull dokku/dokku:0.38.4
```
Next, run the image.
@@ -19,7 +19,7 @@ docker container run -d \
--publish 8443:443 \
--volume /var/lib/dokku:/mnt/dokku \
--volume /var/run/docker.sock:/var/run/docker.sock \
dokku/dokku:0.37.2
dokku/dokku:0.38.4
```
Alternatively, you can use `docker-compose.yml`:
@@ -27,7 +27,7 @@ Alternatively, you can use `docker-compose.yml`:
```yaml
services:
dokku:
image: dokku/dokku:0.37.2
image: dokku/dokku:0.38.4
container_name: dokku
network_mode: bridge
ports:
@@ -44,7 +44,38 @@ services:
restart: unless-stopped
```
The above command will start a new docker container that is ready when a message similar to `Runit started as PID 12345` appears.
## Container readiness
The image ships with a Docker `HEALTHCHECK` that flips from `starting` to `healthy` once first-boot bootstrap is complete (skel restored, `plugin-list` plugins installed, core install triggers fired), nginx and sshd are accepting connections, and `dokku ps:restore` has finished. Until those conditions hold, the container is considered unhealthy and dependent services should not yet send traffic.
To check the current state from the host:
```shell
docker inspect --format='{{.State.Health.Status}}' dokku
```
Internally, the check is backed by a loopback-only HTTP endpoint:
```shell
docker exec dokku curl -fsS http://127.0.0.1:18080/_dokku/health
```
The endpoint binds to `127.0.0.1:18080` inside the container by design - it is not published to the host and does not interfere with user app vhosts on ports 80/443.
Compose dependents can gate on the healthcheck via `depends_on` with `condition: service_healthy`:
```yaml
services:
dokku:
image: dokku/dokku:0.38.4
# ...
bootstrap:
image: alpine:3.20
command: ["echo", "dokku is ready"]
depends_on:
dokku:
condition: service_healthy
```
Dokku is run in the following configuration:
@@ -83,7 +114,7 @@ redis: https://github.com/dokku/dokku-redis.git
The alternative is to build a custom docker image via a custom Dockerfile. This Dockerfile can run any `plugin:install` command, though the `install` trigger must be skipped via the `--skip-install-trigger`. The version installed at that time will be the one that persists. Below is an example Dockerfile showing this method.
```Dockerfile
FROM dokku/dokku:0.37.2
FROM dokku/dokku:0.38.4
RUN dokku plugin:install https://github.com/dokku/dokku-postgres.git --skip-install-trigger
RUN dokku plugin:install https://github.com/dokku/dokku-redis.git --skip-install-trigger
```

View File

@@ -31,8 +31,8 @@ To install the latest stable version of Dokku, you can run the following shell c
```shell
# for debian systems, installs Dokku via apt-get
wget -NP . https://dokku.com/install/v0.37.2/bootstrap.sh
sudo DOKKU_TAG=v0.37.2 bash bootstrap.sh
wget -NP . https://dokku.com/install/v0.38.4/bootstrap.sh
sudo DOKKU_TAG=v0.38.4 bash bootstrap.sh
```
The installation process takes about 5-10 minutes, depending upon internet connection speed.

View File

@@ -18,6 +18,7 @@ Docker releases updates periodically to their engine. We recommend reading their
Before upgrading, check the migration guides to get comfortable with new features and prepare your deployment to be upgraded.
- [Upgrading to 0.38](/docs/appendices/0.38.0-migration-guide.md)
- [Upgrading to 0.37](/docs/appendices/0.37.0-migration-guide.md)
- [Upgrading to 0.36](/docs/appendices/0.36.0-migration-guide.md)
- [Upgrading to 0.35](/docs/appendices/0.35.0-migration-guide.md)
@@ -152,4 +153,3 @@ new buildpacks that were released:
```shell
dokku ps:rebuild --all
```

View File

@@ -10,26 +10,26 @@
<meta name="author" content="">
<title>Dokku - The smallest PaaS implementation you've ever seen</title>
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/favicon.ico">
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/favicon.ico">
<meta name="apple-mobile-web-app-title" content="Dokku">
<meta name="application-name" content="Dokku">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/browserconfig.xml">
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
@@ -38,7 +38,7 @@
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/style.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/style.css" rel="stylesheet">
<!-- <link href="./assets/style.css" rel="stylesheet"> -->
</head>
@@ -98,7 +98,7 @@
<main class="container px-4 px-lg-5">
<div class="row">
<div class="col-lg-7">
<a class="badge-link" href="https://github.com/dokku/dokku/releases"><span class="badge py-2 d-flex fit-content"><div class="circle align-self-center me-2"></div>Latest release <span id="releaseVersion" class="ms-1">v0.37.2</span></span></a>
<a class="badge-link" href="https://github.com/dokku/dokku/releases"><span class="badge py-2 d-flex fit-content"><div class="circle align-self-center me-2"></div>Latest release <span id="releaseVersion" class="ms-1">v0.38.4</span></span></a>
<h1 class="text-white hero-heading mt-5">An open source PAAS alternative to Heroku.</h1>
<h4 class="text-white mt-5">Dokku helps you build and manage the lifecycle of applications from building to scaling.</h4>
<div class="d-flex mt-5">
@@ -125,7 +125,7 @@
</p>
<p class="line">
<span class="prompt">$</span>
<span class="command">sudo DOKKU_TAG=v0.37.2 bash bootstrap.sh</span>
<span class="command">sudo DOKKU_TAG=v0.38.4 bash bootstrap.sh</span>
</p>
<br>

View File

@@ -40,7 +40,7 @@ To change the proxy implementation in use for an application, use the `proxy:set
```shell
# no validation will be performed against
# the specified proxy implementation
dokku proxy:set node-js-app nginx
dokku proxy:set node-js-app type nginx
```
### Listing port mappings

View File

@@ -39,7 +39,7 @@ The Caddy plugin has specific rules for routing requests:
To use the Caddy plugin, use the `proxy:set` command for the app in question:
```shell
dokku proxy:set node-js-app caddy
dokku proxy:set node-js-app type caddy
```
This will enable the docker label-based Caddy integration. All future deploys will inject the correct labels for Caddy to read and route requests to containers. Due to the docker label-based integration used by Caddy, a single deploy or rebuild will be required before requests will route successfully.

View File

@@ -35,7 +35,7 @@ The Haproxy plugin has specific rules for routing requests:
To use the Haproxy plugin, use the `proxy:set` command for the app in question:
```shell
dokku proxy:set node-js-app haproxy
dokku proxy:set node-js-app type haproxy
```
This will enable the docker label-based Haproxy integration. All future deploys will inject the correct labels for Haproxy to read and route requests to containers. Due to the docker label-based integration used by Haproxy, a single deploy or rebuild will be required before requests will route successfully.
@@ -113,6 +113,16 @@ dokku haproxy:set --global log-level DEBUG
After modifying, the Haproxy container will need to be restarted.
### Changing the Haproxy refresh interval
Haproxy polls the Docker API for label changes every `10` seconds by default. The interval may be changed by setting the `refresh-conf` property with the `--global` flag:
```shell
dokku haproxy:set --global refresh-conf 5
```
The `refresh-conf` property is global-only and cannot be set on a per-app basis. Setting an empty value will reset it to the default. After modifying, the Haproxy container will need to be restarted.
### Label Management
The Haproxy plugin allows you to add custom container labels to apps. These labels are injected into containers during deployment and can be used to configure Haproxy behavior beyond what the plugin provides by default.

View File

@@ -5,7 +5,8 @@ Dokku uses nginx as its server for routing requests to specific applications. By
```
nginx:access-logs <app> [-t] # Show the nginx access logs for an application (-t follows)
nginx:error-logs <app> [-t] # Show the nginx error logs for an application (-t follows)
nginx:report [<app>] [<flag>] # Displays a nginx report for one or more apps
nginx:reload # Reloads the nginx server config
nginx:report [<app>] [<flag>|--format json] # Displays a nginx report for one or more apps
nginx:set <app> <property> (<value>) # Set or clear an nginx property for an app
nginx:show-config <app> # Display app nginx config
nginx:start # Starts the nginx server
@@ -27,6 +28,21 @@ Nginx will proxy the requests in a [round-robin balancing fashion](http://nginx.
> [!NOTE]
> Due to how the plugin is implemented, if an app successfully starts up `web` containers but fails to deploy some other containers, nginx may eventually stop routing requests. Users should revert their code in these cases, or manually trigger `dokku proxy:build-config $APP` in order to ensure requests route to the new web containers.
### Nginx Configuration for Undeployed Apps
> [!IMPORTANT]
> New as of 0.38.0
When an app is created but not yet deployed, has no `web` process type, or has no running web processes, Dokku generates a minimal nginx configuration that returns `502 Bad Gateway` responses. This ensures that:
- The app's domain resolves and returns a non-200 status code, allowing monitoring tools to detect the issue.
- SSL certificate provisioning tools such as letsencrypt can function, as an nginx server is listening on the domain.
- The `nginx.conf.d/` include directory is available for plugin customization.
The 502 error page includes auto-retry JavaScript that will automatically reload the page when the application becomes available.
Once the app is deployed with running `web` processes, the placeholder configuration is automatically replaced with the full proxy configuration.
### Starting nginx
> [!IMPORTANT]
@@ -49,6 +65,19 @@ The nginx server can be stopped via `nginx:stop`.
dokku nginx:stop
```
### Reloading nginx
> [!IMPORTANT]
> New as of 0.38.0
The nginx server can be reloaded via `nginx:reload`. This validates the current nginx configuration and, if valid, signals nginx to reload without restarting the running process. This is the preferred command after editing files in `/etc/nginx/conf.d/` directly.
```shell
dokku nginx:reload
```
If the configuration is invalid, the command exits non-zero and prints the validation error without reloading.
### Checking access logs
> [!NOTE]
@@ -90,7 +119,9 @@ dokku nginx:show-config node-js-app
### Validating nginx configs
It may be desired to validate an nginx config outside of the deployment process. To do so, run the `nginx:validate-config` command. With no arguments, this will validate all app nginx configs, one at a time. A minimal wrapper nginx config is generated for each app's nginx config, upon which `nginx -t` will be run.
App-supplied `nginx.conf.sigil` files are pre-validated automatically at the start of every deploy, immediately after the template is extracted from the source tree and before the build phase runs. The template is rendered with sigil and run through `nginx -t` against a minimal wrapper config; if validation fails, the deploy is aborted before any build work begins. To bypass this behavior, set `disable-custom-config` to `true` (see "Disabling custom nginx config" below).
It may also be desired to validate an nginx config outside of the deployment process. To do so, run the `nginx:validate-config` command. With no arguments, this will validate all app nginx configs, one at a time. A minimal wrapper nginx config is generated for each app's nginx config, upon which `nginx -t` will be run.
```shell
dokku nginx:validate-config
@@ -113,6 +144,34 @@ The `--clean` flag may also be specified for a given app:
dokku nginx:validate-config node-js-app --clean
```
### Displaying nginx reports for an app
You can get a report about the app's nginx configuration using the `nginx:report` command:
```shell
dokku nginx:report
```
You can run the command for a specific app also.
```shell
dokku nginx:report node-js-app
```
You can pass flags which will output only the value of the specific information you want. For example:
```shell
dokku nginx:report node-js-app --nginx-bind-address-ipv4
```
The `nginx:report` command also takes a `--format` flag, with the valid options including `stdout` (default) and `json`. The `json` output format can be used for automation purposes:
```shell
dokku nginx:report node-js-app --format json
```
The `--format` flag cannot be combined with an info flag.
### Custom Error Pages
By default, Dokku provides custom error pages for the following three categories of errors:
@@ -125,52 +184,107 @@ These are provided as an alternative to the generic Nginx error page, are shared
### Default site
By default, Dokku will route any received request with an unknown HOST header value to the lexicographically first site in the nginx config stack. This means that accessing the dokku server via its IP address or a bogus domain name may return a seemingly random website.
> [!IMPORTANT]
> New as of 0.38.0
> [!WARNING]
> Some versions of Nginx may create a default site when installed. This site is simply a static page which says "Welcome to Nginx", and if this default site is enabled, Nginx will not route any requests with an unknown HOST header to Dokku. If you want Dokku to receive all requests, run the following commands:
>
> ```
> rm /etc/nginx/sites-enabled/default
> dokku nginx:stop
> dokku nginx:start
> ```
On fresh apt installs, Dokku ships a catch-all default site at `/etc/nginx/conf.d/00-default-vhost.conf` that rejects requests whose Host header (or TLS SNI) does not match any deployed app. The catch-all uses [`ssl_reject_handshake on`](https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_reject_handshake) for HTTPS and [`return 444`](https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return) for HTTP. Both close the connection without sending a response.
If services should only be accessed via their domain name, you may want to disable the default site by adding the following configuration to the global nginx configuration.
Create the file at `/etc/nginx/conf.d/00-default-vhost.conf`:
The shipped file looks like:
```nginx
server {
listen 80 default_server;
listen [::]:80 default_server;
# If services hosted by dokku are available via HTTPS, it is recommended
# to also uncomment the following section.
#
# Please note that in order to let this work, you need an SSL certificate. However
# it does not need to be valid. Users of Debian-based distributions can install the
# `ssl-cert` package with `sudo apt install ssl-cert` to automatically generate
# a self-signed certificate that is stored at `/etc/ssl/certs/ssl-cert-snakeoil.pem`.
#
#listen 443 ssl;
#listen [::]:443 ssl;
#ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
#ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name _;
access_log off;
access_log off;
ssl_reject_handshake on;
return 444;
}
```
Make sure to reload nginx after creating this file by running `systemctl reload nginx.service`.
The `00-` prefix forces nginx to load this file before `/etc/nginx/conf.d/dokku.conf`, so its `default_server` markers establish the default for each port before any per-app server blocks are loaded.
This will catch all unknown HOST header values and close the connection without responding. You can replace the `return 444;` with `return 410;` which will cause nginx to respond with an error page.
On systems running nginx older than 1.19.4 (e.g., Debian Bullseye, which ships nginx 1.18.0), `ssl_reject_handshake` is not available. The postinst detects this and installs an HTTP-only variant instead:
The configuration file must be loaded before `/etc/nginx/conf.d/dokku.conf`, so it can not be arranged as a vhost in `/etc/nginx/sites-enabled` that is only processed afterwards.
```nginx
server {
listen 80 default_server;
listen [::]:80 default_server;
Alternatively, you may push an app to your Dokku host with a name like "00-default". As long as it lists first in `ls /home/dokku/*/nginx.conf | head`, it will be used as the default nginx vhost.
server_name _;
access_log off;
return 444;
}
```
On these systems, HTTPS requests to unknown hosts are not rejected by the catch-all - nginx falls through to the lexicographically first port-443 server block and presents that block's certificate, the same behavior as before 0.38.0.
#### TLS handshake behavior
The catch-all does not affect TLS handshakes for legitimate apps. nginx selects the matching server block via SNI before completing the handshake; only requests that have no matching app fall through to the catch-all.
| Request | Result |
| --- | --- |
| HTTPS to a configured app's hostname (with matching SNI) and the app has a cert | Handshake completes with the app's cert. Catch-all not consulted. |
| HTTPS to a configured app's hostname when the app has no cert configured | Handshake rejected by the catch-all on nginx 1.19.4+. On older nginx, falls through to the lexicographically first port-443 server block and presents its cert, producing a cert-mismatch error. |
| HTTPS to the server's IP with no SNI, or with an SNI matching no app | Handshake rejected on nginx 1.19.4+. On older nginx, falls through to the first port-443 server block. |
| HTTP to a configured app's hostname | Routed normally to that app. Catch-all not consulted. |
| HTTP to a hostname matching no app | Catch-all `return 444`. |
#### Conflicting upstream nginx default vhost
A fresh nginx install ships its own default vhost that also claims port 80 with `default_server`, which would cause `nginx -t` to fail with `a duplicate default server for 0.0.0.0:80` once the dokku catch-all is in place. To avoid this, the dokku postinst renames any of the following files in place to `${path}.dokku-disabled` instead of deleting them, preserving any local customizations:
- `/etc/nginx/sites-enabled/default`
- `/etc/nginx/sites-available/default`
- `/etc/nginx/conf.d/default.conf`
To recover an original file, inspect the `.dokku-disabled` sibling.
#### Disabling the catch-all on first install
Select "No" at the `dokku/install_default_site` debconf prompt, or pre-seed the answer before installing:
```shell
echo 'dokku dokku/install_default_site boolean false' | debconf-set-selections
```
#### Customizing or removing the catch-all after install
To customize the reject behavior, edit `/etc/nginx/conf.d/00-default-vhost.conf` and reload:
```shell
dokku nginx:reload
```
For example, replace `return 444;` with `return 410;` to respond with an HTTP 410 Gone error page instead of dropping the connection.
To disable the catch-all without uninstalling dokku:
```shell
mv /etc/nginx/conf.d/00-default-vhost.conf{,.disabled}
dokku nginx:reload
```
#### Installing the catch-all on upgraded or non-apt installs
Existing dokku installs upgraded from earlier versions do not get the catch-all installed automatically; the upgrade leaves their nginx configuration untouched. To install it manually, copy the shipped template into place and reload nginx:
```shell
cp /var/lib/dokku/core-plugins/available/nginx-vhosts/templates/default-site.conf /etc/nginx/conf.d/00-default-vhost.conf
dokku nginx:reload
```
If the upstream nginx default vhost is also active, disable it first (e.g. `mv /etc/nginx/sites-enabled/default{,.disabled}`) to avoid a duplicate-default-server error.
#### App-name based alternative
As an alternative to the catch-all file, you may push an app to your Dokku host with a name like `00-default`. As long as it lists first in `ls /home/dokku/*/nginx.conf | head`, it will be used as the default nginx vhost.
### Customizing the nginx configuration
@@ -235,8 +349,8 @@ Unsetting this value is the same as enabling custom nginx config usage.
{{ .APP }} Application name
{{ .APP_SSL_PATH }} Path to SSL certificate and key
{{ .DOKKU_ROOT }} Global Dokku root directory (ex: app dir would be `{{ .DOKKU_ROOT }}/{{ .APP }}`)
{{ .PROXY_PORT }} Non-SSL nginx listener port (same as `DOKKU_PROXY_PORT` config var)
{{ .PROXY_SSL_PORT }} SSL nginx listener port (same as `DOKKU_PROXY_SSL_PORT` config var)
{{ .PROXY_PORT }} Non-SSL nginx listener port (same as the `proxy-port` property)
{{ .PROXY_SSL_PORT }} SSL nginx listener port (same as the `proxy-ssl-port` property)
{{ .NOSSL_SERVER_NAME }} List of non-SSL VHOSTS
{{ .PROXY_PORT_MAP }} List of port mappings (same as the `map` ports property)
{{ .PROXY_UPSTREAM_PORTS }} List of configured upstream ports (derived from the `map` ports property)
@@ -338,6 +452,7 @@ Changing these value globally or on a per-app basis will require rebuilding the
| proxy-buffers | `8 8k` | string | Number and size of the buffers used for reading the proxied server response, for a single connection |
| proxy-busy-buffers-size | `16k` | string | Limits the total size of buffers that can be busy sending a response to the client while the response is not yet fully read. |
| proxy-connect-timeout | `60s` | string | Timeout (with units) for establishing a connection to your backend server |
| proxy-keepalive | empty (disabled) | integer | Number of idle keepalive connections to upstream servers (disabled by default) |
| proxy-read-timeout | `60s` | string | Timeout (with units) for reading response from your backend server |
| proxy-send-timeout | `60s` | string | Timeout (with units) for transmitting a request to your backend server |
| send-timeout | `60s` | string | Timeout (with units) for transmitting a response to your the client |

View File

@@ -35,7 +35,7 @@ The OpenResty plugin has specific rules for routing requests:
To use the OpenResty plugin, use the `proxy:set` command for the app in question:
```shell
dokku proxy:set node-js-app openresty
dokku proxy:set node-js-app type openresty
```
This will enable the docker label-based OpenResty integration. All future deploys will inject the correct labels for OpenResty to read and route requests to containers. Due to the docker label-based integration used by OpenResty, a single deploy or rebuild will be required before requests will route successfully.
@@ -124,6 +124,8 @@ The following folders within an app repository may have `*.conf` files that will
- `openresty/http-includes/`: Injected in the `server` block serving http(s) requests for the app.
- `openresty/http-location-includes/`: Injected in the `location` block that proxies to the app in the app's respective `server` block.
Custom snippets filenames may only include alphanumeric, underscore, and dot characters. For security reasons, filenames that contain other characters will be ignored.
### Label Management
The OpenResty plugin allows you to add custom container labels to apps. These labels are injected into containers during deployment and can be used to configure OpenResty behavior beyond what the plugin provides by default.

View File

@@ -32,13 +32,49 @@ The Traefik plugin has specific rules for routing requests:
- If no `https:443` mapping is found, the first `https` port mapping is used for https requests.
- If no `https` mapping is found, the container port from `http:80` will be used for https requests.
- Requests are routed as soon as the container is running and passing healthchecks.
- Readiness healthchecks defined in `app.json` with a `path` property are automatically transformed into Traefik healthcheck labels.
### Healthchecks
When an app has a readiness healthcheck defined in its `app.json` file with a `path` property, Dokku automatically generates Traefik healthcheck labels. These labels configure Traefik to perform health checks on the container before routing traffic to it.
The following `app.json` healthcheck properties are mapped to Traefik labels:
| app.json Property | Traefik Label Property | Description |
|-------------------|------------------------|-------------|
| `path` | `healthcheck.path` | The HTTP path to check (required) |
| `scheme` | `healthcheck.scheme` | The scheme to use (`http` or `https`) |
| `port` | `healthcheck.port` | The port to check |
| `timeout` | `healthcheck.timeout` | Timeout in seconds (formatted as `Xs`) |
| `wait` | `healthcheck.interval` | Interval between checks in seconds (formatted as `Xs`) |
Example `app.json` configuration:
```json
{
"healthchecks": {
"web": [
{
"name": "web readiness check",
"path": "/health",
"timeout": 5,
"type": "readiness",
"wait": 10
}
]
}
}
```
> [!NOTE]
> Only the first readiness healthcheck with a `path` property is used. Liveness, startup, and command-based healthchecks are not transformed into Traefik labels.
### Switching to Traefik
To use the Traefik plugin, use the `proxy:set` command for the app in question:
```shell
dokku proxy:set node-js-app traefik
dokku proxy:set node-js-app type traefik
```
This will enable the docker label-based Traefik integration. All future deploys will inject the correct labels for Traefik to read and route requests to containers. Due to the docker label-based integration used by Traefik, a single deploy or rebuild will be required before requests will route successfully.
@@ -199,6 +235,41 @@ dokku traefik:set --global letsencrypt-server https://acme-staging-v02.api.letse
After enabling, the Traefik container will need to be restarted and apps will need to be rebuilt to retrieve certificates from the new server.
#### Switching to DNS-01 challenge mode
By default, Traefik uses TLS-ALPN-01 challenge for obtaining certificates. To switch to DNS-01 challenge mode (useful for wildcard certificates or when port 443 is not accessible), you need to:
1. Set the challenge mode to `dns`:
```shell
dokku traefik:set --global challenge-mode dns
```
2. Set your DNS provider:
```shell
dokku traefik:set --global dns-provider cloudflare
```
3. Configure the required environment variables for your DNS provider. Each DNS provider requires specific environment variables. The variable names should be prefixed with `dns-provider-`:
```shell
dokku traefik:set --global dns-provider-cf_api_email user@example.com
dokku traefik:set --global dns-provider-cf_api_key your-api-key
```
The `dns-provider-` prefix will be stripped and the variable name will be uppercased when passed to the Traefik container. For example, `dns-provider-cf_api_email` becomes `CF_API_EMAIL`.
After configuring, the Traefik container will need to be restarted and apps will need to be rebuilt.
Refer to the [Traefik DNS Challenge documentation](https://doc.traefik.io/traefik/https/acme/#dnschallenge) for the list of supported DNS providers and their required environment variables.
To switch back to TLS challenge mode:
```shell
dokku traefik:set --global challenge-mode tls
```
### API Access
Traefik exposes an API and Dashboard, which Dokku disables by default for security reasons. It can be exposed and customized as described below.
@@ -264,7 +335,9 @@ dokku traefik:report
Traefik api vhost: traefik.dokku.me
Traefik basic auth password: password
Traefik basic auth username: user
Traefik challenge mode: tls
Traefik dashboard enabled: false
Traefik dns provider:
Traefik image: traefik:v2.8
Traefik letsencrypt email:
Traefik letsencrypt server:
@@ -274,7 +347,9 @@ dokku traefik:report
Traefik api vhost: traefik.dokku.me
Traefik basic auth password: password
Traefik basic auth username: user
Traefik challenge mode: tls
Traefik dashboard enabled: false
Traefik dns provider:
Traefik image: traefik:v2.8
Traefik letsencrypt email:
Traefik letsencrypt server:
@@ -284,7 +359,9 @@ dokku traefik:report
Traefik api vhost: traefik.dokku.me
Traefik basic auth password: password
Traefik basic auth username: user
Traefik challenge mode: tls
Traefik dashboard enabled: false
Traefik dns provider:
Traefik image: traefik:v2.8
Traefik letsencrypt email:
Traefik letsencrypt server:
@@ -303,7 +380,9 @@ dokku traefik:report node-js-app
Traefik api vhost: traefik.dokku.me
Traefik basic auth password: password
Traefik basic auth username: user
Traefik challenge mode: tls
Traefik dashboard enabled: false
Traefik dns provider:
Traefik image: traefik:v2.8
Traefik letsencrypt email:
Traefik letsencrypt server:

View File

@@ -9,7 +9,7 @@ proxy:clear-config [--all|<app>] # Clears config for given app
proxy:disable [--parallel count] [--all|<app>] # Disable proxy for app
proxy:enable [--parallel count] [--all|<app>] # Enable proxy for app
proxy:report [<app>] [<flag>] # Displays a proxy report for one or more apps
proxy:set [<app>|--global] <proxy-type> # Set proxy type for app
proxy:set [<app>|--global] <key> (<value>) # Set or clear a proxy property for an app
```
In Dokku 0.5.0, port proxying was decoupled from the `nginx-vhosts` plugin into the proxy plugin. Dokku 0.6.0 introduced the ability to map host ports to specific container ports. This allows other proxy software - such as HAProxy or Caddy - to be used in place of nginx.
@@ -21,27 +21,69 @@ In Dokku 0.5.0, port proxying was decoupled from the `nginx-vhosts` plugin into
The default proxy shipped with Dokku is `nginx`. It can be changed via the `proxy:set` command.
```shell
dokku proxy:set node-js-app caddy
dokku proxy:set node-js-app type caddy
```
```
-----> Setting config vars
DOKKU_APP_PROXY_TYPE: caddy
=====> Setting type to caddy
```
The proxy may also be set on a global basis. This is usually preferred as running multiple proxy implementations may cause port collision issues.
```shell
dokku proxy:set --global caddy
dokku proxy:set --global type caddy
```
```
-----> Setting config vars
DOKKU_PROXY_TYPE: caddy
=====> Setting type to caddy
```
Changing the proxy does not stop or start any given proxy implementation. Please see the documentation for your proxy implementation for details on how to perform a change.
### Disabling and enabling the proxy
The proxy can be disabled on a per-app basis via the `proxy:disable` command. While disabled, no proxy configuration will be generated for the app and incoming requests will not be routed through the configured proxy.
```shell
dokku proxy:disable node-js-app
```
```
-----> Disabling proxy for app
```
The proxy can be re-enabled with the `proxy:enable` command:
```shell
dokku proxy:enable node-js-app
```
```
-----> Enabling proxy for app
```
### Setting proxy ports
When an app's domains are disabled (see [domains documentation](/docs/configuration/domains.md)), Dokku still exposes the app on a high port so that internal services can reach it at a stable port across deploys. The non-SSL and SSL ports used for this can be configured via the `proxy:set` command:
```shell
dokku proxy:set node-js-app proxy-port 5000
dokku proxy:set node-js-app proxy-ssl-port 5443
```
Either property may also be set globally. Per-app values take precedence over the global value.
```shell
dokku proxy:set --global proxy-port 5000
dokku proxy:set --global proxy-ssl-port 5443
```
The default value for either property may be restored by passing an empty value:
```shell
dokku proxy:set node-js-app proxy-port
```
### Regenerating proxy config
In certain cases, your app proxy configs may drift from the correct config for your app. You may regenerate the config at any point via the `proxy:build-config` command. This command will trigger a rebuild for the configured proxy implementation (default: nginx) for a given app. The command may fail if there are no current web listeners for your app.

View File

@@ -315,6 +315,28 @@ Finally, the number of parallel workers may be automatically set to the number o
dokku ps:start --all --parallel -1
```
### Customizing the start command
The command used to start an app's containers can be customized via two `ps` properties, depending on which builder is in use.
For buildpack-built apps (where the start command normally comes from the `Procfile`), set `start-cmd`:
```shell
dokku ps:set node-js-app start-cmd "node server.js"
```
For Dockerfile-built apps, set `dockerfile-start-cmd`. This value is passed as arguments to `docker run` and overrides or supplements the image's `CMD` / `ENTRYPOINT`. See the [Dockerfile builder documentation](/docs/deployment/builders/dockerfiles.md#customizing-the-run-command) for context.
```shell
dokku ps:set node-js-app dockerfile-start-cmd "--harmony server.js"
```
Either property can be cleared by passing an empty value:
```shell
dokku ps:set node-js-app start-cmd
```
### Restart policies
> [!IMPORTANT]
@@ -429,3 +451,15 @@ When a server reboots or Docker is restarted/upgraded, Docker may or may not sta
- If any of the app containers are missing, the entire app will be rebuilt.
During this time, requests may route to the incorrect app if the assigned IPs correspond to those for other apps. While dokku makes all efforts to avoid this, there may be a few minutes where urls may route to the wrong app. To avoid this, either use a custom proxy plugin or wait a few minutes until the restoration process is complete.
Per-app restore behavior can be controlled via the `restore` property. When set to `false`, `ps:restore` will skip the app on reboot:
```shell
dokku ps:set node-js-app restore false
```
The default value (`true`) may be restored by passing an empty value:
```shell
dokku ps:set node-js-app restore
```

View File

@@ -9,26 +9,26 @@
<meta name="author" content="">
<title>Dokku - {{DOC_TITLE}}</title>
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/favicon.ico">
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/manifest.json">
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/favicon.ico">
<meta name="apple-mobile-web-app-title" content="Dokku">
<meta name="application-name" content="Dokku">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/favicons/browserconfig.xml">
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/favicons/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
<script>
@@ -48,7 +48,7 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.37.2/docs/assets/style.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.38.4/docs/assets/style.css" rel="stylesheet">
<!-- <link href="./assets/style.css" rel="stylesheet"> -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet">
</head>
@@ -188,6 +188,7 @@
<a href="#" class="list-group-item disabled">Advanced Usage</a>
<a href="/{{NAME}}/advanced-usage/backup-recovery/" class="list-group-item">Backup and Recovery</a>
<a href="/{{NAME}}/advanced-usage/builds/" class="list-group-item">Build Tracking</a>
<a href="/{{NAME}}/advanced-usage/deployment-tasks/" class="list-group-item">Deployment Tasks</a>
<a href="/{{NAME}}/advanced-usage/docker-options/" class="list-group-item">Docker Container Options</a>
<a href="/{{NAME}}/advanced-usage/registry-management/" class="list-group-item">Docker Registry Management</a>
@@ -207,6 +208,7 @@
<a href="#" class="list-group-item disabled">Development</a>
<a href="/{{NAME}}/development/architecture/" class="list-group-item">Architecture</a>
<a href="/{{NAME}}/development/plugin-creation/" class="list-group-item">Plugin Creation</a>
<a href="/{{NAME}}/development/plugin-triggers/" class="list-group-item">Plugin Triggers</a>
<a href="/{{NAME}}/development/testing/" class="list-group-item">Running Tests</a>
@@ -221,6 +223,17 @@
<a href="#" class="list-group-item disabled">Community Contributions</a>
<a href="/{{NAME}}/community/clients/" class="list-group-item">Clients</a>
<a href="/{{NAME}}/community/plugins/" class="list-group-item">Plugins</a>
<a href="#" class="list-group-item disabled">File Formats</a>
<a href="/{{NAME}}/appendices/file-formats/app-json/" class="list-group-item">app.json</a>
<a href="/{{NAME}}/appendices/file-formats/buildpack-file/" class="list-group-item">.buildpack</a>
<a href="/{{NAME}}/appendices/file-formats/dockerfile/" class="list-group-item">Dockerfile</a>
<a href="/{{NAME}}/appendices/file-formats/lambda-yml/" class="list-group-item">lambda.yml</a>
<a href="/{{NAME}}/appendices/file-formats/nginx-conf-sigil/" class="list-group-item">nginx.conf.sigil</a>
<a href="/{{NAME}}/appendices/file-formats/nixpacks-toml/" class="list-group-item">nixpacks.toml</a>
<a href="/{{NAME}}/appendices/file-formats/procfile/" class="list-group-item">Procfile</a>
<a href="/{{NAME}}/appendices/file-formats/project-toml/" class="list-group-item">project.toml</a>
<a href="/{{NAME}}/appendices/file-formats/railpack-json/" class="list-group-item">railpack.json</a>
</div>
</div>
<div class="col-8 col-md-9 markdown-body" style="padding-top:16px">

4
dokku
View File

@@ -188,6 +188,10 @@ execute_dokku_cmd() {
set -- "$PLUGIN_CMD" "$@"
fi
if [[ "$PLUGIN_NAME" == "git-hook" ]] || [[ "$PLUGIN_NAME" == "ps:rebuild" ]] || [[ "$PLUGIN_NAME" == "ps:restart" ]]; then
dokku_setup_build_capture "$2" "$PLUGIN_NAME"
fi
if [[ -x $PLUGIN_ENABLED_PATH/$PLUGIN_NAME/subcommands/default ]]; then
"$PLUGIN_ENABLED_PATH/$PLUGIN_NAME/subcommands/default" "$@"
implemented=1

View File

@@ -1,4 +1,4 @@
go 1.25.1
go 1.26.2
use (
./plugins/app-json
@@ -21,4 +21,5 @@ use (
./plugins/scheduler
./plugins/scheduler-docker-local
./plugins/scheduler-k3s
./plugins/storage
)

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core standard plugin"
version = "0.37.2"
version = "0.38.4"
[plugin.config]

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core events logging plugin"
version = "0.37.2"
version = "0.38.4"
[plugin.config]

View File

@@ -24,11 +24,56 @@ var (
}
)
// EnvVarValue represents an environment variable definition in app.json
// It supports both simple string values and complex object definitions
type EnvVarValue struct {
// Description provides context for the env var (used in prompts)
Description string `json:"description,omitempty"`
// Value is the default value for the env var
Value string `json:"value,omitempty"`
// Required indicates if the env var must have a value (defaults to true per Heroku spec)
Required *bool `json:"required,omitempty"`
// Generator specifies how to auto-generate a value (currently only "secret" is supported)
Generator string `json:"generator,omitempty"`
// Sync indicates if the value should be set on every deploy, not just first
Sync bool `json:"sync,omitempty"`
}
// UnmarshalJSON handles both string and object formats for env vars
func (e *EnvVarValue) UnmarshalJSON(data []byte) error {
var str string
if err := json.Unmarshal(data, &str); err == nil {
e.Value = str
return nil
}
type envVarAlias EnvVarValue
return json.Unmarshal(data, (*envVarAlias)(e))
}
// IsRequired returns true if the env var is required (defaults to true per Heroku spec)
func (e *EnvVarValue) IsRequired() bool {
if e.Required == nil {
return true
}
return *e.Required
}
// AppJSON is a struct that represents an app.json file as understood by Dokku
type AppJSON struct {
// Buildpacks is a list of buildpacks to use for the app
Buildpacks []Buildpack `json:"buildpacks"`
// Cron is a list of cron tasks to execute
Cron []CronTask `json:"cron"`
// Env is a map of environment variables to set
Env map[string]EnvVarValue `json:"env,omitempty"`
// Formation is a map of process types to scale
Formation map[string]Formation `json:"formation"`
@@ -51,6 +96,12 @@ type AppJSON struct {
} `json:"scripts"`
}
// Buildpack is a struct that represents a single buildpack
type Buildpack struct {
// URL is the URL of the buildpack
URL string `json:"url"`
}
// CronTask is a struct that represents a single cron task from an app.json file
type CronTask struct {
// Command is the command to execute

View File

@@ -1,16 +1,21 @@
package appjson
import (
"bufio"
"crypto/rand"
"encoding/hex"
"encoding/json"
"errors"
"fmt"
"os"
"path/filepath"
"sort"
"strconv"
"strings"
"github.com/dokku/dokku/plugins/common"
shellquote "github.com/kballard/go-shellquote"
"github.com/mattn/go-isatty"
)
func constructScript(command string, shell string, isHerokuishImage bool, isCnbImage bool, dockerfileEntrypoint string) []string {
@@ -455,3 +460,199 @@ func setScale(appName string) error {
})
return err
}
// generateSecret generates a cryptographically secure random hex string of specified length
func generateSecret(length int) (string, error) {
bytes := make([]byte, length/2)
if _, err := rand.Read(bytes); err != nil {
return "", fmt.Errorf("failed to generate secret: %w", err)
}
return hex.EncodeToString(bytes), nil
}
// isInteractive returns true if stdin is a terminal (TTY available)
func isInteractive() bool {
return isatty.IsTerminal(os.Stdin.Fd()) || isatty.IsCygwinTerminal(os.Stdin.Fd())
}
// promptForValue prompts the user for an environment variable value
func promptForValue(varName string, envVar EnvVarValue) (string, error) {
prompt := fmt.Sprintf("Enter value for %s", varName)
if envVar.Description != "" {
prompt = fmt.Sprintf("Enter value for %s (%s)", varName, envVar.Description)
}
common.LogInfo1(prompt)
fmt.Print("> ")
reader := bufio.NewReader(os.Stdin)
response, err := reader.ReadString('\n')
if err != nil {
return "", err
}
return strings.TrimSpace(response), nil
}
// getCurrentConfig retrieves the current config values for an app
func getCurrentConfig(appName string) (map[string]string, error) {
results, err := common.CallPlugnTrigger(common.PlugnTriggerInput{
Trigger: "config-export",
Args: []string{appName, "false", "true", "json"},
})
if err != nil {
return nil, fmt.Errorf("failed to get current config: %w", err)
}
var currentConfig map[string]string
if err := json.Unmarshal(results.StdoutBytes(), &currentConfig); err != nil {
return nil, fmt.Errorf("failed to parse current config: %w", err)
}
return currentConfig, nil
}
// setConfigVars sets multiple config vars for an app without triggering restart
func setConfigVars(appName string, vars map[string]string) error {
if len(vars) == 0 {
return nil
}
// Build arguments for config-set trigger: --no-restart flag, appName, key=value pairs
args := []string{"--no-restart", appName}
for key, value := range vars {
args = append(args, fmt.Sprintf("%s=%s", key, value))
}
_, err := common.CallPlugnTrigger(common.PlugnTriggerInput{
Trigger: "config-set",
Args: args,
StreamStdio: true,
})
if err != nil {
return fmt.Errorf("failed to set config vars: %w", err)
}
return nil
}
// processAppJSONEnv processes env vars from app.json and sets them as config
func processAppJSONEnv(appName string) error {
appJSON, err := GetAppJSON(appName)
if err != nil {
return err
}
if len(appJSON.Env) == 0 {
return nil
}
common.LogInfo1("Processing app.json env vars")
isFirstDeploy := common.PropertyGet("common", appName, "deployed") != "true"
// Check if env vars have been processed for this deploy
envProcessedProperty := "appjson-env-processed"
alreadyProcessed := common.PropertyGet("app-json", appName, envProcessedProperty) == "executed"
// Get current config values
currentConfig, err := getCurrentConfig(appName)
if err != nil {
return err
}
varsToSet := make(map[string]string)
interactive := isInteractive()
// Sort keys for deterministic ordering
var keys []string
for k := range appJSON.Env {
keys = append(keys, k)
}
sort.Strings(keys)
for _, varName := range keys {
envVar := appJSON.Env[varName]
// Determine if we should process this var
shouldProcess := false
if isFirstDeploy && !alreadyProcessed {
// First deploy: process all vars
shouldProcess = true
} else if envVar.Sync {
// Subsequent deploy with sync: always process sync vars
shouldProcess = true
}
if !shouldProcess {
continue
}
// Check if already set (for first deploy, skip if already has value and not sync)
currentValue, hasValue := currentConfig[varName]
if hasValue && currentValue != "" && !envVar.Sync {
common.LogDebug(fmt.Sprintf("Skipping %s: already set", varName))
continue
}
// Determine the value
var value string
// Handle generator
if envVar.Generator == "secret" {
if !hasValue || currentValue == "" || envVar.Sync {
generated, err := generateSecret(64)
if err != nil {
return fmt.Errorf("failed to generate secret for %s: %w", varName, err)
}
value = generated
common.LogDebug(fmt.Sprintf("Generated secret for %s", varName))
} else {
continue // Already has value, not sync
}
} else if envVar.Value != "" {
// Use default value
value = envVar.Value
} else if interactive {
// Prompt user
prompted, err := promptForValue(varName, envVar)
if err != nil {
if envVar.IsRequired() {
return fmt.Errorf("required env var %s has no value and prompt failed: %w", varName, err)
}
continue
}
if prompted == "" && envVar.IsRequired() {
return fmt.Errorf("required env var %s cannot be empty", varName)
}
value = prompted
} else {
// No TTY, no default, no generator
if envVar.IsRequired() {
return fmt.Errorf("required env var %s has no value, no default, and no TTY for prompt", varName)
}
continue
}
if value != "" {
varsToSet[varName] = value
}
}
if len(varsToSet) == 0 {
common.LogVerbose("No env vars to set from app.json")
if !isFirstDeploy {
return common.PropertyWrite("app-json", appName, envProcessedProperty, "executed")
}
return nil
}
// Set the config vars without restart (we're in middle of deploy)
common.LogInfo1(fmt.Sprintf("Setting %d env var(s) from app.json", len(varsToSet)))
if err := setConfigVars(appName, varsToSet); err != nil {
return fmt.Errorf("failed to set env vars: %w", err)
}
// Mark as processed
return common.PropertyWrite("app-json", appName, envProcessedProperty, "executed")
}

View File

@@ -1,10 +1,11 @@
module github.com/dokku/dokku/plugins/app-json
go 1.25.1
go 1.26.2
require (
github.com/dokku/dokku/plugins/common v0.0.0-00010101000000-000000000000
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
github.com/mattn/go-isatty v0.0.22
github.com/spf13/pflag v1.0.10
github.com/tailscale/hujson v0.0.0-20250605163823-992244df8c5a
k8s.io/utils v0.0.0-20240102154912-e7106e64919e
@@ -12,22 +13,20 @@ require (
require (
github.com/alexellis/go-execute/v2 v2.2.1 // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/fatih/color v1.19.0 // indirect
github.com/hashicorp/errwrap v1.0.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/kr/fs v0.1.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/melbahja/goph v1.4.0 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/melbahja/goph v1.5.0 // indirect
github.com/otiai10/copy v1.14.1 // indirect
github.com/otiai10/mint v1.6.3 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pkg/sftp v1.13.5 // indirect
github.com/pkg/sftp v1.13.10 // indirect
github.com/ryanuber/columnize v2.1.2+incompatible // indirect
github.com/stretchr/testify v1.8.4 // indirect
golang.org/x/crypto v0.45.0 // indirect
golang.org/x/sync v0.18.0 // indirect
golang.org/x/sys v0.38.0 // indirect
golang.org/x/crypto v0.51.0 // indirect
golang.org/x/sync v0.20.0 // indirect
golang.org/x/sys v0.44.0 // indirect
)
replace github.com/dokku/dokku/plugins/common => ../common

View File

@@ -1,10 +1,9 @@
github.com/alexellis/go-execute/v2 v2.2.1 h1:4Ye3jiCKQarstODOEmqDSRCqxMHLkC92Bhse743RdOI=
github.com/alexellis/go-execute/v2 v2.2.1/go.mod h1:FMdRnUTiFAmYXcv23txrp3VYZfLo24nMpiIneWgKHTQ=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w=
github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
@@ -15,86 +14,46 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNU
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/melbahja/goph v1.4.0 h1:z0PgDbBFe66lRYl3v5dGb9aFgPy0kotuQ37QOwSQFqs=
github.com/melbahja/goph v1.4.0/go.mod h1:uG+VfK2Dlhk+O32zFrRlc3kYKTlV6+BtvPWd/kK7U68=
github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A=
github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4=
github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
github.com/melbahja/goph v1.5.0 h1:RQUBpLvfg3i7fjfG8rTcSWyMjVRfdhwrrfQhjYee4dQ=
github.com/melbahja/goph v1.5.0/go.mod h1:dDwo+44cmvfDLdiVpc6fJxexf5BA5yEDUeE5YgtuDO4=
github.com/onsi/gomega v1.40.0 h1:Vtol0e1MghCD2ZVIilPDIg44XSL9l2QAn8ZNaljWcJc=
github.com/onsi/gomega v1.40.0/go.mod h1:M/Uqpu/8qTjtzCLUA2zJHX9Iilrau25x1PdoSRbWh5A=
github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
github.com/otiai10/mint v1.6.3/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.13.5 h1:a3RLUqkyjYRtBTZJZ1VRrKbN3zhuPLlUc3sphVz81go=
github.com/pkg/sftp v1.13.5/go.mod h1:wHDZ0IZX6JcBYRK1TH9bcVq8G7TLpVHYIGJRFnmPfxg=
github.com/pkg/sftp v1.13.10 h1:+5FbKNTe5Z9aspU88DPIKJ9z2KZoaGCu6Sr6kKR/5mU=
github.com/pkg/sftp v1.13.10/go.mod h1:bJ1a7uDhrX/4OII+agvy28lzRvQrmIQuaHrcI1HbeGA=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/ryanuber/columnize v2.1.2+incompatible h1:C89EOx/XBWwIXl8wm8OPJBd7kPF25UfsK2X7Ph/zCAk=
github.com/ryanuber/columnize v2.1.2+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tailscale/hujson v0.0.0-20250605163823-992244df8c5a h1:a6TNDN9CgG+cYjaeN8l2mc4kSz2iMiCDQxPEyltUV/I=
github.com/tailscale/hujson v0.0.0-20250605163823-992244df8c5a/go.mod h1:EbW0wDK/qEUYI0A5bqq0C2kF8JTQwWONmGDBbzsxxHo=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI=
golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8=
golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ=

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core app-json plugin"
version = "0.37.2"
version = "0.38.4"
[plugin.config]

View File

@@ -6,14 +6,23 @@ import (
// ReportSingleApp is an internal function that displays the builder report for one or more apps
func ReportSingleApp(appName string, format string, infoFlag string) error {
if err := common.VerifyAppName(appName); err != nil {
return err
if appName != "--global" {
if err := common.VerifyAppName(appName); err != nil {
return err
}
}
flags := map[string]common.ReportFunc{
"--app-json-computed-selected": reportComputedAppjsonpath,
"--app-json-global-selected": reportGlobalAppjsonpath,
"--app-json-selected": reportAppjsonpath,
var flags map[string]common.ReportFunc
if appName == "--global" {
flags = map[string]common.ReportFunc{
"--app-json-global-appjson-path": reportGlobalAppjsonpath,
}
} else {
flags = map[string]common.ReportFunc{
"--app-json-computed-appjson-path": reportComputedAppjsonpath,
"--app-json-global-appjson-path": reportGlobalAppjsonpath,
"--app-json-appjson-path": reportAppjsonpath,
}
}
flagKeys := []string{}

View File

@@ -21,11 +21,14 @@ func main() {
case "report":
args := flag.NewFlagSet("app-json:report", flag.ExitOnError)
format := args.String("format", "stdout", "format: [ stdout | json ]")
osArgs, infoFlag, flagErr := common.ParseReportArgs("appjson", os.Args[2:])
reportArgs, flagErr := common.ParseReportArgs("appjson", os.Args[2:])
if flagErr == nil {
args.Parse(osArgs)
args.Parse(reportArgs.OSArgs)
appName := args.Arg(0)
err = appjson.CommandReport(appName, *format, infoFlag)
if reportArgs.IsGlobal {
appName = "--global"
}
err = appjson.CommandReport(appName, *format, reportArgs.InfoFlag)
}
case "set":
args := flag.NewFlagSet("app-json:set", flag.ExitOnError)

View File

@@ -71,6 +71,11 @@ func TriggerCorePostDeploy(appName string) error {
// TriggerCorePostExtract ensures that the main app.json is the one specified by app-json-path
func TriggerCorePostExtract(appName string, sourceWorkDir string) error {
// Clear the env-processed property on new source extraction to allow re-processing
if err := common.PropertyDelete("app-json", appName, "appjson-env-processed"); err != nil {
return err
}
destination := common.GetAppDataDirectory("app-json", appName)
appJSONPath := strings.Trim(reportComputedAppjsonpath(appName), "/")
if appJSONPath == "" {
@@ -190,7 +195,13 @@ func TriggerPostDeploy(appName string, imageTag string) error {
return executeScript(appName, image, imageTag, "postdeploy")
}
// TriggerPreReleaseBuilder processes app.json env vars and executes the predeploy task
func TriggerPreReleaseBuilder(builderType string, appName string, image string) error {
// Process app.json env vars before predeploy script
if err := processAppJSONEnv(appName); err != nil {
return err
}
parts := strings.Split(image, ":")
imageTag := parts[len(parts)-1]
return executeScript(appName, image, imageTag, "predeploy")

View File

@@ -1,4 +1,4 @@
SUBCOMMANDS = subcommands/clone subcommands/create subcommands/destroy subcommands/exists subcommands/list subcommands/lock subcommands/locked subcommands/rename subcommands/report subcommands/unlock
SUBCOMMANDS = subcommands/clone subcommands/create subcommands/destroy subcommands/exists subcommands/list subcommands/lock subcommands/locked subcommands/rename subcommands/report subcommands/set subcommands/unlock
TRIGGERS = triggers/app-create triggers/app-destroy triggers/app-exists triggers/app-maybe-create triggers/deploy-source-set triggers/install triggers/post-app-clone-setup triggers/post-app-rename triggers/post-app-rename-setup triggers/post-create triggers/post-delete triggers/report
BUILD = commands subcommands triggers
PLUGIN_NAME = apps

View File

@@ -5,11 +5,13 @@ var (
DefaultProperties = map[string]string{
"deploy-source": "",
"deploy-source-metadata": "",
"disable-autocreation": "",
}
// GlobalProperties is a map of all valid global apps properties
GlobalProperties = map[string]bool{
"deploy-source": true,
"deploy-source-metadata": true,
"disable-autocreation": true,
}
)

View File

@@ -132,11 +132,7 @@ func maybeCreateApp(appName string) error {
return nil
}
results, _ := common.CallPlugnTrigger(common.PlugnTriggerInput{
Trigger: "config-get-global",
Args: []string{"DOKKU_DISABLE_APP_AUTOCREATION"},
})
disableAutocreate := results.StdoutContents()
disableAutocreate := common.PropertyGetDefault("apps", "--global", "disable-autocreation", "")
if disableAutocreate == "true" {
common.LogWarn("App auto-creation disabled.")
return fmt.Errorf("Re-enable app auto-creation or create an app with 'dokku apps:create %s'", appName)

View File

@@ -1,6 +1,6 @@
module github.com/dokku/dokku/plugins/apps
go 1.25.1
go 1.26.2
require (
github.com/dokku/dokku/plugins/common v0.0.0-00010101000000-000000000000
@@ -9,21 +9,21 @@ require (
require (
github.com/alexellis/go-execute/v2 v2.2.1 // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/fatih/color v1.19.0 // indirect
github.com/hashicorp/errwrap v1.0.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/kr/fs v0.1.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/melbahja/goph v1.4.0 // indirect
github.com/melbahja/goph v1.5.0 // indirect
github.com/otiai10/copy v1.14.1 // indirect
github.com/otiai10/mint v1.6.3 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pkg/sftp v1.13.5 // indirect
github.com/pkg/sftp v1.13.10 // indirect
github.com/ryanuber/columnize v2.1.2+incompatible // indirect
golang.org/x/crypto v0.45.0 // indirect
golang.org/x/sync v0.18.0 // indirect
golang.org/x/sys v0.38.0 // indirect
golang.org/x/crypto v0.51.0 // indirect
golang.org/x/sync v0.20.0 // indirect
golang.org/x/sys v0.44.0 // indirect
)
replace github.com/dokku/dokku/plugins/common => ../common

View File

@@ -1,9 +1,9 @@
github.com/alexellis/go-execute/v2 v2.2.1 h1:4Ye3jiCKQarstODOEmqDSRCqxMHLkC92Bhse743RdOI=
github.com/alexellis/go-execute/v2 v2.2.1/go.mod h1:FMdRnUTiFAmYXcv23txrp3VYZfLo24nMpiIneWgKHTQ=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w=
github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
@@ -12,82 +12,44 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/melbahja/goph v1.4.0 h1:z0PgDbBFe66lRYl3v5dGb9aFgPy0kotuQ37QOwSQFqs=
github.com/melbahja/goph v1.4.0/go.mod h1:uG+VfK2Dlhk+O32zFrRlc3kYKTlV6+BtvPWd/kK7U68=
github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A=
github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k=
github.com/melbahja/goph v1.5.0 h1:RQUBpLvfg3i7fjfG8rTcSWyMjVRfdhwrrfQhjYee4dQ=
github.com/melbahja/goph v1.5.0/go.mod h1:dDwo+44cmvfDLdiVpc6fJxexf5BA5yEDUeE5YgtuDO4=
github.com/onsi/gomega v1.40.0 h1:Vtol0e1MghCD2ZVIilPDIg44XSL9l2QAn8ZNaljWcJc=
github.com/onsi/gomega v1.40.0/go.mod h1:M/Uqpu/8qTjtzCLUA2zJHX9Iilrau25x1PdoSRbWh5A=
github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
github.com/otiai10/mint v1.6.3/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.13.5 h1:a3RLUqkyjYRtBTZJZ1VRrKbN3zhuPLlUc3sphVz81go=
github.com/pkg/sftp v1.13.5/go.mod h1:wHDZ0IZX6JcBYRK1TH9bcVq8G7TLpVHYIGJRFnmPfxg=
github.com/pkg/sftp v1.13.10 h1:+5FbKNTe5Z9aspU88DPIKJ9z2KZoaGCu6Sr6kKR/5mU=
github.com/pkg/sftp v1.13.10/go.mod h1:bJ1a7uDhrX/4OII+agvy28lzRvQrmIQuaHrcI1HbeGA=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/ryanuber/columnize v2.1.2+incompatible h1:C89EOx/XBWwIXl8wm8OPJBd7kPF25UfsK2X7Ph/zCAk=
github.com/ryanuber/columnize v2.1.2+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI=
golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8=
golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core apps plugin"
version = "0.37.2"
version = "0.38.4"
[plugin.config]

View File

@@ -9,16 +9,23 @@ import (
// ReportSingleApp is an internal function that displays the app report for one or more apps
func ReportSingleApp(appName string, format string, infoFlag string) error {
if err := common.VerifyAppName(appName); err != nil {
return err
if appName != "--global" {
if err := common.VerifyAppName(appName); err != nil {
return err
}
}
flags := map[string]common.ReportFunc{
"--app-created-at": reportCreatedAt,
"--app-deploy-source": reportDeploySource,
"--app-deploy-source-metadata": reportDeploySourceMetadata,
"--app-dir": reportDir,
"--app-locked": reportLocked,
var flags map[string]common.ReportFunc
if appName == "--global" {
flags = map[string]common.ReportFunc{}
} else {
flags = map[string]common.ReportFunc{
"--app-created-at": reportCreatedAt,
"--app-deploy-source": reportDeploySource,
"--app-deploy-source-metadata": reportDeploySourceMetadata,
"--app-dir": reportDir,
"--app-locked": reportLocked,
}
}
flagKeys := []string{}

View File

@@ -28,6 +28,7 @@ Additional commands:`
apps:locked <app>, Checks if an app is locked for deployment
apps:rename <old-app> <new-app>, Rename an app
apps:report [<app>] [<flag>], Display report about an app
apps:set <app>|--global <key> <value>, Set or clear an apps property
apps:unlock <app>, Unlocks an app for deployment`
)

View File

@@ -66,12 +66,28 @@ func main() {
case "report":
args := flag.NewFlagSet("apps:report", flag.ExitOnError)
format := args.String("format", "stdout", "format: [ stdout | json ]")
osArgs, infoFlag, flagErr := common.ParseReportArgs("apps", os.Args[2:])
reportArgs, flagErr := common.ParseReportArgs("apps", os.Args[2:])
if flagErr == nil {
args.Parse(osArgs)
args.Parse(reportArgs.OSArgs)
appName := args.Arg(0)
err = apps.CommandReport(appName, *format, infoFlag)
if reportArgs.IsGlobal {
appName = "--global"
}
err = apps.CommandReport(appName, *format, reportArgs.InfoFlag)
}
case "set":
args := flag.NewFlagSet("apps:set", flag.ExitOnError)
global := args.Bool("global", false, "--global: set a global property")
args.Parse(os.Args[2:])
appName := args.Arg(0)
property := args.Arg(1)
value := args.Arg(2)
if *global {
appName = "--global"
property = args.Arg(0)
value = args.Arg(1)
}
err = apps.CommandSet(appName, property, value)
case "unlock":
args := flag.NewFlagSet("apps:unlock", flag.ExitOnError)
args.Parse(os.Args[2:])

View File

@@ -226,6 +226,12 @@ func CommandReport(appName string, format string, infoFlag string) error {
return ReportSingleApp(appName, format, infoFlag)
}
// CommandSet set or clear an apps property for an app
func CommandSet(appName string, property string, value string) error {
common.CommandPropertySet("apps", appName, property, value, DefaultProperties, GlobalProperties)
return nil
}
// CommandUnlock unlocks an app for deployment
func CommandUnlock(appName string) error {
if err := common.VerifyAppName(appName); err != nil {

View File

@@ -53,6 +53,15 @@ func TriggerInstall() error {
return nil
}
if err := common.MigrateConfigToProperties("apps", []common.MigrateConfigEntry{
{
GlobalConfigVar: "DOKKU_DISABLE_APP_AUTOCREATION",
Property: "disable-autocreation",
},
}); err != nil {
return err
}
// migrate all created-at values from app mod-time to property
for _, appName := range apps {
if common.PropertyExists("apps", appName, "created-at") {

View File

@@ -17,7 +17,7 @@ trigger-builder-dockerfile-builder-build() {
dokku_log_info1 "Building $APP from Dockerfile"
local IMAGE=$(get_app_image_name "$APP")
local DOCKER_BUILD_LABEL_ARGS=("--label=dokku" "--label=org.label-schema.schema-version=1.0" "--label=org.label-schema.vendor=dokku" "--label=com.dokku.image-stage=build" "--label=com.dokku.builder-type=dockerfile" "--label=com.dokku.app-name=$APP")
local DOCKER_BUILD_LABEL_ARGS=("--label=org.label-schema.schema-version=1.0" "--label=org.label-schema.vendor=dokku" "--label=com.dokku.image-stage=build" "--label=com.dokku.builder-type=dockerfile" "--label=com.dokku.app-name=$APP" "--label=dokku")
pushd "$SOURCECODE_WORK_DIR" &>/dev/null
@@ -141,6 +141,28 @@ trigger-builder-dockerfile-builder-build() {
DOCKERFILE_ARGS+=("--label" "${1#--label=}")
shift 1
;;
--memory | -m)
DOCKERFILE_ARGS+=("--memory")
DOCKERFILE_ARGS+=("$2")
shift 2
;;
--memory=* | -m=*)
if [[ "$1" == "--memory=*" ]]; then
DOCKERFILE_ARGS+=("--memory" "${1#--memory=}")
elif [[ "$1" == "-m=*" ]]; then
DOCKERFILE_ARGS+=("--memory" "${1#-m=}")
fi
shift 1
;;
--memory-swap)
DOCKERFILE_ARGS+=("--memory-swap")
DOCKERFILE_ARGS+=("$2")
shift 2
;;
--memory-swap=*)
DOCKERFILE_ARGS+=("--memory-swap" "${1#--memory-swap=}")
shift 1
;;
--network)
DOCKERFILE_ARGS+=("--network")
DOCKERFILE_ARGS+=("$2")
@@ -205,7 +227,7 @@ trigger-builder-dockerfile-builder-build() {
shift 1
;;
--ssh)
DOCKERFILE_ARGS+=("--platform")
DOCKERFILE_ARGS+=("--ssh")
DOCKERFILE_ARGS+=("$2")
shift 2
;;
@@ -213,6 +235,15 @@ trigger-builder-dockerfile-builder-build() {
DOCKERFILE_ARGS+=("--ssh" "${1#--ssh=}")
shift 1
;;
--tag)
DOCKERFILE_ARGS+=("--tag")
DOCKERFILE_ARGS+=("$2")
shift 2
;;
--tag=*)
DOCKERFILE_ARGS+=("--tag" "${1#--tag=}")
shift 1
;;
--target)
DOCKERFILE_ARGS+=("--target")
DOCKERFILE_ARGS+=("$2")
@@ -223,12 +254,12 @@ trigger-builder-dockerfile-builder-build() {
shift 1
;;
--ulimit)
DOCKERFILE_ARGS+=("--tag")
DOCKERFILE_ARGS+=("--ulimit")
DOCKERFILE_ARGS+=("$2")
shift 2
;;
--tag=*)
DOCKERFILE_ARGS+=("--tag" "${1#--tag=}")
--ulimit=*)
DOCKERFILE_ARGS+=("--ulimit" "${1#--ulimit=}")
shift 1
;;
--check | -D | --debug | --no-cache)
@@ -246,6 +277,9 @@ trigger-builder-dockerfile-builder-build() {
done
eval "$(config_export app "$APP")"
local DOCKER_CONFIG
DOCKER_CONFIG="$(fn-registry-docker-config-dir "$APP")"
[[ -n "$DOCKER_CONFIG" ]] && export DOCKER_CONFIG
"$DOCKER_BIN" image build "${DOCKER_BUILD_LABEL_ARGS[@]}" "${DOCKERFILE_ARGS[@]}" --tag $IMAGE .
plugn trigger ports-set-detected "$APP" "$(fn-builder-dockerfile-get-detect-port-map "$APP" "$IMAGE" "$SOURCECODE_WORK_DIR/Dockerfile")"

View File

@@ -29,6 +29,9 @@ trigger-builder-dockerfile-builder-release() {
DOCKER_BUILD_ARGS+=("--platform=linux/amd64")
fi
local DOCKER_CONFIG
DOCKER_CONFIG="$(fn-registry-docker-config-dir "$APP")"
[[ -n "$DOCKER_CONFIG" ]] && export DOCKER_CONFIG
if ! suppress_output "$DOCKER_BIN" image build "${DOCKER_BUILD_ARGS[@]}" $DOKKU_GLOBAL_BUILD_ARGS -f "$PLUGIN_AVAILABLE_PATH/builder-dockerfile/dockerfiles/builder-release.Dockerfile" --build-arg APP_IMAGE="$IMAGE" -t "$IMAGE" "$TMP_WORK_DIR"; then
dokku_log_warn "Failure injecting docker labels on image"
return 1

View File

@@ -10,7 +10,7 @@ trigger-builder-dockerfile-core-post-extract() {
declare APP="$1" SOURCECODE_WORK_DIR="$2"
local NEW_DOCKERFILE="$(fn-builder-dockerfile-computed-dockerfile-path "$APP")"
pushd "$TMP_WORK_DIR" >/dev/null
pushd "$SOURCECODE_WORK_DIR" >/dev/null
if [[ -z "$NEW_DOCKERFILE" ]]; then
return

View File

@@ -8,61 +8,85 @@ cmd-builder-dockerfile-report() {
declare desc="displays a builder-dockerfile report for one or more apps"
declare cmd="builder-dockerfile:report"
[[ "$1" == "$cmd" ]] && shift 1
declare APP="$1" INFO_FLAG="$2"
fn-report-parse-args "$@"
set -- "${REPORT_ARGS[@]}"
declare APP="${1:-}" INFO_FLAG="${2:-}"
if [[ -n "$APP" ]] && [[ "$APP" == --* ]]; then
INFO_FLAG="$APP"
APP=""
fi
if [[ "$REPORT_IS_GLOBAL" == "true" ]]; then
APP="--global"
fi
if [[ -z "$APP" ]] && [[ -z "$INFO_FLAG" ]]; then
INFO_FLAG="true"
fi
if [[ -z "$APP" ]]; then
if [[ "$APP" == "--global" ]]; then
cmd-builder-dockerfile-report-single "$APP" "$INFO_FLAG" "$REPORT_FORMAT"
elif [[ -z "$APP" ]]; then
for app in $(dokku_apps); do
cmd-builder-dockerfile-report-single "$app" "$INFO_FLAG" | tee || true
cmd-builder-dockerfile-report-single "$app" "$INFO_FLAG" "$REPORT_FORMAT" | tee || true
done
else
cmd-builder-dockerfile-report-single "$APP" "$INFO_FLAG"
cmd-builder-dockerfile-report-single "$APP" "$INFO_FLAG" "$REPORT_FORMAT"
fi
}
cmd-builder-dockerfile-report-single() {
declare APP="$1" INFO_FLAG="$2"
declare APP="$1" INFO_FLAG="$2" FORMAT="${3:-stdout}"
if [[ "$INFO_FLAG" == "true" ]]; then
INFO_FLAG=""
fi
verify_app_name "$APP"
local flag_map=(
"--builder-dockerfile-computed-dockerfile-path: $(fn-builder-dockerfile-computed-dockerfile-path "$APP")"
"--builder-dockerfile-global-dockerfile-path: $(fn-builder-dockerfile-global-dockerfile-path "$APP")"
"--builder-dockerfile-dockerfile-path: $(fn-builder-dockerfile-dockerfile-path "$APP")"
)
local flag_map=()
if [[ "$APP" == "--global" ]]; then
flag_map=(
"--builder-dockerfile-global-dockerfile-path: $(fn-builder-dockerfile-global-dockerfile-path "$APP")"
)
else
verify_app_name "$APP"
flag_map=(
"--builder-dockerfile-computed-dockerfile-path: $(fn-builder-dockerfile-computed-dockerfile-path "$APP")"
"--builder-dockerfile-global-dockerfile-path: $(fn-builder-dockerfile-global-dockerfile-path "$APP")"
"--builder-dockerfile-dockerfile-path: $(fn-builder-dockerfile-dockerfile-path "$APP")"
)
fi
fn-report-validate-format "$FORMAT" "$INFO_FLAG"
if [[ "$FORMAT" == "json" ]]; then
fn-report-emit-json flag_map "builder-dockerfile"
return
fi
if [[ -z "$INFO_FLAG" ]]; then
dokku_log_info2_quiet "${APP} builder-dockerfile information"
if [[ "$APP" == "--global" ]]; then
dokku_log_info2_quiet "global builder-dockerfile information"
else
dokku_log_info2_quiet "${APP} builder-dockerfile information"
fi
for flag in "${flag_map[@]}"; do
key="$(echo "${flag#--}" | cut -f1 -d' ' | tr - ' ')"
dokku_log_verbose "$(printf "%-30s %-25s" "${key^}" "${flag#*: }")"
done
else
local match=false
local value_exists=false
for flag in "${flag_map[@]}"; do
valid_flags="${valid_flags} $(echo "$flag" | cut -d':' -f1)"
if [[ "$flag" == "${INFO_FLAG}:"* ]]; then
value=${flag#*: }
size="${#value}"
if [[ "$size" -ne 0 ]]; then
echo "$value" && match=true && value_exists=true
echo "$value" && match=true
else
match=true
fi
fi
done
[[ "$match" == "true" ]] || dokku_log_fail "Invalid flag passed, valid flags:${valid_flags}"
[[ "$value_exists" == "true" ]] || dokku_log_fail "not deployed"
fi
}

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku core builder-dockerfile plugin"
version = "0.37.2"
version = "0.38.4"
[plugin.config]

Some files were not shown because too many files have changed in this diff Show More