kindwolf.org Git repositories moulti / master examples / upgrade-system.bash
master

Tree @master (Download .tar.gz)

upgrade-system.bash @masterraw · history · blame

#!/usr/bin/env bash

export TERM=xterm-256color
[ "${MOULTI_RUN}" ] || exec moulti run -- "$0" "$@"

# We could use apt-get BUT there is no equivalent to apt list --upgradable.
function apt {
	local rc
	command apt "$@" 2>&1 | grep --line-buffered -vP '^(?:WARNING: apt does not have a stable CLI|$)' || true
	rc="${PIPESTATUS[0]}"
	return $rc
}

source moulti-functions.bash

export DEBIAN_FRONTEND=noninteractive
set -e
moulti wait --max-attempts=120
moulti_type set --title 'Moulti demo: Debian upgrade'
sleep 0.5

STEP_COLLAPSE_ON_SUCCESS=
STEP_ID=apt_update moulti_exec apt update

# Display the list of upgradable packages:
STEP_ID=apt_list   moulti_exec apt list --upgradable

# Get user confirmation:
moulti buttonquestion add confirmation --bottom-text=' ' \
	--title='Proceed with system upgrade?' \
	--button yes success 'Yes, upgrade' \
	--button no  error   'No, abort'
answer=$(moulti buttonquestion get-answer confirmation --wait)

# Stop there unless we explicitly get the green light:
if [ "${answer}" != 'yes' ]; then
	moulti buttonquestion update confirmation --bottom-text='Upgrade aborted.'
	exit 1
fi

# We got the greenlight: reflect it on the question itself and (slowly) collapse all previous steps:
moulti buttonquestion update confirmation --class=success
sleep 0.3
moulti step update apt_update --collapsed
sleep 0.3
moulti step update apt_list   --collapsed
sleep 0.3
moulti buttonquestion update confirmation --collapsed

# Finally proceed with the upgrade itself:
STEP_COLLAPSE_ON_SUCCESS=2 moulti_exec apt full-upgrade -y
STEP_COLLAPSE_ON_SUCCESS=1
moulti_exec apt autoremove --purge
moulti_exec apt clean