-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
135 lines (110 loc) · 3.86 KB
/
Copy pathMakefile
File metadata and controls
135 lines (110 loc) · 3.86 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
#!/usr/bin/env make -f
# -*- makefile -*-
SHELL = bash -e
export BASH_ENV := $(HOME)/.bash_env
DOCKER_IMAGE ?= dockershelf-website:latest
img_hash = $(shell docker images -q $(DOCKER_IMAGE))
VERSION_TYPE ?= patch
APP_NAME ?= dockershelf-website
exec_on_docker = docker compose \
-p $(PROJECT_NAME) -f docker-compose.yml exec \
--user app app
.PHONY: help dependencies build serve console lint format test image start stop down destroy cataplum release release-patch release-minor release-major release-preflight undo-release
help:
@echo "Available commands:"
@echo " Docker commands:"
@echo " image - Build Docker image"
@echo " start - Start Docker containers"
@echo " dependencies - Install dependencies"
@echo " build - Build production version"
@echo " serve - Start development server"
@echo " console - Open bash console in container"
@echo " stop - Stop Docker containers"
@echo " down - Stop and remove Docker containers"
@echo " destroy - Remove all containers, images and volumes"
@echo " cataplum - Remove ALL Docker resources (system-wide)"
@echo ""
@echo " Quality commands:"
@echo " lint - Run ESLint"
@echo " format - Run Prettier"
@echo " test - Run TypeScript type check"
@echo ""
@echo " Release commands:"
@echo " release - Create a new release (default: patch)"
@echo " release-patch - Create a new patch release (x.x.X)"
@echo " release-minor - Create a new minor release (x.X.x)"
@echo " release-major - Create a new major release (X.x.x)"
@echo " undo-release - Roll back a botched release (VERSION=x.y.z)"
@echo ""
@echo " Release with custom version type:"
@echo " make release VERSION_TYPE=minor"
@echo ""
dependencies: start
@$(exec_on_docker) npm ci
build: start
@$(exec_on_docker) npm run build
serve: start
@$(exec_on_docker) npm run dev
console: start
@$(exec_on_docker) bash
lint: start
@$(exec_on_docker) npm run lint
format: start
@$(exec_on_docker) npm run format
test: start
@$(exec_on_docker) npm run type-check
PROJECT_NAME ?= dockershelf-website
all_ps_hashes = $(shell docker ps -q)
image:
@docker compose -p $(PROJECT_NAME) -f docker-compose.yml build \
--build-arg UID=$(shell id -u) \
--build-arg GID=$(shell id -g)
start:
@if [ -z "$(img_hash)" ]; then\
make image;\
fi
@docker compose -p $(PROJECT_NAME) -f docker-compose.yml up \
--remove-orphans --no-build --detach
stop:
@docker compose -p $(PROJECT_NAME) -f docker-compose.yml stop
down:
@docker compose -p $(PROJECT_NAME) -f docker-compose.yml down \
--remove-orphans
destroy:
@echo
@echo "WARNING!!!"
@echo "This will stop and delete all containers, images and volumes related to this project."
@echo
@read -p "Press ctrl+c to abort or enter to continue." -n 1 -r
@docker compose -p $(PROJECT_NAME) -f docker-compose.yml down \
--rmi all --remove-orphans --volumes
cataplum:
@echo
@echo "WARNING!!!"
@echo "This will stop and delete all containers, images and volumes present in your system."
@echo
@read -p "Press ctrl+c to abort or enter to continue." -n 1 -r
@if [ -n "$(all_ps_hashes)" ]; then\
docker kill $(shell docker ps -q);\
fi
@docker compose -p $(PROJECT_NAME) -f docker-compose.yml down \
--rmi all --remove-orphans --volumes
@docker system prune -a -f --volumes
release:
@./scripts/release.sh $${VERSION_TYPE}
release-patch:
@./scripts/release.sh patch $${APP_NAME}
release-minor:
@./scripts/release.sh minor $${APP_NAME}
release-major:
@./scripts/release.sh major $${APP_NAME}
release-preflight:
@make image
@make dependencies
@make build
@make format
@make lint
@make test
undo-release:
@: "$${VERSION:?Set VERSION=x.y.z before running make undo-release}"
@VERSION=$${VERSION} ./scripts/rollback.sh release