From c14bc08deb8ab9dbc65e076a6e46e7f781992413 Mon Sep 17 00:00:00 2001 From: fruchti Date: Mon, 27 Nov 2023 10:59:54 +0100 Subject: [PATCH] Auto-upgrade: Abort on failure --- options/auto-upgrade.nix | 76 ++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/options/auto-upgrade.nix b/options/auto-upgrade.nix index f365c9e..0809236 100644 --- a/options/auto-upgrade.nix +++ b/options/auto-upgrade.nix @@ -118,36 +118,35 @@ in send_email=yes email_subject="Upgrade failed (exit code $exit_code)" email_body="The system upgrade started at $start_time has failed with exit code $exit_code." - fi + else + echo "→ Determining package differences." | tee -a "$output_file" + installed_packages() + { + ${nix-store} --query --requisites "$1" | cut -d- -f2- | sort | uniq + } + current_packages="$(installed_packages /run/current-system)" + built_packages="$(installed_packages /nix/var/nix/profiles/system)" + ${diff} -y --suppress-common-lines --width=71 \ + <(printf "Current generation\n------------------\n%s" "$current_packages") \ + <(printf "New generation\n--------------\n%s" "$built_packages") \ + | tee -a "$output_file" || true - echo "→ Determining package differences." | tee -a "$output_file" - installed_packages() - { - ${nix-store} --query --requisites "$1" | cut -d- -f2- | sort | uniq - } - current_packages="$(installed_packages /run/current-system)" - built_packages="$(installed_packages /nix/var/nix/profiles/system)" - ${diff} -y --suppress-common-lines --width=71 \ - <(printf "Current generation\n------------------\n%s" "$current_packages") \ - <(printf "New generation\n--------------\n%s" "$built_packages") \ - | tee -a "$output_file" || true + booted_version="$(readlink /run/booted-system/{initrd,kernel,kernel-modules})" + built_version="$(readlink /nix/var/nix/profiles/system/{initrd,kernel,kernel-modules})" - booted_version="$(readlink /run/booted-system/{initrd,kernel,kernel-modules})" - built_version="$(readlink /nix/var/nix/profiles/system/{initrd,kernel,kernel-modules})" - - echo "→ Checking if a reboot is needed." | tee -a "$output_file" - if [ "$booted_version" != "$built_version" ] ; then - version_comparison="$(cat <<-EOF + echo "→ Checking if a reboot is needed." | tee -a "$output_file" + if [ "$booted_version" != "$built_version" ] ; then + version_comparison="$(cat <<-EOF The booted kernel version $(indent "$booted_version") does not match the newly built $(indent "$built_version") . EOF - )" - echo "$version_comparison" - send_email=yes - email_body="$(cat <<-EOF + )" + echo "$version_comparison" + send_email=yes + email_body="$(cat <<-EOF $email_body @@ -155,25 +154,26 @@ in ------------------------------ $version_comparison EOF - )" - activate_configuration="no" - if [ "$reboot_allowed" = "yes" ] && [ $exit_code -eq 0 ] ; then - email_body="$(printf "%s\n%s" "$email_body" "The system will reboot now.")" - do_reboot="yes" - activate_configuration="yes" - email_subject_additions="$email_subject_additions, system will reboot" - else - email_body="$(printf "%s\n%s" "$email_body" "The upgraded configuration will be activated on the next reboot.")" - email_subject_additions="$email_subject_additions, reboot required" + )" + activate_configuration="no" + if [ "$reboot_allowed" = "yes" ] && [ $exit_code -eq 0 ] ; then + email_body="$(printf "%s\n%s" "$email_body" "The system will reboot now.")" + do_reboot="yes" + activate_configuration="yes" + email_subject_additions="$email_subject_additions, system will reboot" + else + email_body="$(printf "%s\n%s" "$email_body" "The upgraded configuration will be activated on the next reboot.")" + email_subject_additions="$email_subject_additions, reboot required" + fi fi - fi - ${optionalString (cfg.operation == "switch") '' - if [ "$activate_configuration" = "yes" ] ; then - echo "→ Activating new configuration." | tee -a "$output_file" - ${nixos-rebuild} switch ${toString cfg.flags} 2>&1 | tee -a "$output_file" || exit_code=$? + ${optionalString (cfg.operation == "switch") '' + if [ "$activate_configuration" = "yes" ] ; then + echo "→ Activating new configuration." | tee -a "$output_file" + ${nixos-rebuild} switch ${toString cfg.flags} 2>&1 | tee -a "$output_file" || exit_code=$? + fi + ''} fi - ''} upgrade_output="$(cat "$output_file")" rm -f "$output_file"