91 lines
2.9 KiB
Makefile
91 lines
2.9 KiB
Makefile
|
|
# Makefile for hdwalletpy workflow
|
|
# - Build a reusable Docker image
|
|
# - Compile wheels in container (wheelhouse)
|
|
# - Create host venv and install from wheelhouse
|
|
# - Optionally run inside a warm container
|
|
|
|
# ---------- Config ----------
|
|
IMAGE := python-build-env:3.11
|
|
CONTAINER := hdwallet
|
|
WORKDIR := /app
|
|
VENV_HOST := .venv_host
|
|
VENV_CONTAINER := /opt/venv
|
|
WHEELHOUSE := wheelhouse
|
|
|
|
# ---------- Help ----------
|
|
.PHONY: help
|
|
help:
|
|
@echo "Targets:"
|
|
@echo " make build-image - Build Docker image with build tools and python3-venv"
|
|
@echo " make wheels - Build dependency wheels into ./$(WHEELHOUSE)"
|
|
@echo " make venv-host - Create host venv $(VENV_HOST) and install from wheelhouse"
|
|
@echo " make up - Start a warm container named $(CONTAINER)"
|
|
@echo " make shell - Open a shell in the warm container"
|
|
@echo " make venv-container - Create venv inside container at $(VENV_CONTAINER) and install requirements"
|
|
@echo " make down - Stop and remove the warm container"
|
|
@echo " make clean-venv - Remove host venv $(VENV_HOST)"
|
|
@echo " make clean-wheelhouse - Remove local wheel cache $(WHEELHOUSE)"
|
|
@echo " make clean - Clean venv and wheelhouse"
|
|
|
|
# ---------- Build reusable image ----------
|
|
.PHONY: build-image
|
|
build-image:
|
|
docker build -t $(IMAGE) .
|
|
|
|
# ---------- Build wheels in container ----------
|
|
.PHONY: wheels
|
|
wheels: requirements.txt
|
|
docker run --rm -it -v "$$PWD":$(WORKDIR) -w $(WORKDIR) $(IMAGE) bash -lc '\
|
|
python -m pip install --upgrade pip setuptools wheel && \
|
|
mkdir -p $(WHEELHOUSE) && \
|
|
python -m pip wheel -r requirements.txt -w $(WHEELHOUSE) \
|
|
'
|
|
|
|
# ---------- Host venv from wheelhouse ----------
|
|
.PHONY: venv-host
|
|
venv-host: requirements.txt
|
|
python3 -m venv $(VENV_HOST)
|
|
. $(VENV_HOST)/bin/activate && \
|
|
python -m pip install --upgrade pip setuptools wheel && \
|
|
python -m pip install --no-index --find-links=$(WHEELHOUSE) -r requirements.txt && \
|
|
python --version
|
|
|
|
# ---------- Warm container lifecycle ----------
|
|
.PHONY: up
|
|
up:
|
|
docker run -dit -v "$$PWD":$(WORKDIR) -w $(WORKDIR) --name $(CONTAINER) $(IMAGE) bash
|
|
|
|
.PHONY: shell
|
|
shell:
|
|
docker exec -it $(CONTAINER) bash
|
|
|
|
.PHONY: venv-container
|
|
venv-container: requirements.txt
|
|
docker exec -it $(CONTAINER) bash -lc '\
|
|
test -x $(VENV_CONTAINER)/bin/python || ( \
|
|
python -m venv $(VENV_CONTAINER) && \
|
|
. $(VENV_CONTAINER)/bin/activate && \
|
|
python -m pip install --upgrade pip setuptools wheel && \
|
|
python -m pip install -r requirements.txt \
|
|
) && \
|
|
. $(VENV_CONTAINER)/bin/activate && python --version \
|
|
'
|
|
|
|
.PHONY: down
|
|
down:
|
|
- docker rm -f $(CONTAINER)
|
|
|
|
# ---------- Cleanup ----------
|
|
.PHONY: clean-venv
|
|
clean-venv:
|
|
rm -rf $(VENV_HOST)
|
|
|
|
.PHONY: clean-wheelhouse
|
|
clean-wheelhouse:
|
|
rm -rf $(WHEELHOUSE)
|
|
|
|
.PHONY: clean
|
|
clean: clean-venv clean-wheelhouse
|
|
|