Commit Graph

4592 Commits

Author SHA1 Message Date
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
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
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
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
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
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
34c336c668 feat: add post-create support for env key in app.json
Closes #4498
2026-04-26 22:43:32 -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
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
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
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
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
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
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
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
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
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]
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
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
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
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
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