← all releases

v1.9.0

latest on GitHub

Release notes

Added

  • runwisp reload on a RunWisp an SDK app started asks the app to read its tasks again, so a deploy reaches the schedule without restarting the worker. The PHP SDK adds runwisp:reload for Laravel, Symfony and CodeIgniter (php runwisp.php reload for a plain script); a deploy that broke the app fails the reload with PHP’s error and keeps the running schedule.
  • runwisp:work and runwisp:check in Laravel warn when a crontab still runs schedule:run or schedule:work, since that runs every scheduled task twice.
  • [daemon] api_tokens and viewer_api_tokens accept static bearer tokens for the REST API, full and read-only, so scripts and monitoring can call it without logging in. A reload applies changes.

Changed

  • A Laravel schedule entry whose description() is a sentence is now named after its command or job and keeps the sentence as its task description. Tasks that were named from such a description get new names, so their run history starts fresh.
  • runwisp status, password, reload and the other commands that talk to a daemon find an SDK app’s daemon from the app’s root, in storage/runwisp, var/runwisp or writable/runwisp, without --data.
  • When an app supplies the config, runwisp list shows the app’s tasks, runwisp validate points to the app’s own check command, and the TUI points to runwisp status for config warnings instead of runwisp validate.
  • The same-second warning lists at most 5 task names, and for SDK tasks says to set jitter in each task’s options.
  • The PHP and JavaScript SDKs note “(listening on all interfaces)” in the dashboard line when the host is 0.0.0.0 or ::, and runwisp:check prints warnings after the task list.
  • runwisp import cron names a PHP framework line such as php artisan payments:reconcile after its subcommand (payments-reconcile) instead of php, and turns a leading cd DIR && into the task’s working_dir.

Fixed

  • Runs that Laravel skips (when(), skip(), between(), maintenance mode, withoutOverlapping()) are recorded as skipped, not succeeded.
  • config/runwisp.php reads RUNWISP_* through env(), so the settings still apply after php artisan config:cache. If you published it before, republish it or wrap its values in env() the same way.
  • The JavaScript SDK reports a daemon that resets the connection mid-answer as “RunWisp hung up during …”, not a bare read ECONNRESET.
  • The PHP SDK reports a daemon that stops mid-answer as “RunWisp hung up during …”, instead of taking the cut-off body as the answer.
  • A command run as a user that cannot open the daemon’s socket says the daemon belongs to another user and names sudo -u <owner> runwisp ..., instead of suggesting you start a second daemon.
  • runwisp status words the changed-config notice as an included or env file when an app supplies the config, since there is no runwisp.toml.
  • runwisp takeover --dry-run run from a binary under /tmp prints the whole plan and lists the binary path as the blocker, instead of stopping before the plan. It still exits non-zero.
  • On macOS, runwisp service install refuses a binary or data directory under /tmp or /var/tmp like it does on Linux, also when the path resolves to /private/tmp.
  • runwisp service uninstall removes the password and environment drop-ins it saved beside the systemd unit, and prints the config and data paths it leaves in place.
All releases