Skip to content

Instantly share code, notes, and snippets.

@tshabatyn
Forked from Pierstoval/confirm.Makefile
Created February 3, 2023 16:37
Show Gist options
  • Save tshabatyn/9bb3b1b22a1419c560076777cb52e75a to your computer and use it in GitHub Desktop.
Save tshabatyn/9bb3b1b22a1419c560076777cb52e75a to your computer and use it in GitHub Desktop.
"confirm" action for your Makefile
# To use the "confirm" target inside another target,
# use the " if $(MAKE) -s confirm ; " syntax.
mycommand:
@if $(MAKE) -s confirm ; then \
execute_your_command_here ; \
fi
.PHONY: mycommand
# The CI environment variable can be set to a non-empty string,
# it'll bypass this command that will "return true", as a "yes" answer.
confirm:
@if [[ -z "$(CI)" ]]; then \
REPLY="" ; \
read -p "⚠ Are you sure? [y/n] > " -r ; \
if [[ ! $$REPLY =~ ^[Yy]$$ ]]; then \
printf $(_ERROR) "KO" "Stopping" ; \
exit 1 ; \
else \
printf $(_TITLE) "OK" "Continuing" ; \
exit 0; \
fi \
fi
.PHONY: confirm
_WARN := "\033[33m[%s]\033[0m %s\n" # Yellow text for "printf"
_TITLE := "\033[32m[%s]\033[0m %s\n" # Green text for "printf"
_ERROR := "\033[31m[%s]\033[0m %s\n" # Red text for "printf"
# Notes:
#
# As we're using an "if" statement,
# we need to use ";" and "\" at the end of lines,
# else make would consider each line to be a separate command to call,
# which doesn't work.
# Using ";" and "\" at the end of lines helps make
# interpret this "if" as one single statement/command.
#
# You can replace ";" with "&&" if you need to stop the
# execution process before running next commands.
#
#
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment