-
Notifications
You must be signed in to change notification settings - Fork 2
/
Makefile
161 lines (128 loc) · 4.89 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
# Not necessary if your docker daemon already sets these but they don't hurt either
export COMPOSE_DOCKER_CLI_BUILD=1
export COMPOSE_DOCKER_BUILDKIT=1
###############################################################################
#
# WHY IS THIS LIKE IT IS??!?!??
#
# Many commands are simple one liners that don't safe a lot of time to use...
# The reason they are aliased by a make command is that we want to use them as
# dependencies for other commands. For example the `build` command will always
# run `install` before actually starting the build.
#
###############################################################################
# Installs all dependencies
install: NODE_ENV=development
install:
pnpm install --no-optional
# Create a new migration file after you have made changes to the `schema.prisma`.
# These changes must later be deployed to your target db in prod (this will happen
# during build on vercel)
db-migrate:
npx prisma migrate dev
# Manually push the current schema on a db, without any migration. Use this in dev
# for faster prototyping. It's quite likely that you will lose your db content.
db-push:
npx prisma db push
tsc:
pnpm tsc --pretty
# Formatted code = happy devs
fmt:
pnpm eslint --ext .js,.ts,.tsx --ignore-path=.gitignore --fix .
pnpm prettier --write .
# Static error checking
check: build tsc fmt
# Alias for docker compose down
down:
docker compose down --remove-orphans --volumes
# CAUTION!! THIS WILL DELETE ABSOLUTE EVERYTHING DOCKER RELATED ON YOUR MACHINE.
# images, volumes, containers, EVERYTHING!
# You have been warned. ¯\_(ツ)_/¯
destroy: down
docker system prune -af
# Pull development environment variables from vercel
# Link project on vercel `eci-v2` before using `npx vercel link`
pull-env:
npx vercel env pull
# Apply migrations to the saleor db and create the admin user.
# The saleor container as well as its db must be running.
migrate-saleor:
docker compose exec -T saleor_api python manage.py migrate
docker compose exec -T \
-e DJANGO_SUPERUSER_PASSWORD=admin \
saleor_api \
python manage.py createsuperuser \
--email [email protected] \
--noinput
# Setup everything you need for development.
# Installs dependencies, generates code, builds artifacts, starts containers and migrates/seeds the dbs
init: down build
@# Migrating saleor is expensiev and should be done
@# before all memory is used for the other services
docker compose up -d saleor_api
$(MAKE) migrate-saleor
docker compose up -d
sleep 4
$(MAKE) db-push
# Similar to `init` but only rebuilds our own services (Useful to speed up development but feel free to delete this)
init-core: down build
docker compose up -d --build eci_api eci_worker logdrain
$(MAKE) db-push
# Runs all codegens
build: install
$(MAKE) build-prod
build-prod:
# check the environment variable DATABASE_URL - when it includes "prisma://" use the command prisma generate --no-engine, otherwise use prisma generate
ifneq (,$(findstring prisma://,$(DATABASE_URL)))
pnpm prisma generate --no-engine
else
pnpm prisma generate
endif
pnpm graphql-codegen -c pkg/api/codegen.yml
pnpm graphql-codegen -c pkg/saleor/codegen.yml
# Builds the api service
build-api: build
pnpm next build ./services/api
# Builds the logdrain service
build-logdrain: build
pnpm next build ./services/logdrain
# Builds the worker service
build-worker: build
pnpm esbuild --platform=node --target=node16 --bundle --outfile=services/worker/dist/main.js services/worker/src/main.ts
build-bullboard: build
pnpm esbuild --platform=node --bundle --outfile=services/bullboard/dist/main.js services/bullboard/src/main.ts
# Utility to stop, rebuild and restart the api in docker
rebuild-api:
docker compose stop eci_api
# docker compose up -d eci_db
docker compose build eci_api
docker compose up -d eci_api
# Utility to stop, rebuild and restart the worker in docker
rebuild-worker: export COMPOSE_DOCKER_CLI_BUILD=1
rebuild-worker: export DOCKER_BUILDKIT=1
rebuild-worker:
docker compose stop eci_worker
# docker compose up -d eci_db
docker compose build eci_worker
docker compose up -d eci_worker
# Run integration tests
#
# Make sure you have called `make init` before to setup all required services
# You just need to do this once, not for every new test run.
test: export ECI_BASE_URL = http://localhost:3000
test: export ECI_BASE_URL_FROM_CONTAINER = http://api.eci:3000
test: export SALEOR_URL = http://localhost:8000/graphql/
test: export SALEOR_URL_FROM_CONTAINER = http://saleor.eci:8000/graphql/
test: build db-push
@# Temporarily disable flaky bulkorder tests
pnpm jest --testPathIgnorePatterns=./e2e/bulkorders -i
# DO NOT RUN THIS YOURSELF!
#
# Build the api application on vercel
# Setup on vercel:
# Build Command: `make build-api-prod`
# Output Directory: `dist/apps/api/.next`
build-api-prod: build-prod
pnpm next build ./services/api
build-logdrain-prod: build
pnpm next build ./services/logdrain