1+ override SHELL := bash
2+ override APP_NAME := marble_client
3+ override APP_VERSION := 1.1.1
14
2- upgrade-build-packages :
5+ # utility to remove comments after value of an option variable
6+ override clean_opt = $(shell echo "$(1 ) " | $(_SED ) -r -e "s/[ '$'\t'']+$$//g")
7+
8+ override _SED := sed
9+ override OS_NAME := $(uname )
10+ ifeq ($(OS_NAME ) ,Darwin)
11+ override _SED := gsed
12+ endif
13+
14+ # color codes and utility shortcuts
15+ COLOR ?= 1 # # Enable or disable use of colors in outputs (eg: 'COLOR=0' will disable them)
16+ COLOR := $(call clean_opt,$(COLOR ) )
17+ override ECHO := echo
18+ # all colors are undefined by default
19+ # only define items that have actual text on top of colors
20+ override _ERROR := "ERROR: "
21+ override _WARN := "WARN: "
22+ override _INFO := "INFO: "
23+ override _DEBUG := "DEBUG: "
24+ override _MAKE := "make"
25+ override _CONDA := "conda"
26+ override _NA := "\<n/a\>"
27+ ifneq ("$(COLOR ) ", "0")
28+ # must make sure that interpretation of backslash escapes is enabled (not default for all terminals)
29+ # must use the full path otherwise make confuses it with its own echo command
30+ # reference: https://misc.flogisoft.com/bash/tip_colors_and_formatting
31+ override ECHO := /bin/echo
32+ override _ESC := $(shell printf '\033')
33+ override _NORMAL := $(_ESC ) [0m
34+ override _RED := $(_ESC ) [31m
35+ override _GREEN := $(_ESC ) [32m
36+ override _YELLOW := $(_ESC ) [33m
37+ override _BLUE := $(_ESC ) [34m
38+ override _MAGENTA := $(_ESC ) [35m
39+ override _CYAN := $(_ESC ) [36m
40+ override _DARK_GRAY := $(_ESC ) [90m
41+ override _LIGHT_CYAN := $(_ESC ) [96m
42+ override _BG_GRAY := $(_ESC ) [100m
43+ override _BG_DARK_RED := $(_ESC ) [48;5;52m
44+ override _BG_PURPLE := $(_ESC ) [48;5;55m
45+ override _BG_LIGHT_PURPLE := $(_ESC ) [48;5;60m
46+ override _ORANGE := $(_ESC ) [38;5;166m
47+ override _LIGHT_ORANGE := $(_ESC ) [38;5;214m
48+ # concepts
49+ override _ERROR := "$(_RED )$(_ERROR )$(_NORMAL ) "
50+ override _WARN := "$(_YELLOW )$(_WARN )$(_NORMAL ) "
51+ override _INFO := "$(_BLUE )$(_INFO )$(_NORMAL ) "
52+ override _DEBUG := "$(_DARK_GRAY )$(_DEBUG )$(_NORMAL ) "
53+ override _CMD := $(_ORANGE )
54+ override _MAKE := $(_CMD )$(_MAKE )$(_NORMAL )
55+ override _CONDA := $(_CMD )$(_CONDA )$(_NORMAL )
56+ override _NA := $(_YELLOW )$(_NA )$(_NORMAL )
57+ override _FILE := $(_LIGHT_CYAN )
58+ override _HEADER := $(_BG_DARK_RED )
59+ override _EXTENSION := $(_LIGHT_CYAN )
60+ override _UNKNOWN := $(_LIGHT_ORANGE )
61+ override _SECTION := $(_BG_GRAY )
62+ override _TARGET := $(_CYAN )
63+ override _OPTION := $(_MAGENTA )
64+ override _CONFIG := $(_GREEN )
65+ endif
66+ override MSG_D := $(ECHO ) $(_DEBUG )
67+ override MSG_I := $(ECHO ) $(_INFO )
68+ override MSG_W := $(ECHO ) $(_WARN )
69+ override MSG_E := $(ECHO ) $(_ERROR )
70+
71+ override TARGET_SIZE := 16
72+ override OPTION_SIZE = 16
73+ override OPTION_OFFSET = $(shell echo $$(($(OPTION_SIZE ) + 3 ) ) )
74+
75+
76+ # ## Information Targets ###
77+
78+ .DEFAULT_GOAL := help
79+
80+ .PHONY : help
81+ help : # # Display usage message
82+ @-$(ECHO ) " $( _HEADER) === Makefile Help ===$( _NORMAL) "
83+ @-$(MSG_I ) " For available target commands, call the following:"
84+ @-$(ECHO ) " $( _MAKE) $( _TARGET) targets$( _NORMAL) "
85+ @-$(MSG_I ) " For available options, call the following:"
86+ @-$(ECHO ) " $( _MAKE) $( _OPTION) options$( _NORMAL) "
87+
88+ .PHONY : options
89+ options : # # Display configurable option details for execution of targets
90+ @$(ECHO ) " $( _HEADER) === Configurable Options [$( APP_NAME) ] ===$( _NORMAL) \n"
91+ @$(MSG_I ) " Use '$( _MAKE) $( _OPTION) OPTION$( _NORMAL) =<value> <$( _TARGET) target$( _NORMAL) >' \
92+ where < $(_OPTION ) OPTION$(_NORMAL ) > is one amongst below choices:\n "
93+ @grep -E ' ^\s*[a-zA-Z0-9_]+\s+\?\=.*$$' Makefile \
94+ | $(_SED ) -r -e ' s/\s*(.*)\s*\?\=[\s\t]*([^#]*[^#\s\t]+)?[\s\t]*(##\s+(.*))*$$/\1!!!\2!!!\3!!!\4/g' \
95+ | awk ' BEGIN {FS = "!!!"}; { \
96+ printf " $( _TARGET) %-$( OPTION_SIZE) s$( _NORMAL) %s%-$( OPTION_OFFSET) s[default:%s]\n" , $$ 1, $$ 4, " \n" , $$ 2 \
97+ }'
98+
99+ .PHONY : targets
100+ targets : # # Display available targets and descriptions
101+ @$(ECHO ) " $( _HEADER) === Makefile Targets [$( APP_NAME) ] ===$( _NORMAL) "
102+ @grep -v -E ' .*(\?|\:\=).*$$' Makefile | grep -E ' \#\#.*$$' \
103+ | $(_SED ) -r -e ' s/([\sA-Za-z0-9\_\-]+)\:[\sA-Za-z0-9\_\-\.]+\s*\#{2,3}\s*(.*)\s*$$/\1!!!\2/g' \
104+ | awk ' BEGIN {FS = "(:|###)+.*?## "}; \
105+ /\#\#\# / {printf " $( _SECTION) %s$( _NORMAL) \n" , $$ 1; } \
106+ /:/ {printf " $( _TARGET) %-$( TARGET_SIZE) s$( _NORMAL) %s\n" , $$ 1, $$ 2; } \
107+ '
108+ @$(ECHO ) " "
109+
110+
111+ # ## Versioning Targets ###
112+
113+ # Bumpversion 'dry' config
114+ # if 'dry' is specified as target, any bumpversion call using 'BUMP_XARGS' will not apply changes
115+ BUMP_XARGS ?= --verbose --allow-dirty # # Extra arguments to pass down to version control utility
116+ BUMP_XARGS := $(call clean_opt,$(BUMP_XARGS ) )
117+ ifeq ($(filter dry, $(MAKECMDGOALS ) ) , dry)
118+ BUMP_XARGS := $(BUMP_XARGS ) --dry-run
119+ endif
120+ BUMP_CFG ?= .bumpversion.cfg # # Bump version configuration (default recommended)
121+ BUMP_CFG := $(call clean_opt,$(BUMP_CFG ) )
122+ BUMP_TOOL := bump2version
123+ BUMP_CMD := $(BUMP_TOOL ) --config-file "$(BUMP_CFG ) "
124+
125+ # guess the applicable semantic level update if provided via major|minor|patch targets
126+ # perform validation to avoid many combination provided simultaneously
127+ override BUMP_VERSION_INPUT := 1
128+ override BUMP_VERSION_LEVEL :=
129+ ifeq ($(filter major, $(MAKECMDGOALS ) ) , major)
130+ ifeq ($(BUMP_VERSION_LEVEL),)
131+ override BUMP_VERSION_LEVEL := major
132+ override BUMP_VERSION_INPUT := 0
133+ else
134+ $(error "Cannot combine 'major|minor|patch' simultaneously!")
135+ endif
136+ endif
137+ ifeq ($(filter minor, $(MAKECMDGOALS ) ) , minor)
138+ ifeq ($(BUMP_VERSION_LEVEL),)
139+ override BUMP_VERSION_LEVEL := minor
140+ override BUMP_VERSION_INPUT := 0
141+ else
142+ $(error "Cannot combine 'major|minor|patch' simultaneously!")
143+ endif
144+ endif
145+ ifeq ($(filter patch, $(MAKECMDGOALS ) ) , patch)
146+ ifeq ($(BUMP_VERSION_LEVEL),)
147+ override BUMP_VERSION_LEVEL := patch
148+ override BUMP_VERSION_INPUT := 0
149+ else
150+ $(error "Cannot combine 'major|minor|patch' simultaneously!")
151+ endif
152+ endif
153+ ifneq ($(VERSION ) ,)
154+ ifneq ($(BUMP_VERSION_LEVEL),)
155+ $(error "Cannot combine 'major|minor|patch' simultaneously with explicit VERSION input!")
156+ endif
157+ endif
158+ # when none was provided, use patch to directly apply the explicit 'VERSION' specified as input
159+ ifeq ($(BUMP_VERSION_LEVEL ) ,)
160+ override BUMP_VERSION_LEVEL := --new-version "$(VERSION ) " patch
161+ endif
162+
163+ .PHONY : dry
164+ dry : $(BUMP_CFG )
165+ @-$(ECHO ) > /dev/null
166+
167+ .PHONY : patch
168+ patch : $(BUMP_CFG )
169+ @-$(ECHO ) > /dev/null
170+
171+ .PHONY : minor
172+ minor : $(BUMP_CFG )
173+ @-$(ECHO ) > /dev/null
174+
175+ .PHONY : major
176+ major : $(BUMP_CFG )
177+ @-$(ECHO ) > /dev/null
178+
179+
180+ # run bumpversion with replacement of the release time value within its config for auto-update on future revisions
181+ .PHONY : bump
182+ bump : bump-check bump-install # # Bump version (call: make bump major|minor|patch)
183+ @-$(MSG_I ) " Updating package version..."
184+ @[ $( BUMP_VERSION_INPUT) -eq 0 ] || [ " ${VERSION} " ] || ( \
185+ $(MSG_E ) " Argument 'VERSION' is not specified to bump version" ; exit 1 \
186+ )
187+ @$(SHELL ) -c ' \
188+ PRE_RELEASE_TIME=$$(head -n 1 RELEASE.txt | cut -d " " -f 2 ) && \
189+ $(BUMP_CMD ) $(BUMP_XARGS ) $(BUMP_VERSION_LEVEL ) && \
190+ POST_RELEASE_TIME=$$(head -n 1 RELEASE.txt | cut -d " " -f 2 ) && \
191+ echo " Replace $$ {PRE_RELEASE_TIME} → $$ {POST_RELEASE_TIME}" && \
192+ $(_SED ) -i " s/$$ {PRE_RELEASE_TIME}/$$ {POST_RELEASE_TIME}/g" $(BUMP_CFG ) && \
193+ git add $(BUMP_CFG ) && \
194+ git commit --amend --no-edit \
195+ '
196+
197+ .PHONY : bump-install
198+ bump-install : # # Installs bump2version if not detected in the environment
199+ @-$(SHELL ) -c ' which "$(BUMP_TOOL)" &> /dev/null || pip install $(BUMP_TOOL)'
200+
201+ .PHONY : bump-check
202+ bump-check : # # Verifies that required bump2version configuration file is present
203+ @[ -f " $( BUMP_CFG) " ] || ( \
204+ $(MSG_E ) " Missing required file [$( BUMP_CFG) ]. Create a $( BUMP_CFG) file first." ; \
205+ exit 1 \
206+ );
207+
208+
209+ # ## Development Targets ###
210+
211+ upgrade-build-packages : # # Installs build tools
3212 pip install --upgrade build
4213 pip install --upgrade twine
5214
6- build : upgrade-build-packages
215+ build : upgrade-build-packages # # Build the distribution
7216 python -m build
8217
9- upload :
218+ upload : build # # Upload the built distribution to PyPI
10219 twine upload dist/*
11220
12- test-upload :
13- twine upload --repository testpypi dist/*
221+ test-upload : build # # Upload the built distribution to the test PyPI
222+ twine upload --repository testpypi dist/*
0 commit comments