forked from cloudposse/docs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
167 lines (140 loc) · 5.38 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
-include $(shell curl -sSL -o .build-harness "https://git.io/build-harness"; echo .build-harness)
export OS ?= $(shell uname -s | tr '[:upper:]' '[:lower:]')
export HUGO ?= hugo
export HUGO_VERSION ?= 0.42.1
export HUGO_PORT ?= 1313
export HUGO_URL ?= http://localhost.cloudposse.com:$(HUGO_PORT)/
export HUGO_EDIT_BRANCH ?= $(GIT_BRANCH)
export HUGO_EDIT_URL ?= https://github.com/cloudposse/docs/blob/$(HUGO_EDIT_BRANCH)
export HUGO_ARGS ?= --bind 0.0.0.0 --port $(HUGO_PORT) --watch --buildDrafts
export HUGO_CONFIG ?= config.toml
export HUGO_PUBLISH_DIR ?= public
export PACKAGES_VERSION ?= 0.1.7
export HTMLTEST_LOG_LEVEL ?= 2
export HTMLTEST_CONFIG ?= .htmltest.yml
export ALGOLIA_INDEX_FILE ?= $(HUGO_PUBLISH_DIR)/index.algolia.json
export ALGOLIA_INDEX_NAME ?= dev
export ALGOLIA_APP_ID ?= docs
export ALGOLIA_ADMIN_KEY ?=
export ASCIINEMA_VERSION ?= 2.6.1
export DOCKER_ORG ?= cloudposse
export DOCKER_IMAGE ?= $(DOCKER_ORG)/docs
export DOCKER_TAG ?= latest
export DOCKER_IMAGE_NAME ?= $(DOCKER_IMAGE):$(DOCKER_TAG)
export DOCKER_BUILD_FLAGS =
export DOCKER_RUN ?= docker run -it --rm -v `pwd`:/src -p $(HUGO_PORT):$(HUGO_PORT) $(DOCKER_IMAGE_NAME)
export README_DEPS ?= docs/targets.md
## Install OSX deps
deps-darwin:
brew install asciinema
## Install Linux deps
deps-linux:
@which pip3 >/dev/null || (echo "Install pip3 please"; exit 1)
pip3 install asciinema
## Install package dependencies
deps: deps-$(OS) \
packages/install/hugo \
packages/install/htmltest
asciinema auth
npm install -g \
@exit 0
deps/asciinema:
curl -sSL -o static/css/asciinema-player.css https://github.com/asciinema/asciinema-player/releases/download/v2.6.1/asciinema-player.css
curl -sSL -o static/js/asciinema-player.js https://github.com/asciinema/asciinema-player/releases/download/v2.6.1/asciinema-player.js
## Install useful atom plugins
deps/atom:
@which apm >/dev/null || (echo "Install the atom editor"; exit 1)
@apm install -s \
modular-snippets \
language-hugo \
autocomplete-paths \
editorconfig \
linter-ui-default \
linter-markdown \
language-markdown \
markdown-table-editor \
markdown-writer \
tool-bar-markdown-writer \
markdown-toc \
project-manager \
tool-bar \
local-config \
autocomplete-paths \
https://github.com/cloudposse/atom-markdown-image-assistant.git
@echo "Now complete the setup by performing the following tasks:"
@echo "1. Start/Restart Atom"
@echo "2. Open menu 'Edit > Preferences'"
@echo "3. Select tab 'Packages'"
@echo "4. Type 'local' in filter field"
@echo "5. Click settings for 'local-config' plugin"
@echo "6. Select checkbox 'Auto apply'"
@echo "7. Restart Atom twice"
## Open localhost in browser
open:
open $(HUGO_URL)
## Start the hugo server for live editing using local environment
hugo/run:
$(HUGO) server $(HUGO_ARGS)
## Start the hugo server for live editing using docker environment
run: docker/build
$(DOCKER_RUN) hugo/run
## Generate all static content (outputs to public/) using local environment
hugo/build:
@[ "$(HUGO_PUBLISH_DIR)" != "/" ] || (echo "Invalid HUGO_PUBLISH_DIR=$(HUGO_PUBLISH_DIR)"; exit 1)
rm -rf $(HUGO_PUBLISH_DIR)
$(HUGO) --templateMetrics --stepAnalysis --config $(HUGO_CONFIG)
## Generate all static content (outputs to public/) using docker environment
build: docker/build
@[ "$(HUGO_PUBLISH_DIR)" != "/" ] || (echo "Invalid HUGO_PUBLISH_DIR=$(HUGO_PUBLISH_DIR)"; exit 1)
rm -rf $(HUGO_PUBLISH_DIR)
$(DOCKER_RUN) hugo/build
## Lint check common formatting mistakes
lint/formatting:
@! grep -Eo 'CodeFresh' -R content/ # Should be Codefresh
@! grep -Eo 'Code Fresh' -R content/ # Should be Codefresh
@! grep -Eo 'CloudPosse' -R content/ # Should be Cloud Posse
@! grep -Eo 'Cloudposse' -R content/ # Should be Cloud Posse
@! grep -Eo 'Github' -R content/ # Should be GitHub
@! grep -Eo 'go template' -R content/ # Should be Go template
@! grep -Eo 'CI\\+CD' -R content/ # Should be CI/CD
@! grep -Eo 'ci/cd' -R content/ # Should be CI/CD
## Lint check for empty markdown links
lint/check-for-empty-links:
@! grep -Eo '\[.+\]\(\)' -R content/
## Lint check all hugo code
lint: lint/check-for-empty-links lint/formatting
$(HUGO) --renderToMemory
## Validate all html is good
validate: lint test
.PHONY : test
## Run tests
test:
htmltest -c $(HTMLTEST_CONFIG) --log-level $(HTMLTEST_LOG_LEVEL)
## Run smoketest
smoketest:
make release hugo/build test HUGO_URL=/ HUGO_CONFIG=test.toml HUGO_PUBLISH_DIR=test HTMLTEST_CONFIG=.htmltest.smoketest.yaml
## Generate a release config
release:
@[ "$(HUGO_CONFIG)" != "config.toml" ] || (echo "Cannot release with $(HUGO_CONFIG)"; exit 1)
@[ "$(HTMLTEST_CONFIG)" != ".htmltest.yml" ] || (echo "Cannot release with $(HTMLTEST_CONFIG)"; exit 1)
cat config.toml | \
sed 's,^baseURL.*,baseURL = "$(HUGO_URL)",' | \
sed 's,^publishDir.*,publishDir = "$(HUGO_PUBLISH_DIR)",' | \
sed 's,^editURL.*,editURL = "$(HUGO_EDIT_URL)",' \
> $(HUGO_CONFIG)
@echo "Wrote $(HUGO_CONFIG) for $(HUGO_URL)..."
cat .htmltest.yml | \
sed 's,^OutputDir:.*,OutputDir: "$(TMPDIR)/.htmltest",' \
> $(HTMLTEST_CONFIG)
@echo "Wrote $(HTMLTEST_CONFIG) for codefresh..."
## Deploy static site to S3
deploy:
aws s3 sync --delete --acl public-read --exact-timestamps $(HUGO_PUBLISH_DIR)/ s3://$(S3_BUCKET_NAME)/
## Update algolia search index
reindex:
atomic-algolia
## Invalidate CloudFlare cache (all files)
invalidate-cache:
cfcli purge