-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathMakefile
87 lines (74 loc) · 3.16 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
# Makefile
# Define a help target to show the available commands and their purposes
.PHONY: help
help:
@echo "Available commands:"
@echo " make dev-setup - Setup and test the development environment (requires pyenv and Docker already installed)"
@echo " make install-pyenv - Install pyenv and its dependencies"
@echo " make install-python - Install supported Python versions 3.8, 3.9, 3.10, 3.11 using pyenv"
@echo " make install-docker - Install Docker and add the current user to the docker group"
@echo " make install-pipx - Install pipx and ensure it's on your PATH"
@echo " make install-pre-commit - Install pre-commit using pipx"
@echo " make install-tox - Install tox using pipx and inject tox-docker"
@echo " make activate-pre-commit - Activate pre-commit hooks"
@echo " make lint - Run pre-commit checks on all files"
@echo " make test - Run tests with tox"
@echo " make dev-setup - Run all the above commands in sequence (pipx, pre-commit, tox, activate-pre-commit, lint, test)"
@echo ""
@echo "Suggested use:"
@echo " If you already have pyenv and Docker installed, run 'make dev-setup' for the python/env you need setting up!"
@echo " Otherwise, start with 'make install-pyenv', 'make install-python', and 'make install-docker'."
@echo " When everything is in place run 'make test' to do run the testing suite."
# Set the default target to help
.PHONY: all
all: help
# Target to install pyenv
.PHONY: install-pyenv
install-pyenv:
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev
sudo apt-get install -y libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev
sudo apt-get install -y libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl
@echo "Installing pyenv..."
/bin/bash -c "$$(curl -fsSL https://pyenv.run)"
@echo "Pyenv has been installed. Please restart your shell or run 'exec $$SHELL' to refresh your environment."
# Target to install all needed python versions
.PHONY: install-python
install-python:
pyenv install 3.8 3.9 3.10 3.11
# Target for installing Docker
.PHONY: install-docker
install-docker:
sudo apt update
sudo apt install -y docker.io
sudo usermod -aG docker $(USER)
@echo "Please log out and log back in to apply the docker group changes."
# Target for installing pipx and ensuring the path is set
.PHONY: install-pipx
install-pipx:
python -m pip install --user --upgrade pip
python -m pip install --user pipx
python -m pipx ensurepath
# Target for installing pre-commit using pipx
.PHONY: install-pre-commit
install-pre-commit: install-pipx
pipx install pre-commit
# Target for installing tox using pipx
.PHONY: install-tox
install-tox: install-pipx
pipx install tox
pipx inject tox tox-docker
# Target to activate pre-commit hooks
.PHONY: activate-pre-commit
activate-pre-commit:
pre-commit install
# Target to run pre-commit checks on all files
.PHONY: lint
lint:
pre-commit run --all-files
# Target to run all the above commands in sequence
.PHONY: dev-setup
dev-setup: install-pipx install-pre-commit install-tox activate-pre-commit lint
# Target to run tests with tox
.PHONY: test
test:
tox