forked from operately/operately
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
executable file
·196 lines (144 loc) · 4.02 KB
/
Copy pathMakefile
File metadata and controls
executable file
·196 lines (144 loc) · 4.02 KB
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
SHELL := /bin/bash # Use bash syntax
MAKEFLAGS += -s # Silent mode
.PHONY: test
REPORTS_DIR ?= $(PWD)/testreports
MEDIA_DIR ?= $(PWD)/media
SCREENSHOTS_DIR ?= $(PWD)/screenshots
CERTS_DIR ?= $(PWD)/tmp/certs
#
# Tasks for generating code
#
gen:
./devenv bash -c "mix operately.gen.page.index && mix operately.gen.typescript.api"
gen.migration:
./devenv mix ecto.gen.migration $(NAME)
gen.page:
./devenv mix operately.gen.page $(NAME)
$(MAKE) gen
gen.activity:
./devenv mix operately.gen.activity.type $(NAME) $(FIELDS)
$(MAKE) gen
js.fmt.fix:
./devenv bash -c "cd assets && npx prettier --write js"
#
# Development tasks
#
dev.build:
$(MAKE) dev.seed.env
./devenv build
./devenv up
./devenv mix local.hex --force --if-missing
./devenv mix deps.get
./devenv mix compile
./devenv bash -c "cd assets && npm install"
$(MAKE) dev.db.create
$(MAKE) test.db.create
$(MAKE) dev.db.migrate
$(MAKE) test.db.migrate
dev.server:
./devenv iex -S mix phx.server
dev.shell:
./devenv shell
dev.mix.console:
./devenv iex -S mix
dev.mix.task:
./devenv mix $(TASK)
dev.db.create:
./devenv mix ecto.create
dev.db.migrate:
./devenv bash -c "MIX_ENV=dev mix ecto.migrate"
dev.db.rollback:
./devenv mix ecto.rollback
dev.db.reset:
./devenv mix ecto.reset
dev.db.seed:
./devenv mix run priv/repo/seeds.exs
dev.run.script:
cp -f $(FILE) tmp/
./devenv mix run tmp/$$(basename $(FILE))
dev.seed.env:
touch .env
#
# Testing tasks
#
test.build:
$(MAKE) test.init
$(MAKE) test.seed.env
./devenv build
./devenv up
./devenv bash -c "MIX_ENV=test mix local.hex --force --if-missing"
./devenv bash -c "MIX_ENV=test mix deps.get"
./devenv bash -c "MIX_ENV=test mix compile"
./devenv bash -c "MIX_ENV=test cd assets && npm install"
./devenv bash -c "MIX_ENV=test mix assets.deploy"
$(MAKE) test.db.create
$(MAKE) test.db.migrate
test: test.init
@if [[ "$(FILE)" == assets/js* ]]; then \
$(MAKE) test.npm FILE=$(FILE); \
elif [[ "$(FILE)" == test/* ]]; then \
$(MAKE) test.mix FILE=$(FILE); \
else \
$(MAKE) test.all; \
fi
test.init:
@mkdir -p $(SCREENSHOTS_DIR)
@mkdir -p $(REPORTS_DIR)
@mkdir -p $(MEDIA_DIR)
@mkdir -p $(CERTS_DIR)
test.all: test.init
$(MAKE) test.mix && $(MAKE) test.npm
test.mix: test.init
./devenv mix test $(FILE)
test.mix.unit: test.init
./devenv mix test $$(find test -name "*_test.exs" | grep -v "test/features")
test.mix.features: test.init
./devenv mix test $$(find test -name "*_test.exs" | grep "test/features" | ./scripts/split.rb $(INDEX) $(TOTAL))
test.npm: test.init
./devenv bash -c "cd assets && npm test"
test.db.migrate:
./devenv bash -c "MIX_ENV=test mix ecto.migrate"
test.watch: test.init
./devenv mix test.watch $(FILE)
test.db.create:
./devenv bash -c "MIX_ENV=test mix ecto.create"
test.db.reset:
./devenv bash -c "MIX_ENV=test mix ecto.reset"
test.assets.compile:
./devenv mix assets.build
test.screenshots.clear:
rm -rf $(SCREENSHOTS_DIR)/*
test.license.check:
bundle install
bash scripts/license-check.sh
test.js.dead.code:
./devenv bash -c "cd assets && npm --no-update-notifier run knip"
test.tsc.lint:
./devenv bash -c "cd assets && npx tsc --noEmit -p ."
test.pr.name:
ruby scripts/pr-name-check
test.js.fmt.check:
./devenv bash "./scripts/prettier-check.sh"
test.seed.env:
touch .env
echo 'OPERATELY_BLOB_TOKEN_SECRET_KEY="lPEuB9ITpbHP1GTf98TPWcHb/CrdeNLzqLcm0zF5mfo="' >> .env
#
# Building a docker image
#
DOCKER_IMAGE_TAG = $(shell git rev-parse --short HEAD)
docker.build:
docker build -f Dockerfile.prod -t operately/operately:latest -t operately/operately:$(DOCKER_IMAGE_TAG) .
docker.push:
docker push operately/operately:$(DOCKER_IMAGE_TAG)
docker push operately/operately:latest
#
# Release related tasks
#
release.tag.docker:
docker pull operately/operately:$(DOCKER_IMAGE_TAG)
docker tag operately/operately:$(DOCKER_IMAGE_TAG) operately/operately:$(VERSION)
docker push operately/operately:$(VERSION)
release.build.singlehost:
elixir rel/single-host/build.exs $(VERSION)
release.push.github.release:
elixir rel/make-github-release.exs $(VERSION)