-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
114 lines (82 loc) · 3.98 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
########################################################################################################################
# Variables
########################################################################################################################
CLEAN_TARGETS = ./_site ./.sass-cache
DOCKER_IMAGE = urda/website:latest
DOCKER_RUN_BASE_CMD = -it --mount type=bind,source=${MAKEFILE_PWD},target=/app/web
DOCKER_RUN_EXPOSE = -p 4000:4000/tcp
MAKEFILE_PWD = $(shell pwd)
########################################################################################################################
# `make help` Needs to be first so it is ran when just `make` is called
########################################################################################################################
.PHONY: help
help: # Show this help screen
@ack '^[a-zA-Z_-]+:.*?# .*$$' $(MAKEFILE_LIST) |\
sort -k1,1 |\
awk 'BEGIN {FS = ":.*?# "}; {printf "\033[1m%-30s\033[0m %s\n", $$1, $$2}'
########################################################################################################################
# User-callable commands
########################################################################################################################
.PHONY: build
build: docker-run-jekyll-builder # [DOCKER CONTAINER] Build the entire website, and output to ./_site .
.PHONY: clean
clean: # Clean the project directory.
rm -rf $(CLEAN_TARGETS)
.PHONY: run-server
run-server: docker-run-server # [DOCKER CONTAINER] Run the Jekyll server.
.PHONY: test
test: docker-run-test # [DOCKER CONTAINER] Run automated testing against website project.
.PHONY: update
update: docker-run-updater # [DOCKER CONTAINER] Update Jekyll
.PHONY: update-bundler
update-bundler: docker-run-updater-bundler # [DOCKER CONTAINER] Update Jekyll's Bundler
########################################################################################################################
# Docker Commands
########################################################################################################################
.PHONY: docker-build
docker-build:
docker build --rm -t ${DOCKER_IMAGE} .
.PHONY: docker-run-jekyll-builder
docker-run-jekyll-builder: docker-build
docker run ${DOCKER_RUN_BASE_CMD} ${DOCKER_IMAGE} make jekyll-build
.PHONY: docker-run-server
docker-run-server: docker-build
docker run ${DOCKER_RUN_BASE_CMD} ${DOCKER_RUN_EXPOSE} ${DOCKER_IMAGE} || :
.PHONY: docker-run-test
docker-run-test: docker-build
docker run ${DOCKER_RUN_BASE_CMD} ${DOCKER_IMAGE} make jekyll-test
.PHONY: docker-run-updater
docker-run-updater: docker-build
docker run ${DOCKER_RUN_BASE_CMD} ${DOCKER_IMAGE} make jekyll-update
.PHONY: docker-run-updater-bundler
docker-run-updater-bundler: docker-build
docker run ${DOCKER_RUN_BASE_CMD} ${DOCKER_IMAGE} make jekyll-update-bundler
########################################################################################################################
# Jekyll Commands
########################################################################################################################
.PHONY: require-container
require-container:
ifeq ($(DOCKER_CONTAINER),true)
$(info ---------- Detected docker container ----------)
else ifeq ($(GITHUB_ACTIONS),true)
$(info ---------- Detected GitHub Actions ----------)
else
$(error This command is ONLY ran inside containers)
endif
.PHONY: jekyll-build
jekyll-build: require-container
bundle exec jekyll build
.PHONY: jekyll-htmlproof
jekyll-htmlproof: require-container
bundle exec htmlproofer ./_site --log-level debug --ignore-urls "/twitter.com/,/linkedin.com/,/static.cloudflareinsights.com/"
.PHONY: jekyll-serve
jekyll-serve: require-container
bundle exec jekyll serve --drafts --future --force_polling --host 0.0.0.0 --port 4000
.PHONY: jekyll-test
jekyll-test: require-container jekyll-build jekyll-htmlproof
.PHONY: jekyll-update
jekyll-update: require-container
bundle update --all
.PHONY: jekyll-update-bundler
jekyll-update-bundler: require-container
bundle update --bundler