Fail loudly when a pre-update snapshot isn't actually created (#6580)
* Fail the snapshot when Snapper is installed but has no configs omarchy-snapshot create loops over the configs snapper reports. With none, the loop body never runs, so it prints "Create system snapshot" and exits 0 without capturing anything. Every update then reports a snapshot it never took, and the absence only surfaces when a rollback is needed and the snapshot list turns out to be empty. * Say so when the update proceeds without a snapshot The update ignores exit 127 so a system without snapper updates quietly. Any other snapshot failure was being swallowed by the same expression, which let the update continue with no indication that it was now unprotected. Keep continuing, but say it out loud. * Point the snapshot repair hint at how the installer runs it Also hold the green header until a snapshot will actually be attempted, so the no-config failure doesn't open with a success banner. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Continue the quattro upgrade when the pre-upgrade snapshot fails The upgrade runs under set -e, so the new non-zero exit from an unconfigured Snapper would have aborted a re-run at the snapshot step instead of proceeding like omarchy-update does. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: David Heinemeier Hansson <david@hey.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
David Heinemeier Hansson
parent
9d5c6e25e7
commit
3bfea9b840
+11
-2
@@ -22,11 +22,20 @@ create)
|
||||
# The description is just a label, so never let it abort the snapshot.
|
||||
DESC="$(omarchy-version 2>/dev/null || echo unknown)"
|
||||
|
||||
echo -e "\e[32mCreate system snapshot\e[0m"
|
||||
|
||||
# Get existing snapper config names from CSV output
|
||||
mapfile -t CONFIGS < <(sudo snapper --csvout list-configs | awk -F, 'NR>1 {print $1}')
|
||||
|
||||
# Snapper installed but unconfigured snapshots nothing. Staying quiet here
|
||||
# reads as a successful snapshot, so the next update looks recoverable when
|
||||
# nothing has ever been captured.
|
||||
if (( ${#CONFIGS[@]} == 0 )); then
|
||||
echo -e "\e[33mNo Snapper configs found, so no snapshot was created.\e[0m" >&2
|
||||
echo "Configure Snapper with: sudo bash -euo pipefail \"$OMARCHY_PATH/install/config/snapper.sh\"" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "\e[32mCreate system snapshot\e[0m"
|
||||
|
||||
for config in "${CONFIGS[@]}"; do
|
||||
sudo snapper -c "$config" create -c number -d "$DESC"
|
||||
sudo snapper -c "$config" cleanup number
|
||||
|
||||
+5
-1
@@ -22,7 +22,11 @@ trap 'omarchy-update-stay-awake stop' EXIT
|
||||
omarchy-update-requires-free-space
|
||||
|
||||
if [[ ${1:-} == "-y" ]] || omarchy-update-confirm; then
|
||||
omarchy-snapshot create || (($? == 127))
|
||||
# 127 means Snapper is deliberately absent. Any other failure already said
|
||||
# what went wrong, and a missing snapshot is not worth blocking an update
|
||||
# over, but it must not pass for one either.
|
||||
omarchy-snapshot create || (($? == 127)) ||
|
||||
echo -e "\e[33mContinuing the update without a snapshot.\e[0m" >&2
|
||||
|
||||
omarchy-update-stay-awake start
|
||||
|
||||
|
||||
@@ -610,7 +610,11 @@ configure_lock_authentication() {
|
||||
}
|
||||
|
||||
create_pre_upgrade_snapshot() {
|
||||
omarchy-snapshot create || (($? == 127))
|
||||
# 127 means Snapper is deliberately absent. Any other failure already said
|
||||
# what went wrong, and a missing snapshot is not worth blocking the upgrade
|
||||
# over, but it must not pass for one either.
|
||||
omarchy-snapshot create || (($? == 127)) ||
|
||||
echo -e "\e[33mContinuing the upgrade without a snapshot.\e[0m" >&2
|
||||
}
|
||||
|
||||
remove_conflicting_legacy_packages() {
|
||||
|
||||
Reference in New Issue
Block a user