Auto-upgrade: Abort on failure

This commit is contained in:
fruchti 2023-11-27 10:59:54 +01:00
parent 8a29fc400b
commit c14bc08deb

View file

@ -118,36 +118,35 @@ in
send_email=yes send_email=yes
email_subject="Upgrade failed (exit code $exit_code)" email_subject="Upgrade failed (exit code $exit_code)"
email_body="The system upgrade started at $start_time has failed with 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" booted_version="$(readlink /run/booted-system/{initrd,kernel,kernel-modules})"
installed_packages() built_version="$(readlink /nix/var/nix/profiles/system/{initrd,kernel,kernel-modules})"
{
${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})" echo " Checking if a reboot is needed." | tee -a "$output_file"
built_version="$(readlink /nix/var/nix/profiles/system/{initrd,kernel,kernel-modules})" 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 The booted kernel version
$(indent "$booted_version") $(indent "$booted_version")
does not match the newly built does not match the newly built
$(indent "$built_version") $(indent "$built_version")
. .
EOF EOF
)" )"
echo "$version_comparison" echo "$version_comparison"
send_email=yes send_email=yes
email_body="$(cat <<-EOF email_body="$(cat <<-EOF
$email_body $email_body
@ -155,25 +154,26 @@ in
------------------------------ ------------------------------
$version_comparison $version_comparison
EOF EOF
)" )"
activate_configuration="no" activate_configuration="no"
if [ "$reboot_allowed" = "yes" ] && [ $exit_code -eq 0 ] ; then if [ "$reboot_allowed" = "yes" ] && [ $exit_code -eq 0 ] ; then
email_body="$(printf "%s\n%s" "$email_body" "The system will reboot now.")" email_body="$(printf "%s\n%s" "$email_body" "The system will reboot now.")"
do_reboot="yes" do_reboot="yes"
activate_configuration="yes" activate_configuration="yes"
email_subject_additions="$email_subject_additions, system will reboot" email_subject_additions="$email_subject_additions, system will reboot"
else else
email_body="$(printf "%s\n%s" "$email_body" "The upgraded configuration will be activated on the next reboot.")" 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" email_subject_additions="$email_subject_additions, reboot required"
fi
fi fi
fi
${optionalString (cfg.operation == "switch") '' ${optionalString (cfg.operation == "switch") ''
if [ "$activate_configuration" = "yes" ] ; then if [ "$activate_configuration" = "yes" ] ; then
echo " Activating new configuration." | tee -a "$output_file" echo " Activating new configuration." | tee -a "$output_file"
${nixos-rebuild} switch ${toString cfg.flags} 2>&1 | tee -a "$output_file" || exit_code=$? ${nixos-rebuild} switch ${toString cfg.flags} 2>&1 | tee -a "$output_file" || exit_code=$?
fi
''}
fi fi
''}
upgrade_output="$(cat "$output_file")" upgrade_output="$(cat "$output_file")"
rm -f "$output_file" rm -f "$output_file"