task.mk/Makefile

124 lines
3.4 KiB
Makefile
Raw Normal View History

2022-09-05 12:23:17 -05:00
VERSION ?= $(shell git describe --tags --always --dirty | sed s'/dirty/dev/')
TEMPLATES := $(shell find src/ -type f)
.DEFAULT_GOAL := help
2022-09-13 18:51:01 -05:00
msgfmt = {a.style('==>','bold')} {a.style('$(1)','b_magenta')} {a.style('<==','bold')}
msg = $(call tprint,$(call msgfmt ,$(1)))
2022-09-05 12:23:17 -05:00
2022-09-14 12:09:01 -05:00
### task.mk development | args: -d -ms b_green --align center
## bootstrap | generate local dev environment
2022-09-05 12:23:17 -05:00
.PHONY: bootstrap
bootstrap:
2022-09-07 00:11:26 -05:00
$(call msg,Bootstrap Environment)
@mamba create -p ./env python jinja2 black -y
@mamba run -p ./env pip install yartsu
2022-09-07 15:48:46 -05:00
@git config core.hooksPath .githooks
2022-09-05 12:23:17 -05:00
## l, lint | lint the python
.PHONY: l lint
l lint:
$(call msg,Linting)
2022-09-05 12:23:17 -05:00
@black generate.py
@black src/*.py --fast
## assets | generate assets
.PHONY: assets
assets:
2022-09-14 00:03:29 -05:00
@yartsu -o assets/help.svg -t "make help" -- make --no-print-directory help
## release | release new version of task.mk
2022-09-05 12:23:17 -05:00
.PHONY: release
release: version-check
2022-09-07 00:11:26 -05:00
$(call msg,Release Project)
2022-09-12 00:16:25 -05:00
@./generate.py $(VERSION) > task.mk
2022-09-05 12:23:17 -05:00
@sed -i 's/task.mk\/.*\/task.mk/task.mk\/v$(VERSION)\/task.mk/g' README.md
@git add task.mk README.md
2022-09-07 15:48:46 -05:00
@git commit -m "release: v$(VERSION)" --no-verify
2022-09-07 00:15:21 -05:00
@git tag v$(VERSION)
2022-09-05 12:23:17 -05:00
## c, clean | remove the generated files
2022-09-05 12:23:17 -05:00
.PHONY: clean
c clean:
2022-09-05 12:23:17 -05:00
@rm -f task.mk .task.mk
2022-09-14 00:03:29 -05:00
2022-09-13 18:51:19 -05:00
### | args: --divider --whitespace
2022-09-14 12:09:01 -05:00
### examples of task.mk features | args: --divider --align center --msg-style b_red
define list_files_py
from pathlib import Path
print("files in $(2)")
print([f.name for f in (Path("$(2)").iterdir())])
endef
## list-% | use pathlib.Path to list files
### name the directory in rule (make list-src) | args: --align sep
list-%:
$(call py,list_files_py,$*)
2022-09-05 12:23:17 -05:00
.PHONY: version-check
version-check:
@if [[ "${VERSION}" == *'-'* ]]; then\
2022-09-14 16:53:14 -05:00
$(call tprint-sh,{a.red}VERSION INVALID! Uncommited or untagged work{a.end});\
2022-09-05 12:23:17 -05:00
echo ">> version: $(VERSION)"; exit 1;\
elif [[ $(shell echo "${VERSION}" | awk -F. '{ print NF }') -lt 3 ]];then\
$(call tprint-sh,{a.red}VERSION INVALID! Expected CalVer string{a.end});\
2022-09-05 12:23:17 -05:00
echo ">> version: $(VERSION)"; exit 1;\
else \
$(call tprint-sh,{a.green}VERSION LOOKS GOOD!{a.end});\
2022-09-05 12:23:17 -05:00
fi
define bash_script
2022-09-14 16:53:14 -05:00
figlet task.mk 2>/dev/null || echo 'no figlet :('
echo "This is from bash"
cat /etc/hostname
printf "%s\n" "$(2)"
endef
.PHONY: test-bash
test-bash:
2022-09-14 16:53:14 -05:00
$(call tbash,bash_script,bash multiline is probably working)
2022-09-07 00:11:26 -05:00
define mlmsg
{a.b_yellow}
It can even be multiline!{a.end}
2022-09-13 18:51:01 -05:00
{a.style('and styles can be defined','red')}
as python {a.bold}f-string{a.end} literals
{a.end}
2022-09-05 12:23:17 -05:00
endef
2022-09-05 20:20:10 -05:00
## info | demonstrate usage of tprint
2022-09-05 12:23:17 -05:00
.PHONY: task
info:
2022-09-12 00:16:25 -05:00
$(call msg,Info Message)
2022-09-05 23:48:32 -05:00
$(call tprint,{a.black_on_cyan}This is task-print output:{a.end})
2022-09-07 00:11:26 -05:00
$(call tprint,$(mlmsg))
$(call tprint,{a.custom(fg=(148, 255, 15),bg=(103, 2, 15))}Custom Colors TOO!{a.end})
2022-09-05 12:23:17 -05:00
2022-09-14 17:21:52 -05:00
## check | get user confirmation or exit
2022-09-14 16:53:14 -05:00
.PHONY: check
check:
$(call tconfirm,Would you like to proceed?)
@echo "you said yes!"
### | args: --divider
2022-09-07 15:48:46 -05:00
task.mk: $(TEMPLATES) generate.py
./generate.py $(VERSION) > task.mk
2022-09-05 12:23:17 -05:00
define USAGE
2022-09-16 13:26:31 -05:00
{a.$(HEADER_STYLE)}usage:{a.end}
2022-09-05 12:23:17 -05:00
make <recipe>
2022-09-13 18:51:01 -05:00
Turn your {a.style('`Makefile`','b_magenta')} into
the {a.italic}{a.underline}task runner{a.end} you always needed.
See the example output below.
2022-09-05 12:23:17 -05:00
endef
2022-09-07 16:24:20 -05:00
EPILOG = \nfor more info: github.com/daylinmorgan/task.mk
2022-09-05 12:23:17 -05:00
PRINT_VARS := VERSION
-include .task.mk
.task.mk: $(TEMPLATES) generate.py
$(call tprint,{a.b_yellow}re-jinjaing the local .task.mk{a.end})
2022-09-14 13:49:25 -05:00
@./generate.py $(VERSION) > .task.mk || (echo "generator failed!!" && rm .task.mk)