Skip to content

wback 7.3.0

Choose a tag to compare

@simonhampel simonhampel released this 23 Aug 03:15
· 19 commits to master since this release

[7.3.0] - 2026-08-23

Added

  • A run summary: one Slack message per cron run, saying what the run did — sites,
    backups, bytes written, how long it took, which stages ran, and any failures
    named by site and stage. Set BACKUP_SUMMARY_SLACK_WEBHOOK, and
    BACKUP_SUMMARY_NOTIFY=failure if only the bad nights are wanted. This is what
    a log channel structurally cannot do: logging posts a record at a time, so it
    can only ever report trouble, and a run where nothing fails is silent in exactly
    the way an uninstalled cron entry is. The log channel stays as the backstop.
  • A run that finished in under a second reports <1s rather than 0s, which read
    as a duration nobody measured.
  • A run blocked by the lock reports too — Backup did not run, naming the holder
    — which used to leave nothing behind but a single log line.
  • app:validate posts a test message to the summary webhook and fails if Slack
    refuses it. A mistyped or revoked webhook is otherwise invisible until it
    matters.
  • app:config reports the summary settings and whether the log channel's Slack
    webhook is set. Both webhooks are reported as set or not set, never printed.
  • Every log record is stamped with the machine it came from, so one Slack webhook
    can serve a whole fleet instead of one per installation to tell the alerts
    apart. LOG_HOSTNAME sets the label and defaults to the system hostname; an
    empty value turns the stamp off. LOG_SLACK_USERNAME defaults to it too.
  • app:config and app:validate report the hostname label.

Changed

  • The "Backup written" log entry carries the size twice: bytes as before, and
    size rounded and with a unit, so a log can be read without converting the
    large numbers by hand.
  • A failed site is logged with the site, domain and stage as context, where it
    used to be the exception message alone — a failed process says which command it
    was but nothing about whose backup it belonged to.
  • app:config and app:validate draw their output with
    hampel/console-report rather than
    with private copies of the same renderers. The output is unchanged, byte for
    byte, apart from the last two fixes below. The minimum is ^2.0, whose only
    break is that the renderers are handed the command's output rather than calling
    back into it — which is what lets the same package serve consoles that are not
    Laravel.

Fixed

  • app:config no longer reports an environment file it never opened. With no
    .env in any of the places wback looks, it used to print the framework's guess
    — which inside a built binary is a phar:// path into the read-only archive,
    indistinguishable from a real answer on the one line an operator reads first
    when a setting is not taking effect. It now names the file it actually read, or
    says none found and lists where it looked.
  • A command name wback does not recognise is now an error that exits non-zero and
    suggests the nearest match. Laravel Zero proxies an unrecognised name to the
    default command, so wback app:validte printed the command list and exited 0 —
    which reads as a passing check to cron, to a deploy script, and to anything else
    that gates on app:validate.
  • app:config printed every path with the project directory silently removed —
    the environment file as .env, the backup destination as storage/backup
    because Laravel's two-column component runs its values through a mutator that
    strips base_path() and cannot be turned off. The rows are rendered directly
    now, and a value too long for the line wraps rather than being truncated.
  • A relative path in app:config is reported along with the working directory it
    resolves against, and an unset remote as not set, rather than either passing
    for a setting that is in order.
  • Anything resembling a password in BACKUP_MYSQLDUMP_OPTIONS,
    BACKUP_CLOUD_OPTIONS or BACKUP_SYNC_OPTIONS is redacted from app:config,
    which is the output that gets pasted into support tickets. It covers the usual
    flag spellings; credentials still belong in a defaults file.
  • An empty BACKUP_SHELL — a legitimate setting, meaning "run pipelines under
    the system shell" — is reported as none by app:config. It used to render as
    a line of dots indistinguishable from a section heading.
  • A check row in app:validate with no detail no longer ends in trailing spaces.
  • app:config no longer reports a phar:// path as relative to the working
    directory. A stream wrapper URI locates a resource outright, so there is nothing
    for it to be relative to — and inside a built binary base_path() is one, which
    is where the environment file lands when none of the places wback looks for it
    has one. Fixed upstream in hampel/console-report 1.0.1, and carried forward
    unchanged in the 2.0 this now requires.

Documentation

  • What happens when cloud and sync share one rclone remote: the branches they
    write to, and the single case where a directory of your own in a site's backup
    root ends up inside the sync destination and is deleted by the next sync.
  • The run summary: how to read one, when it is sent, and what a run that never
    started looks like.
  • The installation instructions no longer name one particular release, and the
    checksum step now works. It downloaded the binary under a different name from
    the one SHA256SUMS lists, so sha256sum -c could not find the file it was
    meant to be checking — and it ran after the install rather than before it.

Upgrading

  • Nothing is required. Every change below is either invisible or opt-in.
  • To turn the run summary on, set BACKUP_SUMMARY_SLACK_WEBHOOK. It is off
    until you do, and the slack log channel is unaffected either way — the two
    are complementary, and config/backup.php says why.
  • app:validate now posts. It writes a message at every log level and, if a
    summary webhook is configured, sends a test message to it. That is deliberate —
    a revoked webhook is otherwise invisible from the sending end — but it means
    running it puts messages in whatever channel this installation reports to.
  • A mistyped command now fails. wback app:validte used to print the command
    list and exit 0. Anything that gates on an exit code will start seeing a typo it
    had been passing.