Skip to content

Commit

Permalink
chore: improve makefile (#13)
Browse files Browse the repository at this point in the history
  • Loading branch information
TheCrab13 committed Mar 10, 2024
1 parent 88b5084 commit c036350
Showing 1 changed file with 51 additions and 49 deletions.
100 changes: 51 additions & 49 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
PROJECT_PATH := $(patsubst %/,%,$(dir $(MAKEFILE_PATH)))
PROJECT_DIR := $(patsubst %/,%,$(dir $(MAKEFILE_PATH)))

PIPUSER ?= 1

Expand All @@ -8,28 +9,39 @@ ifeq ($(OS),Windows_NT)
VENV_BIN_DIR = Scripts
EXE_EXT = .exe

VENV_INIT = activate
VENV_CMD = .
VENV_INIT = activate.bat
VENV_CMD = call
PATH_SEP = /
else
EXE_EXT =
PYTHON ?= python3
VENV_BIN_DIR = bin
VENV_CMD = .
EXE_EXT =

VENV_INIT = activate
VENV_CMD = .
PATH_SEP = /
endif

VENV_BIN_DIR := .venv$(PATH_SEP)$(VENV_BIN_DIR)
VENV_ACTIVATE = $(VENV_CMD) $(VENV_BIN_DIR)$(PATH_SEP)$(VENV_INIT)
VENV_ACTIVATE_CMD := $(VENV_ACTIVATE) &&

TOX_EXE = $(VENV_BIN_DIR)$(PATH_SEP)tox$(EXE_EXT)
PRECOMMIT_EXE = $(VENV_BIN_DIR)$(PATH_SEP)pre-commit$(EXE_EXT)

ifeq ($(PIPUSER),1)
TOX_CMD = $(VENV_ACTIVATE_CMD) $(PYTHON) -m tox
else
TOX_CMD = tox
endif

MNOPD = --no-print-directory

.DEFAULT_GOAL = help

## -- Global makefile rules ---------------------------------------------------
all: | .venv ## Setup local environment with tox
$(NOISE) hash $(*) > /dev/null 2>&1 || $(MAKE) $(MFLAGS) $(MNOPD) setup
all: | $(VENV_BIN_DIR) ## Setup local environment with pre-commit and tox
$(NOISE)env PATH="$(PROJECT_DIR)/.venv/$(VENV_BIN_DIR):$(PATH)" hash tox$(EXE_EXT) pre-commit$(EXE_EXT) > /dev/null 2>&1 || $(MAKE) $(MFLAGS) $(MNOPD) setup

pkgs: ## Generate pythong packages
$(NOISE)$(PYTHON) setup.py sdist
Expand All @@ -39,67 +51,57 @@ include help.mk

## -- Setup -------------------------------------------------------------------

setup: $(VENV_BIN_DIR)$(PATH_SEP)tox$(EXE_EXT) $(VENV_BIN_DIR)$(PATH_SEP)pre-commit$(EXE_EXT) ## Setup local environment with tox
@$(call infomsg,"You need to manually activate your venv: $(VENV_ACTIVATE)")

setup-venv: $(VENV_BIN_DIR) ## Create local virtual environment inv .venv directory
$(NOISE)set -a && $(VENV_ACTIVATE) && $(MAKE) $(MFLAGS) $(MNOPD) setup
setup: $(TOX_EXE) $(PRECOMMIT_EXE) ## Setup local environment with pre-commit and tox
@$(call infomsg,"venv can be activate using $(VENV_ACTIVATE)")

$(TOX_EXE): | $(VENV_BIN_DIR)
$(call actionmsg, installing $@ ...)
$(NOISE)$(VENV_ACTIVATE_CMD) $(PYTHON) -m pip install $(basename $(@F))

$(VENV_BIN_DIR)$(PATH_SEP)tox$(EXE_EXT) $(VENV_BIN_DIR)$(PATH_SEP)pre-commit$(EXE_EXT):
$(PRECOMMIT_EXE): | $(VENV_BIN_DIR)
$(call actionmsg, installing $@ ...)
ifneq ($(PIPUSER),1)
ifneq ($(FORCE), 1)
ifeq ($(VIRTUAL_ENV),)
$(call errormsg,"tox cannot be installed without a virtual environment (make setup-venv && $(VENV_ACTIVATE))")
endif
endif
$(NOISE)$(PYTHON) -m pip install $(basename $(@F))
else
ifneq ($(VIRTUAL_ENV),)
$(NOISE)$(PYTHON) -m pip install $(basename $(@F))
else
$(NOISE)$(PYTHON) -m pip install --user $(basename $(@F))
$(NOISE)$(VENV_ACTIVATE_CMD) $(PYTHON) -m pip install pre-commit

endif
endif
$(VENV_BIN_DIR):
$(NOISE)$(PYTHON) -m venv .venv

## -- Syntax checkers ---------------------------------------------------------

syntax: ## Perform all formatting, styling and coding checks
$(NOISE)tox -e syntax
syntax: e=syntax ## Perform all formatting, styling and coding checks
syntax: tox

black: e=black ## Run black as code formatter
black: tox

black: ## Run black as code formatter
$(NOISE)tox -e black
isort: e=isort ## Run isort to review import order
isort: tox

isort: ## Run isort to review import order
$(NOISE)tox -e isort
mypy: e=mypy ## Run mypy as static typing checker
mypy: tox

mypy: ## Run mypy as static typing checker
$(NOISE)tox -e mypy
flake8: e=flake8 ## Run flake8 as style guide checker
flake8: tox

flake8: ## Run flake8 as style guide checker
$(NOISE)tox -e flake8
pylint: e=pylint ## Run pylint as static code analyser
pylint: tox

pylint: ## Run pylint as static code analyser
$(NOISE)tox -e pylint
cover: e=cover ## Generate coverate report
cover: tox
$(NOISE)$(TOX_CMD) -e cover

cov: ## Generate coverate report
coverage erase
./test --coverage
coverage combine
coverage html
tox: | $(TOX_EXE) ## Execute specific tox environment using e parameter (ex. make tox e=py311)
$(NOISE)$(eval e ?= ALL)
$(NOISE)$(TOX_CMD) -e $(e) $(TOX_ARG)

## -- Testing -----------------------------------------------------------------

test: test-unit test-cli ## Run all tests
test: e=unit,cli ## Run all tests
test: tox

test-unit: ## Run unit tests
$(NOISE)tox -e unit
test-unit: e=unit ## Run unit tests
test-unit: tox

test-cli: ## Run cli tests
$(NOISE)tox -e cli
test-cli: e=cli ## Run cli tests
test-cli: tox


0 comments on commit c036350

Please sign in to comment.