@@ -285,6 +285,12 @@ guard-%:
285285guard-optional-%:
286286 @:
287287
288+ guard-optional-bool-%:
289+ @if [ " ${${* } } " != " true" ] && [ " ${${* } } " != " false" ] && [ " ${${* } } " != " " ]; then \
290+ echo " Argument '${* } ' must be 'true', 'false', or empty" ; \
291+ exit 1; \
292+ fi ;
293+
288294# Gracefully use defaults and potentially overwrite them, via https://stackoverflow.com/a/49804748
289295%: %-default
290296 @ true
@@ -385,3 +391,27 @@ $(WAIT_FOR_IT): ## installs wait4x utility for WAIT_FOR_IT functionality
385391 @mv /tmp/wait4x/wait4x $@
386392 @rm -rf /tmp/wait4x
387393 @$@ version
394+
395+ # Arguments
396+ # 1 - message to show (e.g. Are you sure?)
397+ # 2 - input to confirm action (e.g. yes)
398+ # 3 - force confirm (e.g. true)
399+ #
400+ # Examples
401+ # $(call confirm_action) -- use with default messages
402+ # $(call confirm_action,Do you want to delete all files?) -- overwrite confirm message
403+ # $(call confirm_action,,,$(CI)) -- ignore in CI (CI := true)
404+ # echo before; $(call confirm_action); echo after -- chain in bash
405+ define confirm_action
406+ CONFIRM_MSG=" $( if $( 1) ,$( 1) ,Are you sure? ) " ; \
407+ CONFIRM_KEY=" $( if $( 2) ,$( 2) ,yes) " ; \
408+ SKIP_CHECK=" $( if $( 3) ,$( 3) ,false) " ; \
409+ if [ " $$ SKIP_CHECK" != true ]; then \
410+ echo " $$ CONFIRM_MSG" ; \
411+ read -p " Type '$$ CONFIRM_KEY' to confirm: " USER_INPUT; \
412+ if [ " $$ USER_INPUT" != " $$ CONFIRM_KEY" ]; then \
413+ echo " CONFIRM_KEY does not match. Aborted." ; \
414+ exit 1; \
415+ fi ; \
416+ fi
417+ endef
0 commit comments