generated from mirego/elixir-boilerplate
-
Notifications
You must be signed in to change notification settings - Fork 8
/
Makefile
139 lines (111 loc) · 3.75 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
# Build configuration
# -------------------
APP_NAME = `grep -Eo 'app: :\w*' mix.exs | cut -d ':' -f 3`
APP_VERSION = `grep -Eo 'version: "[0-9\.]*"' mix.exs | cut -d '"' -f 2`
GIT_REVISION = `git rev-parse HEAD`
DOCKER_IMAGE_TAG ?= $(APP_VERSION)
DOCKER_REGISTRY ?=
DOCKER_LOCAL_IMAGE = $(APP_NAME):$(DOCKER_IMAGE_TAG)
DOCKER_REMOTE_IMAGE = $(DOCKER_REGISTRY)/$(DOCKER_LOCAL_IMAGE)
# Linter and formatter configuration
# ----------------------------------
PRETTIER_FILES_PATTERN = '.babelrc' 'webpack.config.js' '{js,css,scripts}/**/*.{js,graphql,scss,css}' '../*.md' '../*/*.md'
STYLES_PATTERN = 'css'
# Introspection targets
# ---------------------
.PHONY: help
help: header targets
.PHONY: header
header:
@echo "\033[34mEnvironment\033[0m"
@echo "\033[34m---------------------------------------------------------------\033[0m"
@printf "\033[33m%-23s\033[0m" "APP_NAME"
@printf "\033[35m%s\033[0m" $(APP_NAME)
@echo ""
@printf "\033[33m%-23s\033[0m" "APP_VERSION"
@printf "\033[35m%s\033[0m" $(APP_VERSION)
@echo ""
@printf "\033[33m%-23s\033[0m" "GIT_REVISION"
@printf "\033[35m%s\033[0m" $(GIT_REVISION)
@echo ""
@printf "\033[33m%-23s\033[0m" "DOCKER_IMAGE_TAG"
@printf "\033[35m%s\033[0m" $(DOCKER_IMAGE_TAG)
@echo ""
@printf "\033[33m%-23s\033[0m" "DOCKER_REGISTRY"
@printf "\033[35m%s\033[0m" $(DOCKER_REGISTRY)
@echo ""
@printf "\033[33m%-23s\033[0m" "DOCKER_LOCAL_IMAGE"
@printf "\033[35m%s\033[0m" $(DOCKER_LOCAL_IMAGE)
@echo ""
@printf "\033[33m%-23s\033[0m" "DOCKER_REMOTE_IMAGE"
@printf "\033[35m%s\033[0m" $(DOCKER_REMOTE_IMAGE)
@echo "\n"
.PHONY: targets
targets:
@echo "\033[34mTargets\033[0m"
@echo "\033[34m---------------------------------------------------------------\033[0m"
@perl -nle'print $& if m{^[a-zA-Z_-\d]+:.*?## .*$$}' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-22s\033[0m %s\n", $$1, $$2}'
# Build targets
# -------------
.PHONY: prepare
prepare:
mix deps.get
npm ci --prefix assets
.PHONY: build
build: ## Build the Docker image for the OTP release
docker build --build-arg APP_NAME=$(APP_NAME) --build-arg APP_VERSION=$(APP_VERSION) --rm --tag $(DOCKER_LOCAL_IMAGE) .
.PHONY: push
push: ## Push the Docker image to the registry
docker tag $(DOCKER_LOCAL_IMAGE) $(DOCKER_REMOTE_IMAGE)
docker push $(DOCKER_REMOTE_IMAGE)
# Development targets
# -------------------
.PHONY: run
run: ## Run the server inside an IEx shell
iex -S mix phx.server
.PHONY: dependencies
dependencies: ## Install dependencies
mix deps.get
npm install --prefix assets
.PHONY: sync-translations
sync-translations: ## Synchronize translations with Accent
npx accent sync
.PHONY: test
test: ## Run the test suite
mix test
# Check, lint and format targets
# ------------------------------
.PHONY: check
check: check-format check-unused-dependencies check-dependencies-security check-code-security check-code-coverage ## Run various checks on project files
.PHONY: check-code-coverage
check-code-coverage:
mix coveralls
.PHONY: check-dependencies-security
check-dependencies-security:
mix deps.audit
.PHONY: check-code-security
check-code-security:
mix sobelow --config
.PHONY: check-format
check-format:
mix format --check-formatted
cd assets && npx prettier --check $(PRETTIER_FILES_PATTERN)
.PHONY: check-unused-dependencies
check-unused-dependencies:
mix deps.unlock --check-unused
.PHONY: format
format: ## Format project files
mix format
cd assets && npx prettier --write $(PRETTIER_FILES_PATTERN)
.PHONY: lint
lint: lint-elixir lint-scripts lint-styles ## Lint project files
.PHONY: lint-elixir
lint-elixir:
mix compile --warnings-as-errors --force
mix credo --strict
.PHONY: lint-scripts
lint-scripts:
cd assets && npx eslint .
.PHONY: lint-styles
lint-styles:
cd assets && npx stylelint --syntax scss $(STYLES_PATTERN)