#!/usr/bin/env bash

# This script sequentially executes all shell scripts matching
# /etc/backups/*.backup.sh, with environment variables configured to publish
# backups to the local Restic REST server.

# Get passed along to subcalls to bash
export RESTIC_REPOSITORY='rest:http://{{ groups['nas'][0] }}:8000/backups'
export RESTIC_PASSWORD_FILE='/etc/backups/restic_backups_passwd'

log_file='/tmp/backup-all.sh.log'

rm -f "$log_file"

for script in $(find /etc/backups -name '*.backup.sh'); do
    T="$(date +%s)"

    /usr/bin/bash "$script"

    res="$?"
    T="$(($(date +%s)-T))"

    if [[ $res == 0 ]]; then
        header='OK'
    else
        header="FAIL ($res)"
    fi

    printf \
        "%s: %s in %02dh%02dm%02ds\n" \
        "$(basename "$script")" "$header" \
        "$((T/3600%24))" "$((T/60%60))" "$((T%60))" \
        >> "$log_file"
done

# Prune older backups
/usr/local/bin/restic forget --keep-last 7 && \
    /usr/local/bin/restic prune

# Send status notification
ntfy publish \
    --title "Backups ($(hostname))" \
    homelab "$(cat "$log_file")"
