-
Notifications
You must be signed in to change notification settings - Fork 201
/
Copy pathMakefile
131 lines (116 loc) · 4.69 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
SHELL := /bin/bash
export DISABLE_VENV ?= 0
export DISABLE_LOCAL_OLLAMA ?= 0
define load_env
@if [ -f $(1) ]; then \
echo "Loading environment from $(1)"; \
set -o allexport; source $(1); set +o allexport; \
fi
endef
.PHONY: help
help:
@echo "Available commands:"
@echo " make install (recommended) - Automatic setup for local or Docker"
@echo " make run - Start the local application server"
@echo " make run-docker - Run Docker containers with CPU support"
@echo " make run-docker-gpu - Run Docker containers with GPU support"
@echo " make clean - Clean the project environment"
@echo " make clear-cache - Clear application cache"
.PHONY: install
install:
@width=$$(tput cols || echo 100); \
[ "$$width" -gt "100" ] && width=100; \
padding=$$(printf "%$${width}s" "" | tr ' ' '#'); \
printf "\n\e[1;34m%s\e[0m\n" "$$padding"; \
printf "\e[1;34m###%*sCatchTheTornado/text-extract-api%*s###\e[0m\n" $$(($$width / 2 - 21)) "" $$(($$width / 2 - 17)) ""; \
printf "\e[1;34m###%*sAUTOMATIC SETUP%*s###\e[0m\n" $$(($$width / 2 - 10)) "" $$(($$width / 2 - 11)) ""; \
printf "%s\n" "$$padding"; \
printf "\e[1;34m Do you want to run the application locally or with Docker?\e[0m\n"; \
printf "\e[1;33m [L] \e[0m Local - Run the application locally\n"; \
printf "\e[1;33m [D] \e[0m Docker - Run the axpplication in Docker\n"; \
read -p " > " choice; \
case "$$choice" in \
[lL]) echo -e "\033[1;32m ✔ You chose: Local Setup\033[0m"; $(MAKE) setup-local ;; \
[dD]) echo -e "\033[1;32m ✔ You chose: Docker\033[0m"; $(MAKE) setup-docker ;; \
*) echo "Invalid option. Exiting."; exit 1 ;; \
esac
.PHONY: setup-local
setup-local:
@rm -f .pyproject.hash
@if [ ! -f .env ]; then \
printf "\n\e[1;34m Copy .env.localhost.example to .env.localhost \e[0m"; \
cp .env.localhost.example .env.localhost; \
fi
@while true; do \
printf "\n\e[1;34m Python setup environment...\e[0m"; \
printf "\e[1;34m\n Do you want to install requirements?\e[0m\n"; \
printf "\e[1;33m [y] \e[0m Yes - Install and then run application locally\n"; \
printf "\e[1;33m [n] \e[0m No - Skip and run application locally \n"; \
read -p " > " choice; \
case "$$choice" in \
[yY]) \
echo -e "\033[1;32m ✔ Installing Python dependencies...\033[0m"; \
$(MAKE) install-requirements; \
$(MAKE) run; \
break; \
;; \
[nN]|[sS]) \
echo -e "\033[1;33m Skipping requirement installation. Starting the local server instead...\033[0m"; \
$(MAKE) run; \
break; \
;; \
*) \
echo -e "\033[1;31m Invalid input: Please enter 'y', 'n', or 's' to proceed.\033[0m"; \
;; \
esac; \
done
.PHONY: install-linux
install-linux:
@echo -e "\033[1;34m Installing Linux dependencies...\033[0m"; \
sudo apt update && sudo apt install -y libmagic1 poppler-utils pkg-config
.PHONY: install-macos
install-macos:
@echo -e "\033[1;34m Installing macOS dependencies...\033[0m"; \
brew update && brew install libmagic poppler pkg-config ghostscript ffmpeg automake autoconf
.PHONY: install-requirements
install-requirements:
@if [ "$$(uname)" = "Linux" ]; then $(MAKE) install-linux; \
elif [ "$$(uname)" = "Darwin" ]; then $(MAKE) install-macos; \
else echo "Unsupported OS. Exiting."; exit 1; fi; \
.PHONY: run
run:
@$(call load_env,.env.localhost)
@echo "Starting the local application server..."; \
DISABLE_VENV=$(DISABLE_VENV) DISABLE_LOCAL_OLLAMA=$(DISABLE_LOCAL_OLLAMA) ./run.sh
.PHONY: setup-docker
setup-docker:
@rm -f .pyproject.hash
@if [ ! -f .env ]; then \
printf "\n\e[1;34m Copy .env.example to .env \e[0m"; \
cp .env.example .env; \
fi
@echo -e "\033[1;34m Available Docker options:\033[0m"; \
echo -e "\033[1;33m 1:\033[0m Run Docker containers with CPU support"; \
echo -e "\033[1;33m 2:\033[0m Run Docker containers with GPU support"; \
read -p "Enter your choice (1 = CPU, 2 = GPU, any other key to exit): " docker_choice; \
case "$$docker_choice" in \
1) $(MAKE) run-docker ;; \
2) $(MAKE) run-docker-gpu ;; \
*) echo -e "\033[1;34m Exiting without starting Docker.\033[0m" ;; \
esac
.PHONY: run-docker
run-docker:
@echo -e "\033[1;34m Starting Docker container with CPU support...\033[0m";
@docker-compose -f docker-compose.yml up --build
.PHONY: run-docker-gpu
run-docker-gpu:
@echo -e "\033[1;34m Starting Docker container with GPU support...\033[0m";
@docker-compose -f docker-compose.gpu.yml -p text-extract-api-gpu up --build
.PHONY: clean
clean:
@echo "Cleaning project..."; \
docker-compose down -v; \
$(MAKE) clear-cache
.PHONY: clean-python-cache
clear-cache:
find . -type d -name '__pycache__' -exec rm -rf {} + && find . -type f -name '*.pyc' -delete