-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
103 lines (89 loc) · 4.35 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
PYTHON_VERSION = 3.12
.PHONY: help prerequisites install-latex install-docker install-python-and-uv install install-dev install-release run-check edit-docs verify-docker
VENV_ACTIVATE = .venv/bin/activate
log = @printf "\n==== %s ====\n\n"
help:
@echo "Available targets:"
@echo " prerequisites: Install basic tools like git and curl needed by other installations."
@echo " edit-docs: Open the documentation in TeXstudio."
@echo " install-dev: Install all dependencies for development (Ubuntu only)."
@echo " install-release: Install all dependencies for release (Ubuntu only)."
@echo " run-check: Run repository pre-commit hooks."
prerequisites:
$(log) "Installing prerequisites (git, curl)..."
sudo apt update
sudo apt install -y git curl
$(log) "Prerequisites installed successfully."
install-latex:
$(log) "Installing LaTeX and TeXstudio..."
sudo apt install -y texlive-latex-extra texstudio
$(log) "LaTeX and TeXstudio installed successfully."
install-docker: prerequisites
$(log) "Removing old Docker packages..."
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do \
sudo apt-get remove -y "$$pkg"; \
done
$(log) "Setting up Docker repository..."
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the Docker repository
echo "deb [arch=$$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $$(. /etc/os-release && echo $${UBUNTU_CODENAME:-$${VERSION_CODENAME}}) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
$(log) "Installing Docker Engine..."
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
$(log) "Docker installed successfully."
verify-docker:
$(log) "Verifying Docker installation..."
sudo docker run --rm hello-world
$(log) "Docker verification complete."
install-python-and-uv: prerequisites
$(log) "Checking and installing Python $(PYTHON_VERSION) and UV if needed..."
sudo apt update
sudo apt upgrade -y
if ! command -v python$(PYTHON_VERSION) >/dev/null; then \
echo "Python $(PYTHON_VERSION) not found: Installing..."; \
if ! apt-cache policy python$(PYTHON_VERSION) | grep -q 'Candidate:'; then \
echo "Python $(PYTHON_VERSION) not found in current repos: Adding Deadsnakes PPA..."; \
sudo apt install -y software-properties-common; \
sudo add-apt-repository -y ppa:deadsnakes/ppa; \
sudo apt update; \
fi; \
sudo apt install -y python$(PYTHON_VERSION) python$(PYTHON_VERSION)-venv python3-pip; \
else \
echo "Python $(PYTHON_VERSION) is already installed. Skipping installation."; \
fi
curl -LsSf https://astral.sh/uv/install.sh | sh
. "$$HOME/.local/bin/env" && uv venv --python $(PYTHON_VERSION)
install-dev: install-python-and-uv install-latex install-docker verify-docker
$(log) "Installing development packages and pre-commit hooks..."
PATH="$$HOME/.local/bin:$$PATH" . $(VENV_ACTIVATE) && uv pip install -r requirements-dev.txt
PATH="$$HOME/.local/bin:$$PATH" . $(VENV_ACTIVATE) && uv pip install -r requirements-release.txt
PATH="$$HOME/.local/bin:$$PATH" . $(VENV_ACTIVATE) && pre-commit install
$(log) "Development setup complete."
install-release: install-python-and-uv install-docker verify-docker
$(log) "Installing release packages and pre-commit hooks..."
PATH="$$HOME/.local/bin:$$PATH" . $(VENV_ACTIVATE) && uv pip install -r requirements-release.txt
PATH="$$HOME/.local/bin:$$PATH" . $(VENV_ACTIVATE) && pre-commit install
$(log) "Release setup complete."
run-check:
$(log) "Running repository health checks with pre-commit hooks..."
pre-commit run -a
$(log) "Pre-commit checks complete."
edit-docs:
@if command -v texstudio >/dev/null 2>&1; then \
$(log) "Opening documentation in TeXstudio..."; \
texstudio docs/Urgent_Risk_management_toolbox.tex; \
else \
echo "TeXstudio is not installed."; \
read -p "Do you want to install it now? [y/N] " response; \
if [ "$$response" = "y" ]; then \
$(MAKE) install-latex; \
texstudio docs/Urgent_Risk_management_toolbox.tex; \
else \
echo "TeXstudio installation skipped. Please install TeXstudio to edit the documentation."; \
fi; \
fi