|
1 | 1 | # Makefile for the Hugo website |
2 | 2 |
|
| 3 | +PLATFORM_NAME := $(shell uname -p) |
| 4 | +ifneq ($(filter arm%,$(PLATFORM_NAME)),) |
| 5 | + export WERF_PLATFORM=linux/amd64 |
| 6 | +endif |
| 7 | + |
| 8 | +.DEFAULT_GOAL := help |
| 9 | + |
3 | 10 | # Tools / variables (can be overridden on the command line) |
4 | 11 | HUGO ?= hugo |
5 | 12 | BIND ?= 0.0.0.0 |
6 | 13 | SERVE_FLAGS ?= --cleanDestinationDir --bind=$(BIND) |
7 | 14 | HUGOFLAGS ?= --minify |
8 | 15 | MARKDOWNLINT_VERSION ?= v0.45.0 |
| 16 | +WERF ?= werf |
9 | 17 | WERF_PLATFORM ?= linux/amd64 |
10 | 18 |
|
11 | 19 | CURRENT_UID ?= $(shell id -u) |
12 | 20 | CURRENT_GID ?= $(shell id -g) |
13 | 21 | PORTS_TO_FREE ?= 80 1313 1314 |
14 | 22 |
|
15 | | -.PHONY: help serve build down lint-markdown lint-markdown-fix mod |
16 | | -.PHONY: help serve build down lint-markdown lint-markdown-fix mod free-ports |
17 | | - |
18 | | -help: |
19 | | - @echo "Usage: make [target]" |
20 | | - @echo |
21 | | - @echo "Common targets:" |
22 | | - @echo " up Start documentation (available at http://localhost and http://ru.localhost)" |
23 | | - @echo " serve Start Hugo dev server (hugo serve --cleanDestinationDir)" |
24 | | - @echo " build Build the site to ./public" |
25 | | - @echo " down Stop and remove documentation containers" |
26 | | - @echo " lint-markdown Lint markdown files" |
27 | | - @echo " lint-markdown-fix Fix markdown files automatically" |
28 | | - @echo " mod Clean up Hugo modules (hugo mod tidy)" |
29 | | - @echo " help Show this help" |
30 | | - @echo |
31 | | - @echo "Variables (can be overridden):" |
32 | | - @echo " HUGO=$(HUGO)" |
33 | | - @echo " PORT=$(PORT)" |
34 | | - @echo " BIND=$(BIND)" |
35 | | - @echo " BASEURL=$(BASEURL)" |
36 | | - @echo " MARKDOWNLINT_VERSION=$(MARKDOWNLINT_VERSION)" |
37 | | - |
38 | | -up: |
| 23 | +PRODUCT_CODE ?= $(shell awk '/^ productCode:/ {print tolower($$2); exit}' config/_default/hugo.yaml) |
| 24 | + |
| 25 | +##@ Main |
| 26 | + |
| 27 | +up: ## Start documentation (available at http://localhost and http://ru.localhost) |
39 | 28 | @$(MAKE) down |
40 | 29 | @$(MAKE) free-ports |
41 | 30 | @UID=$(CURRENT_UID) GID=$(CURRENT_GID) docker compose up |
42 | 31 |
|
43 | | -free-ports: |
44 | | - @containers="$$(for port in $(PORTS_TO_FREE); do docker ps -q --filter "publish=$$port"; done | sort -u)"; \ |
45 | | - if [ -n "$$containers" ]; then \ |
46 | | - echo "Stopping containers using ports $(PORTS_TO_FREE): $$containers"; \ |
47 | | - docker stop $$containers; \ |
48 | | - fi |
49 | | - |
50 | | -down: |
51 | | - docker compose rm -f |
52 | | - docker compose down --remove-orphans |
53 | | - |
54 | | -serve: |
| 32 | +serve: ## Start Hugo dev server (hugo serve --cleanDestinationDir) |
55 | 33 | $(HUGO) serve $(SERVE_FLAGS) |
56 | 34 |
|
57 | | -build: |
| 35 | +build: ## Build the site to ./public |
58 | 36 | @echo "Building site to ./public..." |
59 | 37 | $(HUGO) $(HUGOFLAGS) |
60 | 38 |
|
61 | | -lint-markdown: |
| 39 | +pdf: ## Build the site and generate PDF+DOCX exports via werf |
| 40 | + ##~ Output: public/{en,ru}/documentation/downloads/print/<productCode>.{pdf,docx} |
| 41 | + ##~ Need external registry (e.g. export WERF_REPO=localhost:4999/docs) to run. |
| 42 | + @echo "Building print-artifacts via werf..." |
| 43 | + @$(WERF) build print-artifacts |
| 44 | + @echo "Extracting PDF/DOCX ($(PRODUCT_CODE)) to ./public/{en,ru}/documentation/downloads/print/..." |
| 45 | + @IMG=$$($(WERF) stage image print-artifacts) && \ |
| 46 | + CID=$$(docker create $$IMG) && \ |
| 47 | + trap "docker rm $$CID >/dev/null" EXIT && \ |
| 48 | + mkdir -p ./public/en/documentation/downloads/print ./public/ru/documentation/downloads/print && \ |
| 49 | + docker cp $$CID:/out/en/documentation/downloads/print/. ./public/en/documentation/downloads/print/ && \ |
| 50 | + docker cp $$CID:/out/ru/documentation/downloads/print/. ./public/ru/documentation/downloads/print/ |
| 51 | + @echo "Done. Files: public/{en,ru}/documentation/downloads/print/$(PRODUCT_CODE).{pdf,docx}" |
| 52 | + |
| 53 | +down: ## Stop and remove documentation containers |
| 54 | + docker compose rm -f |
| 55 | + docker compose down --remove-orphans |
| 56 | + |
| 57 | +##@ Linters |
| 58 | + |
| 59 | +lint-markdown: ## Lint markdown files |
62 | 60 | @echo "Linting markdown files..." |
63 | 61 | @docker run --rm -v "$(PWD):/workdir" -w /workdir ghcr.io/igorshubovych/markdownlint-cli:$(MARKDOWNLINT_VERSION) "**/*.md" -c markdownlint.yaml |
64 | 62 |
|
65 | | -lint-markdown-fix: |
| 63 | +lint-markdown-fix: ## Lint and auto-fix markdown files |
66 | 64 | @echo "Fixing markdown files..." |
67 | 65 | @docker run --rm -v "$(PWD):/workdir" -w /workdir ghcr.io/igorshubovych/markdownlint-cli:$(MARKDOWNLINT_VERSION) "**/*.md" -c markdownlint.yaml --fix |
68 | 66 |
|
69 | | -mod: |
| 67 | +##@ Helpers |
| 68 | + |
| 69 | +mod: ## Clean up Hugo modules (hugo mod tidy) |
70 | 70 | @echo "Cleaning up Hugo modules..." |
71 | 71 | $(HUGO) mod tidy |
72 | 72 |
|
| 73 | +free-ports: ## Stop containers using known dev ports ($(PORTS_TO_FREE)) |
| 74 | + @containers="$$(for port in $(PORTS_TO_FREE); do docker ps -q --filter "publish=$$port"; done | sort -u)"; \ |
| 75 | + if [ -n "$$containers" ]; then \ |
| 76 | + echo "Stopping containers using ports $(PORTS_TO_FREE): $$containers"; \ |
| 77 | + docker stop $$containers; \ |
| 78 | + fi |
| 79 | + |
| 80 | +help: ## Show this help message |
| 81 | + @echo 'Usage: make [target]' |
| 82 | + @echo '' |
| 83 | + @echo 'Available targets:' |
| 84 | + @awk 'BEGIN {\ |
| 85 | + FS = ":.*?## "; \ |
| 86 | + } \ |
| 87 | + /^##@/ { printf "\n%s\n", substr($$0, 5) } \ |
| 88 | + /^[a-zA-Z0-9_-]+:.*?## / { printf " %-20s %s\n", $$1, $$2 } \ |
| 89 | + /^.?.?##~/ { printf " %-20s %s\n", "", substr($$1, 6) }' $(MAKEFILE_LIST) |
| 90 | + |
| 91 | +.PHONY: help up serve build pdf down lint-markdown lint-markdown-fix mod free-ports |
0 commit comments