forked from hausgold/billomat
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
149 lines (125 loc) · 3.4 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
MAKEFLAGS += --warn-undefined-variables -j1
SHELL := bash
.SHELLFLAGS := -eu -o pipefail -c
.DEFAULT_GOAL := all
.DELETE_ON_ERROR:
.SUFFIXES:
.PHONY:
# Environment switches
MAKE_ENV ?= docker
COMPOSE_RUN_SHELL_FLAGS ?= --rm
BASH_RUN_SHELL_FLAGS ?=
# Directories
VENDOR_DIR ?= vendor/bundle
# Host binaries
AWK ?= awk
BASH ?= bash
COMPOSE ?= docker-compose
DOCKER ?= docker
GREP ?= grep
ID ?= id
MKDIR ?= mkdir
RM ?= rm
XARGS ?= xargs
# Container binaries
BUNDLE ?= bundle
GEM ?= gem
GUARD ?= guard
RAKE ?= rake
RSPEC ?= rspec
RUBOCOP ?= rubocop
YARD ?= yard
# Define a generic shell run wrapper
# $1 - The command to run
ifeq ($(MAKE_ENV),docker)
define run-shell
$(COMPOSE) run $(COMPOSE_RUN_SHELL_FLAGS) \
-e LANG=en_US.UTF-8 -e LANGUAGE=en_US.UTF-8 -e LC_ALL=en_US.UTF-8 \
-e HOME=/home/web -e BUNDLE_APP_CONFIG=/app/.bundle \
-u `$(ID) -u` test \
bash $(BASH_RUN_SHELL_FLAGS) -c 'sleep 0.1; echo; $(1)'
endef
else ifeq ($(MAKE_ENV),baremetal)
define run-shell
$(1)
endef
endif
all:
# Billomat
#
# install Install the dependencies
# clean Clean the dependencies
#
# test Run the whole test suite
# test-style Test the code styles
# watch Watch for code changes and rerun the test suite
#
# docs Generate the Ruby documentation of the library
# stats Print the code statistics (library and test suite)
# notes Print all the notes from the code
# release Release a new Gem version (maintainers only)
#
# shell Run an interactive shell on the container
# shell-irb Run an interactive IRB shell on the container
.interactive:
@$(eval BASH_RUN_SHELL_FLAGS = --login)
install:
# Install the dependencies
@$(MKDIR) -p $(VENDOR_DIR)
@$(call run-shell,$(BUNDLE) check || $(BUNDLE) install --path $(VENDOR_DIR))
update:
# Install the dependencies
@$(MKDIR) -p $(VENDOR_DIR)
@$(call run-shell,$(BUNDLE) update)
watch: install .interactive
# Watch for code changes and rerun the test suite
@$(call run-shell,$(BUNDLE) exec $(GUARD))
test: \
test-specs \
test-style
test-specs:
# Run the whole test suite
@$(call run-shell,$(BUNDLE) exec $(RAKE) stats spec)
test-style: \
test-style-ruby
test-style-ruby:
# Run the static code analyzer (rubocop)
@$(call run-shell,$(BUNDLE) exec $(RUBOCOP) -a)
clean:
# Clean the dependencies
@$(RM) -rf $(VENDOR_DIR)
@$(RM) -rf $(VENDOR_DIR)/Gemfile.lock
@$(RM) -rf .bundle .yardoc coverage pkg Gemfile.lock doc/api \
.rspec_status
clean-containers:
# Clean running containers
ifeq ($(MAKE_ENV),docker)
@$(COMPOSE) down
endif
clean-images:
# Clean build images
ifeq ($(MAKE_ENV),docker)
@-$(DOCKER) images | $(GREP) $(shell basename "`pwd`") \
| $(AWK) '{ print $$3 }' \
| $(XARGS) -rn1 $(DOCKER) rmi -f
endif
distclean: clean clean-containers clean-images
shell:
# Run an interactive shell on the container
@$(call run-shell,$(BASH) -i)
shell-irb:
# Run an interactive IRB shell on the container
@$(call run-shell,bin/console)
docs:
# Build the API documentation
@$(call run-shell,$(BUNDLE) exec $(YARD) -q && \
$(BUNDLE) exec $(YARD) stats --list-undoc --compact)
notes:
# Print the code statistics (library and test suite)
@$(call run-shell,$(BUNDLE) exec $(RAKE) notes)
stats:
# Print all the notes from the code
@$(call run-shell,$(BUNDLE) exec $(RAKE) stats)
release:
# Release a new gem version
@$(BUNDLE) exec $(RAKE) release