cmd-git-sync calls dokku_setup_build_capture before the clone/fetch, because it cannot know whether there is anything to deploy until it has fetched. Both paths that then decline to build - a plain `git:sync` with no build flag, and a `--build-if-changes` poll that finds the remote unchanged - returned without ever finalizing that record. The record stayed at status=running forever, which has three consequences on an app polled on a timer: - PruneAppBuilds only runs from builds-record-finalize, so nothing prunes the ticks while the app is idle; they accumulate without bound, invisibly, because builds:list caps output at the retention count. - The next real deploy's ReapAbandonedBuilds finalizes each of them as status=failed, exit_code=-1, with finished_at stamped at the moment of reaping - indistinguishable on disk from a build that really failed, and with a duration that grew to the polling interval. - That same deploy's prune then keeps the newest records by started_at, which after an idle stretch are the ticks, deleting the last real deploy's record and log. Add a builds-record-discard trigger that removes a non-terminal record and its log, and call it from both no-op paths in cmd-git-sync. The trigger leaves missing and already-terminal records alone, so it can never delete real history. Fixes #9030 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Dokku
Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen.
Sponsors
Become a sponsor and get your logo on our README on GitHub with a link to your site. [Become a sponsor]
Backers
Support us with a monthly donation and help us continue our activities. [Become a backer]
Requirements
A fresh VM running any of the following operating systems:
- Ubuntu 22.04 / 24.04 (amd64/arm64) - Any currently supported release
- Debian 11+ (amd64/arm64)
An SSH keypair that can be used for application deployment. If this exists before installation, it will be automatically imported into dokku.
Otherwise, you will need to import the keypair manually after installation using dokku ssh-keys:add.
Installation
To install the latest stable release, run the following commands as a user who has access to sudo:
wget -NP . https://dokku.com/install/v0.38.27/bootstrap.sh
sudo DOKKU_TAG=v0.38.27 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.
If you wish for a more unattended installation method, see these docs.
Upgrade
View the docs for upgrading from an older version of Dokku.
Documentation
Full documentation - including advanced installation docs - are available online at https://dokku.com/docs/getting-started/installation/.
Support
You can use GitHub Issues, check Troubleshooting in the documentation, or join us on Gliderlabs Slack in the #dokku channel.
Contribution
After checking GitHub Issues, the Troubleshooting Guide or having a chat with us on Gliderlabs Slack in the #dokku channel, feel free to fork and create a Pull Request.
While we may not merge your PR as is, they serve to start conversations and improve the general Dokku experience for all users.
License
MIT License © Jeff Lindsay