|
1 |
| -# https://github.com/aclark4life/makefile |
| 1 | +# Project Makefile |
| 2 | +# ================ |
2 | 3 | #
|
3 |
| -# The MIT License (MIT) |
| 4 | +# A generic makefile for projects |
4 | 5 | #
|
5 |
| -# Copyright (c) 2016–2021 Alex Clark |
| 6 | +# - https://github.com/project-makefile/project-makefile |
| 7 | +# |
| 8 | +# |
| 9 | +# License |
| 10 | +# ------------------------------------------------------------------------------ |
| 11 | +# |
| 12 | +# Copyright 2016—2021 Jeffrey A. Clark, "Alex" |
6 | 13 | #
|
7 | 14 | # Permission is hereby granted, free of charge, to any person obtaining a copy
|
8 | 15 | # of this software and associated documentation files (the "Software"), to deal
|
|
22 | 29 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
23 | 30 | # SOFTWARE.
|
24 | 31 |
|
25 |
| -#------------------------------------------------------------------------------- |
26 |
| - |
27 |
| -# Default Goal |
28 |
| -# |
29 |
| -# https://www.gnu.org/software/make/manual/html_node/Goals.html |
30 |
| -# https://www.gnu.org/software/make/manual/html_node/Special-Variables.html#Special-Variables |
31 |
| -# |
32 |
| -# By default, the goal is the first target in the makefile (not counting targets |
33 |
| -# that start with a period). Therefore, makefiles are usually written so that the |
34 |
| -# first target is for compiling the entire program or programs they describe. If |
35 |
| -# the first rule in the makefile has several targets, only the first target in the |
36 |
| -# rule becomes the default goal, not the whole list. You can manage the selection |
37 |
| -# of the default goal from within your makefile using the .DEFAULT_GOAL variable |
38 |
| -# (see Other Special Variables). |
39 |
| - |
40 |
| -.DEFAULT_GOAL=usage |
41 |
| - |
42 |
| -#------------------------------------------------------------------------------- |
43 |
| - |
44 |
| -# Variables |
45 |
| - |
46 |
| -# A variable is a name defined in a makefile to represent a string of text, called |
47 |
| -# the variable's value. These values are substituted by explicit request into targets, |
48 |
| -# prerequisites, recipes, and other parts of the makefile. |
49 |
| -# |
50 |
| -# https://www.gnu.org/software/make/manual/html_node/Using-Variables.html |
51 |
| - |
52 |
| -# Flavors |
| 32 | +include base.mk |
53 | 33 |
|
54 |
| -# https://www.gnu.org/software/make/manual/html_node/Flavors.html#Flavors |
55 |
| - |
56 |
| -COMMIT_MESSAGE = "Update" |
57 |
| -PROJECT = project |
58 |
| -APP = app |
59 |
| -# https://stackoverflow.com/a/589260/185820 |
60 |
| -TMPDIR := $(shell mktemp -d) |
61 |
| -RANDIR := $(shell openssl rand -base64 12 | sed 's/\///g') |
62 |
| -UNAME := $(shell uname) |
63 |
| -# http://unix.stackexchange.com/a/37316 |
64 |
| -REMOTE_BRANCHES = `git branch -a | grep remote | grep -v HEAD | grep -v master` |
65 |
| - |
66 |
| -#------------------------------------------------------------------------------- |
67 |
| - |
68 |
| -# Additional Concepts for this Makefile |
69 | 34 | #
|
70 |
| -# "Alias" - A new target definition that only exists to create a shorter target |
71 |
| -# name for another target that already exists. |
| 35 | +# Overrides and includes |
| 36 | +# ------------------------------------------------------------------------------ |
72 | 37 | #
|
73 |
| -# "Multi-target Alias" - Like an "Alias", but with multiple targets. |
| 38 | +# E.g. |
74 | 39 | #
|
75 |
| -# "BBB" - For backwards compatibility. Via |
76 |
| -# https://docs.plone.org/appendices/glossary.html |
77 |
| - |
78 |
| -#------------------------------------------------------------------------------- |
79 |
| - |
80 |
| -# Rules |
81 | 40 | #
|
82 |
| -# A rule appears in the makefile and says when and how to remake certain files, |
83 |
| -# called the rule's targets (most often only one per rule). It lists the other |
84 |
| -# files that are the prerequisites of the target, and the recipe to use to |
85 |
| -# create or update the target. |
| 41 | +# Uncomment the next line to customize the project name variable |
| 42 | +#PROJECT_NAME := my_project |
86 | 43 | #
|
87 |
| -# https://www.gnu.org/software/make/manual/html_node/Rules.html |
88 |
| - |
89 |
| -########## |
90 |
| -# Django # |
91 |
| -########## |
92 |
| - |
93 |
| -django-init-app: |
94 |
| - -mkdir -p $(PROJECT)/$(APP)/templates |
95 |
| - -touch $(PROJECT)/$(APP)/templates/base.html |
96 |
| - -django-admin startproject $(PROJECT) . |
97 |
| - -django-admin startapp $(APP) $(PROJECT)/$(APP) |
98 |
| -django-init-db: # PostgreSQL |
99 |
| - -dropdb $(PROJECT) |
100 |
| - -createdb $(PROJECT) |
101 |
| -init-db: django-init-db # Alias |
102 |
| -django-graph: |
103 |
| - python manage.py graph_models $(APP) -o graph_models_$(PROJECT)_$(APP).png |
104 |
| -django-init: |
105 |
| - @$(MAKE) pip-install-django |
106 |
| - @$(MAKE) django-init-db |
107 |
| - @$(MAKE) django-init-app |
108 |
| - @$(MAKE) django-up-settings |
109 |
| - git add $(PROJECT) |
110 |
| - git add manage.py |
111 |
| - @$(MAKE) commit-push |
112 |
| -django-migrate: |
113 |
| - python manage.py migrate |
114 |
| -django-migrations-default: |
115 |
| - python manage.py makemigrations $(APP) |
116 |
| - git add $(PROJECT)/$(APP)/migrations/*.py |
117 |
| -django-serve-default: |
118 |
| - python manage.py runserver 0.0.0.0:8000 |
119 |
| -django-test: |
120 |
| - python manage.py test |
121 |
| -django-up-settings: |
122 |
| - echo "STATIC_ROOT = 'static'" >> $(PROJECT)/settings.py |
123 |
| - echo "ALLOWED_HOSTS = ['*']" >> $(PROJECT)/settings.py |
124 |
| - echo "AUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', },]" >> $(PROJECT)/settings.py |
125 |
| - echo "import dj_database_url; DATABASES = { 'default': dj_database_url.config(default=os.environ.get( 'DATABASE_URL', 'postgres://%s:%s@%s:%s/%s' % (os.environ.get('DB_USER', ''), os.environ.get('DB_PASS', ''), os.environ.get('DB_HOST', 'localhost'), os.environ.get('DB_PORT', '5432'), os.environ.get('DB_NAME', 'project_app'))))}" >> $(PROJECT)/settings.py |
126 |
| -django-shell: |
127 |
| - python manage.py shell |
128 |
| -django-static: |
129 |
| - python manage.py collectstatic --noinput |
130 |
| -django-su: |
131 |
| - python manage.py createsuperuser |
132 |
| -django-loaddata-default: |
133 |
| - python manage.py loaddata |
134 |
| -django-yapf: |
135 |
| - -yapf -i *.py |
136 |
| - -yapf -i $(PROJECT)/*.py |
137 |
| - -yapf -i $(PROJECT)/$(APP)/*.py |
138 |
| -django-wc: |
139 |
| - -wc -l *.py |
140 |
| - -wc -l $(PROJECT)/*.py |
141 |
| - -wc -l $(PROJECT)/$(APP)/*.py |
142 |
| -graph: django-graph |
143 |
| -migrate: django-migrate # Alias |
144 |
| -migrations: django-migrations # Alias |
145 |
| -static: django-static # Alias |
146 |
| -su: django-su # Alias |
147 |
| -test: django-test # Alias |
148 |
| -loaddata: django-loaddata # Alias |
149 |
| - |
150 |
| -########## |
151 |
| -# Drupal # |
152 |
| -########## |
153 |
| - |
154 |
| -drupal-init-composer-8: |
155 |
| - composer create-project drupal/recommended-project $(RANDIR) --no-interaction |
156 |
| -drupal-init-docksal-7: |
157 |
| - git clone https://github.com/docksal/boilerplate-drupal7.git d7 |
158 |
| - cd d7; fin init |
159 |
| -drupal-init-docksal-8: |
160 |
| - git clone https://github.com/docksal/boilerplate-drupal8.git d8 |
161 |
| - cd d8; fin init |
162 |
| -d7: drupal-init-docksal-7 # Alias |
163 |
| -d8: drupal-init-docksal-8 # Alias |
164 |
| - |
165 |
| -####### |
166 |
| -# Git # |
167 |
| -####### |
168 |
| - |
169 |
| -git-ignore: |
170 |
| - echo ".Python\nbin/\ninclude/\nlib/\n.vagrant/\n" >> .gitignore |
171 |
| - git add .gitignore |
172 |
| - $(MAKE) commit-push |
173 |
| -git-init: |
174 |
| - git init |
175 |
| - hub create $(RANDDIR) |
176 |
| - hub browse |
177 |
| -git-branches: |
178 |
| - -for i in $(REMOTE_BRANCHES) ; do \ |
179 |
| - git checkout -t $$i ; done |
180 |
| -git-prune: |
181 |
| - git remote update origin --prune |
182 |
| -git-commit: |
183 |
| - git commit -a -m $(COMMIT_MESSAGE) |
184 |
| -git-commit-edit: |
185 |
| - git commit -a |
186 |
| -git-push: |
187 |
| - git push |
188 |
| -git-push-up: |
189 |
| - git push --set-upstream origin master |
190 |
| -commit: git-commit # Alias |
191 |
| -ce: commit-edit # Alias |
192 |
| -cp: commit-push # Alias |
193 |
| -push: git-push # Alias |
194 |
| -p: push # Alias |
195 |
| -commit-push: git-commit git-push # Multi-target Alias |
196 |
| -commit-push-up: git-commit git-push-up # Multi-target Alias |
197 |
| -commit-edit: git-commit-edit git-push # Multi-target Alias |
198 |
| -git-commit-auto-push: commit-push # BBB |
199 |
| -git-commit-edit-push: commit-edit-push # BBB |
200 |
| - |
201 |
| -######## |
202 |
| -# Misc # |
203 |
| -######## |
204 |
| - |
205 |
| -rand: |
206 |
| - @openssl rand -base64 12 | sed 's/\///g' |
207 |
| -r: rand # Alias |
208 |
| - |
209 |
| -readme: |
210 |
| - echo "Creating README.rst" |
211 |
| - @echo $(PROJECT) > README.rst |
212 |
| - @echo ================================================================================ >> README.rst |
213 |
| - echo "Done." |
214 |
| - git add README.rst |
215 |
| - @$(MAKE) commit-push |
216 |
| - |
217 |
| -review: |
218 |
| -ifeq ($(UNAME), Darwin) |
219 |
| - @open -a $(EDITOR) `find $(PROJECT) -name \*.py | grep -v __init__.py | grep -v migrations`\ |
220 |
| - `find $(PROJECT) -name \*.html` `find $(PROJECT) -name \*.js` |
221 |
| -else |
222 |
| - @echo "Unsupported" |
223 |
| -endif |
224 |
| - |
225 |
| -list-targets: |
226 |
| - @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F:\ |
227 |
| - '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}'\ |
228 |
| - | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$' | xargs | tr ' ' '\n' | awk\ |
229 |
| - '{print "make "$$0}' | less # http://stackoverflow.com/a/26339924 |
230 |
| -help: list-targets # Alias |
231 |
| -h: list-targets # Alias |
232 |
| - |
233 |
| -usage: |
234 |
| - @echo "Project Makefile" |
235 |
| - @echo "Usage:\n" |
236 |
| - @echo "\tmake <target>\n" |
237 |
| - @echo "Help:\n" |
238 |
| - @echo "\tmake help" |
239 |
| - |
240 |
| -make: |
241 |
| - git add Makefile |
242 |
| - @$(MAKE) commit-push-up |
243 |
| - |
244 |
| -deploy-default: |
245 |
| - eb deploy |
246 |
| -d: deploy # Alias |
247 |
| - |
248 |
| -####### |
249 |
| -# Pip # |
250 |
| -####### |
251 |
| - |
252 |
| -pip-freeze-default: |
253 |
| - pip freeze | sort > $(TMPDIR)/requirements.txt |
254 |
| - mv -f $(TMPDIR)/requirements.txt . |
255 |
| -pip-install: |
256 |
| - pip install -r requirements.txt |
257 |
| -pip-install-test: |
258 |
| - pip install -r requirements-test.txt |
259 |
| -pip-install-django: |
260 |
| - @echo "Django\ndj-database-url\npsycopg2-binary\n" > requirements.txt |
261 |
| - @$(MAKE) pip-install |
262 |
| - @$(MAKE) freeze |
263 |
| - -git add requirements.txt |
264 |
| - -@$(MAKE) commit-push-up |
265 |
| -pip-install-sphinx: |
266 |
| - echo "Sphinx\n" > requirements.txt |
267 |
| - $(MAKE) pip-install |
268 |
| -pip-upgrade-default: |
269 |
| - cat requirements.txt | awk -F \= '{print $1}' > $(TMPDIR)/requirements.txt |
270 |
| - mv -f $(TMPDIR)/requirements.txt . |
271 |
| - pip install -U -r requirements.txt |
272 |
| - $(MAKE) pip-freeze |
273 |
| -freeze: pip-freeze # Alias |
274 |
| - |
275 |
| -########## |
276 |
| -# Python # |
277 |
| -########## |
278 |
| - |
279 |
| -python-serve: |
280 |
| - @echo "\n\tServing HTTP on http://0.0.0.0:8000\n" |
281 |
| - python -m http.server |
282 |
| -python-virtualenv-2-6: |
283 |
| - virtualenv --python=python2.6 . |
284 |
| -python-virtualenv-2-7: |
285 |
| - virtualenv --python=python2.7 . |
286 |
| -python-virtualenv-3-7: |
287 |
| - virtualenv --python=python3.7 . |
288 |
| -python-virtualenv: python-virtualenv-3-7 # Alias |
289 |
| -virtualenv: python-virtualenv-3-7 # Alias |
290 |
| -virtualenv-2: python-virtualenv-2-7 # Alias |
291 |
| -serve: python-serve # Alias |
292 |
| - |
293 |
| -########## |
294 |
| -# Sphinx # |
295 |
| -########## |
296 |
| - |
297 |
| -sphinx-build: |
298 |
| - sphinx-build -b html -d _build/doctrees . _build/html |
299 |
| -sphinx-init: |
300 |
| - $(MAKE) pip-install-sphinx |
301 |
| - sphinx-quickstart -q -p $(PROJECT) -a $(USER) -v 0.0.1 $(RANDIR) |
302 |
| - mv $(RANDIR)/* . |
303 |
| - rmdir $(RANDIR) |
304 |
| -sphinx-serve: |
305 |
| - cd _build/html;python -m http.server |
306 |
| - |
307 |
| -########### |
308 |
| -# Vagrant # |
309 |
| -########### |
310 |
| - |
311 |
| -vagrant-init: |
312 |
| - vagrant init ubuntu/trusty64 |
313 |
| - git add Vagrantfile |
314 |
| - $(MAKE) git-push-up |
315 |
| - $(MAKE) vagrant-up |
316 |
| -vagrant-up: |
317 |
| - vagrant up --provider virtualbox |
318 |
| -vagrant: vagrant-init # Alias |
319 |
| -vm: vagrant-init # Alias |
320 |
| - |
321 |
| -#------------------------------------------------------------------------------- |
322 |
| - |
323 |
| -# Overrides |
| 44 | +# Uncomment the next line to customize the commit message variable |
| 45 | +#GIT_COMMIT := My awesome update |
324 | 46 | #
|
325 |
| -# https://www.gnu.org/software/make/manual/html_node/Overriding-Makefiles.html |
| 47 | +# Uncomment the next two lines to customize the default edit target |
| 48 | +#edit: |
| 49 | +# vi my_project.py |
326 | 50 | #
|
327 |
| -# https://stackoverflow.com/a/49804748 |
328 |
| -%: %-default |
329 |
| - @ true |
| 51 | +# Uncomment the next two lines to customize the default db-init target |
| 52 | +#db-init: my-init |
330 | 53 |
|
331 |
| -#PROJECT = project |
332 |
| -#APP = app |
333 |
| -.DEFAULT_GOAL=commit-push |
334 |
| -#install: pip-install |
| 54 | +# Uncomment the next line to include additional makefiles |
| 55 | +include pillow.mk |
| 56 | +# |
| 57 | +# Uncomment the next line to customize the default goal |
| 58 | +.DEFAULT_GOAL := git-edit-push |
0 commit comments