Commit Graph

13776 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
3493869fa4 feat: prompt for confirmation on storage:destroy
`storage:destroy` now prompts for confirmation before removing a named storage entry, matching the behavior of other destructive commands such as `apps:destroy` and `network:destroy`. The prompt can be skipped with the `--force` flag or the global `dokku --force` flag for non-interactive callers.
2026-05-29 14:31:20 -04:00
Jose Diaz-Gonzalez
d003bfaf0e Merge pull request #8698 from dokku/dependabot/maven/tests/apps/java/org.apache.maven.plugins-maven-dependency-plugin-3.11.0
chore(deps-dev): bump org.apache.maven.plugins:maven-dependency-plugin from 3.10.0 to 3.11.0 in /tests/apps/java
2026-05-28 12:43:01 -04:00
dependabot[bot]
b08f00a105 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.10.0 to 3.11.0.
- [Release notes](https://github.com/apache/maven-dependency-plugin/releases)
- [Commits](https://github.com/apache/maven-dependency-plugin/compare/maven-dependency-plugin-3.10.0...maven-dependency-plugin-3.11.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-28 15:54:58 +00:00
Dokku Bot
c8101aa2a7 Release 0.38.9
# History

## 0.38.9

Install/update via the bootstrap script:

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

### New Features

- #8697: @josegonzalez Split openresty report into raw/computed/global

### Refactors

- #8696: @josegonzalez Treat empty ps restart-policy as an unset
v0.38.9
2026-05-28 09:14:30 +00:00
Jose Diaz-Gonzalez
a561a5069e Merge pull request #8696 from dokku/8695-ps-set-app-restart-policy-should-unset-not-error-with-invalid-restart-policy-specified 2026-05-28 05:13:16 -04:00
Jose Diaz-Gonzalez
5d802e3cf4 fix: separate docker-args outputs to avoid arg collisions
Emitting the restart policy as a `--restart` argument from a `docker-args-process-deploy` trigger exposed a latent gluing bug: proxy and builder triggers concatenated `$STDIN$output` with no separator, and the scheduler and builders appended `docker-args-process-*` output directly onto the older `docker-args-*` output, so adjacent arguments could merge into values like `--restart=on-failure:10--label`. A space is now inserted at both the trigger echo and the concatenation so arguments always stay separated.
2026-05-28 04:16:55 -04:00
Jose Diaz-Gonzalez
fec872711a fix: treat empty ps restart-policy as an unset
`dokku ps:set <app> restart-policy` with no value erroneously returned `Invalid restart-policy specified` instead of unsetting the property like every other ps property. The restart policy is now managed as a normal app and global property surfaced through the `--ps-restart-policy`, `--ps-global-restart-policy`, and `--ps-computed-restart-policy` report flags, with the effective value applied at deploy time and existing values migrated on install. Because it is no longer stored as a Docker option it no longer appears in `docker-options:report`, and `--ps-restart-policy` now reports the raw value with the `on-failure:10` default available via `--ps-computed-restart-policy`.
2026-05-28 03:10:03 -04:00
Jose Diaz-Gonzalez
44dd5e9eea Merge pull request #8697 from dokku/8694-extend-report-raw-computed-split-8675-to-openresty-vhosts
Split openresty report into raw/computed/global
2026-05-28 03:08:23 -04:00
Jose Diaz-Gonzalez
64b104a2a3 feat: split openresty report into raw/computed/global
Exposes raw, global, and computed report flags for every openresty per-app property and allows those properties to be set with `--global`, so external tooling can distinguish a property that was never set from one left at its built-in default. The computed value resolves the per-app value first, then the global value, then the default. Also corrects `client-header-timeout` which read the `client-body-timeout` key and sets the computed `client-max-body-size` default to `1m`.
2026-05-28 00:03:47 -04:00
Dokku Bot
ee11fa2c63 Release 0.38.8
# History

## 0.38.8

Install/update via the bootstrap script:

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

### Bug Fixes

- #8690: @josegonzalez Unset bind-all-interfaces on empty value
- #8689: @josegonzalez Expose remaining settable properties via :report

### New Features

- #8692: @Mordred Enable compression middleware for traefik when using scheduler-k3s
- #8691: @josegonzalez Align Go-plugin :report JSON keys with bash-strip convention
- #8688: @josegonzalez Promote registry image-repo-template to app + global

### Dependencies

- #8693: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.20.2 to 3.21.0 in /plugins/scheduler-k3s
v0.38.8
2026-05-27 18:50:41 +00:00
Jose Diaz-Gonzalez
84f744f61f Merge pull request #8692 from Mordred/feat/scheduler-k3s-compression
Enable compression middleware for traefik when using scheduler-k3s
2026-05-27 14:49:14 -04:00
Jose Diaz-Gonzalez
c7b8e50d8e Merge pull request #8693 from dokku/dependabot/go_modules/plugins/scheduler-k3s/helm.sh/helm/v3-3.21.0
chore(deps): bump helm.sh/helm/v3 from 3.20.2 to 3.21.0 in /plugins/scheduler-k3s
2026-05-27 13:34:00 -04:00
Jose Diaz-Gonzalez
a5603744ab Merge pull request #8691 from dokku/8687-drop-plugin-prefix-from-report-format-json-keys-align-go-plugins-with-bash-strip
Align Go-plugin :report JSON keys with bash-strip convention
2026-05-27 13:33:49 -04:00
dependabot[bot]
b0f5b764bd chore(deps): bump helm.sh/helm/v3 in /plugins/scheduler-k3s
Bumps [helm.sh/helm/v3](https://github.com/helm/helm) from 3.20.2 to 3.21.0.
- [Release notes](https://github.com/helm/helm/releases)
- [Commits](https://github.com/helm/helm/compare/v3.20.2...v3.21.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-27 16:42:11 +00:00
Martin Jantošovič
5a517dde30 feat: enable compression middleware for traefik when using scheduler-k3s 2026-05-27 17:57:15 +02:00
Jose Diaz-Gonzalez
3bf6c72451 fix: align Go-plugin :report JSON keys with bash-strip convention
Every Go-implemented plugin's `:report --format json` now emits keys without the redundant `<plugin>-` head segment, matching the shape bash plugins have always emitted. The CLI flag names and `:set` semantics are unchanged. For backwards compatibility during the 0.38.x patch series, the legacy `<plugin>-<property>` keys are emitted side-by-side with the new keys, and a future major release will drop the legacy keys. `common.ReportSingleApp` is refactored to accept a `ReportSingleAppInput` struct with a `Validate()` method so the input is checked before any work runs, which also catches the latent `"docker options"` reportType bug at the API boundary.
2026-05-27 07:17:00 -04:00
Jose Diaz-Gonzalez
d635a49d6f Merge pull request #8690 from dokku/8684-network-set-bind-all-interfaces-writes-false-instead-of-unsetting-on-empty-value
Unset bind-all-interfaces on empty value
2026-05-27 05:53:56 -04:00
Jose Diaz-Gonzalez
5925efedc7 Merge pull request #8689 from dokku/8686-settable-but-unreported-properties-expose-ps-builder-scheduler-proxy-openresty-nginx-scheduler-k3s-properties-in-report
Expose remaining settable properties via :report
2026-05-27 05:26:38 -04:00
Jose Diaz-Gonzalez
035c021485 fix: unset bind-all-interfaces on empty value
`dokku network:set --global bind-all-interfaces` (no value) wrote the literal string `false` to the property file instead of unsetting it, so external tooling could not distinguish "explicitly set to default" from "not set". Drop the empty-to-`false` coercion in `CommandSet` so the empty-value path reaches `PropertyDelete` like every other property, and remove the unconditional `TriggerPostCreate` write so new apps consult the global value before falling back to the `"false"` computed default.
2026-05-27 05:13:25 -04:00
Jose Diaz-Gonzalez
a3538bbb66 Merge pull request #8688 from dokku/8685-registry-image-repo-template-should-be-app-global-not-global-only
Promote registry image-repo-template to app + global
2026-05-27 04:49:16 -04:00
Jose Diaz-Gonzalez
2b5d2e10ea fix: expose remaining settable properties via :report
Adds the missing raw/global/computed report keys for ten settable properties across the ps, builder, scheduler, proxy, openresty, nginx, and scheduler-k3s plugins so external tooling can verify drift through `:report --format json`. The scheduler-k3s `token` is masked as `*******` in default stdout output and only unmasked when the report is requested via `--format json` or when the flag is queried explicitly by name; the same explicit-query unmasking rule is extended to the existing traefik `dns-provider-<env_var>` keys.
2026-05-27 04:26:12 -04:00
Jose Diaz-Gonzalez
bc5acce55e fix: promote registry image-repo-template to app + global
The registry plugin accepted `registry:set <app> image-repo-template <value>` and persisted the per-app file, but only ever read the global value when rendering the image repository, so per-app overrides were silently dropped. The property now follows the same per-app to global to default fallback chain used by `push-on-release` and `server`, and `registry:report` exposes the raw per-app value alongside the existing global and computed flags. The `push-extra-tags` report flags were extended for the same reason: the runtime already honored per-app and global values, but the report only surfaced the raw per-app entry.
2026-05-27 03:23:14 -04:00
Dokku Bot
fd9e06d56b Release 0.38.7
# History

## 0.38.7

Install/update via the bootstrap script:

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

### Security

- #8672: @josegonzalez Prevent host shell injection from app.json cron commands

### Bug Fixes

- #8669: @josegonzalez Recover deployed image from registry on local miss
- #8679: @josegonzalez Align ps/cron :report --global keys with plugin convention
- #8678: @josegonzalez Split openresty report keys into global and computed pairs
- #8676: @immanuwell Use SYSTEM for shfmt Darwin detection

### New Features

- #8677: @josegonzalez Warn on deprecated listen http2 in custom nginx templates

### Tests

- #8683: @dependabot[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 290 to 291 in /tests/apps/php
- #8671: @josegonzalez Qualify scheduler-k3s ingressroute kubectl lookups

### Dependencies

- #8682: @dependabot[bot] chore(deps): bump k8s.io/apimachinery from 0.36.0 to 0.36.1 in /plugins/scheduler-k3s
- #8681: @dependabot[bot] chore(deps): bump soupsieve from 2.8.3 to 2.8.4 in /docs/_build

### Other

- #8680: @josegonzalez Split more report global keys into raw and computed
v0.38.7
2026-05-27 04:32:52 +00:00
Jose Diaz-Gonzalez
f9186ca1fd Merge pull request #8669 from dokku/8630-ps-restart-and-other-commands-fail-after-local-image-gc-when-registry-push-on-release-is-enabled
Recover deployed image from registry on local miss
2026-05-26 21:09:15 -04:00
Jose Diaz-Gonzalez
e30b6d2ac4 Merge pull request #8679 from dokku/8674-ps-and-cron-global-report-keys-skip-the-plugin-prefix-or-global-infix
Align ps/cron :report --global keys with plugin convention
2026-05-26 20:33:52 -04:00
Jose Diaz-Gonzalez
6ce48992f3 test: bump report.bats column width for renamed ps flags
The longest `ps:report` flag is now `--ps-computed-stop-timeout-seconds` (34 chars), which pushes the per-plugin stdout column width past the 31-char floor used by `common.ReportSingleApp`. The `(report) report` test's literal-string assertion for `Deployed:` needs three extra spaces to match the new alignment.
2026-05-26 20:33:36 -04:00
Jose Diaz-Gonzalez
3feedd8786 fix: align ps/cron :report --global keys with plugin convention
The `ps` and `cron` plugins emitted `:report --format json` keys that
skipped the `<plugin>-` prefix or `-global-` infix used by every other
plugin, forcing external consumers to special-case those names. Rename
the affected report flags so they match the `<plugin>-global-<property>`
and `<plugin>-computed-<property>` convention introduced in 0.38.0, and
add the previously missing `computed-` siblings to both the per-app and
`--global` reports so the shape lines up with caddy, haproxy, and
traefik.
2026-05-26 20:33:32 -04:00
Jose Diaz-Gonzalez
99b949da4a Merge pull request #8680 from dokku/8675-extend-raw-computed-report-key-split-8631-to-nginx-openresty-registry-scheduler-k3s
Split more report global keys into raw and computed
2026-05-26 20:25:51 -04:00
Jose Diaz-Gonzalez
90e6be84a2 Merge pull request #8682 from dokku/dependabot/go_modules/plugins/scheduler-k3s/k8s.io/apimachinery-0.36.1
chore(deps): bump k8s.io/apimachinery from 0.36.0 to 0.36.1 in /plugins/scheduler-k3s
2026-05-26 20:14:14 -04:00
Jose Diaz-Gonzalez
aee447b384 Merge pull request #8683 from dokku/dependabot/composer/tests/apps/php/heroku/heroku-buildpack-php-291
chore(deps-dev): bump heroku/heroku-buildpack-php from 290 to 291 in /tests/apps/php
2026-05-26 20:02:53 -04:00
dependabot[bot]
56313edd32 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 290 to 291.
- [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/v290...v291)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-26 20:59:28 +00:00
Jose Diaz-Gonzalez
aa6a2e8cc3 Merge pull request #8681 from dokku/dependabot/pip/docs/_build/soupsieve-2.8.4
chore(deps): bump soupsieve from 2.8.3 to 2.8.4 in /docs/_build
2026-05-26 10:18:00 -04:00
dependabot[bot]
631620b1df chore(deps): bump k8s.io/apimachinery in /plugins/scheduler-k3s
Bumps [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) from 0.36.0 to 0.36.1.
- [Commits](https://github.com/kubernetes/apimachinery/compare/v0.36.0...v0.36.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 20:24:28 +00:00
dependabot[bot]
866c4a2939 chore(deps): bump soupsieve from 2.8.3 to 2.8.4 in /docs/_build
Bumps [soupsieve](https://github.com/facelessuser/soupsieve) from 2.8.3 to 2.8.4.
- [Release notes](https://github.com/facelessuser/soupsieve/releases)
- [Commits](https://github.com/facelessuser/soupsieve/compare/2.8.3...2.8.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 20:17:42 +00:00
Jose Diaz-Gonzalez
b45c86dcc9 chore: run shfmt 2026-05-25 16:07:55 -04:00
Jose Diaz-Gonzalez
64a5b1517a fix: stop forwarding deployed tag from config:set restart
Reverts the earlier triggerRestart change. Forwarding the numeric tag forces
release_and_deploy to look up `dokku/<app>:N` (the bare local name), which
was never tagged when image-repo overrides the default. `fn-verify-app-image`
then retag-after-pulls and the underlying image ID ends up with two tags,
which prevents scheduler-docker-local's image retire path from removing the
old numeric tag (it uses unforced `docker image remove`).
2026-05-25 16:07:47 -04:00
Jose Diaz-Gonzalez
79921d75d6 fix: pull registry-aware image name on local miss
When `image-repo` is overridden, the registry plugin pushes under that name and
the bare local `dokku/<app>:N` tag is never created. `fn-verify-app-image` now
queries the `deployed-app-image-repo` trigger and pulls `${REMOTE_REPO}${DEPLOYED_REPO}:${TAG}`,
retagging it as the local bare reference so subsequent inspects resolve. Also
aligns the `storage:ensure-directory` deprecation test assertion with the
standardized `Deprecated:` prefix.
2026-05-25 16:07:47 -04:00
Jose Diaz-Gonzalez
9517353df4 fix: recover deployed image from registry on local miss
Adds an app-aware `fn-verify-app-image` helper that pulls the deployed image
from the configured registry when it is missing locally, gated on
push-on-release being enabled, honoring per-app `registry:login` credentials.
Every in-tree `verify_image` caller migrates to the wrapper and the bare
helper is marked deprecated. `config:set` now forwards the deployed image tag
to `release-and-deploy` so the release path no longer pins recovery on the
unrecoverable `:latest` tag.
2026-05-25 16:07:47 -04:00
Jose Diaz-Gonzalez
09c17e1653 fix: split more report global keys into raw and computed
Three plugins still leaked the built-in default through `<plugin>-global-<property>` after the broader raw/computed split in #8640. External tooling reading `:report --format json` for drift detection could not distinguish "set to default" from "never set" - after a `:set --global` followed by an unset, the JSON still reported the default value. The `<plugin>-global-<property>` keys now hold the raw stored value (empty when nothing has been set) and `<plugin>-computed-<property>` keys hold the effective value with per-app, global, and built-in default fallback. Every global property now has a computed sibling for shape consistency, including those whose default is empty. Internal callers in `scheduler-k3s` that previously read the default-applied global helpers now consume new `getComputed*` helpers, keeping deploy-time behavior unchanged.
2026-05-25 15:33:41 -04:00
Jose Diaz-Gonzalez
80ebaada77 Merge pull request #8678 from dokku/8673-openresty-report-global-emits-bare-keys-for-image-letsencrypt-email-letsencrypt-server
Split openresty report keys into global and computed pairs
2026-05-25 14:29:59 -04:00
Jose Diaz-Gonzalez
f9de91fc4b fix: split openresty report keys into global and computed pairs
The `openresty:report --format json` payload emitted bare property names for the four global-only properties (`image`, `letsencrypt-email`, `letsencrypt-server`, `allowed-letsencrypt-domains-func-base64`), while `hsts` already used the `global-`/`computed-` convention adopted by the other proxy plugins. External tooling consuming the report had to maintain a per-property naming map within a single plugin. The global flag map now emits `--openresty-global-<X>` (raw stored value, empty when unset) and `--openresty-computed-<X>` (effective value with the built-in default applied) for those four properties plus `hsts`, and the per-app map gains the same pair for the global-only properties. The compose template and the two non-report callers consume the `computed-` accessors so the runtime behavior is unchanged.
2026-05-25 12:45:53 -04:00
Jose Diaz-Gonzalez
961bbca6d8 Merge pull request #8677 from dokku/8670-nginx-warn-the-listen-http2-directive-is-deprecated
Warn on deprecated listen http2 in custom nginx templates
2026-05-25 11:53:23 -04:00
Jose Diaz-Gonzalez
955f0a8f6b chore: simplify warning message 2026-05-25 11:53:11 -04:00
Jose Diaz-Gonzalez
f960dc5856 feat: warn on deprecated listen http2 in custom nginx templates
nginx 1.25.1 deprecated the `listen ... http2` parameter in favor of a standalone `http2 on;` directive. Apps that ship a custom `nginx.conf.sigil` forked from an old default still hardcode `listen ... ssl http2;` and trigger `nginx: [warn]` lines from `nginx -t`. Surface a deprecation warning during `nginx_build_config` whenever the active template is app- or plugin-supplied and still contains the deprecated parameter, matching the existing warnings for `DOKKU_APP_LISTENERS`, `NGINX_SSL_PORT`, and `NGINX_PORT`, and point users at the `HTTP2_DIRECTIVE_SUPPORTED` variable already used by the default template.
2026-05-25 05:32:11 -04:00
Jose Diaz-Gonzalez
ff529543a9 Merge pull request #8676 from immanuwell/fix-shfmt-darwin-detection
Use SYSTEM for shfmt Darwin detection
2026-05-25 05:14:34 -04:00
immanuwell
cdb6c1c62e fix: use SYSTEM for shfmt Darwin detection 2026-05-25 12:51:23 +04:00
Jose Diaz-Gonzalez
6a01a4f731 Merge pull request #8672 from dokku/cron-command-injection-in-docker-local-scheduler
Prevent host shell injection from app.json cron commands
2026-05-25 03:50:43 -04:00
Jose Diaz-Gonzalez
ac95225809 fix: prevent host shell injection from app.json cron commands
The docker-local scheduler wrote each app.json cron command verbatim into the dokku user's crontab, where cron's `bash -c` interpreted any shell metacharacters in the command on the host as the dokku user rather than inside the container. The crontab line is now `dokku cron:run <app> <cron-id>`, and the command is resolved from app.json and exec'd inside the container at run time. Commands containing shell operators are also rejected when app.json is validated at deploy time.
2026-05-25 02:14:21 -04:00
Jose Diaz-Gonzalez
953b6e0a16 Merge pull request #8671 from dokku/fix-k3s-traefik
Qualify scheduler-k3s ingressroute kubectl lookups
2026-05-25 02:07:24 -04:00
Jose Diaz-Gonzalez
c3a30a8879 test: qualify scheduler-k3s ingressroute kubectl lookups
The Traefik 26.0.0 chart registers CRDs under both `traefik.containo.us` and `traefik.io`, so a bare `kubectl get ingressroute` resolves against the legacy group where no resources exist and returns NotFound. Querying `ingressroutes.traefik.io` targets the group Dokku's chart actually writes to.
2026-05-25 01:08:12 -04:00